1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/tests/openstack/requests/storage/object_tests.rb
2014-03-21 09:14:30 -04:00

198 lines
7 KiB
Ruby

Shindo.tests('Fog::Storage[:openstack] | object requests', ["openstack"]) do
unless Fog.mocking?
@directory = Fog::Storage[:openstack].directories.create(:key => 'fogobjecttests')
end
module OpenStackStorageHelpers
def override_path(path)
@path = path
end
end
tests('success') do
tests("#put_object('fogobjecttests', 'fog_object')").succeeds do
pending if Fog.mocking?
Fog::Storage[:openstack].put_object('fogobjecttests', 'fog_object', lorem_file)
end
tests("#get_object('fogobjectests', 'fog_object')").succeeds do
pending if Fog.mocking?
Fog::Storage[:openstack].get_object('fogobjecttests', 'fog_object').body == lorem_file.read
end
tests("#get_object('fogobjecttests', 'fog_object', &block)").succeeds do
pending if Fog.mocking?
data = ''
Fog::Storage[:openstack].get_object('fogobjecttests', 'fog_object') do |chunk, remaining_bytes, total_bytes|
data << chunk
end
data == lorem_file.read
end
tests("#head_object('fogobjectests', 'fog_object')").succeeds do
pending if Fog.mocking?
Fog::Storage[:openstack].head_object('fogobjecttests', 'fog_object')
end
tests("#delete_object('fogobjecttests', 'fog_object')").succeeds do
pending if Fog.mocking?
Fog::Storage[:openstack].delete_object('fogobjecttests', 'fog_object')
end
def test_temp_url(url_s, time, desired_scheme)
object_url = URI.parse(url_s)
query_params = URI.decode_www_form(object_url.query)
tests("the link is #{desired_scheme}").returns(desired_scheme) { object_url.scheme }
tests('the container and object are present in the path').returns(true) do
(object_url.path =~ /\/#{@directory.identity}\/fog_object/) != nil
end
tests('a temp_url_sig is present').returns(true) do
query_params.any? { |p| p[0] == 'temp_url_sig' }
end
tests('temp_url_expires matches the expiration').returns(true) do
query_params.any? { |p| p == ['temp_url_expires', time.to_i.to_s] }
end
end
tests("#get_object_http_url('directory.identity', 'fog_object', expiration timestamp)").succeeds do
pending if Fog.mocking?
ts = Time.at(1395343213)
url_s = Fog::Storage[:openstack].get_object_http_url(@directory.identity, 'fog_object', ts)
test_temp_url(url_s, ts, 'http')
end
tests("#get_object_https_url('directory.identity', 'fog_object', expiration timestamp)").succeeds do
pending if Fog.mocking?
ts = Time.at(1395343215)
url_s = Fog::Storage[:openstack].get_object_https_url(@directory.identity, 'fog_object', ts)
test_temp_url(url_s, ts, 'https')
end
tests("put_object with block") do
pending if Fog.mocking?
tests("#put_object('fogobjecttests', 'fog_object', &block)").succeeds do
begin
file = lorem_file
buffer_size = file.stat.size / 2 # chop it up into two buffers
Fog::Storage[:openstack].put_object('fogobjecttests', 'fog_block_object', nil) do
file.read(buffer_size).to_s
end
ensure
file.close
end
end
tests('#get_object').succeeds do
Fog::Storage[:openstack].get_object('fogobjecttests', 'fog_block_object').body == lorem_file.read
end
tests('#delete_object').succeeds do
Fog::Storage[:openstack].delete_object('fogobjecttests', 'fog_block_object')
end
end
tests('#delete_multiple_objects') do
pending if Fog.mocking?
Fog::Storage[:openstack].put_object('fogobjecttests', 'fog_object', lorem_file)
Fog::Storage[:openstack].put_object('fogobjecttests', 'fog_object2', lorem_file)
Fog::Storage[:openstack].directories.create(:key => 'fogobjecttests2')
Fog::Storage[:openstack].put_object('fogobjecttests2', 'fog_object', lorem_file)
expected = {
"Number Not Found" => 0,
"Response Status" => "200 OK",
"Errors" => [],
"Number Deleted" => 2,
"Response Body" => ""
}
returns(expected, 'deletes multiple objects') do
Fog::Storage[:openstack].delete_multiple_objects('fogobjecttests', ['fog_object', 'fog_object2']).body
end
returns(expected, 'deletes object and container') do
Fog::Storage[:openstack].delete_multiple_objects(nil, ['fogobjecttests2/fog_object', 'fogobjecttests2']).body
end
end
end
tests('failure') do
tests("#get_object('fogobjecttests', 'fog_non_object')").raises(Fog::Storage::OpenStack::NotFound) do
pending if Fog.mocking?
Fog::Storage[:openstack].get_object('fogobjecttests', 'fog_non_object')
end
tests("#get_object('fognoncontainer', 'fog_non_object')").raises(Fog::Storage::OpenStack::NotFound) do
pending if Fog.mocking?
Fog::Storage[:openstack].get_object('fognoncontainer', 'fog_non_object')
end
tests("#head_object('fogobjecttests', 'fog_non_object')").raises(Fog::Storage::OpenStack::NotFound) do
pending if Fog.mocking?
Fog::Storage[:openstack].head_object('fogobjecttests', 'fog_non_object')
end
tests("#head_object('fognoncontainer', 'fog_non_object')").raises(Fog::Storage::OpenStack::NotFound) do
pending if Fog.mocking?
Fog::Storage[:openstack].head_object('fognoncontainer', 'fog_non_object')
end
tests("#delete_object('fogobjecttests', 'fog_non_object')").raises(Fog::Storage::OpenStack::NotFound) do
pending if Fog.mocking?
Fog::Storage[:openstack].delete_object('fogobjecttests', 'fog_non_object')
end
tests("#delete_object('fognoncontainer', 'fog_non_object')").raises(Fog::Storage::OpenStack::NotFound) do
pending if Fog.mocking?
Fog::Storage[:openstack].delete_object('fognoncontainer', 'fog_non_object')
end
tests('#delete_multiple_objects') do
pending if Fog.mocking?
expected = {
"Number Not Found" => 2,
"Response Status" => "200 OK",
"Errors" => [],
"Number Deleted" => 0,
"Response Body" => ""
}
returns(expected, 'reports missing objects') do
Fog::Storage[:openstack].delete_multiple_objects('fogobjecttests', ['fog_non_object', 'fog_non_object2']).body
end
returns(expected, 'reports missing container') do
Fog::Storage[:openstack].delete_multiple_objects('fognoncontainer', ['fog_non_object', 'fog_non_object2']).body
end
tests('deleting non-empty container') do
Fog::Storage[:openstack].put_object('fogobjecttests', 'fog_object', lorem_file)
expected = {
"Number Not Found" => 0,
"Response Status" => "400 Bad Request",
"Errors" => [['fogobjecttests', '409 Conflict']],
"Number Deleted" => 1,
"Response Body" => ""
}
returns(expected, 'deletes object but not container') do
Fog::Storage[:openstack].delete_multiple_objects(nil, ['fogobjecttests', 'fogobjecttests/fog_object']).body
end
end
end
end
unless Fog.mocking?
@directory.destroy
end
end