dump 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. data/.autotest +13 -0
  2. data/.gitignore +12 -0
  3. data/LICENSE.txt +20 -0
  4. data/README.markdown +250 -0
  5. data/dump.gemspec +22 -0
  6. data/lib/dump.rb +3 -0
  7. data/lib/dump/capistrano.rb +1 -0
  8. data/lib/dump/railtie.rb +8 -0
  9. data/lib/dump_rake.rb +85 -0
  10. data/lib/dump_rake/archive_tar_minitar_fix.rb +8 -0
  11. data/lib/dump_rake/assets.rb +22 -0
  12. data/lib/dump_rake/continious_timeout.rb +38 -0
  13. data/lib/dump_rake/dump.rb +175 -0
  14. data/lib/dump_rake/dump_reader.rb +289 -0
  15. data/lib/dump_rake/dump_writer.rb +119 -0
  16. data/lib/dump_rake/env.rb +139 -0
  17. data/lib/dump_rake/env/filter.rb +26 -0
  18. data/lib/dump_rake/rails_root.rb +12 -0
  19. data/lib/dump_rake/table_manipulation.rb +131 -0
  20. data/lib/generators/assets_config/assets_config_generator.rb +16 -0
  21. data/lib/generators/assets_config/templates/assets +8 -0
  22. data/lib/tasks/assets.rake +17 -0
  23. data/lib/tasks/dump.rake +27 -0
  24. data/recipes/dump.rb +343 -0
  25. data/script/update_readme +21 -0
  26. data/spec/.gitignore +1 -0
  27. data/spec/.tmignore +1 -0
  28. data/spec/cycle_spec.rb +229 -0
  29. data/spec/db/database.example.yml +19 -0
  30. data/spec/db/schema.rb +7 -0
  31. data/spec/dummy-3.1.3/.gitignore +15 -0
  32. data/spec/dummy-3.1.3/.rspec +1 -0
  33. data/spec/dummy-3.1.3/Gemfile +23 -0
  34. data/spec/dummy-3.1.3/Gemfile.lock +159 -0
  35. data/spec/dummy-3.1.3/README +261 -0
  36. data/spec/dummy-3.1.3/Rakefile +7 -0
  37. data/spec/dummy-3.1.3/app/assets/images/rails.png +0 -0
  38. data/spec/dummy-3.1.3/app/assets/javascripts/application.js +9 -0
  39. data/spec/dummy-3.1.3/app/assets/stylesheets/application.css +7 -0
  40. data/spec/dummy-3.1.3/app/controllers/application_controller.rb +3 -0
  41. data/spec/dummy-3.1.3/app/helpers/application_helper.rb +2 -0
  42. data/spec/dummy-3.1.3/app/mailers/.gitkeep +0 -0
  43. data/spec/dummy-3.1.3/app/models/.gitkeep +0 -0
  44. data/spec/dummy-3.1.3/app/views/layouts/application.html.erb +14 -0
  45. data/spec/dummy-3.1.3/config.ru +4 -0
  46. data/spec/dummy-3.1.3/config/application.rb +54 -0
  47. data/spec/dummy-3.1.3/config/boot.rb +6 -0
  48. data/spec/dummy-3.1.3/config/database.yml +25 -0
  49. data/spec/dummy-3.1.3/config/environment.rb +5 -0
  50. data/spec/dummy-3.1.3/config/environments/development.rb +30 -0
  51. data/spec/dummy-3.1.3/config/environments/production.rb +60 -0
  52. data/spec/dummy-3.1.3/config/environments/test.rb +39 -0
  53. data/spec/dummy-3.1.3/config/initializers/backtrace_silencers.rb +7 -0
  54. data/spec/dummy-3.1.3/config/initializers/inflections.rb +10 -0
  55. data/spec/dummy-3.1.3/config/initializers/mime_types.rb +5 -0
  56. data/spec/dummy-3.1.3/config/initializers/secret_token.rb +7 -0
  57. data/spec/dummy-3.1.3/config/initializers/session_store.rb +8 -0
  58. data/spec/dummy-3.1.3/config/initializers/wrap_parameters.rb +14 -0
  59. data/spec/dummy-3.1.3/config/locales/en.yml +5 -0
  60. data/spec/dummy-3.1.3/config/routes.rb +58 -0
  61. data/spec/dummy-3.1.3/db/seeds.rb +7 -0
  62. data/spec/dummy-3.1.3/doc/README_FOR_APP +2 -0
  63. data/spec/dummy-3.1.3/lib/assets/.gitkeep +0 -0
  64. data/spec/dummy-3.1.3/lib/tasks/.gitkeep +0 -0
  65. data/spec/dummy-3.1.3/log/.gitkeep +0 -0
  66. data/spec/dummy-3.1.3/public/404.html +26 -0
  67. data/spec/dummy-3.1.3/public/422.html +26 -0
  68. data/spec/dummy-3.1.3/public/500.html +26 -0
  69. data/spec/dummy-3.1.3/public/favicon.ico +0 -0
  70. data/spec/dummy-3.1.3/public/index.html +241 -0
  71. data/spec/dummy-3.1.3/public/robots.txt +5 -0
  72. data/spec/dummy-3.1.3/script/rails +6 -0
  73. data/spec/dummy-3.1.3/spec/spec_helper.rb +32 -0
  74. data/spec/dummy-3.1.3/vendor/assets/stylesheets/.gitkeep +0 -0
  75. data/spec/dummy-3.1.3/vendor/plugins/.gitkeep +0 -0
  76. data/spec/lib/dump_rake/dump_reader_spec.rb +638 -0
  77. data/spec/lib/dump_rake/dump_spec.rb +291 -0
  78. data/spec/lib/dump_rake/dump_writer_spec.rb +328 -0
  79. data/spec/lib/dump_rake/env/filter_spec.rb +56 -0
  80. data/spec/lib/dump_rake/env_spec.rb +139 -0
  81. data/spec/lib/dump_rake/rails_root_spec.rb +45 -0
  82. data/spec/lib/dump_rake/table_manipulation_spec.rb +256 -0
  83. data/spec/lib/dump_rake_spec.rb +326 -0
  84. data/spec/recipes/dump_spec.rb +553 -0
  85. data/spec/spec.opts +4 -0
  86. data/spec/spec_helper.rb +34 -0
  87. data/spec/tasks/assets_spec.rb +92 -0
  88. data/spec/tasks/dump_spec.rb +107 -0
  89. metadata +272 -0
