heirloom 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +7 -0
- data/README.md +4 -6
- data/heirloom.gemspec +2 -2
- data/lib/heirloom.rb +1 -1
- data/lib/heirloom/archive.rb +121 -0
- data/lib/heirloom/{artifact/artifact_authorizer.rb → archive/authorizer.rb} +6 -6
- data/lib/heirloom/{artifact/artifact_builder.rb → archive/builder.rb} +1 -6
- data/lib/heirloom/archive/destroyer.rb +50 -0
- data/lib/heirloom/{artifact/artifact_downloader.rb → archive/downloader.rb} +7 -7
- data/lib/heirloom/{artifact/artifact_lister.rb → archive/lister.rb} +1 -7
- data/lib/heirloom/archive/reader.rb +74 -0
- data/lib/heirloom/{artifact/artifact_updater.rb → archive/updater.rb} +4 -4
- data/lib/heirloom/{artifact/artifact_uploader.rb → archive/uploader.rb} +8 -5
- data/lib/heirloom/archive/verifier.rb +34 -0
- data/lib/heirloom/aws/simpledb.rb +5 -1
- data/lib/heirloom/cli.rb +8 -62
- data/lib/heirloom/cli/build.rb +53 -25
- data/lib/heirloom/cli/destroy.rb +30 -8
- data/lib/heirloom/cli/download.rb +32 -11
- data/lib/heirloom/cli/list.rb +30 -6
- data/lib/heirloom/cli/show.rb +33 -11
- data/lib/heirloom/cli/update.rb +31 -11
- data/lib/heirloom/config.rb +3 -3
- data/lib/heirloom/destroyer/s3.rb +1 -1
- data/lib/heirloom/directory/directory.rb +1 -1
- data/lib/heirloom/downloader/s3.rb +1 -1
- data/lib/heirloom/logger.rb +23 -0
- data/lib/heirloom/uploader/s3.rb +6 -11
- data/lib/heirloom/version.rb +1 -1
- data/spec/acl/s3_spec.rb +2 -10
- data/spec/config_spec.rb +15 -4
- data/spec/directory/directory_spec.rb +1 -1
- data/spec/{artifact/artifact_authorizer_spec.rb → heirloom/authorizer_spec.rb} +7 -7
- data/spec/{artifact/artifact_builder_spec.rb → heirloom/builder_spec.rb} +3 -3
- data/spec/{artifact/artifact_destroyer_spec.rb → heirloom/destroyer_spec.rb} +7 -7
- data/spec/{artifact/artifact_downloader_spec.rb → heirloom/downloader_spec.rb} +17 -17
- data/spec/{artifact/artifact_lister_spec.rb → heirloom/lister_spec.rb} +3 -3
- data/spec/heirloom/reader_spec.rb +90 -0
- data/spec/heirloom/updater_spec.rb +16 -0
- data/spec/heirloom/uploader_spec.rb +16 -0
- data/spec/heirloom/verifier_spec.rb +38 -0
- data/spec/heirloom_spec.rb +74 -0
- data/spec/logger_spec.rb +9 -0
- metadata +49 -45
- data/lib/heirloom/artifact.rb +0 -111
- data/lib/heirloom/artifact/artifact_destroyer.rb +0 -49
- data/lib/heirloom/artifact/artifact_reader.rb +0 -44
- data/spec/artifact/artifact_reader_spec.rb +0 -55
- data/spec/artifact/artifact_updater_spec.rb +0 -16
- data/spec/artifact/artifact_uploader_spec.rb +0 -16
- data/spec/artifact_spec.rb +0 -74
data/lib/heirloom/config.rb
CHANGED
@@ -3,10 +3,11 @@ module Heirloom
|
|
3
3
|
|
4
4
|
attr_accessor :access_key, :secret_key, :regions,
|
5
5
|
:primary_region, :bucket_prefix, :authorized_aws_accounts,
|
6
|
-
:logger
|
6
|
+
:logger, :simpledb
|
7
7
|
|
8
8
|
def initialize(args = {})
|
9
9
|
@config = args[:config]
|
10
|
+
self.logger = args[:logger] ||= HeirloomLogger.new
|
10
11
|
load_config_file
|
11
12
|
end
|
12
13
|
|
@@ -14,8 +15,6 @@ module Heirloom
|
|
14
15
|
config_file = "#{ENV['HOME']}/.heirloom.yml"
|
15
16
|
c = @config ? @config : YAML::load( File.open( config_file ) )
|
16
17
|
|
17
|
-
self.logger = c['logger'] ||= HeirloomLogger.new
|
18
|
-
|
19
18
|
aws = c['aws']
|
20
19
|
|
21
20
|
self.access_key = aws['access_key']
|
@@ -23,6 +22,7 @@ module Heirloom
|
|
23
22
|
self.regions = aws['regions']
|
24
23
|
self.bucket_prefix = aws['bucket_prefix']
|
25
24
|
self.authorized_aws_accounts = aws['authorized_aws_accounts']
|
25
|
+
self.simpledb = aws['simpledb'] ||= true
|
26
26
|
self.primary_region = regions ? regions.first : 'us-west-1'
|
27
27
|
end
|
28
28
|
|
@@ -24,7 +24,7 @@ module Heirloom
|
|
24
24
|
self.local_build = File.join(Dir.tmpdir, random_text + ".tar.gz")
|
25
25
|
end
|
26
26
|
|
27
|
-
logger.info "Building
|
27
|
+
logger.info "Building Heirloom '#{local_build}' from '#{path}'."
|
28
28
|
logger.info "Excluding #{exclude.to_s}."
|
29
29
|
logger.info "Adding #{files_to_pack.to_s}."
|
30
30
|
|
data/lib/heirloom/logger.rb
CHANGED
@@ -3,6 +3,7 @@ module Heirloom
|
|
3
3
|
|
4
4
|
def initialize(args = {})
|
5
5
|
@logger = args[:logger] ||= Logger.new(STDOUT)
|
6
|
+
@log_level = args[:log_level] ||= 'info'
|
6
7
|
|
7
8
|
unless args[:logger]
|
8
9
|
@logger.datetime_format = "%Y-%m-%d %H:%M:%S"
|
@@ -11,9 +12,31 @@ module Heirloom
|
|
11
12
|
end
|
12
13
|
end
|
13
14
|
|
15
|
+
case @log_level.downcase
|
16
|
+
when 'info'
|
17
|
+
@logger.level = Logger::INFO
|
18
|
+
when 'debug'
|
19
|
+
@logger.level = Logger::DEBUG
|
20
|
+
when 'warn'
|
21
|
+
@logger.level = Logger::WARN
|
22
|
+
when 'error'
|
23
|
+
@logger.level = Logger::ERROR
|
24
|
+
end
|
14
25
|
@logger
|
15
26
|
end
|
16
27
|
|
28
|
+
def debug(msg)
|
29
|
+
@logger.debug msg
|
30
|
+
end
|
31
|
+
|
32
|
+
def info(msg)
|
33
|
+
@logger.info msg
|
34
|
+
end
|
35
|
+
|
36
|
+
def error(msg)
|
37
|
+
@logger.error msg
|
38
|
+
end
|
39
|
+
|
17
40
|
def info(msg)
|
18
41
|
@logger.info msg
|
19
42
|
end
|
data/lib/heirloom/uploader/s3.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Heirloom
|
2
|
-
|
2
|
+
class Uploader
|
3
3
|
class S3
|
4
4
|
|
5
5
|
def initialize(args)
|
@@ -26,22 +26,14 @@ module Heirloom
|
|
26
26
|
:public => public_readable
|
27
27
|
|
28
28
|
@logger.info "File is readable by the public internet." if public_readable
|
29
|
-
|
30
|
-
add_endpoint_attributes :bucket => bucket,
|
31
|
-
:id => id,
|
32
|
-
:key_folder => key_folder,
|
33
|
-
:key_name => key_name,
|
34
|
-
:name => name
|
35
29
|
end
|
36
30
|
|
37
|
-
private
|
38
|
-
|
39
31
|
def add_endpoint_attributes(args)
|
40
32
|
bucket = args[:bucket]
|
41
33
|
id = args[:id]
|
42
|
-
key_name = args[:key_name]
|
43
|
-
key_folder = args[:key_folder]
|
44
34
|
name = args[:name]
|
35
|
+
key_folder = name
|
36
|
+
key_name = "#{id}.tar.gz"
|
45
37
|
|
46
38
|
s3_endpoint = "s3://#{bucket}/#{key_folder}/#{key_name}"
|
47
39
|
http_endpoint = "http://#{endpoints[@region]}/#{bucket}/#{key_folder}/#{key_name}"
|
@@ -57,6 +49,8 @@ module Heirloom
|
|
57
49
|
@logger.info "Adding attribute #{https_endpoint}."
|
58
50
|
end
|
59
51
|
|
52
|
+
private
|
53
|
+
|
60
54
|
def endpoints
|
61
55
|
{
|
62
56
|
'us-east-1' => 's3.amazonaws.com',
|
@@ -73,6 +67,7 @@ module Heirloom
|
|
73
67
|
def sdb
|
74
68
|
@sdb ||= AWS::SimpleDB.new :config => @config
|
75
69
|
end
|
70
|
+
|
76
71
|
end
|
77
72
|
end
|
78
73
|
end
|
data/lib/heirloom/version.rb
CHANGED
data/spec/acl/s3_spec.rb
CHANGED
@@ -27,25 +27,17 @@ describe Heirloom do
|
|
27
27
|
s3_mock.should_receive(:get_bucket_acl).with('bucket').
|
28
28
|
and_return acls
|
29
29
|
|
30
|
-
grants_mock = mock 'grants'
|
31
|
-
@s3.should_receive(:build_bucket_grants).
|
32
|
-
with(:id => '123',
|
33
|
-
:name => 'Brett',
|
34
|
-
:accounts => ['acct1@test.com', 'acct2@test.com']).
|
35
|
-
and_return grants_mock
|
36
|
-
|
37
30
|
@logger_mock.should_receive(:info).
|
38
31
|
with 'Authorizing acct1@test.com to s3://bucket/key-folder/key.tar.gz.'
|
39
32
|
@logger_mock.should_receive(:info).
|
40
33
|
with 'Authorizing acct2@test.com to s3://bucket/key-folder/key.tar.gz.'
|
41
34
|
|
42
|
-
s3_mock.should_receive(:put_object_acl).
|
35
|
+
s3_mock.should_receive(:put_object_acl).
|
36
|
+
with("bucket", "key-folder/key.tar.gz", {"Owner"=>{"DisplayName"=>"Brett", "ID"=>"123"}, "AccessControlList"=>[{"Grantee"=>{"EmailAddress"=>"acct1@test.com"}, "Permission"=>"READ"}, {"Grantee"=>{"EmailAddress"=>"acct2@test.com"}, "Permission"=>"READ"}, {"Grantee"=>{"DisplayName"=>"Brett", "ID"=>"123"}, "Permission"=>"FULL_CONTROL"}]})
|
43
37
|
|
44
38
|
@s3.allow_read_access_from_accounts :bucket => 'bucket',
|
45
39
|
:key_name => 'key',
|
46
40
|
:key_folder => 'key-folder'
|
47
41
|
end
|
48
42
|
|
49
|
-
it "should test build_bucket_grants private method"
|
50
|
-
|
51
43
|
end
|
data/spec/config_spec.rb
CHANGED
@@ -8,21 +8,23 @@ describe Heirloom do
|
|
8
8
|
'secret_key' => 'secret',
|
9
9
|
'regions' => ['us-west-1', 'us-west-2'],
|
10
10
|
'bucket_prefix' => 'prefix',
|
11
|
+
'simpledb' => true,
|
11
12
|
'authorized_aws_accounts' => [ 'test1 @acct.com', 'test2@acct.com' ]
|
12
|
-
}
|
13
|
-
'logger' => 'da-logger'
|
13
|
+
}
|
14
14
|
}
|
15
15
|
end
|
16
16
|
|
17
17
|
it "should create a new config object from the hash passed as config" do
|
18
|
-
config = Heirloom::Config.new :config => @config
|
18
|
+
config = Heirloom::Config.new :config => @config,
|
19
|
+
:logger => 'da-logger'
|
19
20
|
config.access_key.should == @config['aws']['access_key']
|
20
21
|
config.secret_key.should == @config['aws']['secret_key']
|
21
22
|
config.regions.should == @config['aws']['regions']
|
22
23
|
config.primary_region.should == 'us-west-1'
|
23
24
|
config.bucket_prefix.should == @config['aws']['bucket_prefix']
|
24
25
|
config.authorized_aws_accounts.should == @config['aws']['authorized_aws_accounts']
|
25
|
-
config.
|
26
|
+
config.simpledb.should == true
|
27
|
+
config.logger.should == 'da-logger'
|
26
28
|
end
|
27
29
|
|
28
30
|
it "should create a new config object and read from ~/.heirloom.yml" do
|
@@ -34,7 +36,16 @@ describe Heirloom do
|
|
34
36
|
config.regions.should == @config['aws']['regions']
|
35
37
|
config.primary_region.should == 'us-west-1'
|
36
38
|
config.bucket_prefix.should == @config['aws']['bucket_prefix']
|
39
|
+
config.simpledb.should == true
|
37
40
|
config.authorized_aws_accounts.should == @config['aws']['authorized_aws_accounts']
|
38
41
|
end
|
39
42
|
|
43
|
+
it "should set simpledb to true by default" do
|
44
|
+
@config['aws']['simpledb'] = nil
|
45
|
+
File.should_receive(:open).with("#{ENV['HOME']}/.heirloom.yml").
|
46
|
+
and_return(@config.to_yaml)
|
47
|
+
config = Heirloom::Config.new
|
48
|
+
config.simpledb.should == true
|
49
|
+
end
|
50
|
+
|
40
51
|
end
|
@@ -11,7 +11,7 @@ describe Heirloom do
|
|
11
11
|
:path => '/target/dir'
|
12
12
|
end
|
13
13
|
|
14
|
-
it "should build an
|
14
|
+
it "should build an archive from the latest commit in path" do
|
15
15
|
@logger_mock.should_receive(:info).exactly(3).times
|
16
16
|
file_mock = double 'file'
|
17
17
|
File.should_receive(:open).and_return file_mock
|
@@ -6,20 +6,20 @@ describe Heirloom do
|
|
6
6
|
@config_mock = double('config')
|
7
7
|
@logger_mock = double('logger')
|
8
8
|
@config_mock.should_receive(:logger).and_return(@logger_mock)
|
9
|
-
@authorizer = Heirloom::
|
10
|
-
|
11
|
-
|
9
|
+
@authorizer = Heirloom::Authorizer.new :config => @config_mock,
|
10
|
+
:name => 'tim',
|
11
|
+
:id => '123'
|
12
12
|
end
|
13
13
|
|
14
14
|
it "should authorize access to an acl across all regions" do
|
15
|
-
|
15
|
+
reader = double
|
16
16
|
s3_acl = double
|
17
17
|
@logger_mock.should_receive(:info).exactly(2).times
|
18
18
|
@config_mock.should_receive(:regions).
|
19
19
|
and_return(['us-west-1', 'us-west-2'])
|
20
|
-
@authorizer.should_receive(:
|
21
|
-
and_return(
|
22
|
-
|
20
|
+
@authorizer.should_receive(:reader).exactly(2).times.
|
21
|
+
and_return(reader)
|
22
|
+
reader.should_receive(:get_bucket).exactly(2).times.
|
23
23
|
and_return('the-bucket')
|
24
24
|
Heirloom::ACL::S3.should_receive(:new).exactly(2).
|
25
25
|
times.and_return(s3_acl)
|
@@ -10,12 +10,12 @@ describe Heirloom do
|
|
10
10
|
Heirloom::AWS::SimpleDB.should_receive(:new).with(:config => @config_mock).
|
11
11
|
and_return(@simpledb_mock)
|
12
12
|
@simpledb_mock.should_receive(:create_domain).with 'tim'
|
13
|
-
@builder = Heirloom::
|
13
|
+
@builder = Heirloom::Builder.new :config => @config_mock,
|
14
14
|
:name => 'tim',
|
15
15
|
:id => '123'
|
16
16
|
end
|
17
17
|
|
18
|
-
it "should build an
|
18
|
+
it "should build an archive" do
|
19
19
|
directory_mock = double "directory"
|
20
20
|
Heirloom::Directory.should_receive(:new).with(:path => 'path_to_build',
|
21
21
|
:exclude => ['.dir_to_exclude'],
|
@@ -31,7 +31,7 @@ describe Heirloom do
|
|
31
31
|
:git => 'true').should == '/tmp/file'
|
32
32
|
end
|
33
33
|
|
34
|
-
it "should cleanup the local
|
34
|
+
it "should cleanup the local archive" do
|
35
35
|
@builder.local_build = '/tmp/file'
|
36
36
|
@logger_mock.should_receive(:info).with("Cleaning up local build /tmp/file.")
|
37
37
|
File.should_receive(:delete).with('/tmp/file')
|
@@ -6,21 +6,21 @@ describe Heirloom do
|
|
6
6
|
@config_mock = double 'config'
|
7
7
|
@logger_mock = double 'logger'
|
8
8
|
@config_mock.should_receive(:logger).and_return(@logger_mock)
|
9
|
-
@destroyer = Heirloom::
|
9
|
+
@destroyer = Heirloom::Destroyer.new :config => @config_mock,
|
10
10
|
:name => 'tim',
|
11
11
|
:id => '123'
|
12
12
|
end
|
13
13
|
|
14
|
-
it "should destroy the given
|
14
|
+
it "should destroy the given archive" do
|
15
15
|
@logger_mock.should_receive(:info).
|
16
16
|
with "Destroying tim - 123"
|
17
17
|
@config_mock.should_receive(:regions).and_return ['us-west-1']
|
18
|
-
|
19
|
-
@destroyer.should_receive(:
|
18
|
+
reader_mock = mock 'archive reader'
|
19
|
+
@destroyer.should_receive(:reader).and_return reader_mock
|
20
20
|
bucket_mock = mock 'bucket'
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
reader_mock.should_receive(:get_bucket).
|
22
|
+
with(:region => 'us-west-1').
|
23
|
+
and_return 'bucket-us-west-1'
|
24
24
|
|
25
25
|
@logger_mock.should_receive(:info).
|
26
26
|
with "Destroying 's3://bucket-us-west-1/tim/123.tar.gz'."
|
@@ -6,26 +6,26 @@ describe Heirloom do
|
|
6
6
|
@config_mock = double 'config'
|
7
7
|
@logger_mock = double 'logger'
|
8
8
|
@config_mock.should_receive(:logger).and_return(@logger_mock)
|
9
|
-
@downloader = Heirloom::
|
9
|
+
@downloader = Heirloom::Downloader.new :config => @config_mock,
|
10
10
|
:name => 'tim',
|
11
11
|
:id => '123'
|
12
12
|
end
|
13
13
|
|
14
|
-
it "should download an
|
14
|
+
it "should download an archive" do
|
15
15
|
s3_downloader_mock = mock 's3 downloader'
|
16
16
|
Heirloom::Downloader::S3.should_receive(:new).
|
17
17
|
with(:config => @config_mock,
|
18
18
|
:logger => @logger_mock,
|
19
19
|
:region => 'us-west-1').
|
20
20
|
and_return s3_downloader_mock
|
21
|
-
|
22
|
-
@downloader.should_receive(:
|
21
|
+
reader_mock = mock 'reader'
|
22
|
+
@downloader.should_receive(:reader).
|
23
23
|
exactly(2).times.
|
24
|
-
and_return
|
25
|
-
|
24
|
+
and_return reader_mock
|
25
|
+
reader_mock.should_receive(:get_bucket).
|
26
26
|
with(:region => 'us-west-1').
|
27
27
|
and_return 'bucket-us-west-1'
|
28
|
-
|
28
|
+
reader_mock.should_receive(:get_key).
|
29
29
|
with(:region => 'us-west-1').
|
30
30
|
and_return 'key'
|
31
31
|
|
@@ -51,23 +51,23 @@ describe Heirloom do
|
|
51
51
|
:region => 'us-west-1')
|
52
52
|
end
|
53
53
|
|
54
|
-
it "should download the
|
54
|
+
it "should download the archive to the current path if output is unspecficief" do
|
55
55
|
s3_downloader_mock = mock 's3 downloader'
|
56
56
|
Heirloom::Downloader::S3.should_receive(:new).
|
57
57
|
with(:config => @config_mock,
|
58
58
|
:logger => @logger_mock,
|
59
59
|
:region => 'us-west-1').
|
60
60
|
and_return s3_downloader_mock
|
61
|
-
|
62
|
-
@downloader.should_receive(:
|
61
|
+
reader_mock = mock 'reader'
|
62
|
+
@downloader.should_receive(:reader).
|
63
63
|
exactly(2).times.
|
64
|
-
and_return
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
64
|
+
and_return reader_mock
|
65
|
+
reader_mock.should_receive(:get_bucket).
|
66
|
+
with(:region => 'us-west-1').
|
67
|
+
and_return 'bucket-us-west-1'
|
68
|
+
reader_mock.should_receive(:get_key).
|
69
|
+
with(:region => 'us-west-1').
|
70
|
+
and_return 'key'
|
71
71
|
|
72
72
|
@logger_mock.should_receive(:info).
|
73
73
|
with "Downloading s3://bucket-us-west-1/key from us-west-1."
|
@@ -4,11 +4,11 @@ describe Heirloom do
|
|
4
4
|
|
5
5
|
before do
|
6
6
|
@config_mock = double 'config'
|
7
|
-
@lister = Heirloom::
|
8
|
-
|
7
|
+
@lister = Heirloom::Lister.new :config => @config_mock,
|
8
|
+
:name => 'test123'
|
9
9
|
end
|
10
10
|
|
11
|
-
it "should list the known
|
11
|
+
it "should list the known archive" do
|
12
12
|
sdb_mock = mock 'sdb'
|
13
13
|
@lister.should_receive(:sdb).and_return sdb_mock
|
14
14
|
sdb_mock.should_receive(:select).
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Heirloom do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@sdb_mock = mock 'sdb'
|
7
|
+
@config_mock = double 'config'
|
8
|
+
@logger_mock = double 'logger'
|
9
|
+
@config_mock.should_receive(:logger).and_return @logger_mock
|
10
|
+
Heirloom::AWS::SimpleDB.should_receive(:new).and_return @sdb_mock
|
11
|
+
@reader = Heirloom::Reader.new :config => @config_mock,
|
12
|
+
:name => 'tim',
|
13
|
+
:id => '123'
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should show the item record" do
|
17
|
+
@sdb_mock.should_receive(:select).
|
18
|
+
with("select * from tim where itemName() = '123'").
|
19
|
+
and_return( { '123' => { 'value' => 'details' } } )
|
20
|
+
@reader.show.should == { 'value' => 'details' }
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should return an empty hash if item does not exist" do
|
24
|
+
@sdb_mock.should_receive(:select).
|
25
|
+
with("select * from tim where itemName() = '123'").
|
26
|
+
and_return({})
|
27
|
+
@reader.show.should == {}
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should return true if the record exists" do
|
31
|
+
@sdb_mock.should_receive(:select).
|
32
|
+
with("select * from tim where itemName() = '123'").
|
33
|
+
and_return( { '123' => { 'value' => 'details' } } )
|
34
|
+
@logger_mock.should_receive(:debug).exactly(1).times
|
35
|
+
@reader.exists?.should == true
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should return false if the recrod does not exist" do
|
39
|
+
@sdb_mock.should_receive(:select).
|
40
|
+
with("select * from tim where itemName() = '123'").
|
41
|
+
and_return({})
|
42
|
+
@logger_mock.should_receive(:debug).exactly(1).times
|
43
|
+
@reader.exists?.should == false
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should return the bucket if it exists" do
|
47
|
+
@logger_mock.should_receive(:debug).exactly(5).times
|
48
|
+
@sdb_mock.should_receive(:select).
|
49
|
+
exactly(3).times.
|
50
|
+
with("select * from tim where itemName() = '123'").
|
51
|
+
and_return( { '123' =>
|
52
|
+
{ 'us-west-1-s3-url' =>
|
53
|
+
['s3://the-url/the-buck/the-key']
|
54
|
+
}
|
55
|
+
} )
|
56
|
+
@reader.get_bucket(:region => 'us-west-1').should == 'the-url'
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should return nil if the bucket does not exist" do
|
60
|
+
@logger_mock.should_receive(:debug).exactly(3).times
|
61
|
+
@sdb_mock.should_receive(:select).
|
62
|
+
exactly(1).times.
|
63
|
+
with("select * from tim where itemName() = '123'").
|
64
|
+
and_return( { } )
|
65
|
+
@reader.get_bucket(:region => 'us-west-1').should == nil
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should return the key if it exists" do
|
69
|
+
@logger_mock.should_receive(:debug).exactly(8).times
|
70
|
+
@sdb_mock.should_receive(:select).
|
71
|
+
exactly(6).times.
|
72
|
+
with("select * from tim where itemName() = '123'").
|
73
|
+
and_return( { '123' =>
|
74
|
+
{ 'us-west-1-s3-url' =>
|
75
|
+
['s3://the-url/the-bucket/the-key']
|
76
|
+
}
|
77
|
+
} )
|
78
|
+
@reader.get_key(:region => 'us-west-1').should == 'the-bucket/the-key'
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should return nil if the key does not exist" do
|
82
|
+
@logger_mock.should_receive(:debug).exactly(1).times
|
83
|
+
@sdb_mock.should_receive(:select).
|
84
|
+
exactly(1).times.
|
85
|
+
with("select * from tim where itemName() = '123'").
|
86
|
+
and_return( { } )
|
87
|
+
@reader.get_key(:region => 'us-west-1').should == nil
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|