diff --git a/lib/fog/aws/requests/storage/hash_to_acl.rb b/lib/fog/aws/requests/storage/hash_to_acl.rb index e9699bf2d..31431f5dd 100644 --- a/lib/fog/aws/requests/storage/hash_to_acl.rb +++ b/lib/fog/aws/requests/storage/hash_to_acl.rb @@ -15,18 +15,21 @@ DATA acl['AccessControlList'].each do |grant| data << " \n" - type = case grant['Grantee'].keys.sort + case grant['Grantee'].keys.sort when ['DisplayName', 'ID'] - 'CanonicalUser' + data << " \n" + data << " #{grant['Grantee']['ID']}\n" + data << " #{grant['Grantee']['DisplayName']}\n" + data << " \n" when ['EmailAddress'] - 'AmazonCustomerByEmail' + data << " \n" + data << " #{grant['Grantee']['EmailAddress']}\n" + data << " \n" when ['URI'] - 'Group' + data << " \n" + data << " #{grant['Grantee']['URI']}\n" + data << " \n" end - data << " \n" - data << " #{grant['Grantee']['ID']}\n" - data << " #{grant['Grantee']['DisplayName']}\n" - data << " \n" data << " #{grant['Permission']}\n" data << " \n" end @@ -39,6 +42,6 @@ DATA data end end - end + end end diff --git a/tests/aws/requests/storage/bucket_tests.rb b/tests/aws/requests/storage/bucket_tests.rb index ce12067ce..c0ad578f3 100644 --- a/tests/aws/requests/storage/bucket_tests.rb +++ b/tests/aws/requests/storage/bucket_tests.rb @@ -1,4 +1,5 @@ Shindo.tests('Fog::Storage[:aws] | bucket requests', [:aws]) do + @aws_bucket_name = 'fogbuckettests-' + Time.now.to_i.to_s(32) tests('success') do @@ -33,30 +34,31 @@ Shindo.tests('Fog::Storage[:aws] | bucket requests', [:aws]) do } } - tests("#put_bucket('fogbuckettests')").succeeds do - Fog::Storage[:aws].put_bucket('fogbuckettests') + tests("#put_bucket('#{@aws_bucket_name}')").succeeds do + Fog::Storage[:aws].put_bucket(@aws_bucket_name) + @aws_owner = Fog::Storage[:aws].get_bucket_acl(Fog::Storage[:aws].directories.first.key).body['Owner'] end tests("#get_service").formats(@service_format) do Fog::Storage[:aws].get_service.body end - file = Fog::Storage[:aws].directories.get('fogbuckettests').files.create(:body => 'y', :key => 'x') + file = Fog::Storage[:aws].directories.get(@aws_bucket_name).files.create(:body => 'y', :key => 'x') - tests("#get_bucket('fogbuckettests)").formats(@bucket_format) do - Fog::Storage[:aws].get_bucket('fogbuckettests').body + tests("#get_bucket('#{@aws_bucket_name}')").formats(@bucket_format) do + Fog::Storage[:aws].get_bucket(@aws_bucket_name).body end file.destroy - file1 = Fog::Storage[:aws].directories.get('fogbuckettests').files.create(:body => 'a', :key => 'a/a1/file1') - file2 = Fog::Storage[:aws].directories.get('fogbuckettests').files.create(:body => 'ab', :key => 'a/file2') - file3 = Fog::Storage[:aws].directories.get('fogbuckettests').files.create(:body => 'abc', :key => 'b/file3') - file4 = Fog::Storage[:aws].directories.get('fogbuckettests').files.create(:body => 'abcd', :key => 'file4') + file1 = Fog::Storage[:aws].directories.get(@aws_bucket_name).files.create(:body => 'a', :key => 'a/a1/file1') + file2 = Fog::Storage[:aws].directories.get(@aws_bucket_name).files.create(:body => 'ab', :key => 'a/file2') + file3 = Fog::Storage[:aws].directories.get(@aws_bucket_name).files.create(:body => 'abc', :key => 'b/file3') + file4 = Fog::Storage[:aws].directories.get(@aws_bucket_name).files.create(:body => 'abcd', :key => 'file4') - tests("#get_bucket('fogbuckettests')") do + tests("#get_bucket('#{@aws_bucket_name}')") do before do - @bucket = Fog::Storage[:aws].get_bucket('fogbuckettests') + @bucket = Fog::Storage[:aws].get_bucket(@aws_bucket_name) end tests(".body['Contents'].map{|n| n['Key']}").returns(["a/a1/file1", "a/file2", "b/file3", "file4"]) do @@ -72,9 +74,9 @@ Shindo.tests('Fog::Storage[:aws] | bucket requests', [:aws]) do end end - tests("#get_bucket('fogbuckettests', 'delimiter' => '/')") do + tests("#get_bucket('#{@aws_bucket_name}', 'delimiter' => '/')") do before do - @bucket = Fog::Storage[:aws].get_bucket('fogbuckettests', 'delimiter' => '/') + @bucket = Fog::Storage[:aws].get_bucket(@aws_bucket_name, 'delimiter' => '/') end tests(".body['Contents'].map{|n| n['Key']}").returns(['file4']) do @@ -86,9 +88,9 @@ Shindo.tests('Fog::Storage[:aws] | bucket requests', [:aws]) do end end - tests("#get_bucket('fogbuckettests', 'delimiter' => '/', 'prefix' => 'a/')") do + tests("#get_bucket('#{@aws_bucket_name}', 'delimiter' => '/', 'prefix' => 'a/')") do before do - @bucket = Fog::Storage[:aws].get_bucket('fogbuckettests', 'delimiter' => '/', 'prefix' => 'a/') + @bucket = Fog::Storage[:aws].get_bucket(@aws_bucket_name, 'delimiter' => '/', 'prefix' => 'a/') end tests(".body['Contents'].map{|n| n['Key']}").returns(['a/file2']) do @@ -102,63 +104,87 @@ Shindo.tests('Fog::Storage[:aws] | bucket requests', [:aws]) do file1.destroy; file2.destroy; file3.destroy; file4.destroy - tests("#get_bucket_location('fogbuckettests)").formats('LocationConstraint' => NilClass) do - Fog::Storage[:aws].get_bucket_location('fogbuckettests').body + tests("#get_bucket_location('#{@aws_bucket_name}')").formats('LocationConstraint' => NilClass) do + Fog::Storage[:aws].get_bucket_location(@aws_bucket_name).body end - tests("#get_request_payment('fogbuckettests')").formats('Payer' => String) do - Fog::Storage[:aws].get_request_payment('fogbuckettests').body + tests("#get_request_payment('#{@aws_bucket_name}')").formats('Payer' => String) do + Fog::Storage[:aws].get_request_payment(@aws_bucket_name).body end - tests("#put_request_payment('fogbuckettests', 'Requester')").succeeds do - Fog::Storage[:aws].put_request_payment('fogbuckettests', 'Requester') + tests("#put_request_payment('#{@aws_bucket_name}', 'Requester')").succeeds do + Fog::Storage[:aws].put_request_payment(@aws_bucket_name, 'Requester') end - tests("#put_bucket_website('fogbuckettests', 'index.html')").succeeds do + tests("#put_bucket_website('#{@aws_bucket_name}', 'index.html')").succeeds do pending if Fog.mocking? - Fog::Storage[:aws].put_bucket_website('fogbuckettests', 'index.html') + Fog::Storage[:aws].put_bucket_website(@aws_bucket_name, 'index.html') end - tests("#delete_bucket_website('fogbuckettests')").succeeds do + tests("#put_bucket_acl('#{@aws_bucket_name}', 'private')").succeeds do + Fog::Storage[:aws].put_bucket_acl(@aws_bucket_name, 'private') + end + + acl = { + 'Owner' => @aws_owner, + 'AccessControlList' => [ + { + 'Grantee' => @aws_owner, + 'Permission' => "FULL_CONTROL" + } + ] + } + tests("#put_bucket_acl('#{@aws_bucket_name}', hash with id)").returns(acl) do pending if Fog.mocking? - Fog::Storage[:aws].delete_bucket_website('fogbuckettests') + + Fog::Storage[:aws].put_bucket_acl(@aws_bucket_name, acl) + Fog::Storage[:aws].get_bucket_acl(@aws_bucket_name).body end - tests("#delete_bucket('fogbuckettests')").succeeds do - Fog::Storage[:aws].delete_bucket('fogbuckettests') - end - - tests("#put_bucket_acl('fogbuckettests', 'private')").succeeds do - Fog::Storage[:aws].put_bucket_acl('fogbuckettests', 'private') - end - - tests("#put_bucket_acl('fogbuckettests', hash)").returns(true) do - Fog::Storage[:aws].put_bucket_acl('fogbuckettests', { - 'Owner' => { 'ID' => "8a6925ce4adf5f21c32aa379004fef", 'DisplayName' => "mtd@amazon.com" }, + tests("#put_bucket_acl('#{@aws_bucket_name}', hash with email)").returns({ + 'Owner' => @aws_owner, 'AccessControlList' => [ - { - 'Grantee' => { 'ID' => "8a6925ce4adf588a4532142d3f74dd8c71fa124b1ddee97f21c32aa379004fef", 'DisplayName' => "mtd@amazon.com" }, - 'Permission' => "FULL_CONTROL" + { + 'Grantee' => { 'ID' => 'f62f0218873cfa5d56ae9429ae75a592fec4fd22a5f24a20b1038a7db9a8f150', 'DisplayName' => 'mtd' }, + 'Permission' => "FULL_CONTROL" + } + ] + }) do + pending if Fog.mocking? + Fog::Storage[:aws].put_bucket_acl(@aws_bucket_name, { + 'Owner' => @aws_owner, + 'AccessControlList' => [ + { + 'Grantee' => { 'EmailAddress' => 'mtd@amazon.com' }, + 'Permission' => "FULL_CONTROL" } ] }) - Fog::Storage[:aws].get_bucket_acl('fogbuckettests').body == <<-BODY - - - 8a6925ce4adf5f21c32aa379004fef - mtd@amazon.com - - - - - 8a6925ce4adf588a4532142d3f74dd8c71fa124b1ddee97f21c32aa379004fef - mtd@amazon.com - - FULL_CONTROL - - - -BODY + Fog::Storage[:aws].get_bucket_acl(@aws_bucket_name).body + end + + acl = { + 'Owner' => @aws_owner, + 'AccessControlList' => [ + { + 'Grantee' => { 'URI' => 'http://acs.amazonaws.com/groups/global/AllUsers' }, + 'Permission' => "FULL_CONTROL" + } + ] + } + tests("#put_bucket_acl('#{@aws_bucket_name}', hash with uri)").returns(acl) do + pending if Fog.mocking? + Fog::Storage[:aws].put_bucket_acl(@aws_bucket_name, acl) + Fog::Storage[:aws].get_bucket_acl(@aws_bucket_name).body + end + + tests("#delete_bucket_website('#{@aws_bucket_name}')").succeeds do + pending if Fog.mocking? + Fog::Storage[:aws].delete_bucket_website(@aws_bucket_name) + end + + tests("#delete_bucket('#{@aws_bucket_name}')").succeeds do + Fog::Storage[:aws].delete_bucket(@aws_bucket_name) end end @@ -201,4 +227,6 @@ BODY end + # don't keep the bucket around + Fog::Storage[:aws].delete_bucket(@aws_bucket_name) rescue nil end diff --git a/tests/aws/requests/storage/object_tests.rb b/tests/aws/requests/storage/object_tests.rb index 04bf48722..50ebf2405 100644 --- a/tests/aws/requests/storage/object_tests.rb +++ b/tests/aws/requests/storage/object_tests.rb @@ -1,6 +1,6 @@ Shindo.tests('AWS::Storage | object requests', ['aws']) do - - @directory = Fog::Storage[:aws].directories.create(:key => 'fogobjecttests') + @directory = Fog::Storage[:aws].directories.create(:key => 'fogobjecttests-' + Time.now.to_i.to_s(32)) + @aws_owner = Fog::Storage[:aws].get_bucket_acl(@directory.key).body['Owner'] tests('success') do @@ -34,32 +34,52 @@ Shindo.tests('AWS::Storage | object requests', ['aws']) do Fog::Storage[:aws].put_object_acl(@directory.identity, 'fog_object', 'private') end - tests("#put_object_acl('#{@directory.identity}', 'fog_object', hash)").returns(true) do - Fog::Storage[:aws].put_object_acl(@directory.identity, 'fog_object', { - 'Owner' => { 'ID' => "8a6925ce4adf5f21c32aa379004fef", 'DisplayName' => "mtd@amazon.com" }, + acl = { + 'Owner' => @aws_owner, + 'AccessControlList' => [ + { + 'Grantee' => @aws_owner, + 'Permission' => "FULL_CONTROL" + } + ]} + tests("#put_object_acl('#{@directory.identity}', 'fog_object', hash with id)").returns(acl) do + pending if Fog.mocking? + Fog::Storage[:aws].put_object_acl(@directory.identity, 'fog_object', acl) + Fog::Storage[:aws].get_object_acl(@directory.identity, 'fog_object').body + end + + tests("#put_object_acl('#{@directory.identity}', 'fog_object', hash with email)").returns({ + 'Owner' => @aws_owner, 'AccessControlList' => [ - { - 'Grantee' => { 'ID' => "8a6925ce4adf588a4532142d3f74dd8c71fa124b1ddee97f21c32aa379004fef", 'DisplayName' => "mtd@amazon.com" }, - 'Permission' => "FULL_CONTROL" + { + 'Grantee' => { 'ID' => 'f62f0218873cfa5d56ae9429ae75a592fec4fd22a5f24a20b1038a7db9a8f150', 'DisplayName' => 'mtd' }, + 'Permission' => "FULL_CONTROL" + } + ]}) do + pending if Fog.mocking? + Fog::Storage[:aws].put_object_acl(@directory.identity, 'fog_object', { + 'Owner' => @aws_owner, + 'AccessControlList' => [ + { + 'Grantee' => { 'EmailAddress' => 'mtd@amazon.com' }, + 'Permission' => "FULL_CONTROL" } ]}) - Fog::Storage[:aws].get_object_acl(@directory.identity, 'fog_object').body == <<-BODY - - - 8a6925ce4adf5f21c32aa379004fef - mtd@amazon.com - - - - - 8a6925ce4adf588a4532142d3f74dd8c71fa124b1ddee97f21c32aa379004fef - mtd@amazon.com - - FULL_CONTROL - - - -BODY + Fog::Storage[:aws].get_object_acl(@directory.identity, 'fog_object').body + end + + acl = { + 'Owner' => @aws_owner, + 'AccessControlList' => [ + { + 'Grantee' => { 'URI' => 'http://acs.amazonaws.com/groups/global/AllUsers' }, + 'Permission' => "FULL_CONTROL" + } + ]} + tests("#put_object_acl('#{@directory.identity}', 'fog_object', hash with uri)").returns(acl) do + pending if Fog.mocking? + Fog::Storage[:aws].put_object_acl(@directory.identity, 'fog_object', acl) + Fog::Storage[:aws].get_object_acl(@directory.identity, 'fog_object').body end tests("#delete_object('#{@directory.identity}', 'fog_object')").succeeds do