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.
Files changed (137) hide show
  1. data/.gitignore +2 -0
  2. data/.infinity_test +7 -0
  3. data/.rspec +3 -0
  4. data/Gemfile +25 -0
  5. data/Gemfile.lock +101 -0
  6. data/LICENSE.md +24 -0
  7. data/README.md +276 -0
  8. data/backup.gemspec +39 -0
  9. data/bin/backup +260 -0
  10. data/lib/backup.rb +168 -0
  11. data/lib/backup/archive.rb +73 -0
  12. data/lib/backup/cli.rb +50 -0
  13. data/lib/backup/compressor/base.rb +17 -0
  14. data/lib/backup/compressor/gzip.rb +61 -0
  15. data/lib/backup/configuration/base.rb +15 -0
  16. data/lib/backup/configuration/compressor/base.rb +10 -0
  17. data/lib/backup/configuration/compressor/gzip.rb +23 -0
  18. data/lib/backup/configuration/database/base.rb +18 -0
  19. data/lib/backup/configuration/database/mongodb.rb +37 -0
  20. data/lib/backup/configuration/database/mysql.rb +37 -0
  21. data/lib/backup/configuration/database/postgresql.rb +37 -0
  22. data/lib/backup/configuration/database/redis.rb +35 -0
  23. data/lib/backup/configuration/encryptor/base.rb +10 -0
  24. data/lib/backup/configuration/encryptor/gpg.rb +17 -0
  25. data/lib/backup/configuration/encryptor/open_ssl.rb +26 -0
  26. data/lib/backup/configuration/helpers.rb +54 -0
  27. data/lib/backup/configuration/notifier/base.rb +39 -0
  28. data/lib/backup/configuration/notifier/mail.rb +52 -0
  29. data/lib/backup/configuration/notifier/twitter.rb +21 -0
  30. data/lib/backup/configuration/storage/base.rb +18 -0
  31. data/lib/backup/configuration/storage/cloudfiles.rb +21 -0
  32. data/lib/backup/configuration/storage/dropbox.rb +29 -0
  33. data/lib/backup/configuration/storage/ftp.rb +25 -0
  34. data/lib/backup/configuration/storage/rsync.rb +25 -0
  35. data/lib/backup/configuration/storage/s3.rb +25 -0
  36. data/lib/backup/configuration/storage/scp.rb +25 -0
  37. data/lib/backup/configuration/storage/sftp.rb +25 -0
  38. data/lib/backup/configuration/syncer/rsync.rb +45 -0
  39. data/lib/backup/configuration/syncer/s3.rb +33 -0
  40. data/lib/backup/database/base.rb +33 -0
  41. data/lib/backup/database/mongodb.rb +137 -0
  42. data/lib/backup/database/mysql.rb +104 -0
  43. data/lib/backup/database/postgresql.rb +111 -0
  44. data/lib/backup/database/redis.rb +105 -0
  45. data/lib/backup/dependency.rb +84 -0
  46. data/lib/backup/encryptor/base.rb +17 -0
  47. data/lib/backup/encryptor/gpg.rb +78 -0
  48. data/lib/backup/encryptor/open_ssl.rb +67 -0
  49. data/lib/backup/finder.rb +39 -0
  50. data/lib/backup/logger.rb +86 -0
  51. data/lib/backup/model.rb +272 -0
  52. data/lib/backup/notifier/base.rb +29 -0
  53. data/lib/backup/notifier/binder.rb +32 -0
  54. data/lib/backup/notifier/mail.rb +141 -0
  55. data/lib/backup/notifier/templates/notify_failure.erb +31 -0
  56. data/lib/backup/notifier/templates/notify_success.erb +16 -0
  57. data/lib/backup/notifier/twitter.rb +87 -0
  58. data/lib/backup/storage/base.rb +67 -0
  59. data/lib/backup/storage/cloudfiles.rb +95 -0
  60. data/lib/backup/storage/dropbox.rb +87 -0
  61. data/lib/backup/storage/ftp.rb +114 -0
  62. data/lib/backup/storage/object.rb +45 -0
  63. data/lib/backup/storage/rsync.rb +99 -0
  64. data/lib/backup/storage/s3.rb +108 -0
  65. data/lib/backup/storage/scp.rb +106 -0
  66. data/lib/backup/storage/sftp.rb +106 -0
  67. data/lib/backup/syncer/base.rb +10 -0
  68. data/lib/backup/syncer/rsync.rb +117 -0
  69. data/lib/backup/syncer/s3.rb +116 -0
  70. data/lib/backup/version.rb +43 -0
  71. data/lib/templates/archive +4 -0
  72. data/lib/templates/compressor/gzip +4 -0
  73. data/lib/templates/database/mongodb +10 -0
  74. data/lib/templates/database/mysql +11 -0
  75. data/lib/templates/database/postgresql +11 -0
  76. data/lib/templates/database/redis +10 -0
  77. data/lib/templates/encryptor/gpg +9 -0
  78. data/lib/templates/encryptor/openssl +5 -0
  79. data/lib/templates/notifier/mail +14 -0
  80. data/lib/templates/notifier/twitter +9 -0
  81. data/lib/templates/readme +15 -0
  82. data/lib/templates/storage/cloudfiles +7 -0
  83. data/lib/templates/storage/dropbox +9 -0
  84. data/lib/templates/storage/ftp +8 -0
  85. data/lib/templates/storage/rsync +7 -0
  86. data/lib/templates/storage/s3 +8 -0
  87. data/lib/templates/storage/scp +8 -0
  88. data/lib/templates/storage/sftp +8 -0
  89. data/lib/templates/syncer/rsync +14 -0
  90. data/lib/templates/syncer/s3 +12 -0
  91. data/spec/archive_spec.rb +90 -0
  92. data/spec/backup_spec.rb +11 -0
  93. data/spec/compressor/gzip_spec.rb +59 -0
  94. data/spec/configuration/base_spec.rb +35 -0
  95. data/spec/configuration/compressor/gzip_spec.rb +28 -0
  96. data/spec/configuration/database/base_spec.rb +16 -0
  97. data/spec/configuration/database/mongodb_spec.rb +30 -0
  98. data/spec/configuration/database/mysql_spec.rb +32 -0
  99. data/spec/configuration/database/postgresql_spec.rb +32 -0
  100. data/spec/configuration/database/redis_spec.rb +30 -0
  101. data/spec/configuration/encryptor/gpg_spec.rb +25 -0
  102. data/spec/configuration/encryptor/open_ssl_spec.rb +31 -0
  103. data/spec/configuration/notifier/mail_spec.rb +32 -0
  104. data/spec/configuration/storage/cloudfiles_spec.rb +34 -0
  105. data/spec/configuration/storage/dropbox_spec.rb +43 -0
  106. data/spec/configuration/storage/ftp_spec.rb +40 -0
  107. data/spec/configuration/storage/rsync_spec.rb +37 -0
  108. data/spec/configuration/storage/s3_spec.rb +37 -0
  109. data/spec/configuration/storage/scp_spec.rb +40 -0
  110. data/spec/configuration/storage/sftp_spec.rb +40 -0
  111. data/spec/configuration/syncer/rsync_spec.rb +46 -0
  112. data/spec/configuration/syncer/s3_spec.rb +43 -0
  113. data/spec/database/base_spec.rb +30 -0
  114. data/spec/database/mongodb_spec.rb +144 -0
  115. data/spec/database/mysql_spec.rb +150 -0
  116. data/spec/database/postgresql_spec.rb +164 -0
  117. data/spec/database/redis_spec.rb +122 -0
  118. data/spec/encryptor/gpg_spec.rb +57 -0
  119. data/spec/encryptor/open_ssl_spec.rb +102 -0
  120. data/spec/logger_spec.rb +46 -0
  121. data/spec/model_spec.rb +236 -0
  122. data/spec/notifier/mail_spec.rb +97 -0
  123. data/spec/notifier/twitter_spec.rb +86 -0
  124. data/spec/spec_helper.rb +21 -0
  125. data/spec/storage/base_spec.rb +33 -0
  126. data/spec/storage/cloudfiles_spec.rb +102 -0
  127. data/spec/storage/dropbox_spec.rb +105 -0
  128. data/spec/storage/ftp_spec.rb +133 -0
  129. data/spec/storage/object_spec.rb +74 -0
  130. data/spec/storage/rsync_spec.rb +115 -0
  131. data/spec/storage/s3_spec.rb +110 -0
  132. data/spec/storage/scp_spec.rb +129 -0
  133. data/spec/storage/sftp_spec.rb +125 -0
  134. data/spec/syncer/rsync_spec.rb +156 -0
  135. data/spec/syncer/s3_spec.rb +139 -0
  136. data/spec/version_spec.rb +21 -0
  137. 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