heirloom 0.6.1 → 0.7.0rc1

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 (57) hide show
  1. data/CHANGELOG +11 -1
  2. data/lib/heirloom/acl/s3.rb +1 -1
  3. data/lib/heirloom/archive/authorizer.rb +1 -1
  4. data/lib/heirloom/archive/builder.rb +1 -3
  5. data/lib/heirloom/archive/destroyer.rb +2 -19
  6. data/lib/heirloom/archive/lister.rb +1 -1
  7. data/lib/heirloom/archive/reader.rb +1 -1
  8. data/lib/heirloom/archive/teardowner.rb +48 -0
  9. data/lib/heirloom/archive/verifier.rb +2 -2
  10. data/lib/heirloom/archive.rb +16 -3
  11. data/lib/heirloom/aws/s3.rb +8 -4
  12. data/lib/heirloom/aws/simpledb.rb +6 -1
  13. data/lib/heirloom/catalog/add.rb +31 -0
  14. data/lib/heirloom/catalog/delete.rb +37 -0
  15. data/lib/heirloom/catalog/list.rb +22 -0
  16. data/lib/heirloom/catalog/setup.rb +30 -0
  17. data/lib/heirloom/catalog/show.rb +35 -0
  18. data/lib/heirloom/catalog/verify.rb +39 -0
  19. data/lib/heirloom/catalog.rb +65 -0
  20. data/lib/heirloom/cli/authorize.rb +4 -4
  21. data/lib/heirloom/cli/catalog.rb +62 -0
  22. data/lib/heirloom/cli/destroy.rb +4 -4
  23. data/lib/heirloom/cli/download.rb +24 -13
  24. data/lib/heirloom/cli/list.rb +2 -2
  25. data/lib/heirloom/cli/setup.rb +21 -6
  26. data/lib/heirloom/cli/shared.rb +12 -3
  27. data/lib/heirloom/cli/show.rb +3 -3
  28. data/lib/heirloom/cli/tag.rb +3 -3
  29. data/lib/heirloom/cli/teardown.rb +75 -0
  30. data/lib/heirloom/cli/upload.rb +17 -26
  31. data/lib/heirloom/cli.rb +7 -1
  32. data/lib/heirloom/directory/directory.rb +1 -1
  33. data/lib/heirloom/version.rb +1 -1
  34. data/lib/heirloom.rb +7 -6
  35. data/spec/acl/s3_spec.rb +2 -7
  36. data/spec/archive/destroyer_spec.rb +4 -17
  37. data/spec/archive/lister_spec.rb +1 -1
  38. data/spec/archive/reader_spec.rb +9 -9
  39. data/spec/archive/teardowner_spec.rb +42 -0
  40. data/spec/archive_spec.rb +23 -3
  41. data/spec/aws/s3_spec.rb +5 -0
  42. data/spec/aws/simpledb_spec.rb +13 -3
  43. data/spec/catalog/add_spec.rb +28 -0
  44. data/spec/catalog/delete_spec.rb +35 -0
  45. data/spec/catalog/list_spec.rb +21 -0
  46. data/spec/catalog/setup_spec.rb +29 -0
  47. data/spec/catalog/show_spec.rb +32 -0
  48. data/spec/catalog/verify_spec.rb +47 -0
  49. data/spec/catalog_spec.rb +63 -0
  50. data/spec/cli/catalog_spec.rb +42 -0
  51. data/spec/cli/destroy_spec.rb +1 -1
  52. data/spec/cli/download_spec.rb +68 -26
  53. data/spec/cli/setup_spec.rb +11 -4
  54. data/spec/cli/shared_spec.rb +23 -0
  55. data/spec/cli/teardown_spec.rb +52 -0
  56. data/spec/cli/upload_spec.rb +6 -5
  57. metadata +44 -17
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe Heirloom::Teardowner do
4
+ before do
5
+ @regions = ['us-west-1', 'us-west-2']
6
+ @logger_stub = stub 'logger', :info => true, :debug => true
7
+ @config_stub = stub 'config', :logger => @logger_stub,
8
+ :metadata_region => 'us-west-1'
9
+ @verifier_stub = stub :bucket_exists? => true,
10
+ :domain_exists? => true
11
+ @teardowner = Heirloom::Teardowner.new :config => @config_stub,
12
+ :name => 'archive'
13
+ Heirloom::Verifier.stub :new => @verifier_stub
14
+ end
15
+
16
+ it "should delete the buckets" do
17
+ @s3_mock1 = mock 's31'
18
+ @s3_mock2 = mock 's32'
19
+ Heirloom::AWS::S3.should_receive(:new).
20
+ with(:config => @config_stub,
21
+ :region => 'us-west-1').
22
+ and_return @s3_mock1
23
+ Heirloom::AWS::S3.should_receive(:new).
24
+ with(:config => @config_stub,
25
+ :region => 'us-west-2').
26
+ and_return @s3_mock2
27
+ @s3_mock1.should_receive(:delete_bucket).with('base-us-west-1')
28
+ @s3_mock2.should_receive(:delete_bucket).with('base-us-west-2')
29
+ @teardowner.delete_buckets :regions => @regions,
30
+ :bucket_prefix => 'base'
31
+ end
32
+
33
+ it "should delete the domain" do
34
+ @sdb_mock = mock 'sdb'
35
+ Heirloom::AWS::SimpleDB.should_receive(:new).
36
+ with(:config => @config_stub).
37
+ and_return @sdb_mock
38
+ @sdb_mock.should_receive(:delete_domain).
39
+ with 'heirloom_archive'
40
+ @teardowner.delete_domain
41
+ end
42
+ end
data/spec/archive_spec.rb CHANGED
@@ -164,9 +164,8 @@ describe Heirloom do
164
164
  :id => '123').
