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
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Backup::Configuration::Storage::SCP do
|
|
6
|
+
before do
|
|
7
|
+
Backup::Configuration::Storage::SCP.defaults do |scp|
|
|
8
|
+
scp.username = 'my_username'
|
|
9
|
+
scp.password = 'my_password'
|
|
10
|
+
scp.ip = '123.45.678.90'
|
|
11
|
+
scp.port = 21
|
|
12
|
+
scp.path = 'my_backups'
|
|
13
|
+
scp.keep = 20
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'should set the default scp configuration' do
|
|
18
|
+
scp = Backup::Configuration::Storage::SCP
|
|
19
|
+
scp.username.should == 'my_username'
|
|
20
|
+
scp.password.should == 'my_password'
|
|
21
|
+
scp.ip.should == '123.45.678.90'
|
|
22
|
+
scp.port.should == 21
|
|
23
|
+
scp.path.should == 'my_backups'
|
|
24
|
+
scp.keep.should == 20
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe '#clear_defaults!' do
|
|
28
|
+
it 'should clear all the defaults, resetting them to nil' do
|
|
29
|
+
Backup::Configuration::Storage::SCP.clear_defaults!
|
|
30
|
+
|
|
31
|
+
scp = Backup::Configuration::Storage::SCP
|
|
32
|
+
scp.username.should == nil
|
|
33
|
+
scp.password.should == nil
|
|
34
|
+
scp.ip.should == nil
|
|
35
|
+
scp.port.should == nil
|
|
36
|
+
scp.path.should == nil
|
|
37
|
+
scp.keep.should == nil
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Backup::Configuration::Storage::SFTP do
|
|
6
|
+
before do
|
|
7
|
+
Backup::Configuration::Storage::SFTP.defaults do |sftp|
|
|
8
|
+
sftp.username = 'my_username'
|
|
9
|
+
sftp.password = 'my_password'
|
|
10
|
+
sftp.ip = '123.45.678.90'
|
|
11
|
+
sftp.port = 22
|
|
12
|
+
sftp.path = 'my_backups'
|
|
13
|
+
sftp.keep = 20
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'should set the default sftp configuration' do
|
|
18
|
+
sftp = Backup::Configuration::Storage::SFTP
|
|
19
|
+
sftp.username.should == 'my_username'
|
|
20
|
+
sftp.password.should == 'my_password'
|
|
21
|
+
sftp.ip.should == '123.45.678.90'
|
|
22
|
+
sftp.port.should == 22
|
|
23
|
+
sftp.path.should == 'my_backups'
|
|
24
|
+
sftp.keep.should == 20
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe '#clear_defaults!' do
|
|
28
|
+
it 'should clear all the defaults, resetting them to nil' do
|
|
29
|
+
Backup::Configuration::Storage::SFTP.clear_defaults!
|
|
30
|
+
|
|
31
|
+
sftp = Backup::Configuration::Storage::SFTP
|
|
32
|
+
sftp.username.should == nil
|
|
33
|
+
sftp.password.should == nil
|
|
34
|
+
sftp.ip.should == nil
|
|
35
|
+
sftp.port.should == nil
|
|
36
|
+
sftp.path.should == nil
|
|
37
|
+
sftp.keep.should == nil
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Backup::Configuration::Syncer::RSync do
|
|
6
|
+
before do
|
|
7
|
+
Backup::Configuration::Syncer::RSync.defaults do |rsync|
|
|
8
|
+
rsync.username = 'my_username'
|
|
9
|
+
rsync.password = 'my_password'
|
|
10
|
+
rsync.ip = '123.45.678.90'
|
|
11
|
+
rsync.port = 22
|
|
12
|
+
rsync.path = '~/backups/'
|
|
13
|
+
rsync.mirror = true
|
|
14
|
+
rsync.compress = true
|
|
15
|
+
rsync.additional_options = []
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it 'should set the default rsync configuration' do
|
|
20
|
+
rsync = Backup::Configuration::Syncer::RSync
|
|
21
|
+
rsync.username.should == 'my_username'
|
|
22
|
+
rsync.password.should == 'my_password'
|
|
23
|
+
rsync.ip.should == '123.45.678.90'
|
|
24
|
+
rsync.port.should == 22
|
|
25
|
+
rsync.path.should == '~/backups/'
|
|
26
|
+
rsync.mirror.should == true
|
|
27
|
+
rsync.compress.should == true
|
|
28
|
+
rsync.additional_options.should == []
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe '#clear_defaults!' do
|
|
32
|
+
it 'should clear all the defaults, resetting them to nil' do
|
|
33
|
+
Backup::Configuration::Syncer::RSync.clear_defaults!
|
|
34
|
+
|
|
35
|
+
rsync = Backup::Configuration::Syncer::RSync
|
|
36
|
+
rsync.username.should == nil
|
|
37
|
+
rsync.password.should == nil
|
|
38
|
+
rsync.ip.should == nil
|
|
39
|
+
rsync.port.should == nil
|
|
40
|
+
rsync.path.should == nil
|
|
41
|
+
rsync.mirror.should == nil
|
|
42
|
+
rsync.compress.should == nil
|
|
43
|
+
rsync.additional_options.should == nil
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Backup::Configuration::Syncer::S3 do
|
|
6
|
+
before do
|
|
7
|
+
Backup::Configuration::Syncer::S3.defaults do |s3|
|
|
8
|
+
s3.access_key_id = 'my_access_key_id'
|
|
9
|
+
s3.secret_access_key = 'my_secret_access_key'
|
|
10
|
+
s3.bucket = 'my-bucket'
|
|
11
|
+
s3.path = '/backups/'
|
|
12
|
+
s3.directories = '/directories/to/backup/'
|
|
13
|
+
s3.mirror = true
|
|
14
|
+
s3.additional_options = ['--exclude="*.rb"']
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'should set the default s3 configuration' do
|
|
19
|
+
s3 = Backup::Configuration::Syncer::S3
|
|
20
|
+
s3.access_key_id.should == 'my_access_key_id'
|
|
21
|
+
s3.secret_access_key.should == 'my_secret_access_key'
|
|
22
|
+
s3.bucket.should == 'my-bucket'
|
|
23
|
+
s3.path.should == '/backups/'
|
|
24
|
+
s3.directories.should == '/directories/to/backup/'
|
|
25
|
+
s3.mirror.should == true
|
|
26
|
+
s3.additional_options.should == ['--exclude="*.rb"']
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe '#clear_defaults!' do
|
|
30
|
+
it 'should clear all the defaults, resetting them to nil' do
|
|
31
|
+
Backup::Configuration::Syncer::S3.clear_defaults!
|
|
32
|
+
|
|
33
|
+
s3 = Backup::Configuration::Syncer::S3
|
|
34
|
+
s3.access_key_id.should == nil
|
|
35
|
+
s3.secret_access_key.should == nil
|
|
36
|
+
s3.bucket.should == nil
|
|
37
|
+
s3.path.should == nil
|
|
38
|
+
s3.directories.should == nil
|
|
39
|
+
s3.mirror.should == nil
|
|
40
|
+
s3.additional_options.should == nil
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Backup::Database::Base do
|
|
6
|
+
|
|
7
|
+
before do
|
|
8
|
+
class Backup::Database::Base
|
|
9
|
+
def initialize(&block)
|
|
10
|
+
instance_eval(&block) if block_given?
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
let(:db) do
|
|
16
|
+
Backup::Database::Base.new do |db|
|
|
17
|
+
db.utility_path = '/var/usr/my_util'
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'should return the utility path instead of auto-detecting it' do
|
|
22
|
+
db.utility(:my_database_util).should == '/var/usr/my_util'
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'should ignore the utility_path when not defined' do
|
|
26
|
+
db = Backup::Database::Base.new
|
|
27
|
+
db.utility(:my_database_util).should == :my_database_util
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Backup::Database::MongoDB do
|
|
6
|
+
|
|
7
|
+
before do
|
|
8
|
+
Backup::Database::MongoDB.any_instance.stubs(:load_defaults!)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
let(:db) do
|
|
12
|
+
Backup::Database::MongoDB.new do |db|
|
|
13
|
+
db.name = 'mydatabase'
|
|
14
|
+
db.username = 'someuser'
|
|
15
|
+
db.password = 'secret'
|
|
16
|
+
db.host = 'localhost'
|
|
17
|
+
db.port = 123
|
|
18
|
+
|
|
19
|
+
db.ipv6 = true
|
|
20
|
+
db.only_collections = ['users', 'pirates']
|
|
21
|
+
db.additional_options = ['--query']
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe '#new' do
|
|
26
|
+
it 'should read the adapter details correctly' do
|
|
27
|
+
db.name.should == 'mydatabase'
|
|
28
|
+
db.username.should == 'someuser'
|
|
29
|
+
db.password.should == 'secret'
|
|
30
|
+
db.host.should == 'localhost'
|
|
31
|
+
db.port.should == 123
|
|
32
|
+
|
|
33
|
+
db.only_collections.should == ['users', 'pirates']
|
|
34
|
+
db.additional_options.should == '--query'
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'arrays should default to empty arrays when not specified' do
|
|
38
|
+
db = Backup::Database::MongoDB.new do |db|
|
|
39
|
+
db.name = 'mydatabase'
|
|
40
|
+
db.username = 'someuser'
|
|
41
|
+
db.password = 'secret'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
db.only_collections.should == []
|
|
45
|
+
db.additional_options.should == ""
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'should ensure the directory is available' do
|
|
49
|
+
Backup::Database::MongoDB.any_instance.expects(:mkdir).with("#{Backup::TMP_PATH}/myapp/MongoDB")
|
|
50
|
+
Backup::Database::MongoDB.new {}
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
describe '#only_collections' do
|
|
55
|
+
it 'should return a string for the mongodump selected table to dump option' do
|
|
56
|
+
db.collections_to_dump.should == %w[users pirates]
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe '#credential_options' do
|
|
61
|
+
it 'should return the mongo syntax for the credential options' do
|
|
62
|
+
db.credential_options.should == "--username='someuser' --password='secret'"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it 'should only return the mongo syntax for the user' do
|
|
66
|
+
db = Backup::Database::MongoDB.new do |db|
|
|
67
|
+
db.username = 'someuser'
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
db.credential_options.should == "--username='someuser'"
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe '#connectivity_options' do
|
|
75
|
+
it 'should return the mongo syntax for the connectivity options' do
|
|
76
|
+
db.connectivity_options.should == "--host='localhost' --port='123'"
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it 'should return only the socket' do
|
|
80
|
+
db = Backup::Database::MongoDB.new do |db|
|
|
81
|
+
db.host = ''
|
|
82
|
+
db.port = 123
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
db.connectivity_options.should == "--port='123'"
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
describe '#ipv6' do
|
|
90
|
+
it 'should return a mongodb syntax compatible ipv6 flag' do
|
|
91
|
+
db.ipv6 = true
|
|
92
|
+
db.ipv6.should == '--ipv6'
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it 'should return an empty string' do
|
|
96
|
+
db.ipv6 = nil
|
|
97
|
+
db.ipv6.should == ''
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
describe '#mongodump_string' do
|
|
102
|
+
it 'should return the full mongodump string' do
|
|
103
|
+
db.expects(:utility).with(:mongodump).returns('mongodump')
|
|
104
|
+
db.mongodump.should ==
|
|
105
|
+
"mongodump --db='mydatabase' --username='someuser' --password='secret' " +
|
|
106
|
+
"--host='localhost' --port='123' --ipv6 --query --out='#{ File.join(Backup::TMP_PATH, Backup::TRIGGER, 'MongoDB') }'"
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
describe '#perform!' do
|
|
111
|
+
before do
|
|
112
|
+
Backup::Logger.stubs(:message)
|
|
113
|
+
db.stubs(:utility).returns('mongodump')
|
|
114
|
+
db.stubs(:mkdir)
|
|
115
|
+
db.stubs(:run)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
it 'should run the mongodump command and dump all collections' do
|
|
119
|
+
db.only_collections = []
|
|
120
|
+
db.expects(:dump!)
|
|
121
|
+
|
|
122
|
+
db.perform!
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it 'should run the mongodump command and dump all collections' do
|
|
126
|
+
db.only_collections = nil
|
|
127
|
+
db.expects(:dump!)
|
|
128
|
+
|
|
129
|
+
db.perform!
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
it 'should dump only the provided collections' do
|
|
133
|
+
db.only_collections = %w[users admins profiles]
|
|
134
|
+
db.expects(:specific_collection_dump!)
|
|
135
|
+
|
|
136
|
+
db.perform!
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
it do
|
|
140
|
+
Backup::Logger.expects(:message).with("Backup::Database::MongoDB started dumping and archiving \"mydatabase\".")
|
|
141
|
+
db.perform!
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Backup::Database::MySQL do
|
|
6
|
+
|
|
7
|
+
before do
|
|
8
|
+
Backup::Database::MySQL.any_instance.stubs(:load_defaults!)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
let(:db) do
|
|
12
|
+
Backup::Database::MySQL.new do |db|
|
|
13
|
+
db.name = 'mydatabase'
|
|
14
|
+
db.username = 'someuser'
|
|
15
|
+
db.password = 'secret'
|
|
16
|
+
db.host = 'localhost'
|
|
17
|
+
db.port = '123'
|
|
18
|
+
db.socket = '/mysql.sock'
|
|
19
|
+
|
|
20
|
+
db.skip_tables = ['logs', 'profiles']
|
|
21
|
+
db.only_tables = ['users', 'pirates']
|
|
22
|
+
db.additional_options = ['--single-transaction', '--quick']
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe '#new' do
|
|
27
|
+
it 'should read the adapter details correctly' do
|
|
28
|
+
db.name.should == 'mydatabase'
|
|
29
|
+
db.username.should == 'someuser'
|
|
30
|
+
db.password.should == 'secret'
|
|
31
|
+
db.host.should == 'localhost'
|
|
32
|
+
db.port.should == '123'
|
|
33
|
+
db.socket.should == '/mysql.sock'
|
|
34
|
+
|
|
35
|
+
db.skip_tables.should == ['logs', 'profiles']
|
|
36
|
+
db.only_tables.should == ['users', 'pirates']
|
|
37
|
+
db.additional_options.should == ['--single-transaction', '--quick']
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'arrays should default to empty arrays when not specified' do
|
|
41
|
+
db = Backup::Database::MySQL.new do |db|
|
|
42
|
+
db.name = 'mydatabase'
|
|
43
|
+
db.username = 'someuser'
|
|
44
|
+
db.password = 'secret'
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
db.skip_tables.should == []
|
|
48
|
+
db.only_tables.should == []
|
|
49
|
+
db.additional_options.should == []
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'should ensure the directory is available' do
|
|
53
|
+
Backup::Database::MySQL.any_instance.expects(:mkdir).with("#{Backup::TMP_PATH}/myapp/MySQL")
|
|
54
|
+
Backup::Database::MySQL.new {}
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
describe '#skip_tables' do
|
|
59
|
+
it 'should return a string for the mysqldump --ignore-tables option' do
|
|
60
|
+
db.tables_to_skip.should == "--ignore-table='mydatabase.logs'\s--ignore-table='mydatabase.profiles'"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'should return an empty string' do
|
|
64
|
+
db = Backup::Database::MySQL.new {}
|
|
65
|
+
db.tables_to_skip.should == ""
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
describe '#only_tables' do
|
|
70
|
+
it 'should return a string for the mysqldump selected table to dump option' do
|
|
71
|
+
db.tables_to_dump.should == "users\spirates"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it 'should return an empty string' do
|
|
75
|
+
db = Backup::Database::MySQL.new {}
|
|
76
|
+
db.tables_to_dump.should == ""
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
describe '#credential_options' do
|
|
81
|
+
it 'should return the mysql syntax for the credential options' do
|
|
82
|
+
db.credential_options.should == "--user='someuser' --password='secret'"
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it 'should only return the mysql syntax for the user' do
|
|
86
|
+
db = Backup::Database::MySQL.new do |db|
|
|
87
|
+
db.username = 'someuser'
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
db.credential_options.should == "--user='someuser'"
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
describe '#connectivity_options' do
|
|
95
|
+
it 'should return the mysql syntax for the connectivity options' do
|
|
96
|
+
db.connectivity_options.should == "--host='localhost' --port='123' --socket='/mysql.sock'"
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it 'should return only the socket' do
|
|
100
|
+
db = Backup::Database::MySQL.new do |db|
|
|
101
|
+
db.host = ''
|
|
102
|
+
db.port = nil
|
|
103
|
+
db.socket = '/mysql.sock'
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
db.connectivity_options.should == "--socket='/mysql.sock'"
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
describe '#additional_options' do
|
|
111
|
+
it 'should return a string of additional options specified by the user' do
|
|
112
|
+
db.options.should == '--single-transaction --quick'
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
it 'should return an empty string' do
|
|
116
|
+
db = Backup::Database::MySQL.new {}
|
|
117
|
+
db.options.should == ""
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
describe '#mysqldump_string' do
|
|
122
|
+
it 'should return the full mysqldump string' do
|
|
123
|
+
db.expects(:utility).with(:mysqldump).returns('mysqldump')
|
|
124
|
+
db.mysqldump.should ==
|
|
125
|
+
"mysqldump --user='someuser' --password='secret' " +
|
|
126
|
+
"--host='localhost' --port='123' --socket='/mysql.sock' " +
|
|
127
|
+
"--single-transaction --quick mydatabase users pirates " +
|
|
128
|
+
"--ignore-table='mydatabase.logs' --ignore-table='mydatabase.profiles'"
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
describe '#perform!' do
|
|
133
|
+
before do
|
|
134
|
+
Backup::Logger.stubs(:message)
|
|
135
|
+
db.stubs(:utility).returns('mysqldump')
|
|
136
|
+
db.stubs(:mkdir)
|
|
137
|
+
db.stubs(:run)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
it 'should run the mysqldump command and dump it to the specified path' do
|
|
141
|
+
db.expects(:run).with("#{db.mysqldump} > '#{Backup::TMP_PATH}/myapp/MySQL/mydatabase.sql'")
|
|
142
|
+
db.perform!
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
it do
|
|
146
|
+
Backup::Logger.expects(:message).with("Backup::Database::MySQL started dumping and archiving \"mydatabase\".")
|
|
147
|
+
db.perform!
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|