@@ -0,0 +1,326 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe DumpRake do
4
+ describe "versions" do
5
+ it "should call Dump.list if called without version" do
6
+ DumpRake::Dump.should_receive(:list).and_return([])
7
+ DumpRake.versions
8
+ end
9
+
10
+ it "should call Dump.list with options if called with version" do
11
+ DumpRake::Dump.should_receive(:list).with(:like => '123').and_return([])
12
+ DumpRake.versions(:like => '123')
13
+ end
14
+
15
+ it "should print versions" do
16
+ DumpRake::Dump.should_receive(:list).and_return(%w[123.tgz 456.tgz])
17
+ grab_output{
18
+ DumpRake.versions
19
+ }[:stdout].should == "123.tgz\n456.tgz\n"
20
+ end
21
+
22
+ it "should not show summary if not asked for" do
23
+ dumps = %w[123.tgz 456.tgz].map do |s|
24
+ dump = mock("dump_#{s}", :path => mock("dump_#{s}_path"))
25
+ DumpRake::DumpReader.should_not_receive(:summary)
26
+ dump
27
+ end
28
+
29
+ DumpRake::Dump.should_receive(:list).and_return(dumps)
30
+ grab_output{
31
+ $stderr.should_not_receive(:puts)
32
+ DumpRake.versions
33
+ }
34
+ end
35
+
36
+ it "should show summary if asked for" do
37
+ dumps = %w[123.tgz 456.tgz].map do |s|
38
+ dump = mock("dump_#{s}", :path => mock("dump_#{s}_path"))
39
+ DumpRake::DumpReader.should_receive(:summary).with(dump.path)
40
+ dump
41
+ end
42
+
43
+ DumpRake::Dump.should_receive(:list).and_return(dumps)
44
+ grab_output{
45
+ $stderr.should_not_receive(:puts)
46
+ DumpRake.versions(:summary => '1')
47
+ }
48
+ end
49
+
50
+ it "should show summary with scmema if asked for" do
51
+ dumps = %w[123.tgz 456.tgz].map do |s|
52
+ dump = mock("dump_#{s}", :path => mock("dump_#{s}_path"))
53
+ DumpRake::DumpReader.should_receive(:summary).with(dump.path, :schema => true)
54
+ dump
55
+ end
56
+
57
+ DumpRake::Dump.should_receive(:list).and_return(dumps)
58
+ grab_output{
59
+ $stderr.should_not_receive(:puts)
60
+ DumpRake.versions(:summary => '2')
61
+ }
62
+ end
63
+
64
+ it "should show output to stderr if summary raises error" do
65
+ DumpRake::DumpReader.stub!(:summary)
66
+ dumps = %w[123.tgz 456.tgz].map do |s|
67
+ mock("dump_#{s}", :path => mock("dump_#{s}_path"))
68
+ end
69
+ DumpRake::DumpReader.should_receive(:summary).with(dumps[1].path).and_raise('terrible error')
70
+
71
+ DumpRake::Dump.should_receive(:list).and_return(dumps)
72
+ grab_output{
73
+ $stderr.stub!(:puts)
74
+ $stderr.should_receive(:puts) do |s|
75
+ s['terrible error'].should_not be_nil
76
+ end
77
+ DumpRake.versions(:summary => 'true')
78
+ }
79
+ end
80
+ end
81
+
82
+ describe "create" do
83
+ describe "naming" do
84
+ it "should create file in 'rails app root'/dump" do
85
+ File.stub!(:rename)
86
+ DumpRake::DumpWriter.should_receive(:create) do |path|
87
+ File.dirname(path).should == File.join(DumpRake::RailsRoot, 'dump')
88
+ end
89
+ grab_output{
90
+ DumpRake.create
91
+ }
92
+ end
93
+
94
+ it "should create file with name like 'yyyymmddhhmmss.tmp' when called without description" do
95
+ File.stub!(:rename)
96
+ DumpRake::DumpWriter.should_receive(:create) do |path|
97
+ File.basename(path).should match(/^\d{14}\.tmp$/)
98
+ end
99
+ grab_output{
100
+ DumpRake.create
101
+ }
102
+ end
103
+
104
+ it "should create file with name like 'yyyymmddhhmmss-Some text and _.tmp' when called with description 'Some text and !@'" do
105
+ File.stub!(:rename)
106
+ DumpRake::DumpWriter.should_receive(:create) do |path|
107
+ File.basename(path).should match(/^\d{14}-Some text and _\.tmp$/)
108
+ end
109
+ grab_output{
110
+ DumpRake.create(:desc => 'Some text and !@')
111
+ }
112
+ end
113
+
114
+ it "should create file with name like 'yyyymmddhhmmss@super tag,second.tmp' when called with description 'Some text and !@'" do
115
+ File.stub!(:rename)
116
+ DumpRake::DumpWriter.should_receive(:create) do |path|
117
+ File.basename(path).should match(/^\d{14}-Some text and _\.tmp$/)
118
+ end
119
+ grab_output{
120
+ DumpRake.create(:desc => 'Some text and !@')
121
+ }
122
+ end
123
+
124
+ it "should rename file after creating" do
125
+ File.should_receive(:rename) do |tmp_path, tgz_path|
126
+ File.basename(tmp_path).should match(/^\d{14}-Some text and _\.tmp$/)
127
+ File.basename(tgz_path).should match(/^\d{14}-Some text and _\.tgz$/)
128
+ end
129
+ DumpRake::DumpWriter.stub!(:create)
130
+ grab_output{
131
+ DumpRake.create(:desc => 'Some text and !@')
132
+ }
133
+ end
134
+
135
+ it "should output file name" do
136
+ File.stub!(:rename)
137
+ DumpRake::DumpWriter.stub!(:create)
138
+ grab_output{
139
+ DumpRake.create(:desc => 'Some text and !@')
140
+ }[:stdout].should match(/^\d{14}-Some text and _\.tgz$/)
141
+ end
142
+ end
143
+
144
+ describe "writing" do
145
+ it "should dump schema, tables, assets" do
146
+ File.stub!(:rename)
147
+ @dump = mock('dump')
148
+ DumpRake::DumpWriter.should_receive(:create)
149
+
150
+ grab_output{
151
+ DumpRake.create
152
+ }
153
+ end
154
+ end
155
+ end
156
+
157
+ describe "restore" do
158
+ describe "without version" do
159
+ it "should call Dump.list" do
160
+ DumpRake::Dump.stub!(:list)
161
+ DumpRake::Dump.should_receive(:list).and_return([])
162
+ grab_output{
163
+ DumpRake.restore
164
+ }
165
+ end
166
+
167
+ it "should not call DumpReader.restore and should call Dump.list and output it to $stderr if there are no versions at all" do
168
+ DumpRake::Dump.stub!(:list).and_return([])
169
+ DumpRake::DumpReader.should_not_receive(:restore)
170
+ all_dumps = mock('all_dumps')
171
+ DumpRake::Dump.should_receive(:list).with().and_return(all_dumps)
172
+ grab_output{
173
+ $stderr.should_receive(:puts).with(kind_of(String))
174
+ $stderr.should_receive(:puts).with(all_dumps)
175
+ DumpRake.restore
176
+ }
177
+ end
178
+
179
+ it "should not call DumpReader.restore and should call Dump.list and output it to $stderr if there are no versions at all" do
180
+ DumpRake::Dump.stub!(:list).and_return([])
181
+ DumpRake::DumpReader.should_not_receive(:restore)
182
+ all_dumps = mock('all_dumps')
183
+ DumpRake::Dump.should_receive(:list).with().and_return(all_dumps)
184
+ grab_output{
185
+ $stderr.should_receive(:puts).with(kind_of(String))
186
+ $stderr.should_receive(:puts).with(all_dumps)
187
+ DumpRake.restore('213')
188
+ }
189
+ end
190
+
191
+ it "should call DumpReader.restore if there are versions" do
192
+ @dump = mock('dump', :path => 'dump/213.tgz')
193
+ DumpRake::Dump.should_receive(:list).once.and_return([@dump])
194
+ DumpRake::DumpReader.should_receive(:restore).with('dump/213.tgz')
195
+ grab_output{
196
+ $stderr.should_not_receive(:puts)
197
+ DumpRake.restore
198
+ }
199
+ end
200
+ end
201
+
202
+ describe "with version" do
203
+ it "should call Dump.list with options" do
204
+ DumpRake::Dump.stub!(:list)
205
+ DumpRake::Dump.should_receive(:list).with(:like => '213').and_return([])
206
+ grab_output{
207
+ DumpRake.restore(:like => '213')
208
+ }
209
+ end
210
+
211
+ it "should not call DumpReader.restore and should call versions if desired version not found" do
212
+ DumpRake::Dump.stub!(:list).and_return([])
213
+ DumpRake::DumpReader.should_not_receive(:restore)
214
+ all_dumps = mock('all_dumps')
215
+ DumpRake::Dump.should_receive(:list).with().and_return(all_dumps)
216
+ grab_output{
217
+ $stderr.should_receive(:puts).with(kind_of(String))
218
+ $stderr.should_receive(:puts).with(all_dumps)
219
+ DumpRake.restore('213')
220
+ }
221
+ end
222
+
223
+ it "should call DumpReader.restore if there is desired version" do
224
+ @dump = mock('dump', :path => 'dump/213.tgz')
225
+ DumpRake::Dump.should_receive(:list).once.and_return([@dump])
226
+ DumpRake::DumpReader.should_receive(:restore).with('dump/213.tgz')
227
+ DumpRake.should_not_receive(:versions)
228
+ grab_output{
229
+ $stderr.should_not_receive(:puts)
230
+ DumpRake.restore(:like => '213')
231
+ }
232
+ end
233
+
234
+ it "should call DumpReader.restore on last version if found multiple matching versions" do
235
+ @dump_a = mock('dump_a', :path => 'dump/213-a.tgz')
236
+ @dump_b = mock('dump_b', :path => 'dump/213-b.tgz')
237
+ DumpRake::Dump.should_receive(:list).once.and_return([@dump_a, @dump_b])
238
+ DumpRake::DumpReader.should_receive(:restore).with('dump/213-b.tgz')
239
+ grab_output{
240
+ $stderr.should_not_receive(:puts)
241
+ DumpRake.restore(:like => '213')
242
+ }
243
+ end
244
+ end
245
+ end
246
+
247
+ describe "cleanup" do
248
+ it "should call ask for all files in dump dir and for dumps" do
249
+ DumpRake::Dump.should_receive(:list).with(:all => true).and_return([])
250
+ DumpRake::Dump.should_receive(:list).with({}).and_return([])
251
+ DumpRake.cleanup
252
+ end
253
+
254
+ it "should call Dump.list with options if called with version and tags" do
255
+ DumpRake::Dump.should_receive(:list).with(:like => '123', :tags => 'a,b,c', :all => true).and_return([])
256
+ DumpRake::Dump.should_receive(:list).with(:like => '123', :tags => 'a,b,c').and_return([])
257
+ DumpRake.cleanup(:like => '123', :tags => 'a,b,c')
258
+ end
259
+
260
+ {
261
+ {} => [0..4],
262
+ {:leave => '3'} => [0..6],
263
+ {:leave => '5'} => [0..4],
264
+ {:leave => '9'} => [0],
265
+ {:leave => '10'} => [],
266
+ {:leave => '15'} => [],
267
+ {:leave => 'none'} => [0..9],
268
+ }.each do |options, ids|
269
+ it "should call delete #{ids} dumps when called with #{options}" do
270
+ dumps = %w[a b c d e f g h i j].map do |s|
271
+ mock("dump_#{s}", :ext => 'tgz', :path => mock("dump_#{s}_path"))
272
+ end
273
+ tmp_dumps = %w[a b c].map do |s|
274
+ mock("tmp_dump_#{s}", :ext => 'tmp', :path => mock("tmp_dump_#{s}_path"))
275
+ end
276
+ all_dumps = tmp_dumps[0, 1] + dumps[0, 5] + tmp_dumps[1, 1] + dumps[5, 5] + tmp_dumps[2, 1]
277
+
278
+ (dumps.values_at(*ids) + [tmp_dumps[0], tmp_dumps[2]]).each do |dump|
279
+ dump.should_receive(:lock).and_yield
280
+ dump.path.should_receive(:unlink)
281
+ end
282
+ [tmp_dumps[1]].each do |dump|
283
+ dump.should_receive(:lock)
284
+ dump.path.should_not_receive(:unlink)
285
+ end
286
+ (dumps - dumps.values_at(*ids)).each do |dump|
287
+ dump.should_not_receive(:lock)
288
+ dump.path.should_not_receive(:unlink)
289
+ end
290
+
291
+ DumpRake::Dump.should_receive(:list).with(hash_including(:all => true)).and_return(all_dumps)
292
+ DumpRake::Dump.should_receive(:list).with(hash_not_including(:all => true)).and_return(dumps)
293
+ grab_output{
294
+ DumpRake.cleanup({:like => '123', :tags => 'a,b,c'}.merge(options))
295
+ }
296
+ end
297
+ end
298
+
299
+ it "should print to stderr if can not delete dump" do
300
+ dumps = %w[a b c d e f g h i j].map do |s|
301
+ dump = mock("dump_#{s}", :ext => 'tgz', :path => mock("dump_#{s}_path"))
302
+ dump.stub!(:lock).and_yield
303
+ dump.path.stub!(:unlink)
304
+ dump
305
+ end
306
+
307
+ dumps[3].path.should_receive(:unlink).and_raise('Horrible error')
308
+
309
+ DumpRake::Dump.stub!(:list).and_return(dumps)
310
+ grab_output{
311
+ $stderr.stub!(:puts)
312
+ $stderr.should_receive(:puts) do |s|
313
+ s[dumps[3].path.to_s].should_not be_nil
314
+ s['Horrible error'].should_not be_nil
315
+ end
316
+ DumpRake.cleanup
317
+ }
318
+ end
319
+
320
+ it "should raise if called with :leave which is not a number or 'none'" do
321
+ proc{
322
+ DumpRake.cleanup(:leave => 'nothing')
323
+ }.should raise_error
324
+ end
325
+ end
326
+ end
@@ -0,0 +1,553 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+ require 'capistrano'
3
+
4
+ describe "cap dump" do
5
+ before do
6
+ @cap = Capistrano::Configuration.new
7
+ Capistrano::Configuration.instance = @cap
8
+ @cap.load File.dirname(__FILE__) + '/../../recipes/dump.rb'
9
+ @remote_path = "/home/test/apps/dummy"
10
+ @cap.set(:current_path, @remote_path)
11
+ end
12
+
13
+ def all_dictionary_variables
14
+ DumpRake::Env::DICTIONARY.each_with_object({}) do |(key, value), filled_env|
15
+ filled_env[key] = value.join(' ')
16
+ end
17
+ end
18
+
19
+ def self.test_passing_environment_variables(place, command, command_strings, options = {})
20
+ DumpRake::Env.variable_names_for_command(command).each do |variable|
21
+ command_string = command_strings[variable]
22
+ DumpRake::Env::DICTIONARY[variable].each do |name|
23
+ it "should pass #{variable} if it is set through environment variable #{name}" do
24
+ violated "command_string not specified" unless command_string
25
+ full_command_string = command_string
26
+ full_command_string = "cd #{@remote_path}; #{command_string}" if place == :remote
27
+ @cap.dump.should_receive(:"run_#{place}").with(full_command_string).and_return(options[:return_value] || '')
28
+ DumpRake::Env.with_env name => options[:value] || 'some data' do
29
+ cap_task = options[:cap_task] || "dump:#{place}:#{command}"
30
+ grab_output{ @cap.find_and_execute_task(cap_task) }
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ describe "do_transfer" do
38
+ before do
39
+ @cap.dump.stub!(:do_transfer_via)
40
+ end
41
+
42
+ [:up, :down].each do |direction|
43
+ describe direction do
44
+ describe "if method not set" do
45
+
46
+ it "should call got_rsync?" do
47
+ @cap.dump.should_receive(:got_rsync?)
48
+ grab_output{ @cap.dump.do_transfer(direction, 'a.tgz', 'b.tgz') }
49
+ end
50
+
51
+ describe "if got_rsync?" do
52
+ it "should use rsync" do
53
+ @cap.dump.stub!(:got_rsync?).and_return(true)
54
+ @cap.dump.should_receive(:do_transfer_via).with(:rsync, direction, 'a.tgz', 'b.tgz')
55
+ grab_output{ @cap.dump.do_transfer(direction, 'a.tgz', 'b.tgz') }
56
+ end
57
+
58
+ it "should raise if rsync fails" do
59
+ @cap.dump.stub!(:got_rsync?).and_return(true)
60
+ @cap.dump.should_receive(:do_transfer_via).with(:rsync, direction, 'a.tgz', 'b.tgz').and_raise('problem using rsync')
61
+ proc{
62
+ grab_output{ @cap.dump.do_transfer(direction, 'a.tgz', 'b.tgz') }
63
+ }.should raise_error('problem using rsync')
64
+ end
65
+ end
66
+
67
+ describe "unless got_rsync?" do
68
+ it "should try sftp" do
69
+ @cap.dump.stub!(:got_rsync?).and_return(false)
70
+ @cap.dump.should_receive(:do_transfer_via).with(:sftp, direction, 'a.tgz', 'b.tgz')
71
+ grab_output{ @cap.dump.do_transfer(direction, 'a.tgz', 'b.tgz') }
72
+ end
73
+
74
+ it "should try scp after sftp" do
75
+ @cap.dump.stub!(:got_rsync?).and_return(false)
76
+ @cap.dump.should_receive(:do_transfer_via).with(:sftp, direction, 'a.tgz', 'b.tgz').and_raise('problem using sftp')
77
+ @cap.dump.should_receive(:do_transfer_via).with(:scp, direction, 'a.tgz', 'b.tgz')
78
+ grab_output{ @cap.dump.do_transfer(direction, 'a.tgz', 'b.tgz') }
79
+ end
80
+
81
+ it "should not rescue if scp also fails" do
82
+ @cap.dump.stub!(:got_rsync?).and_return(false)
83
+ @cap.dump.should_receive(:do_transfer_via).with(:sftp, direction, 'a.tgz', 'b.tgz').and_raise('problem using sftp')
84
+ @cap.dump.should_receive(:do_transfer_via).with(:scp, direction, 'a.tgz', 'b.tgz').and_raise('problem using scp')
85
+ proc{
86
+ grab_output{ @cap.dump.do_transfer(direction, 'a.tgz', 'b.tgz') }
87
+ }.should raise_error('problem using scp')
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+
95
+ describe "local" do
96
+ describe "versions" do
97
+ it "should call local rake task" do
98
+ @cap.dump.should_receive(:run_local).with("rake -s dump:versions SHOW_SIZE\\=true").and_return('')
99
+ @cap.find_and_execute_task("dump:local:versions")
100
+ end
101
+
102
+ test_passing_environment_variables(:local, :versions, {
103
+ :like => "rake -s dump:versions LIKE\\=some\\ data SHOW_SIZE\\=true",
104
+ :tags => "rake -s dump:versions SHOW_SIZE\\=true TAGS\\=some\\ data",
105
+ :summary => "rake -s dump:versions SHOW_SIZE\\=true SUMMARY\\=some\\ data",
106
+ })
107
+
108
+ it "should print result of rake task" do
109
+ @cap.dump.stub!(:run_local).and_return(" 123M\t123123.tgz\n")
110
+ grab_output{
111
+ @cap.find_and_execute_task("dump:local:versions")
112
+ }[:stdout].should == " 123M\t123123.tgz\n"
113
+ end
114
+ end
115
+
116
+ describe "cleanup" do
117
+ it "should call local rake task" do
118
+ @cap.dump.should_receive(:run_local).with("rake -s dump:cleanup").and_return('')
119
+ @cap.find_and_execute_task("dump:local:cleanup")
120
+ end
121
+
122
+ test_passing_environment_variables(:local, :cleanup, {
123
+ :like => "rake -s dump:cleanup LIKE\\=some\\ data",
124
+ :tags => "rake -s dump:cleanup TAGS\\=some\\ data",
125
+ :leave => "rake -s dump:cleanup LEAVE\\=some\\ data",
126
+ })
127
+
128
+ it "should print result of rake task" do
129
+ @cap.dump.stub!(:run_local).and_return("123123.tgz\n")
130
+ grab_output{
131
+ @cap.find_and_execute_task("dump:local:cleanup")
132
+ }[:stdout].should == "123123.tgz\n"
133
+ end
134
+ end
135
+
136
+ describe "create" do
137
+ it "should raise if dump creation fails" do
138
+ @cap.dump.should_receive(:run_local).with("rake -s dump:create TAGS\\=local").and_return('')
139
+ proc{
140
+ @cap.find_and_execute_task("dump:local:create")
141
+ }.should raise_error('Failed creating dump')
142
+ end
143
+
144
+ it "should call local rake task with tag local" do
145
+ @cap.dump.should_receive(:run_local).with("rake -s dump:create TAGS\\=local").and_return('123.tgz')
146
+ grab_output{
147
+ @cap.find_and_execute_task("dump:local:create")
148
+ }
149
+ end
150
+
151
+ it "should call local rake task with additional tag local" do
152
+ @cap.dump.should_receive(:run_local).with("rake -s dump:create TAGS\\=local,photos").and_return('123.tgz')
153
+ grab_output{
154
+ DumpRake::Env.with_env :tags => 'photos' do
155
+ @cap.find_and_execute_task("dump:local:create")
156
+ end
157
+ }
158
+ end
159
+
160
+ test_passing_environment_variables(:local, :create, {
161
+ :desc => "rake -s dump:create DESC\\=some\\ data TAGS\\=local",
162
+ :tags => "rake -s dump:create TAGS\\=local,some\\ data",
163
+ :tables => "rake -s dump:create TABLES\\=some\\ data TAGS\\=local",
164
+ :assets => "rake -s dump:create ASSETS\\=some\\ data TAGS\\=local",
165
+ }, :return_value => '123.tgz')
166
+
167
+ it "should print result of rake task" do
168
+ @cap.dump.stub!(:run_local).and_return("123123.tgz\n")
169
+ grab_output{
170
+ @cap.find_and_execute_task("dump:local:create")
171
+ }[:stdout].should == "123123.tgz\n"
172
+ end
173
+
174
+ it "should return stripped result of rake task" do
175
+ @cap.dump.stub!(:run_local).and_return("123123.tgz\n")
176
+ grab_output{
177
+ @cap.find_and_execute_task("dump:local:create").should == "123123.tgz"
178
+ }
179
+ end
180
+ end
181
+
182
+ describe "restore" do
183
+ it "should call local rake task" do
184
+ @cap.dump.should_receive(:run_local).with("rake -s dump:restore")
185
+ @cap.find_and_execute_task("dump:local:restore")
186
+ end
187
+
188
+ test_passing_environment_variables(:local, :restore, {
189
+ :like => "rake -s dump:restore LIKE\\=some\\ data",
190
+ :tags => "rake -s dump:restore TAGS\\=some\\ data",
191
+ :migrate_down => "rake -s dump:restore MIGRATE_DOWN\\=some\\ data",
192
+ :restore_schema => "rake -s dump:restore RESTORE_SCHEMA\\=some\\ data",
193
+ :restore_tables => "rake -s dump:restore RESTORE_TABLES\\=some\\ data",
194
+ :restore_assets => "rake -s dump:restore RESTORE_ASSETS\\=some\\ data",
195
+ })
196
+ end
197
+
198
+ describe "upload" do
199
+ it "should run rake versions to get avaliable versions" do
200
+ @cap.dump.should_receive(:run_local).with("rake -s dump:versions").and_return('')
201
+ @cap.find_and_execute_task("dump:local:upload")
202
+ end
203
+
204
+ test_passing_environment_variables(:local, :transfer, {
205
+ :like => "rake -s dump:versions LIKE\\=some\\ data",
206
+ :tags => "rake -s dump:versions TAGS\\=some\\ data",
207
+ :summary => "rake -s dump:versions", # block sending summary to versions
208
+ :transfer_via => "rake -s dump:versions", # tranfer_via is used internally
209
+ }, :cap_task => 'dump:local:upload')
210
+
211
+ it "should not upload anything if there are no versions avaliable" do
212
+ @cap.dump.stub!(:run_local).and_return('')
213
+ @cap.dump.should_not_receive(:do_transfer)
214
+ @cap.find_and_execute_task("dump:local:upload")
215
+ end
216
+
217
+ it "should transfer latest version dump" do
218
+ @cap.dump.stub!(:run_local).and_return("100.tgz\n200.tgz\n300.tgz\n")
219
+ @cap.dump.should_receive(:do_transfer).with(:up, "dump/300.tgz", "#{@remote_path}/dump/300.tgz")
220
+ @cap.find_and_execute_task("dump:local:upload")
221
+ end
222
+
223
+ it "should handle extra spaces around file names" do
224
+ @cap.dump.stub!(:run_local).and_return("\r\n\r\n\r 100.tgz \r\n\r\n\r 200.tgz \r\n\r\n\r 300.tgz \r\n\r\n\r ")
225
+ @cap.dump.should_receive(:do_transfer).with(:up, "dump/300.tgz", "#{@remote_path}/dump/300.tgz")
226
+ @cap.find_and_execute_task("dump:local:upload")
227
+ end
228
+ end
229
+ end
230
+
231
+ describe "remote" do
232
+ describe "versions" do
233
+ it "should call remote rake task" do
234
+ @cap.dump.should_receive(:run_remote).with("cd #{@remote_path}; rake -s dump:versions PROGRESS_TTY\\=\\+ RAILS_ENV\\=production SHOW_SIZE\\=true").and_return('')
235
+ @cap.find_and_execute_task("dump:remote:versions")
236
+ end
237
+
238
+ test_passing_environment_variables(:remote, :versions, {
239
+ :like => "rake -s dump:versions LIKE\\=some\\ data PROGRESS_TTY\\=\\+ RAILS_ENV\\=production SHOW_SIZE\\=true",
240
+ :tags => "rake -s dump:versions PROGRESS_TTY\\=\\+ RAILS_ENV\\=production SHOW_SIZE\\=true TAGS\\=some\\ data",
241
+ :summary => "rake -s dump:versions PROGRESS_TTY\\=\\+ RAILS_ENV\\=production SHOW_SIZE\\=true SUMMARY\\=some\\ data",
242
+ })
243
+
244
+ it "should print result of rake task" do
245
+ @cap.dump.stub!(:run_remote).and_return(" 123M\t123123.tgz\n")
246
+ grab_output{
247
+ @cap.find_and_execute_task("dump:remote:versions")
248
+ }[:stdout].should == " 123M\t123123.tgz\n"
249
+ end
250
+
251
+ it "should use custom rake binary" do
252
+ @cap.dump.should_receive(:fetch_rake).and_return('/custom/rake')
253
+ @cap.dump.should_receive(:run_remote).with("cd #{@remote_path}; /custom/rake -s dump:versions PROGRESS_TTY\\=\\+ RAILS_ENV\\=production SHOW_SIZE\\=true").and_return('')
254
+ @cap.find_and_execute_task("dump:remote:versions")
255
+ end
256
+ end
257
+
258
+ describe "cleanup" do
259
+ it "should call remote rake task" do
260
+ @cap.dump.should_receive(:run_remote).with("cd #{@remote_path}; rake -s dump:cleanup PROGRESS_TTY\\=\\+ RAILS_ENV\\=production").and_return('')
261
+ @cap.find_and_execute_task("dump:remote:cleanup")
262
+ end
263
+
264
+ test_passing_environment_variables(:remote, :cleanup, {
265
+ :like => "rake -s dump:cleanup LIKE\\=some\\ data PROGRESS_TTY\\=\\+ RAILS_ENV\\=production",
266
+ :tags => "rake -s dump:cleanup PROGRESS_TTY\\=\\+ RAILS_ENV\\=production TAGS\\=some\\ data",
267
+ :leave => "rake -s dump:cleanup LEAVE\\=some\\ data PROGRESS_TTY\\=\\+ RAILS_ENV\\=production",
268
+ })
269
+
270
+ it "should print result of rake task" do
271
+ @cap.dump.stub!(:run_remote).and_return("123123.tgz\n")
272
+ grab_output{
273
+ @cap.find_and_execute_task("dump:remote:cleanup")
274
+ }[:stdout].should == "123123.tgz\n"
275
+ end
276
+
277
+ it "should use custom rake binary" do
278
+ @cap.dump.should_receive(:fetch_rake).and_return('/custom/rake')
279
+ @cap.dump.should_receive(:run_remote).with("cd #{@remote_path}; /custom/rake -s dump:cleanup PROGRESS_TTY\\=\\+ RAILS_ENV\\=production").and_return('')
280
+ @cap.find_and_execute_task("dump:remote:cleanup")
281
+ end
282
+ end
283
+
284
+ describe "create" do
285
+ it "should raise if dump creation fails" do
286
+ @cap.dump.should_receive(:run_remote).with("cd #{@remote_path}; rake -s dump:create PROGRESS_TTY\\=\\+ RAILS_ENV\\=production TAGS\\=remote").and_return('')
287
+ proc{
288
+ @cap.find_and_execute_task("dump:remote:create")
289
+ }.should raise_error('Failed creating dump')
290
+ end
291
+
292
+ it "should call remote rake task with default rails_env and tag remote" do
293
+ @cap.dump.should_receive(:run_remote).with("cd #{@remote_path}; rake -s dump:create PROGRESS_TTY\\=\\+ RAILS_ENV\\=production TAGS\\=remote").and_return('123.tgz')
294
+ grab_output{
295
+ @cap.find_and_execute_task("dump:remote:create")
296
+ }
297
+ end
298
+
299
+ it "should call remote rake task with default rails_env and additional tag remote" do
300
+ @cap.dump.should_receive(:run_remote).with("cd #{@remote_path}; rake -s dump:create PROGRESS_TTY\\=\\+ RAILS_ENV\\=production TAGS\\=remote,photos").and_return('123.tgz')
301
+ grab_output{
302
+ DumpRake::Env.with_env :tags => 'photos' do
303
+ @cap.find_and_execute_task("dump:remote:create")
304
+ end
305
+ }
306
+ end
307
+
308
+ it "should call remote rake task with fetched rails_env and default DESC remote" do
309
+ @cap.dump.should_receive(:fetch_rails_env).and_return('dev')
310
+ @cap.dump.should_receive(:run_remote).with("cd #{@remote_path}; rake -s dump:create PROGRESS_TTY\\=\\+ RAILS_ENV\\=dev TAGS\\=remote").and_return('123.tgz')
311
+ grab_output{
312
+ @cap.find_and_execute_task("dump:remote:create")
313
+ }
314
+ end
315
+
316
+ test_passing_environment_variables(:remote, :create, {
317
+ :desc => "rake -s dump:create DESC\\=some\\ data PROGRESS_TTY\\=\\+ RAILS_ENV\\=production TAGS\\=remote",
318
+ :tags => "rake -s dump:create PROGRESS_TTY\\=\\+ RAILS_ENV\\=production TAGS\\=remote,some\\ data",
319
+ :assets => "rake -s dump:create ASSETS\\=some\\ data PROGRESS_TTY\\=\\+ RAILS_ENV\\=production TAGS\\=remote",
320
+ :tables => "rake -s dump:create PROGRESS_TTY\\=\\+ RAILS_ENV\\=production TABLES\\=some\\ data TAGS\\=remote",
321
+ }, :return_value => '123.tgz')
322
+
323
+ it "should print result of rake task" do
324
+ @cap.dump.stub!(:run_remote).and_return("123123.tgz\n")
325
+ grab_output{
326
+ @cap.find_and_execute_task("dump:remote:create")
327
+ }[:stdout].should == "123123.tgz\n"
328
+ end
329
+
330
+ it "should return stripped result of rake task" do
331
+ @cap.dump.stub!(:run_remote).and_return("123123.tgz\n")
332
+ grab_output{
333
+ @cap.find_and_execute_task("dump:remote:create").should == "123123.tgz"
334
+ }
335
+ end
336
+
337
+ it "should use custom rake binary" do
338
+ @cap.dump.should_receive(:fetch_rake).and_return('/custom/rake')
339
+ @cap.dump.should_receive(:run_remote).with("cd #{@remote_path}; /custom/rake -s dump:create PROGRESS_TTY\\=\\+ RAILS_ENV\\=production TAGS\\=remote").and_return('123.tgz')
340
+ grab_output{
341
+ @cap.find_and_execute_task("dump:remote:create")
342
+ }
343
+ end
344
+ end
345
+
346
+ describe "restore" do
347
+ it "should call remote rake task with default rails_env" do
348
+ @cap.dump.should_receive(:run_remote).with("cd #{@remote_path}; rake -s dump:restore PROGRESS_TTY\\=\\+ RAILS_ENV\\=production")
349
+ @cap.find_and_execute_task("dump:remote:restore")
350
+ end
351
+
352
+ it "should call remote rake task with fetched rails_env" do
353
+ @cap.dump.should_receive(:fetch_rails_env).and_return('dev')
354
+ @cap.dump.should_receive(:run_remote).with("cd #{@remote_path}; rake -s dump:restore PROGRESS_TTY\\=\\+ RAILS_ENV\\=dev")
355
+ @cap.find_and_execute_task("dump:remote:restore")
356
+ end
357
+
358
+ test_passing_environment_variables(:remote, :restore, {
359
+ :like => "rake -s dump:restore LIKE\\=some\\ data PROGRESS_TTY\\=\\+ RAILS_ENV\\=production",
360
+ :tags => "rake -s dump:restore PROGRESS_TTY\\=\\+ RAILS_ENV\\=production TAGS\\=some\\ data",
361
+ :migrate_down => "rake -s dump:restore MIGRATE_DOWN\\=some\\ data PROGRESS_TTY\\=\\+ RAILS_ENV\\=production",
362
+ :restore_schema => "rake -s dump:restore PROGRESS_TTY\\=\\+ RAILS_ENV\\=production RESTORE_SCHEMA\\=some\\ data",
363
+ :restore_tables => "rake -s dump:restore PROGRESS_TTY\\=\\+ RAILS_ENV\\=production RESTORE_TABLES\\=some\\ data",
364
+ :restore_assets => "rake -s dump:restore PROGRESS_TTY\\=\\+ RAILS_ENV\\=production RESTORE_ASSETS\\=some\\ data",
365
+ })
366
+
367
+ it "should use custom rake binary" do
368
+ @cap.dump.should_receive(:fetch_rake).and_return('/custom/rake')
369
+ @cap.dump.should_receive(:run_remote).with("cd #{@remote_path}; /custom/rake -s dump:restore PROGRESS_TTY\\=\\+ RAILS_ENV\\=production")
370
+ @cap.find_and_execute_task("dump:remote:restore")
371
+ end
372
+ end
373
+
374
+ describe "download" do
375
+ it "should run rake versions to get avaliable versions" do
376
+ @cap.dump.should_receive(:run_remote).with("cd #{@remote_path}; rake -s dump:versions PROGRESS_TTY\\=\\+ RAILS_ENV\\=production").and_return('')
377
+ @cap.find_and_execute_task("dump:remote:download")
378
+ end
379
+
380
+ it "should block sending summary to versions" do
381
+ @cap.dump.should_receive(:run_remote).with("cd #{@remote_path}; rake -s dump:versions PROGRESS_TTY\\=\\+ RAILS_ENV\\=production").and_return('')
382
+ DumpRake::Env::DICTIONARY[:summary].each do |name|
383
+ DumpRake::Env.with_env name => 'true' do
384
+ @cap.find_and_execute_task("dump:remote:download")
385
+ end
386
+ end
387
+ end
388
+
389
+ test_passing_environment_variables(:remote, :transfer, {
390
+ :like => "rake -s dump:versions LIKE\\=some\\ data PROGRESS_TTY\\=\\+ RAILS_ENV\\=production",
391
+ :tags => "rake -s dump:versions PROGRESS_TTY\\=\\+ RAILS_ENV\\=production TAGS\\=some\\ data",
392
+ :summary => "rake -s dump:versions PROGRESS_TTY\\=\\+ RAILS_ENV\\=production", # block sending summary to versions
393
+ :transfer_via => "rake -s dump:versions PROGRESS_TTY\\=\\+ RAILS_ENV\\=production", # tranfer_via is used internally
394
+ }, :cap_task => "dump:remote:download")
395
+
396
+ it "should not download anything if there are no versions avaliable" do
397
+ @cap.dump.stub!(:run_remote).and_return('')
398
+ @cap.dump.should_not_receive(:do_transfer)
399
+ @cap.find_and_execute_task("dump:remote:download")
400
+ end
401
+
402
+ it "should transfer latest version dump" do
403
+ @cap.dump.stub!(:run_remote).and_return("100.tgz\n200.tgz\n300.tgz\n")
404
+ @cap.dump.should_receive(:do_transfer).with(:down, "#{@remote_path}/dump/300.tgz", "dump/300.tgz")
405
+ FileUtils.stub!(:mkpath)
406
+ @cap.find_and_execute_task("dump:remote:download")
407
+ end
408
+
409
+ it "should handle extra spaces around file names" do
410
+ @cap.dump.stub!(:run_remote).and_return("\r\n\r\n\r 100.tgz \r\n\r\n\r 200.tgz \r\n\r\n\r 300.tgz \r\n\r\n\r ")
411
+ @cap.dump.should_receive(:do_transfer).with(:down, "#{@remote_path}/dump/300.tgz", "dump/300.tgz")
412
+ FileUtils.stub!(:mkpath)
413
+ @cap.find_and_execute_task("dump:remote:download")
414
+ end
415
+
416
+ it "should create local dump dir" do
417
+ @cap.dump.stub!(:run_remote).and_return("100.tgz\n200.tgz\n300.tgz\n")
418
+ @cap.dump.stub!(:do_transfer)
419
+ FileUtils.should_receive(:mkpath).with('dump')
420
+ @cap.find_and_execute_task("dump:remote:download")
421
+ end
422
+
423
+ it "should run rake versions use custom rake binary" do
424
+ @cap.dump.should_receive(:fetch_rake).and_return('/custom/rake')
425
+ @cap.dump.should_receive(:run_remote).with("cd #{@remote_path}; /custom/rake -s dump:versions PROGRESS_TTY\\=\\+ RAILS_ENV\\=production").and_return('')
426
+ @cap.find_and_execute_task("dump:remote:download")
427
+ end
428
+ end
429
+ end
430
+
431
+ describe "mirror" do
432
+ {"up" => [:local, :remote], "down" => [:remote, :local]}.each do |dir, way|
433
+ src = way[0]
434
+ dst = way[1]
435
+ describe name do
436
+ it "should create auto-backup with tag auto-backup" do
437
+ @cap.dump.namespaces[dst].should_receive(:create){ DumpRake::Env[:tags].should == 'auto-backup'; '' }
438
+ @cap.find_and_execute_task("dump:mirror:#{dir}")
439
+ end
440
+
441
+ it "should create auto-backup with additional tag auto-backup" do
442
+ @cap.dump.namespaces[dst].should_receive(:create){ DumpRake::Env[:tags].should == 'auto-backup,photos'; '' }
443
+ DumpRake::Env.with_env :tags => 'photos' do
444
+ @cap.find_and_execute_task("dump:mirror:#{dir}")
445
+ end
446
+ end
447
+
448
+ it "should not call local:create if auto-backup fails" do
449
+ @cap.dump.namespaces[dst].stub!(:create).and_return('')
450
+ @cap.dump.namespaces[src].should_not_receive(:create)
451
+ @cap.find_and_execute_task("dump:mirror:#{dir}")
452
+ end
453
+
454
+ it "should call local:create if auto-backup succeedes with tags mirror and mirror-#{dir}" do
455
+ @cap.dump.namespaces[dst].stub!(:create).and_return('123.tgz')
456
+ @cap.dump.namespaces[src].should_receive(:create){ DumpRake::Env[:tags].should == "mirror"; '' }
457
+ @cap.find_and_execute_task("dump:mirror:#{dir}")
458
+ end
459
+
460
+ it "should call local:create if auto-backup succeedes with additional tags mirror and mirror-#{dir}" do
461
+ @cap.dump.namespaces[dst].stub!(:create).and_return('123.tgz')
462
+ @cap.dump.namespaces[src].should_receive(:create){ DumpRake::Env[:tags].should == "mirror,photos"; '' }
463
+ DumpRake::Env.with_env :tags => 'photos' do
464
+ @cap.find_and_execute_task("dump:mirror:#{dir}")
465
+ end
466
+ end
467
+
468
+ it "should not call local:upload or remote:restore if local:create fails" do
469
+ @cap.dump.namespaces[dst].stub!(:create).and_return('123.tgz')
470
+ @cap.dump.namespaces[src].stub!(:create).and_return('')
471
+ @cap.dump.namespaces[src].should_not_receive(:upload)
472
+ @cap.dump.namespaces[dst].should_not_receive(:restore)
473
+ @cap.find_and_execute_task("dump:mirror:#{dir}")
474
+ end
475
+
476
+ it "should call local:upload and remote:restore with only varibale ver set to file name if local:create returns file name" do
477
+ @cap.dump.namespaces[dst].stub!(:create).and_return('123.tgz')
478
+ @cap.dump.namespaces[src].stub!(:create).and_return('123.tgz')
479
+ test_env = proc{
480
+ DumpRake::Env[:like].should == '123.tgz'
481
+ DumpRake::Env[:tags].should == nil
482
+ DumpRake::Env[:desc].should == nil
483
+ }
484
+ @cap.dump.namespaces[src].should_receive(:"#{dir}load").ordered(&test_env)
485
+ @cap.dump.namespaces[dst].should_receive(:restore).ordered(&test_env)
486
+ DumpRake::Env.with_env all_dictionary_variables do
487
+ @cap.find_and_execute_task("dump:mirror:#{dir}")
488
+ end
489
+ end
490
+ end
491
+ end
492
+ end
493
+
494
+ describe "backup" do
495
+ it "should call remote:create" do
496
+ @cap.dump.remote.should_receive(:create).and_return('')
497
+ @cap.find_and_execute_task("dump:backup")
498
+ end
499
+
500
+ it "should not call remote:download if remote:create returns blank" do
501
+ @cap.dump.remote.stub!(:create).and_return('')
502
+ @cap.dump.remote.should_not_receive(:download)
503
+ @cap.find_and_execute_task("dump:backup")
504
+ end
505
+
506
+ it "should call remote:download if remote:create returns file name" do
507
+ @cap.dump.remote.stub!(:create).and_return('123.tgz')
508
+ @cap.dump.remote.should_receive(:download).ordered
509
+ @cap.find_and_execute_task("dump:backup")
510
+ end
511
+
512
+ it "should call remote:create with tag backup" do
513
+ def (@cap.dump.remote).create
514
+ DumpRake::Env[:tags].should == 'backup'
515
+ ''
516
+ end
517
+ @cap.find_and_execute_task("dump:backup")
518
+ end
519
+
520
+ it "should call remote:create with additional tag backup" do
521
+ def (@cap.dump.remote).create
522
+ DumpRake::Env[:tags].should == 'backup,photos'
523
+ ''
524
+ end
525
+ DumpRake::Env.with_env :tags => 'photos' do
526
+ @cap.find_and_execute_task("dump:backup")
527
+ end
528
+ end
529
+
530
+ it "should pass description if it is set" do
531
+ def (@cap.dump.remote).create
532
+ DumpRake::Env[:desc].should == 'remote dump'
533
+ ''
534
+ end
535
+ DumpRake::Env.with_env :desc => 'remote dump' do
536
+ @cap.find_and_execute_task("dump:backup")
537
+ end
538
+ end
539
+
540
+ it "should send only ver variable" do
541
+ @cap.dump.remote.stub!(:create).and_return('123.tgz')
542
+ def (@cap.dump.remote).download
543
+ DumpRake::Env[:like].should == '123.tgz'
544
+ DumpRake::Env[:tags].should == nil
545
+ DumpRake::Env[:desc].should == nil
546
+ ''
547
+ end
548
+ DumpRake::Env.with_env all_dictionary_variables do
549
+ @cap.find_and_execute_task("dump:backup")
550
+ end
551
+ end
552
+ end
553
+ end