165
165
  and_return destroyer_mock
166
166
  destroyer_mock.should_receive(:destroy).
167
- with(:regions => ['us-west-1', 'us-west-2'],
168
- :keep_domain => false)
169
- @archive.destroy :keep_domain => false
167
+ with :regions => ['us-west-1', 'us-west-2']
168
+ @archive.destroy
170
169
  end
171
170
 
172
171
  it "should call the regions method for an archive" do
@@ -190,5 +189,26 @@ describe Heirloom do
190
189
  mock.should_receive(:count)
191
190
  @archive.count
192
191
  end
192
+
193
+ it "should call the delete_buckets on teardowner" do
194
+ mock = double('Mock')
195
+ Heirloom::Teardowner.should_receive(:new).
196
+ with(:config => @config_mock,
197
+ :name => 'chef').
198
+ and_return mock
199
+ mock.should_receive(:delete_buckets).with :regions => ['us-west-1']
200
+ @archive.delete_buckets :regions => ['us-west-1']
201
+ end
202
+
203
+ it "should call the delete_domain on teardowner" do
204
+ mock = double('Mock')
205
+ Heirloom::Teardowner.should_receive(:new).
206
+ with(:config => @config_mock,
207
+ :name => 'chef').
208
+ and_return mock
209
+ mock.should_receive(:delete_domain)
210
+ @archive.delete_domain
211
+ end
212
+
193
213
  end
194
214
  end
data/spec/aws/s3_spec.rb CHANGED
@@ -27,6 +27,11 @@ describe Heirloom do
27
27
  @s3.get_bucket 'bucket'
28
28
  end
29
29
 
30
+ it "should delete a bucket from s3" do
31
+ @fog_mock.should_receive(:delete_bucket).with 'bucket'
32
+ @s3.delete_bucket 'bucket'
33
+ end
34
+
30
35
  it "should get an object from s3" do
31
36
  body_mock = mock 'body'
32
37
  @fog_mock.should_receive(:get_object).
@@ -56,7 +56,7 @@ describe Heirloom do
56
56
  body_mock = mock 'return body'
57
57
  data = { 'Items' => { 'Domain' => { 'Count' => ['1'] } } }
58
58
  @fog_mock.should_receive(:select).
59
- with('SELECT count(*) FROM heirloom_domain').
59
+ with('SELECT count(*) FROM `heirloom_domain`').
60
60
  and_return body_mock
61
61
  body_mock.should_receive(:body).and_return data
