mirror of
https://github.com/fog/fog-aws.git
synced 2022-11-09 13:50:52 -05:00
initial import
* take the liberty of correcting Aws naming
This commit is contained in:
parent
095fa8763f
commit
d48d376e9c
1261 changed files with 72105 additions and 5 deletions
87
tests/models/storage/directory_tests.rb
Normal file
87
tests/models/storage/directory_tests.rb
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
Shindo.tests("Storage[:aws] | directory", ["aws"]) do
|
||||
|
||||
directory_attributes = {
|
||||
:key => uniq_id('fogdirectorytests')
|
||||
}
|
||||
|
||||
model_tests(Fog::Storage[:aws].directories, directory_attributes, Fog.mocking?) do
|
||||
tests("#public_url").returns(nil) do
|
||||
@instance.public_url
|
||||
end
|
||||
|
||||
@instance.acl = 'public-read'
|
||||
@instance.save
|
||||
|
||||
tests("#public_url").returns(true) do
|
||||
if @instance.public_url =~ %r[\Ahttps://fogdirectorytests-[\da-f]+\.s3\.amazonaws\.com/\z]
|
||||
true
|
||||
else
|
||||
@instance.public_url
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
directory_attributes = {
|
||||
:key => uniq_id('different-region'),
|
||||
:location => 'eu-west-1',
|
||||
}
|
||||
|
||||
model_tests(Fog::Storage[:aws].directories, directory_attributes, Fog.mocking?) do
|
||||
tests("#location").returns('eu-west-1') do
|
||||
@instance.location
|
||||
end
|
||||
|
||||
tests("#location").returns('eu-west-1') do
|
||||
Fog::Storage[:aws].directories.get(@instance.identity).location
|
||||
end
|
||||
end
|
||||
|
||||
directory_attributes = {
|
||||
:key => uniq_id('fogdirectorytests')
|
||||
}
|
||||
|
||||
model_tests(Fog::Storage[:aws].directories, directory_attributes, Fog.mocking?) do
|
||||
|
||||
tests("#versioning=") do
|
||||
tests("#versioning=(true)").succeeds do
|
||||
@instance.versioning = true
|
||||
end
|
||||
|
||||
tests("#versioning=(true) sets versioning to 'Enabled'").returns('Enabled') do
|
||||
@instance.versioning = true
|
||||
@instance.service.get_bucket_versioning(@instance.key).body['VersioningConfiguration']['Status']
|
||||
end
|
||||
|
||||
tests("#versioning=(false)").succeeds do
|
||||
(@instance.versioning = false).equal? false
|
||||
end
|
||||
|
||||
tests("#versioning=(false) sets versioning to 'Suspended'").returns('Suspended') do
|
||||
@instance.versioning = false
|
||||
@instance.service.get_bucket_versioning(@instance.key).body['VersioningConfiguration']['Status']
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
model_tests(Fog::Storage[:aws].directories, directory_attributes, Fog.mocking?) do
|
||||
|
||||
tests("#versioning?") do
|
||||
tests("#versioning? false if not enabled").returns(false) do
|
||||
@instance.versioning?
|
||||
end
|
||||
|
||||
tests("#versioning? true if enabled").returns(true) do
|
||||
@instance.service.put_bucket_versioning(@instance.key, 'Enabled')
|
||||
@instance.versioning?
|
||||
end
|
||||
|
||||
tests("#versioning? false if suspended").returns(false) do
|
||||
@instance.service.put_bucket_versioning(@instance.key, 'Suspended')
|
||||
@instance.versioning?
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
92
tests/models/storage/file_tests.rb
Normal file
92
tests/models/storage/file_tests.rb
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
Shindo.tests("Storage[:aws] | file", ["aws"]) do
|
||||
|
||||
require 'tempfile'
|
||||
|
||||
file_attributes = {
|
||||
:key => 'fog_file_tests',
|
||||
:body => lorem_file,
|
||||
:public => true
|
||||
}
|
||||
|
||||
directory_attributes = {
|
||||
:key => uniq_id("fogfilestests")
|
||||
}
|
||||
|
||||
@directory = Fog::Storage[:aws].directories.create(directory_attributes)
|
||||
|
||||
model_tests(@directory.files, file_attributes, Fog.mocking?) do
|
||||
|
||||
tests("#version") do
|
||||
tests("#version should be null if versioning isn't enabled").returns(nil) do
|
||||
@instance.version
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@directory.versioning = true
|
||||
|
||||
model_tests(@directory.files, file_attributes, Fog.mocking?) do
|
||||
|
||||
tests("#version") do
|
||||
tests("#version should not be null if versioning is enabled").returns(false) do
|
||||
@instance.version == nil
|
||||
end
|
||||
end
|
||||
|
||||
@directory.files.create(:key => @instance.key)
|
||||
@instance.destroy
|
||||
|
||||
tests("#versions") do
|
||||
tests('#versions.size includes versions (including DeleteMarkers) for all keys').returns(3) do
|
||||
@instance.versions.size
|
||||
end
|
||||
|
||||
tests('#versions are all for the correct key').returns(true) do
|
||||
# JRuby 1.7.5+ issue causes a SystemStackError: stack level too deep
|
||||
# https://github.com/jruby/jruby/issues/1265
|
||||
pending if RUBY_PLATFORM == "java" and JRUBY_VERSION =~ /1\.7\.[5-8]/
|
||||
|
||||
@instance.versions.all? { |v| v.key == @instance.key }
|
||||
end
|
||||
end
|
||||
|
||||
tests("#destroy") do
|
||||
tests("#destroy a specific version should delete the version, not create a DeleteMarker").returns(2) do
|
||||
@instance.destroy('versionId' => @instance.version)
|
||||
@instance.versions.all.size
|
||||
end
|
||||
end
|
||||
|
||||
tests("multipart upload") do
|
||||
pending if Fog.mocking?
|
||||
|
||||
# A 6MB file
|
||||
@large_file = Tempfile.new("fog-test-aws-s3-multipart")
|
||||
6.times { @large_file.write("x" * (1024**2)) }
|
||||
@large_file.rewind
|
||||
|
||||
tests("#save(:multipart_chunk_size => 5242880)").succeeds do
|
||||
@directory.files.create(:key => 'multipart-upload', :body => @large_file, :multipart_chunk_size => 5242880)
|
||||
end
|
||||
|
||||
@large_file.close
|
||||
|
||||
end
|
||||
|
||||
acl = Fog::Storage[:aws].get_object_acl(@directory.key, @instance.key).body["AccessControlList"]
|
||||
|
||||
tests("#acl").returns(acl) do
|
||||
@instance.acl
|
||||
end
|
||||
|
||||
tests("#public?").returns(acl.any? {|grant| grant['Grantee']['URI'] == 'http://acs.amazonaws.com/groups/global/AllUsers' && grant['Permission'] == 'READ'}) do
|
||||
@instance.public?
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@directory.versions.each(&:destroy)
|
||||
@directory.destroy
|
||||
|
||||
end
|
||||
58
tests/models/storage/files_tests.rb
Normal file
58
tests/models/storage/files_tests.rb
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
Shindo.tests("Storage[:aws] | files", ["aws"]) do
|
||||
|
||||
file_attributes = {
|
||||
:key => 'fog_file_tests',
|
||||
:body => lorem_file,
|
||||
:public => true
|
||||
}
|
||||
|
||||
directory_attributes = {
|
||||
:key => uniq_id('fogfilestests')
|
||||
}
|
||||
|
||||
@directory = Fog::Storage[:aws].directories.create(directory_attributes)
|
||||
@directory.versioning = true
|
||||
|
||||
model_tests(@directory.files, file_attributes, Fog.mocking?) do
|
||||
|
||||
v1 = @instance.version
|
||||
v2 = @directory.service.put_object(@directory.key, @instance.key, 'version 2 content').headers['x-amz-version-id']
|
||||
v3 = @directory.service.delete_object(@directory.key, @instance.key).headers['x-amz-version-id']
|
||||
v4 = @directory.service.put_object(@directory.key, @instance.key, 'version 3 content').headers['x-amz-version-id']
|
||||
|
||||
tests("#get") do
|
||||
tests("#get without version fetches the latest version").returns(v4) do
|
||||
@directory.files.get(@instance.key).version
|
||||
end
|
||||
|
||||
tests("#get with version fetches that exact version").returns(v2) do
|
||||
@directory.files.get(@instance.key, 'versionId' => v2).version
|
||||
end
|
||||
|
||||
tests("#get with a deleted version returns nil").returns(nil) do
|
||||
pending # getting 405 Method Not Allowed
|
||||
@directory.files.get(@instance.key, 'versionId' => v3)
|
||||
end
|
||||
end
|
||||
|
||||
tests("#head") do
|
||||
tests("#head without version fetches the latest version").returns(v4) do
|
||||
@directory.files.head(@instance.key).version
|
||||
end
|
||||
|
||||
tests("#head with version fetches that exact version").returns(v2) do
|
||||
@directory.files.head(@instance.key, 'versionId' => v2).version
|
||||
end
|
||||
|
||||
tests("#head with a deleted version returns nil").returns(nil) do
|
||||
pending # getting 405 Method Not Allowed
|
||||
@directory.files.head(@instance.key, 'versionId' => v3)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@directory.versions.each(&:destroy)
|
||||
@directory.destroy
|
||||
|
||||
end
|
||||
26
tests/models/storage/url_tests.rb
Normal file
26
tests/models/storage/url_tests.rb
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
# encoding: utf-8
|
||||
|
||||
Shindo.tests('Aws | url', ["aws"]) do
|
||||
|
||||
|
||||
@storage = Fog::Storage.new(
|
||||
:provider => 'Aws',
|
||||
:aws_access_key_id => '123',
|
||||
:aws_secret_access_key => 'abc',
|
||||
:region => 'us-east-1'
|
||||
)
|
||||
|
||||
@file = @storage.directories.new(:key => 'fognonbucket').files.new(:key => 'test.txt')
|
||||
|
||||
now = Fog::Time.now
|
||||
if RUBY_VERSION > '1.8.7' # ruby 1.8.x doesn't provide hash ordering
|
||||
tests('#url w/ response-cache-control').returns(
|
||||
"https://fognonbucket.s3.amazonaws.com/test.txt?response-cache-control=No-cache&X-Amz-Expires=500&X-Amz-Date=#{now.to_iso8601_basic}&X-Amz-Algorithm=Aws4-HMAC-SHA256&X-Amz-Credential=123/#{now.utc.strftime('%Y%m%d')}/us-east-1/s3/aws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature="
|
||||
) do
|
||||
|
||||
@file.url(Time.now + 500, :query => { 'response-cache-control' => 'No-cache' }).gsub(/(X-Amz-Signature=)[0-9a-f]+\z/,'\\1')
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
52
tests/models/storage/version_tests.rb
Normal file
52
tests/models/storage/version_tests.rb
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
Shindo.tests("Storage[:aws] | version", ["aws"]) do
|
||||
|
||||
file_attributes = {
|
||||
:key => 'fog_file_tests',
|
||||
:body => lorem_file,
|
||||
:public => true
|
||||
}
|
||||
|
||||
directory_attributes = {
|
||||
:key => uniq_id('fogfilestests')
|
||||
}
|
||||
|
||||
@directory = Fog::Storage[:aws].directories.create(directory_attributes)
|
||||
@directory.versioning = true
|
||||
|
||||
model_tests(@directory.files, file_attributes, Fog.mocking?) do
|
||||
|
||||
@version_instance = @instance.versions.first
|
||||
@directory.service.put_object(@directory.key, @instance.key, 'second version content')
|
||||
|
||||
tests("#file") do
|
||||
tests("#file should return the object associated with the version").returns(@version_instance.version) do
|
||||
@version_instance.file.version
|
||||
end
|
||||
end
|
||||
|
||||
tests("#delete_marker") do
|
||||
tests("#delete_marker should be false if the version isn't a DeleteMarker'").returns(false) do
|
||||
@version_instance.delete_marker
|
||||
end
|
||||
|
||||
tests("#delete_marker should be true if the version is a DeleteMarker'").returns(true) do
|
||||
@instance.destroy
|
||||
|
||||
@instance.versions.all.first.delete_marker
|
||||
end
|
||||
end
|
||||
|
||||
tests("#destroy") do
|
||||
tests("#destroy removes the specific version").returns(false) do
|
||||
@version_instance.destroy
|
||||
|
||||
@instance.versions.all.map(&:version).include?(@version_instance.version)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@directory.versions.each(&:destroy)
|
||||
@directory.destroy
|
||||
|
||||
end
|
||||
56
tests/models/storage/versions_tests.rb
Normal file
56
tests/models/storage/versions_tests.rb
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
Shindo.tests("Storage[:aws] | versions", ["aws"]) do
|
||||
|
||||
file_attributes = {
|
||||
:key => 'fog_file_tests',
|
||||
:body => lorem_file,
|
||||
:public => true
|
||||
}
|
||||
|
||||
directory_attributes = {
|
||||
:key => uniq_id('fogfilestests')
|
||||
}
|
||||
|
||||
model_tests(Fog::Storage[:aws].directories, directory_attributes, Fog.mocking?) do
|
||||
@instance.versioning = true
|
||||
|
||||
versions = []
|
||||
versions << @instance.service.put_object(@instance.key, 'one', 'abcde').headers['x-amz-version-id']
|
||||
|
||||
puts versions.first
|
||||
|
||||
versions << @instance.service.put_object(@instance.key, 'one', '32423').headers['x-amz-version-id']
|
||||
versions << @instance.service.delete_object(@instance.key, 'one').headers['x-amz-version-id']
|
||||
versions.reverse!
|
||||
|
||||
puts versions.first
|
||||
|
||||
versions << @instance.service.put_object(@instance.key, 'two', 'aoeu').headers['x-amz-version-id']
|
||||
|
||||
tests('#versions') do
|
||||
tests('#versions.size includes versions (including DeleteMarkers) for all keys').returns(4) do
|
||||
@instance.versions.all.size
|
||||
end
|
||||
|
||||
tests('#versions returns the correct versions').returns(versions) do
|
||||
@instance.versions.all.map(&:version)
|
||||
end
|
||||
end
|
||||
|
||||
tests("#all") do
|
||||
tests("#all for a directory returns all versions, regardless of key").returns(versions) do
|
||||
@instance.versions.all.map(&:version)
|
||||
end
|
||||
|
||||
tests("#all for file returns only versions for that file").returns(1) do
|
||||
@instance.files.get('two').versions.all.map(&:version).size
|
||||
end
|
||||
|
||||
tests("#all for file returns only versions for that file").returns(versions.last) do
|
||||
@instance.files.get('two').versions.all.map(&:version).first
|
||||
end
|
||||
end
|
||||
|
||||
@instance.versions.each(&:destroy)
|
||||
end
|
||||
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue