spec/aws/s3_spec.rb in heirloom-0.11.0.beta.2 vs spec/aws/s3_spec.rb in heirloom-0.11.0
- old
+ new
@@ -1,244 +1,267 @@
require 'spec_helper'
describe Heirloom do
- before do
- @directories_mock = mock 'directories'
- @bucket_mock = mock 'bucket'
- @logger_stub = stub 'logger', :debug => true,
- :info => true,
- :warn => true
- @config_mock = mock 'config'
- @config_mock.stub :access_key => 'the-key',
- :secret_key => 'the-secret',
- :logger => @logger_stub
- @fog_mock = mock 'fog'
- @fog_mock.stub :directories => @directories_mock
- Fog::Storage.should_receive(:new).and_return @fog_mock
- @s3 = Heirloom::AWS::S3.new :config => @config_mock,
- :region => 'us-west-1'
- end
+ context "using IAM roles" do
- context "bucket_exists?" do
- it "should return true if the bucket exists" do
- @directories_mock.should_receive(:get).
- with('bucket').and_return @bucket_mock
- @s3.bucket_exists?('bucket').should be_true
- end
+ it "should use the access and secret keys by default" do
- it "should return false if the bucket does not exist" do
- @directories_mock.should_receive(:get).
- with('bucket').and_return nil
- @s3.bucket_exists?('bucket').should be_false
- end
+ config = mock_config :aws_access_key_id => 'key',
+ :aws_secret_access_key => 'secret'
- it "should return false if bucket owned by another account" do
- @directories_mock.should_receive(:get).
- with('bucket').
- and_raise Excon::Errors::Forbidden.new('msg')
- @s3.bucket_exists?('bucket').should be_false
- end
- end
+ Fog::Storage.should_receive(:new).
+ with :provider => 'AWS',
+ :aws_access_key_id => 'key',
+ :aws_secret_access_key => 'secret',
+ :region => 'us-west-1'
+ s3 = Heirloom::AWS::S3.new :config => config, :region => 'us-west-1'
- context "bucket_exists_in_another_region?" do
- it "should return true if the bucket exists in another region" do
- @bucket_mock.stub :location => 'us-east-1'
- @directories_mock.should_receive(:get).
- with('bucket').at_least(:once).
- and_return @bucket_mock
- @s3.bucket_exists_in_another_region?('bucket').should be_true
end
- it "should return false if the bucket exists in the curren region" do
- @bucket_mock.stub :location => 'us-west-1'
- @directories_mock.should_receive(:get).
- with('bucket').at_least(:once).
- and_return @bucket_mock
- @s3.bucket_exists_in_another_region?('bucket').should be_false
- end
+ it "should use the iam role if asked to" do
- it "should return false if bucket owned by another account" do
- @directories_mock.should_receive(:get).
- with('bucket').
- and_raise Excon::Errors::Forbidden.new('msg')
- @s3.bucket_exists_in_another_region?('bucket').should be_false
+ config = mock_config :use_iam_profile => true
+
+ Fog::Storage.should_receive(:new).
+ with :provider => 'AWS',
+ :use_iam_profile => true,
+ :region => 'us-west-1'
+ s3 = Heirloom::AWS::S3.new :config => config, :region => 'us-west-1'
+
end
end
- context "bucket_owned_by_another_account?" do
- it "should return false if bucket owned by this account" do
- @directories_mock.should_receive(:get).
- with('bucket').
- and_return @bucket_mock
- @s3.bucket_owned_by_another_account?('bucket').should be_false
- end
+ context "s3 / bucket operations" do
- it "should return false if bucket does not exist" do
- @directories_mock.should_receive(:get).
- with('bucket').
- and_return nil
- @s3.bucket_owned_by_another_account?('bucket').should be_false
+ before do
+ @directories_mock = mock 'directories'
+ @bucket_mock = mock 'bucket'
+ @fog_mock = mock 'fog'
+ @fog_mock.stub :directories => @directories_mock
+ Fog::Storage.stub :new => @fog_mock
+ @s3 = Heirloom::AWS::S3.new :config => mock_config, :region => 'us-west-1'
end
- it "should return true if bucket is not owned by another account" do
- @directories_mock.should_receive(:get).
- with('bucket').
- and_raise Excon::Errors::Forbidden.new('msg')
- @s3.bucket_owned_by_another_account?('bucket').should be_true
- end
- end
+ context "bucket_exists?" do
+ it "should return true if the bucket exists" do
+ @directories_mock.should_receive(:get).
+ with('bucket').and_return @bucket_mock
+ @s3.bucket_exists?('bucket').should be_true
+ end
- it "should delete an object from s3" do
- @fog_mock.should_receive(:delete_object).
- with('bucket', 'object', { :option => 'test' })
- @s3.delete_object('bucket', 'object', { :option => 'test' })
- end
+ it "should return false if the bucket does not exist" do
+ @directories_mock.should_receive(:get).
+ with('bucket').and_return nil
+ @s3.bucket_exists?('bucket').should be_false
+ end
- it "should get a bucket from s3" do
- @directories_mock.should_receive(:get).with 'bucket'
- @s3.get_bucket 'bucket'
- end
+ it "should return false if bucket owned by another account" do
+ @directories_mock.should_receive(:get).
+ with('bucket').
+ and_raise Excon::Errors::Forbidden.new('msg')
+ @s3.bucket_exists?('bucket').should be_false
+ end
+ end
- context "testing bucket availability" do
+ context "bucket_exists_in_another_region?" do
+ it "should return true if the bucket exists in another region" do
+ @bucket_mock.stub :location => 'us-east-1'
+ @directories_mock.should_receive(:get).
+ with('bucket').at_least(:once).
+ and_return @bucket_mock
+ @s3.bucket_exists_in_another_region?('bucket').should be_true
+ end
- it "should return false if the bucket is forbidden" do
- @directories_mock.should_receive(:get).
- with('bucket').
- and_raise Excon::Errors::Forbidden.new('msg')
- @s3.bucket_name_available?('bucket').should be_false
+ it "should return false if the bucket exists in the curren region" do
+ @bucket_mock.stub :location => 'us-west-1'
+ @directories_mock.should_receive(:get).
+ with('bucket').at_least(:once).
+ and_return @bucket_mock
+ @s3.bucket_exists_in_another_region?('bucket').should be_false
+ end
+
+ it "should return false if bucket owned by another account" do
+ @directories_mock.should_receive(:get).
+ with('bucket').
+ and_raise Excon::Errors::Forbidden.new('msg')
+ @s3.bucket_exists_in_another_region?('bucket').should be_false
+ end
end
- it "should return false if bucket in different region" do
- @directories_mock.should_receive(:get).
- with('bucket').at_least(:once).
- and_return @bucket_mock
- @bucket_mock.stub :location => 'us-east-1'
- @s3.bucket_name_available?('bucket').should be_false
+ context "bucket_owned_by_another_account?" do
+ it "should return false if bucket owned by this account" do
+ @directories_mock.should_receive(:get).
+ with('bucket').
+ and_return @bucket_mock
+ @s3.bucket_owned_by_another_account?('bucket').should be_false
+ end
+
+ it "should return false if bucket does not exist" do
+ @directories_mock.should_receive(:get).
+ with('bucket').
+ and_return nil
+ @s3.bucket_owned_by_another_account?('bucket').should be_false
+ end
+
+ it "should return true if bucket is not owned by another account" do
+ @directories_mock.should_receive(:get).
+ with('bucket').
+ and_raise Excon::Errors::Forbidden.new('msg')
+ @s3.bucket_owned_by_another_account?('bucket').should be_true
+ end
end
- it "should return true if the bucket is in this account / region" do
- @directories_mock.should_receive(:get).
- with('bucket').at_least(:once).
- and_return @bucket_mock
- @bucket_mock.stub :location => 'us-west-1'
- @s3.bucket_name_available?('bucket').should be_true
+ it "should delete an object from s3" do
+ @fog_mock.should_receive(:delete_object).
+ with('bucket', 'object', { :option => 'test' })
+ @s3.delete_object('bucket', 'object', { :option => 'test' })
end
- it "should return true if the bucket is not found" do
- @directories_mock.should_receive(:get).
- with('bucket').at_least(:once).
- and_return nil
- @s3.bucket_name_available?('bucket').should be_true
+ it "should get a bucket from s3" do
+ @directories_mock.should_receive(:get).with 'bucket'
+ @s3.get_bucket 'bucket'
end
- end
+ context "testing bucket availability" do
- it "should return object versions for a given bucket" do
- body_mock = mock 'body'
- @fog_mock.should_receive(:get_bucket_object_versions).
- with('bucket').
- and_return body_mock
- body_mock.stub :body => 'body_hash'
- @s3.get_bucket_object_versions('bucket').should == 'body_hash'
- end
+ it "should return false if the bucket is forbidden" do
+ @directories_mock.should_receive(:get).
+ with('bucket').
+ and_raise Excon::Errors::Forbidden.new('msg')
+ @s3.bucket_name_available?('bucket').should be_false
+ end
- context "testing bucket deletion" do
- it "should return true if the bucket has 0 objects" do
- body_mock = mock 'body'
- @fog_mock.should_receive(:get_bucket_object_versions).
- with('bucket').
- and_return body_mock
- body_mock.stub :body => { "Versions" => [ ] }
- @s3.bucket_empty?('bucket').should be_true
+ it "should return false if bucket in different region" do
+ @directories_mock.should_receive(:get).
+ with('bucket').at_least(:once).
+ and_return @bucket_mock
+ @bucket_mock.stub :location => 'us-east-1'
+ @s3.bucket_name_available?('bucket').should be_false
+ end
+
+ it "should return true if the bucket is in this account / region" do
+ @directories_mock.should_receive(:get).
+ with('bucket').at_least(:once).
+ and_return @bucket_mock
+ @bucket_mock.stub :location => 'us-west-1'
+ @s3.bucket_name_available?('bucket').should be_true
+ end
+
+ it "should return true if the bucket is not found" do
+ @directories_mock.should_receive(:get).
+ with('bucket').at_least(:once).
+ and_return nil
+ @s3.bucket_name_available?('bucket').should be_true
+ end
+
end
- it "should return false if the bucket has any objects" do
+ it "should return object versions for a given bucket" do
body_mock = mock 'body'
@fog_mock.should_receive(:get_bucket_object_versions).
with('bucket').
and_return body_mock
- body_mock.stub :body => { "Versions" => [ 'obj1', 'obj2' ] }
- @s3.bucket_empty?('bucket').should be_false
+ body_mock.stub :body => 'body_hash'
+ @s3.get_bucket_object_versions('bucket').should == 'body_hash'
end
- it "should delete a bucket from s3 if empty" do
+ context "testing bucket deletion" do
+ it "should return true if the bucket has 0 objects" do
+ body_mock = mock 'body'
+ @fog_mock.should_receive(:get_bucket_object_versions).
+ with('bucket').
+ and_return body_mock
+ body_mock.stub :body => { "Versions" => [ ] }
+ @s3.bucket_empty?('bucket').should be_true
+ end
+
+ it "should return false if the bucket has any objects" do
+ body_mock = mock 'body'
+ @fog_mock.should_receive(:get_bucket_object_versions).
+ with('bucket').
+ and_return body_mock
+ body_mock.stub :body => { "Versions" => [ 'obj1', 'obj2' ] }
+ @s3.bucket_empty?('bucket').should be_false
+ end
+
+ it "should delete a bucket from s3 if empty" do
+ body_mock = mock 'body'
+ @fog_mock.should_receive(:get_bucket_object_versions).
+ with('bucket').
+ and_return body_mock
+ body_mock.stub :body => { "Versions" => [ ] }
+ @fog_mock.should_receive(:delete_bucket).
+ with('bucket').and_return true
+ @s3.delete_bucket('bucket').should be_true
+ end
+
+ it "should return false and not attempt to delete a non empty s3 bucket" do
+ body_mock = mock 'body'
+ @fog_mock.should_receive(:get_bucket_object_versions).
+ with('bucket').
+ and_return body_mock
+ body_mock.stub :body => { "Versions" => [ 'obj1', 'obj2' ] }
+ @fog_mock.should_receive(:delete_bucket).never
+ @s3.delete_bucket('bucket').should be_false
+ end
+
+ it "should return true if Excon::Errors::NotFound raised when deleting bucket" do
+ @fog_mock.should_receive(:get_bucket_object_versions).
+ with('bucket').
+ and_raise Excon::Errors::NotFound.new 'Bucket does not exist.'
+ @fog_mock.should_receive(:delete_bucket).never
+ @s3.delete_bucket('bucket').should be_true
+ end
+ end
+
+ it "should get an object from s3" do
body_mock = mock 'body'
- @fog_mock.should_receive(:get_bucket_object_versions).
- with('bucket').
+ @fog_mock.should_receive(:get_object).
+ with('bucket', 'object').
and_return body_mock
- body_mock.stub :body => { "Versions" => [ ] }
- @fog_mock.should_receive(:delete_bucket).
- with('bucket').and_return true
- @s3.delete_bucket('bucket').should be_true
+ body_mock.stub :body => 'body_hash'
+ @s3.get_object('bucket', 'object').should == 'body_hash'
end
- it "should return false and not attempt to delete a non empty s3 bucket" do
+ it "should get a buckets acl from s3" do
body_mock = mock 'body'
- @fog_mock.should_receive(:get_bucket_object_versions).
- with('bucket').
+ @fog_mock.should_receive(:get_object).
+ with('bucket', 'object').
and_return body_mock
- body_mock.stub :body => { "Versions" => [ 'obj1', 'obj2' ] }
- @fog_mock.should_receive(:delete_bucket).never
- @s3.delete_bucket('bucket').should be_false
+ body_mock.should_receive(:body)
+ @s3.get_object('bucket', 'object')
end
- it "should return true if Excon::Errors::NotFound raised when deleting bucket" do
- @fog_mock.should_receive(:get_bucket_object_versions).
- with('bucket').
- and_raise Excon::Errors::NotFound.new 'Bucket does not exist.'
- @fog_mock.should_receive(:delete_bucket).never
- @s3.delete_bucket('bucket').should be_true
+ it "should get an objects acl from s3" do
+ body_mock = mock 'body'
+ @fog_mock.should_receive(:get_object_acl).
+ with('bucket', 'object').and_return(body_mock)
+ body_mock.stub :body => 'data'
+ @s3.get_object_acl({ :bucket => 'bucket', :object_name => 'object'}).
+ should == 'data'
end
- end
- it "should get an object from s3" do
- body_mock = mock 'body'
- @fog_mock.should_receive(:get_object).
- with('bucket', 'object').
- and_return body_mock
- body_mock.stub :body => 'body_hash'
- @s3.get_object('bucket', 'object').should == 'body_hash'
- end
- it "should get a buckets acl from s3" do
- body_mock = mock 'body'
- @fog_mock.should_receive(:get_object).
- with('bucket', 'object').
- and_return body_mock
- body_mock.should_receive(:body)
- @s3.get_object('bucket', 'object')
- end
+ it "should set object acls" do
+ @fog_mock.should_receive(:put_object_acl).
+ with 'bucket', 'object', 'grants'
+ @s3.put_object_acl 'bucket', 'object', 'grants'
+ end
- it "should get an objects acl from s3" do
- body_mock = mock 'body'
- @fog_mock.should_receive(:get_object_acl).
- with('bucket', 'object').and_return(body_mock)
- body_mock.stub :body => 'data'
- @s3.get_object_acl({ :bucket => 'bucket', :object_name => 'object'}).
- should == 'data'
- end
+ it "should call put bucket with location_constraint us-west-1" do
+ options = { 'LocationConstraint' => 'us-west-1',
+ 'x-amz-acl' => 'private' }
+ @fog_mock.should_receive(:put_bucket).
+ with('name', options)
+ @s3.put_bucket 'name', 'us-west-1'
+ end
+ it "should call put bucket with location_constraint nil when region us-west-1" do
+ options = { 'LocationConstraint' => nil,
+ 'x-amz-acl' => 'private' }
+ @fog_mock.should_receive(:put_bucket).
+ with('name', options)
+ @s3.put_bucket 'name', 'us-east-1'
+ end
- it "should set object acls" do
- @fog_mock.should_receive(:put_object_acl).
- with 'bucket', 'object', 'grants'
- @s3.put_object_acl 'bucket', 'object', 'grants'
end
-
- it "should call put bucket with location_constraint us-west-1" do
- options = { 'LocationConstraint' => 'us-west-1',
- 'x-amz-acl' => 'private' }
- @fog_mock.should_receive(:put_bucket).
- with('name', options)
- @s3.put_bucket 'name', 'us-west-1'
- end
-
- it "should call put bucket with location_constraint nil when region us-west-1" do
- options = { 'LocationConstraint' => nil,
- 'x-amz-acl' => 'private' }
- @fog_mock.should_receive(:put_bucket).
- with('name', options)
- @s3.put_bucket 'name', 'us-east-1'
- end
-
-
end