alg-backup 3.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +2 -0
- data/.infinity_test +7 -0
- data/.rspec +3 -0
- data/Gemfile +25 -0
- data/Gemfile.lock +101 -0
- data/LICENSE.md +24 -0
- data/README.md +276 -0
- data/backup.gemspec +39 -0
- data/bin/backup +260 -0
- data/lib/backup.rb +168 -0
- data/lib/backup/archive.rb +73 -0
- data/lib/backup/cli.rb +50 -0
- data/lib/backup/compressor/base.rb +17 -0
- data/lib/backup/compressor/gzip.rb +61 -0
- data/lib/backup/configuration/base.rb +15 -0
- data/lib/backup/configuration/compressor/base.rb +10 -0
- data/lib/backup/configuration/compressor/gzip.rb +23 -0
- data/lib/backup/configuration/database/base.rb +18 -0
- data/lib/backup/configuration/database/mongodb.rb +37 -0
- data/lib/backup/configuration/database/mysql.rb +37 -0
- data/lib/backup/configuration/database/postgresql.rb +37 -0
- data/lib/backup/configuration/database/redis.rb +35 -0
- data/lib/backup/configuration/encryptor/base.rb +10 -0
- data/lib/backup/configuration/encryptor/gpg.rb +17 -0
- data/lib/backup/configuration/encryptor/open_ssl.rb +26 -0
- data/lib/backup/configuration/helpers.rb +54 -0
- data/lib/backup/configuration/notifier/base.rb +39 -0
- data/lib/backup/configuration/notifier/mail.rb +52 -0
- data/lib/backup/configuration/notifier/twitter.rb +21 -0
- data/lib/backup/configuration/storage/base.rb +18 -0
- data/lib/backup/configuration/storage/cloudfiles.rb +21 -0
- data/lib/backup/configuration/storage/dropbox.rb +29 -0
- data/lib/backup/configuration/storage/ftp.rb +25 -0
- data/lib/backup/configuration/storage/rsync.rb +25 -0
- data/lib/backup/configuration/storage/s3.rb +25 -0
- data/lib/backup/configuration/storage/scp.rb +25 -0
- data/lib/backup/configuration/storage/sftp.rb +25 -0
- data/lib/backup/configuration/syncer/rsync.rb +45 -0
- data/lib/backup/configuration/syncer/s3.rb +33 -0
- data/lib/backup/database/base.rb +33 -0
- data/lib/backup/database/mongodb.rb +137 -0
- data/lib/backup/database/mysql.rb +104 -0
- data/lib/backup/database/postgresql.rb +111 -0
- data/lib/backup/database/redis.rb +105 -0
- data/lib/backup/dependency.rb +84 -0
- data/lib/backup/encryptor/base.rb +17 -0
- data/lib/backup/encryptor/gpg.rb +78 -0
- data/lib/backup/encryptor/open_ssl.rb +67 -0
- data/lib/backup/finder.rb +39 -0
- data/lib/backup/logger.rb +86 -0
- data/lib/backup/model.rb +272 -0
- data/lib/backup/notifier/base.rb +29 -0
- data/lib/backup/notifier/binder.rb +32 -0
- data/lib/backup/notifier/mail.rb +141 -0
- data/lib/backup/notifier/templates/notify_failure.erb +31 -0
- data/lib/backup/notifier/templates/notify_success.erb +16 -0
- data/lib/backup/notifier/twitter.rb +87 -0
- data/lib/backup/storage/base.rb +67 -0
- data/lib/backup/storage/cloudfiles.rb +95 -0
- data/lib/backup/storage/dropbox.rb +87 -0
- data/lib/backup/storage/ftp.rb +114 -0
- data/lib/backup/storage/object.rb +45 -0
- data/lib/backup/storage/rsync.rb +99 -0
- data/lib/backup/storage/s3.rb +108 -0
- data/lib/backup/storage/scp.rb +106 -0
- data/lib/backup/storage/sftp.rb +106 -0
- data/lib/backup/syncer/base.rb +10 -0
- data/lib/backup/syncer/rsync.rb +117 -0
- data/lib/backup/syncer/s3.rb +116 -0
- data/lib/backup/version.rb +43 -0
- data/lib/templates/archive +4 -0
- data/lib/templates/compressor/gzip +4 -0
- data/lib/templates/database/mongodb +10 -0
- data/lib/templates/database/mysql +11 -0
- data/lib/templates/database/postgresql +11 -0
- data/lib/templates/database/redis +10 -0
- data/lib/templates/encryptor/gpg +9 -0
- data/lib/templates/encryptor/openssl +5 -0
- data/lib/templates/notifier/mail +14 -0
- data/lib/templates/notifier/twitter +9 -0
- data/lib/templates/readme +15 -0
- data/lib/templates/storage/cloudfiles +7 -0
- data/lib/templates/storage/dropbox +9 -0
- data/lib/templates/storage/ftp +8 -0
- data/lib/templates/storage/rsync +7 -0
- data/lib/templates/storage/s3 +8 -0
- data/lib/templates/storage/scp +8 -0
- data/lib/templates/storage/sftp +8 -0
- data/lib/templates/syncer/rsync +14 -0
- data/lib/templates/syncer/s3 +12 -0
- data/spec/archive_spec.rb +90 -0
- data/spec/backup_spec.rb +11 -0
- data/spec/compressor/gzip_spec.rb +59 -0
- data/spec/configuration/base_spec.rb +35 -0
- data/spec/configuration/compressor/gzip_spec.rb +28 -0
- data/spec/configuration/database/base_spec.rb +16 -0
- data/spec/configuration/database/mongodb_spec.rb +30 -0
- data/spec/configuration/database/mysql_spec.rb +32 -0
- data/spec/configuration/database/postgresql_spec.rb +32 -0
- data/spec/configuration/database/redis_spec.rb +30 -0
- data/spec/configuration/encryptor/gpg_spec.rb +25 -0
- data/spec/configuration/encryptor/open_ssl_spec.rb +31 -0
- data/spec/configuration/notifier/mail_spec.rb +32 -0
- data/spec/configuration/storage/cloudfiles_spec.rb +34 -0
- data/spec/configuration/storage/dropbox_spec.rb +43 -0
- data/spec/configuration/storage/ftp_spec.rb +40 -0
- data/spec/configuration/storage/rsync_spec.rb +37 -0
- data/spec/configuration/storage/s3_spec.rb +37 -0
- data/spec/configuration/storage/scp_spec.rb +40 -0
- data/spec/configuration/storage/sftp_spec.rb +40 -0
- data/spec/configuration/syncer/rsync_spec.rb +46 -0
- data/spec/configuration/syncer/s3_spec.rb +43 -0
- data/spec/database/base_spec.rb +30 -0
- data/spec/database/mongodb_spec.rb +144 -0
- data/spec/database/mysql_spec.rb +150 -0
- data/spec/database/postgresql_spec.rb +164 -0
- data/spec/database/redis_spec.rb +122 -0
- data/spec/encryptor/gpg_spec.rb +57 -0
- data/spec/encryptor/open_ssl_spec.rb +102 -0
- data/spec/logger_spec.rb +46 -0
- data/spec/model_spec.rb +236 -0
- data/spec/notifier/mail_spec.rb +97 -0
- data/spec/notifier/twitter_spec.rb +86 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/storage/base_spec.rb +33 -0
- data/spec/storage/cloudfiles_spec.rb +102 -0
- data/spec/storage/dropbox_spec.rb +105 -0
- data/spec/storage/ftp_spec.rb +133 -0
- data/spec/storage/object_spec.rb +74 -0
- data/spec/storage/rsync_spec.rb +115 -0
- data/spec/storage/s3_spec.rb +110 -0
- data/spec/storage/scp_spec.rb +129 -0
- data/spec/storage/sftp_spec.rb +125 -0
- data/spec/syncer/rsync_spec.rb +156 -0
- data/spec/syncer/s3_spec.rb +139 -0
- data/spec/version_spec.rb +21 -0
- metadata +217 -0
data/spec/model_spec.rb
ADDED
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Backup::Model do
|
|
6
|
+
|
|
7
|
+
before do
|
|
8
|
+
class Backup::Database::TestDatabase
|
|
9
|
+
def initialize(&block); end
|
|
10
|
+
end
|
|
11
|
+
class Backup::Storage::TestStorage
|
|
12
|
+
def initialize(&block); end
|
|
13
|
+
end
|
|
14
|
+
class Backup::Archive
|
|
15
|
+
def initialize(name, &block); end
|
|
16
|
+
end
|
|
17
|
+
class Backup::Compressor::Gzip
|
|
18
|
+
def initialize(&block); end
|
|
19
|
+
end
|
|
20
|
+
class Backup::Compressor::SevenZip
|
|
21
|
+
def initialize(&block); end
|
|
22
|
+
end
|
|
23
|
+
class Backup::Encryptor::OpenSSL
|
|
24
|
+
def initialize(&block); end
|
|
25
|
+
end
|
|
26
|
+
class Backup::Encryptor::GPG
|
|
27
|
+
def initialize(&block); end
|
|
28
|
+
end
|
|
29
|
+
class Backup::Notifier::TestMail
|
|
30
|
+
def initialize(&block); end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
let(:model) { Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') {} }
|
|
35
|
+
|
|
36
|
+
it do
|
|
37
|
+
Backup::Model.extension.should == 'tar'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it do
|
|
41
|
+
Backup::Model.new('foo', 'bar') {}
|
|
42
|
+
Backup::Model.extension.should == 'tar'
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
before do
|
|
46
|
+
Backup::Model.extension = 'tar'
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it do
|
|
50
|
+
Backup::Model.new('blah', 'blah') {}
|
|
51
|
+
Backup::Model.extension.should == 'tar'
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it do
|
|
55
|
+
Backup::Model.new('blah', 'blah') {}
|
|
56
|
+
Backup::Model.file.should == "#{ File.join(Backup::TMP_PATH, "#{ Backup::TIME }.#{ Backup::TRIGGER }.tar") }"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it do
|
|
60
|
+
Backup::Model.new('blah', 'blah') {}
|
|
61
|
+
File.basename(Backup::Model.file).should == "#{ Backup::TIME }.#{ Backup::TRIGGER }.tar"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it do
|
|
65
|
+
Backup::Model.new('blah', 'blah') {}
|
|
66
|
+
Backup::Model.tmp_path.should == File.join(Backup::TMP_PATH, Backup::TRIGGER)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'should create a new model with a trigger and label' do
|
|
70
|
+
model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') {}
|
|
71
|
+
model.trigger.should == 'mysql-s3'
|
|
72
|
+
model.label.should == 'MySQL S3 Backup for MyApp'
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it 'should have the time logged in the object' do
|
|
76
|
+
model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') {}
|
|
77
|
+
model.time.should == Backup::TIME
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
describe '#extension' do
|
|
81
|
+
it 'should start out with just .tar before compression occurs' do
|
|
82
|
+
Backup::Model.extension.should == 'tar'
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
describe 'databases' do
|
|
87
|
+
it 'should add the mysql adapter to the array of databases to invoke' do
|
|
88
|
+
model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
|
|
89
|
+
database('TestDatabase')
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
model.databases.count.should == 1
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it 'should add 2 mysql adapters to the array of adapters to invoke' do
|
|
96
|
+
model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
|
|
97
|
+
database('TestDatabase')
|
|
98
|
+
database('TestDatabase')
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
model.databases.count.should == 2
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
describe 'storages' do
|
|
106
|
+
it 'should add a storage to the array of storages to use' do
|
|
107
|
+
model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
|
|
108
|
+
store_with('TestStorage')
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
model.storages.count.should == 1
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it 'should add a storage to the array of storages to use' do
|
|
115
|
+
model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
|
|
116
|
+
store_with('TestStorage')
|
|
117
|
+
store_with('TestStorage')
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
model.storages.count.should == 2
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
describe 'archives' do
|
|
125
|
+
it 'should add an archive to the array of archives to use' do
|
|
126
|
+
model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
|
|
127
|
+
archive('my_archive')
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
model.archives.count.should == 1
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
it 'should add a storage to the array of storages to use' do
|
|
134
|
+
model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
|
|
135
|
+
archive('TestStorage')
|
|
136
|
+
archive('TestStorage')
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
model.archives.count.should == 2
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
describe '#compress_with' do
|
|
144
|
+
it 'should add a compressor to the array of compressors to use' do
|
|
145
|
+
model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
|
|
146
|
+
compress_with('Gzip')
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
model.compressors.count.should == 1
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
it 'should add a compressor to the array of compressors to use' do
|
|
153
|
+
model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
|
|
154
|
+
compress_with('Gzip')
|
|
155
|
+
compress_with('SevenZip')
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
model.compressors.count.should == 2
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
describe '#encrypt_with' do
|
|
163
|
+
it 'should add a encryptor to the array of encryptors to use' do
|
|
164
|
+
model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
|
|
165
|
+
encrypt_with('OpenSSL')
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
model.encryptors.count.should == 1
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
it 'should add a encryptor to the array of encryptors to use' do
|
|
172
|
+
model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
|
|
173
|
+
encrypt_with('OpenSSL')
|
|
174
|
+
encrypt_with('GPG')
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
model.encryptors.count.should == 2
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
describe '#notify_by' do
|
|
182
|
+
it 'should add a notifier to the array of notifiers to use' do
|
|
183
|
+
model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
|
|
184
|
+
notify_by('TestMail')
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
model.notifiers.count.should == 1
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
it 'should add a notifier to the array of notifiers to use' do
|
|
191
|
+
model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
|
|
192
|
+
notify_by('TestMail')
|
|
193
|
+
notify_by('TestMail')
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
model.notifiers.count.should == 2
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
describe '#package!' do
|
|
201
|
+
before do
|
|
202
|
+
[:utility, :run].each { |method| model.stubs(method) }
|
|
203
|
+
Backup::Logger.stubs(:message)
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
it 'should package the folder' do
|
|
207
|
+
model.expects(:utility).with(:tar).returns(:tar)
|
|
208
|
+
model.expects(:run).with("tar -c -C '#{ Backup::TMP_PATH }' '#{ Backup::TRIGGER }' > '#{ File.join( Backup::TMP_PATH, "#{ Backup::TIME }.#{ Backup::TRIGGER }.tar" ) }'")
|
|
209
|
+
model.send(:package!)
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
it 'should log' do
|
|
213
|
+
Backup::Logger.expects(:message).with("Backup started packaging everything to a single archive file.")
|
|
214
|
+
model.send(:package!)
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
describe '#clean!' do
|
|
219
|
+
before do
|
|
220
|
+
[:utility, :run, :rm].each { |method| model.stubs(method) }
|
|
221
|
+
Backup::Logger.stubs(:message)
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
it 'should remove the temporary files and folders that were created' do
|
|
225
|
+
model.expects(:utility).with(:rm).returns(:rm)
|
|
226
|
+
model.expects(:run).with("rm -rf '#{ File.join(Backup::TMP_PATH, Backup::TRIGGER) }' '#{ File.join(Backup::TMP_PATH, "#{ Backup::TIME }.#{ Backup::TRIGGER }.tar") }'")
|
|
227
|
+
model.send(:clean!)
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
it do
|
|
231
|
+
Backup::Logger.expects(:message).with("Backup started cleaning up the temporary files.")
|
|
232
|
+
model.send(:clean!)
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Backup::Notifier::Mail do
|
|
6
|
+
let(:notifier) do
|
|
7
|
+
Backup::Notifier::Mail.new do |mail|
|
|
8
|
+
mail.from = 'my.sender.email@gmail.com'
|
|
9
|
+
mail.to = 'my.receiver.email@gmail.com'
|
|
10
|
+
mail.address = 'smtp.gmail.com'
|
|
11
|
+
mail.port = 587
|
|
12
|
+
mail.domain = 'your.host.name'
|
|
13
|
+
mail.user_name = 'user'
|
|
14
|
+
mail.password = 'secret'
|
|
15
|
+
mail.authentication = 'plain'
|
|
16
|
+
mail.enable_starttls_auto = true
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it do
|
|
21
|
+
notifier.from.should == 'my.sender.email@gmail.com'
|
|
22
|
+
notifier.to.should == 'my.receiver.email@gmail.com'
|
|
23
|
+
notifier.address.should == 'smtp.gmail.com'
|
|
24
|
+
notifier.port.should == 587
|
|
25
|
+
notifier.domain.should == 'your.host.name'
|
|
26
|
+
notifier.user_name.should == 'user'
|
|
27
|
+
notifier.password.should == 'secret'
|
|
28
|
+
notifier.authentication.should == 'plain'
|
|
29
|
+
notifier.enable_starttls_auto.should == true
|
|
30
|
+
|
|
31
|
+
notifier.on_success.should == true
|
|
32
|
+
notifier.on_failure.should == true
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe 'defaults' do
|
|
36
|
+
it do
|
|
37
|
+
Backup::Configuration::Notifier::Mail.defaults do |mail|
|
|
38
|
+
mail.to = 'some.receiver.email@gmail.com'
|
|
39
|
+
mail.on_success = false
|
|
40
|
+
mail.on_failure = true
|
|
41
|
+
end
|
|
42
|
+
notifier = Backup::Notifier::Mail.new do |mail|
|
|
43
|
+
mail.from = 'my.sender.email@gmail.com'
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
notifier.to.should == 'some.receiver.email@gmail.com'
|
|
47
|
+
notifier.from.should == 'my.sender.email@gmail.com'
|
|
48
|
+
notifier.on_success.should == false
|
|
49
|
+
notifier.on_failure.should == true
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
describe '#initialize' do
|
|
54
|
+
it do
|
|
55
|
+
Backup::Notifier::Mail.any_instance.expects(:set_defaults!)
|
|
56
|
+
Backup::Notifier::Mail.new
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe '#perform!' do
|
|
61
|
+
let(:model) { Backup::Model.new('blah', 'blah') {} }
|
|
62
|
+
before do
|
|
63
|
+
notifier.on_success = false
|
|
64
|
+
notifier.on_failure = false
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
context "when successful" do
|
|
68
|
+
it do
|
|
69
|
+
Backup::Logger.expects(:message).with("Backup::Notifier::Mail started notifying about the process.")
|
|
70
|
+
notifier.expects("notify_success!")
|
|
71
|
+
notifier.on_success = true
|
|
72
|
+
notifier.perform!(model)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it do
|
|
76
|
+
notifier.expects("notify_success!").never
|
|
77
|
+
notifier.on_success = false
|
|
78
|
+
notifier.perform!(model)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
context "when failed" do
|
|
83
|
+
it do
|
|
84
|
+
Backup::Logger.expects(:message).with("Backup::Notifier::Mail started notifying about the process.")
|
|
85
|
+
notifier.expects("notify_failure!")
|
|
86
|
+
notifier.on_failure = true
|
|
87
|
+
notifier.perform!(model, Exception.new)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it do
|
|
91
|
+
notifier.expects("notify_failure!").never
|
|
92
|
+
notifier.on_failure = false
|
|
93
|
+
notifier.perform!(model, Exception.new)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Backup::Notifier::Twitter do
|
|
6
|
+
let(:notifier) do
|
|
7
|
+
Backup::Notifier::Twitter.new do |twitter|
|
|
8
|
+
twitter.consumer_key = 'consumer_key'
|
|
9
|
+
twitter.consumer_secret = 'consumer_secret'
|
|
10
|
+
twitter.oauth_token = 'oauth_token'
|
|
11
|
+
twitter.oauth_token_secret = 'oauth_token_secret'
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it do
|
|
16
|
+
notifier.consumer_key.should == 'consumer_key'
|
|
17
|
+
notifier.consumer_secret.should == 'consumer_secret'
|
|
18
|
+
notifier.oauth_token.should == 'oauth_token'
|
|
19
|
+
notifier.oauth_token_secret.should == 'oauth_token_secret'
|
|
20
|
+
|
|
21
|
+
notifier.on_success.should == true
|
|
22
|
+
notifier.on_failure.should == true
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe 'defaults' do
|
|
26
|
+
it do
|
|
27
|
+
Backup::Configuration::Notifier::Twitter.defaults do |twitter|
|
|
28
|
+
twitter.consumer_key = 'new_consumer_key'
|
|
29
|
+
twitter.on_success = false
|
|
30
|
+
twitter.on_failure = true
|
|
31
|
+
end
|
|
32
|
+
notifier = Backup::Notifier::Twitter.new do |twitter|
|
|
33
|
+
twitter.consumer_key = 'my_own_consumer_key'
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
notifier.consumer_key.should == 'my_own_consumer_key'
|
|
37
|
+
notifier.on_success.should == false
|
|
38
|
+
notifier.on_failure.should == true
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
describe '#initialize' do
|
|
43
|
+
it do
|
|
44
|
+
Backup::Notifier::Twitter.any_instance.expects(:set_defaults!)
|
|
45
|
+
Backup::Notifier::Twitter.new
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
describe '#perform!' do
|
|
50
|
+
let(:model) { Backup::Model.new('blah', 'blah') {} }
|
|
51
|
+
before do
|
|
52
|
+
notifier.on_success = false
|
|
53
|
+
notifier.on_failure = false
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
context "when successful" do
|
|
57
|
+
it do
|
|
58
|
+
Backup::Logger.expects(:message).with("Backup::Notifier::Twitter started notifying about the process.")
|
|
59
|
+
notifier.expects("notify_success!")
|
|
60
|
+
notifier.on_success = true
|
|
61
|
+
notifier.perform!(model)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it do
|
|
65
|
+
notifier.expects("notify_success!").never
|
|
66
|
+
notifier.on_success = false
|
|
67
|
+
notifier.perform!(model)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
context "when failed" do
|
|
72
|
+
it do
|
|
73
|
+
Backup::Logger.expects(:message).with("Backup::Notifier::Twitter started notifying about the process.")
|
|
74
|
+
notifier.expects("notify_failure!")
|
|
75
|
+
notifier.on_failure = true
|
|
76
|
+
notifier.perform!(model, Exception.new)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it do
|
|
80
|
+
notifier.expects("notify_failure!").never
|
|
81
|
+
notifier.on_failure = false
|
|
82
|
+
notifier.perform!(model, Exception.new)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
##
|
|
4
|
+
# Load Backup
|
|
5
|
+
require File.expand_path( '../../lib/backup', __FILE__ )
|
|
6
|
+
|
|
7
|
+
##
|
|
8
|
+
# Use Mocha to mock with RSpec
|
|
9
|
+
RSpec.configure do |config|
|
|
10
|
+
config.mock_with :mocha
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# FIXTURES_PATH = File.join( File.dirname(__FILE__), 'fixtures' )
|
|
14
|
+
|
|
15
|
+
Backup.send(:remove_const, :TRIGGER) if defined? Backup::TRIGGER
|
|
16
|
+
Backup.send(:remove_const, :TIME) if defined? Backup::TIME
|
|
17
|
+
|
|
18
|
+
module Backup
|
|
19
|
+
TRIGGER = 'myapp'
|
|
20
|
+
TIME = Time.now.strftime("%Y.%m.%d.%H.%M.%S")
|
|
21
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Backup::Storage::Base do
|
|
6
|
+
let(:base) { Backup::Storage::Base.new }
|
|
7
|
+
|
|
8
|
+
before do
|
|
9
|
+
Backup::Logger.stubs(:message)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it do
|
|
13
|
+
storage_object = mock
|
|
14
|
+
Backup::Storage::Object.expects(:new).with('Base').returns(storage_object)
|
|
15
|
+
storage_object.stubs(:load).returns([])
|
|
16
|
+
storage_object.expects(:write)
|
|
17
|
+
base.keep = 1
|
|
18
|
+
base.cycle!
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it do
|
|
22
|
+
base.keep = 3
|
|
23
|
+
storage_object = mock
|
|
24
|
+
objects = %w[1 2 3 4].map { Backup::Storage::Base.new }
|
|
25
|
+
|
|
26
|
+
Backup::Storage::Object.expects(:new).with('Base').returns(storage_object)
|
|
27
|
+
storage_object.stubs(:load).returns(objects)
|
|
28
|
+
storage_object.expects(:write)
|
|
29
|
+
Backup::Storage::Base.any_instance.expects(:remove!).times(2)
|
|
30
|
+
|
|
31
|
+
base.cycle!
|
|
32
|
+
end
|
|
33
|
+
end
|