62
62
  @sdb.count('heirloom_domain').should == 1
@@ -66,7 +66,7 @@ describe Heirloom do
66
66
  body_mock = mock 'return body'
67
67
  data = { 'Items' => { 'Domain' => { 'Count' => ['0'] } } }
68
68
  @fog_mock.should_receive(:select).
69
- with('SELECT count(*) FROM heirloom_domain').
69
+ with('SELECT count(*) FROM `heirloom_domain`').
70
70
  and_return body_mock
71
71
  body_mock.should_receive(:body).and_return data
72
72
  @sdb.domain_empty?('heirloom_domain').should be_true
@@ -76,10 +76,20 @@ describe Heirloom do
76
76
  body_mock = mock 'return body'
77
77
  data = { 'Items' => { 'Domain' => { 'Count' => ['50'] } } }
78
78
  @fog_mock.should_receive(:select).
79
- with('SELECT count(*) FROM heirloom_domain').
79
+ with('SELECT count(*) FROM `heirloom_domain`').
80
80
  and_return body_mock
81
81
  body_mock.should_receive(:body).and_return data
82
82
  @sdb.domain_empty?('heirloom_domain').should be_false
83
83
  end
84
84
 
85
+ it "should return the count for a specific itemName within a domain" do
86
+ body_mock = mock 'return body'
87
+ data = { 'Items' => { 'Domain' => { 'Count' => ['1'] } } }
88
+ @fog_mock.should_receive(:select).
89
+ with("SELECT count(*) FROM `heirloom` WHERE itemName() = 'archive'").
90
+ and_return body_mock
91
+ body_mock.should_receive(:body).and_return data
92
+ @sdb.item_count('heirloom', 'archive').should == 1
93
+ end
94
+
85
95
  end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe Heirloom::Catalog::Add do
4
+
5
+ before do
6
+ @regions = ['us-west-1', 'us-west-2']
7
+ @base = 'base'
8
+ @logger_stub = stub 'logger', :info => true
9
+ @config_stub = stub 'config', :logger => @logger_stub
10
+ @add = Heirloom::Catalog::Add.new :config => @config_stub,
11
+ :name => 'new_archive'
12
+ end
13
+
14
+ it "should call sdb to add the entry to the catalog" do
15
+ @sdb_mock = mock 'sdb'
16
+ Heirloom::AWS::SimpleDB.should_receive(:new).
17
+ with(:config => @config_stub).
18
+ and_return @sdb_mock
19
+ @sdb_mock.should_receive(:put_attributes).
20
+ with 'heirloom',
21
+ 'heirloom_new_archive',
22
+ { "regions" => @regions,
23
+ "base" => @base }
24
+ @add.add_to_catalog :regions => @regions,
25
+ :base => @base
26
+ end
27
+
28
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe Heirloom::Catalog::Delete do
4
+
5
+ before do
6
+ @logger_stub = stub 'logger', :info => true
7
+ @config_stub = stub 'config', :logger => @logger_stub
8
+ @verify_mock = mock 'verify'
9
+ Heirloom::Catalog::Verify.should_receive(:new).
10
+ with(:config => @config_stub).
11
+ and_return @verify_mock
12
+ @delete = Heirloom::Catalog::Delete.new :config => @config_stub,
13
+ :name => 'old_archive'
14
+ end
15
+
16
+ it "should delete the entry from the catalog" do
17
+ @verify_mock.should_receive(:catalog_domain_exists?).
18
+ and_return true
19
+ @sdb_mock = mock 'sdb'
20
+ Heirloom::AWS::SimpleDB.should_receive(:new).
21
+ with(:config => @config_stub).
22
+ and_return @sdb_mock
23
+ @sdb_mock.should_receive(:delete).
24
+ with('heirloom', 'heirloom_old_archive').
25
+ and_return true
26
+ @delete.delete_from_catalog.should be_true
27
+ end
28
+
29
+ it "should return false if an entry does not exist in catalog" do
30
+ @verify_mock.should_receive(:catalog_domain_exists?).
31
+ and_return false
32
+ @delete.delete_from_catalog.should be_false
33
+ end
34
+
35
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Heirloom::Catalog::List do
4
+
5
+ before do
6
+ @config_stub = stub 'config'
7
+ @sdb_mock = mock 'sdb'
8
+ Heirloom::AWS::SimpleDB.should_receive(:new).
9
+ with(:config => @config_stub).
10
+ and_return @sdb_mock
11
+ @list = Heirloom::Catalog::List.new :config => @config_stub
12
+ end
13
+
14
+ it "should list all heirlooms in the catalog" do
15
+ @sdb_mock.should_receive(:select).
16
+ with("SELECT * FROM heirloom").
17
+ and_return 'result'
18
+ @list.all.should == 'result'
19
+ end
20
+
21
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe Heirloom::Catalog::Setup do
4
+
5
+ before do
6
+ @logger_stub = stub 'logger', :info => true
7
+ @config_stub = stub 'config', :logger => @logger_stub,
8
+ :metadata_region => 'us-west-1'
9
+ @verify_mock = mock 'verify'
10
+ Heirloom::Catalog::Verify.should_receive(:new).
11
+ with(:config => @config_stub).
12
+ and_return @verify_mock
13
+ @setup = Heirloom::Catalog::Setup.new :config => @config_stub,
14
+ :name => 'new_archive'
15
+ end
16
+
17
+ it "should call sdb to create the catalog domain" do
18
+ @verify_mock.should_receive(:catalog_domain_exists?).
19
+ and_return false
20
+ @sdb_mock = mock 'sdb'
21
+ Heirloom::AWS::SimpleDB.should_receive(:new).
22
+ with(:config => @config_stub).
23
+ and_return @sdb_mock
24
+ @sdb_mock.should_receive(:create_domain).
25
+ with 'heirloom'
26
+ @setup.create_catalog_domain
27
+ end
28
+
29
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe Heirloom::Catalog::Show do
4
+
5
+ before do
6
+ @config_stub = stub 'config'
7
+ @sdb_mock = mock 'sdb'
8
+ Heirloom::AWS::SimpleDB.should_receive(:new).
9
+ with(:config => @config_stub).
10
+ and_return @sdb_mock
11
+ @show = Heirloom::Catalog::Show.new :config => @config_stub,
12
+ :name => 'a_archive'
13
+ end
14
+
15
+ it "should return the base" do
16
+ result = { 'heirloom_a_archive' => { 'base' => [ 'thebase' ] } }
17
+ @sdb_mock.should_receive(:select).
18
+ with("select base from heirloom where itemName() = 'heirloom_a_archive'").
19
+ and_return result
20
+ @show.base.should == 'thebase'
21
+ end
22
+
23
+ it "should return the regions" do
24
+ regions = ['us-west-1', 'us-west-2']
25
+ result = { 'heirloom_a_archive' => { 'regions' => @regions } }
26
+ @sdb_mock.should_receive(:select).
27
+ with("select regions from heirloom where itemName() = 'heirloom_a_archive'").
28
+ and_return result
29
+ @show.regions.should == @regions
30
+ end
31
+
32
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe Heirloom::Catalog::Verify do
4
+
5
+ before do
6
+ @sdb_mock = mock 'sdb'
7
+ @logger_stub = stub 'logger', :info => true,
8
+ :debug => true
9
+ @config_stub = stub 'config', :logger => @logger_stub,
10
+ :metadata_region => 'us-west-1'
11
+ Heirloom::AWS::SimpleDB.should_receive(:new).
12
+ with(:config => @config_stub).
13
+ and_return @sdb_mock
14
+ @verify = Heirloom::Catalog::Verify.new :config => @config_stub,
15
+ :name => 'a_archive'
16
+
17
+ end
18
+
19
+ context "testing catalog_domain_exists" do
20
+ it "should return true if heirloom domain exists" do
21
+ @sdb_mock.should_receive(:domain_exists?).
22
+ with('heirloom').and_return true
23
+ @verify.catalog_domain_exists?.should be_true
24
+ end
25
+
26
+ it "should return false if heirloom domain does not exists" do
27
+ @sdb_mock.should_receive(:domain_exists?).
28
+ with('heirloom').and_return false
29
+ @verify.catalog_domain_exists?.should be_false
30
+ end
31
+ end
32
+
33
+ context "testing entry_exists_in_catalog?" do
34
+ it "should return true if an entry exists in catalog" do
35
+ @sdb_mock.should_receive(:item_count).
36
+ with('heirloom', 'heirloom_a_archive').and_return 1
37
+ @verify.entry_exists_in_catalog?('a_archive').should be_true
38
+ end
39
+
40
+ it "should return false if an entry does not exist in catalog" do
41
+ @sdb_mock.should_receive(:item_count).
42
+ with('heirloom', 'heirloom_a_archive').and_return 0
43
+ @verify.entry_exists_in_catalog?('a_archive').should be_false
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+
3
+ describe Heirloom::Catalog do
4
+
5
+ before do
6
+ @config_mock = mock 'catalog'
7
+ @regions = ['us-west-1', 'us-west-2']
8
+ @base = 'thebase'
9
+ @catalog = Heirloom::Catalog.new :config => @config_mock,
10
+ :name => 'new_archive'
11
+ end
12
+
13
+ context "testing add" do
14
+ it "should call setup to create catalog_domain" do
15
+ @catalog_setup_mock = mock 'setup'
16
+ Heirloom::Catalog::Setup.should_receive(:new).
17
+ with(:config => @config_mock).
18
+ and_return @catalog_setup_mock
19
+ @catalog_setup_mock.should_receive(:create_catalog_domain).
20
+ and_return true
21
+ @catalog.create_catalog_domain.should be_true
22
+ end
23
+ end
24
+
25
+ context "testing setup" do
26
+ it "should call setup to add_to_catalog" do
27
+ @catalog_add_mock = mock 'add'
28
+ Heirloom::Catalog::Add.should_receive(:new).
29
+ with(:config => @config_mock,
30
+ :name => 'new_archive').
31
+ and_return @catalog_add_mock
32
+ @catalog_add_mock.should_receive(:add_to_catalog).
33
+ with(:base => @base,
34
+ :regions => @regions).
35
+ and_return true
36
+ @catalog.add_to_catalog(:base => @base,
37
+ :regions => @regions).
38
+ should be_true
39
+ end
40
+ end
41
+
42
+ context "testing show" do
43
+ before do
44
+ @catalog_show_mock = mock 'show'
45
+ Heirloom::Catalog::Show.should_receive(:new).
46
+ with(:config => @config_mock,
47
+ :name => 'new_archive').
48
+ and_return @catalog_show_mock
49
+ end
50
+ it "should call regions from show object" do
51
+ @catalog_show_mock.should_receive(:regions).
52
+ and_return @regions
53
+ @catalog.regions.should == @regions
54
+ end
55
+
56
+ it "should call base from the show object" do
57
+ @catalog_show_mock.should_receive(:base).
58
+ and_return @base
59
+ @catalog.base.should == @base
60
+ end
61
+ end
62
+
63
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+ require 'heirloom/cli'
3
+
4
+ describe Heirloom do
5
+
6
+ before do
7
+ options = { :level => 'info',
8
+ :metadata_region => 'us-west-1',
9
+ :details => true }
10
+ @result = { 'heirloom_test' =>
11
+ { 'regions' => ['us-west-1'],
12
+ 'base' => ['base'] } }
13
+ @logger_stub = stub :debug => true
14
+ @config_mock = mock 'config'
15
+ @catalog_mock = mock 'catalog'
16
+ @config_mock.stub :logger => @logger_mock,
17
+ :access_key => 'key',
18
+ :secret_key => 'secret',
19
+ :metadata_region => 'us-west-1'
20
+ Trollop.stub(:options).and_return options
21
+ Heirloom::HeirloomLogger.should_receive(:new).with(:log_level => 'info').
22
+ and_return @logger_stub
23
+ Heirloom::CLI::Catalog.any_instance.should_receive(:load_config).
24
+ with(:logger => @logger_stub,
25
+ :opts => options).
26
+ and_return @config_mock
27
+ Heirloom::Catalog.should_receive(:new).
28
+ with(:config => @config_mock).
29
+ and_return @catalog_mock
30
+ @cli_catalog = Heirloom::CLI::Catalog.new
31
+ end
32
+
33
+ it "should list the details about all heirlooms in the catalog" do
34
+ @catalog_mock.should_receive(:all).and_return @result
35
+ formated_result = { 'test' =>
36
+ { 'regions' => ['us-west-1'],
37
+ 'base' => ['base'] } }
38
+ @cli_catalog.should_receive(:jj).with formated_result
39
+ @cli_catalog.list
40
+ end
41
+
42
+ end
@@ -37,7 +37,7 @@ describe Heirloom do
37
37
  end
38
38
 
39
39
  it "should destroy an archive" do
40
- @archive_mock.should_receive(:destroy).with :keep_domain => false
40
+ @archive_mock.should_receive(:destroy)
41
41
  @cli_destroy.destroy
42
42
  end
43
43
 
@@ -4,14 +4,6 @@ require 'heirloom/cli'
4
4
  describe Heirloom do
5
5
 
6
6
  before do
7
- options = { :name => 'archive_name',
8
- :id => '1.0.0',
9
- :level => 'info',
10
- :output => '/tmp/test123',
11
- :region => 'us-east-1',
12
- :extract => false,
13
- :metadata_region => 'us-west-1',
14
- :base => 'base' }
15
7
  @logger_stub = stub 'logger'
16
8
  @config_mock = mock 'config'
17
9
  @archive_mock = mock 'archive'
@@ -19,34 +11,84 @@ describe Heirloom do
19
11
  :access_key => 'key',
20
12
  :secret_key => 'secret',
21
13
  :metadata_region => 'us-west-1'
22
- Trollop.stub(:options).and_return options
23
14
  Heirloom::HeirloomLogger.should_receive(:new).
24
15
  with(:log_level => 'info').
25
16
  and_return @logger_stub
26
- Heirloom::CLI::Download.any_instance.should_receive(:load_config).
27
- with(:logger => @logger_stub,
28
- :opts => options).
29
- and_return @config_mock
30
17
  Heirloom::Archive.should_receive(:new).
31
18
  with(:id => '1.0.0',
32
19
  :name => 'archive_name',
33
20
  :config => @config_mock).
34
21
  and_return @archive_mock
35
- @cli_download = Heirloom::CLI::Download.new
36
22
  end
37
23
 
38
- it "should download an archive" do
39
- @archive_mock.should_receive(:download).with(:output => '/tmp/test123',
40
- :region => 'us-east-1',
41
- :base_prefix => 'base',
42
- :extract => false,
43
- :secret => nil).
44
- and_return '/tmp/test123'
45
- @cli_download.should_receive(:ensure_directory).
46
- with(:config => @config_mock,
47
- :path => '/tmp/test123').
48
- and_return true
49
- @cli_download.download
24
+ context "with region and base specified" do
25
+ before do
26
+ options = { :name => 'archive_name',
27
+ :id => '1.0.0',
28
+ :base => 'base',
29
+ :region => 'us-east-1',
30
+ :level => 'info',
31
+ :output => '/tmp/test123',
32
+ :extract => false,
33
+ :metadata_region => 'us-west-1' }
34
+ Trollop.stub(:options).and_return options
35
+ Heirloom::CLI::Download.any_instance.should_receive(:load_config).
36
+ with(:logger => @logger_stub,
37
+ :opts => options).
38
+ and_return @config_mock
39
+ @cli_download = Heirloom::CLI::Download.new
40
+ end
41
+
42
+ it "should download an archive" do
43
+ @archive_mock.should_receive(:download).with(:output => '/tmp/test123',
44
+ :region => 'us-east-1',
45
+ :base_prefix => 'base',
46
+ :extract => false,
47
+ :secret => nil).
48
+ and_return '/tmp/test123'
49
+ @cli_download.should_receive(:ensure_directory).
50
+ with(:config => @config_mock,
51
+ :path => '/tmp/test123').
52
+ and_return true
53
+ @cli_download.download
54
+ end
55
+ end
56
+
57
+ context "region and base not specified" do
58
+ before do
59
+ @catalog_stub = stub 'catalog', :regions => ['us-east-1', 'us-west-1'],
60
+ :base => 'base'
61
+ options = { :name => 'archive_name',
62
+ :id => '1.0.0',
63
+ :level => 'info',
64
+ :output => '/tmp/test123',
65
+ :extract => false,
66
+ :metadata_region => 'us-west-1' }
67
+ Trollop.stub(:options).and_return options
68
+ Heirloom::CLI::Download.any_instance.should_receive(:load_config).
69
+ with(:logger => @logger_stub,
70
+ :opts => options).
71
+ and_return @config_mock
72
+ Heirloom::Catalog.should_receive(:new).
73
+ with(:name => 'archive_name',
74
+ :config => @config_mock).
75
+ and_return @catalog_stub
76
+ @cli_download = Heirloom::CLI::Download.new
77
+ end
78
+
79
+ it "should download the archive from the first region" do
80
+ @archive_mock.should_receive(:download).with(:output => '/tmp/test123',
81
+ :region => 'us-east-1',
82
+ :base_prefix => 'base',
83
+ :extract => false,
84
+ :secret => nil).
85
+ and_return '/tmp/test123'
86
+ @cli_download.should_receive(:ensure_directory).
87
+ with(:config => @config_mock,
88
+ :path => '/tmp/test123').
89
+ and_return true
90
+ @cli_download.download
91
+ end
50
92
  end
51
93
 
52
94
  end
@@ -18,6 +18,7 @@ describe Heirloom do
18
18
  :secret_key => 'secret',
19
19
  :metadata_region => 'us-west-1'
20
20
  @archive_mock = mock 'archive'
21
+ @catalog_mock = mock 'catalog'
21
22
  Trollop.stub(:options).and_return options
22
23
  Heirloom::HeirloomLogger.should_receive(:new).with(:log_level => 'info').
23
24
  and_return @logger_stub
@@ -29,13 +30,19 @@ describe Heirloom do
29
30
  with(:name => 'archive_name',
30
31
  :config => @config_mock).
31
32
  and_return @archive_mock
33
+ Heirloom::Catalog.should_receive(:new).
34
+ with(:name => 'archive_name',
35
+ :config => @config_mock).
36
+ and_return @catalog_mock
32
37
  @setup = Heirloom::CLI::Setup.new
33
38
  end
34
39
 
35
- it "should setup s3 buckets and simpledb domain" do
36
- @setup.should_receive(:ensure_metadata_in_upload_region).
37
- with(:config => @config_mock,
38
- :regions => @regions)
40
+ it "should setup s3 buckets, catalog and simpledb domain" do
41
+ @catalog_mock.should_receive(:create_catalog_domain)
42
+ @catalog_mock.should_receive(:add_to_catalog).
43
+ with(:regions => @regions,
44
+ :base => 'base').
45
+ and_return true
39
46
  @archive_mock.should_receive(:setup).
40
47
  with(:regions => @regions,
41
48
  :bucket_prefix => 'base')
@@ -223,5 +223,28 @@ describe Heirloom do
223
223
  end
224
224
  end
225
225
 
226
+ context "testing ensure archive domain empty" do
227
+ before do
228
+ @archive_mock = mock 'archive'
229
+ @logger_stub = stub 'logger', :error => true
230
+ @config_stub = stub 'config', :logger => @logger_stub,
231
+ :metadata_region => 'us-west-1'
232
+ @options = { :config => @config_stub, :archive => @archive_mock }
233
+ @object = Object.new
234
+ @object.extend Heirloom::CLI::Shared
235
+ end
236
+
237
+ it "should ensure the domain is empty" do
238
+ @archive_mock.should_receive(:count).and_return 0
239
+ @object.ensure_archive_domain_empty @options
240
+ end
241
+
242
+ it "should exit if the domain is not empty" do
243
+ @archive_mock.should_receive(:count).and_return 200
244
+ lambda { @object.ensure_archive_domain_empty @options }.
245
+ should raise_error SystemExit
246
+ end
247
+ end
248
+
226
249
 
227
250
  end