diff --git a/lib/fog/storage/openstack.rb b/lib/fog/storage/openstack.rb index 5e5054183..0f0bb2a6c 100644 --- a/lib/fog/storage/openstack.rb +++ b/lib/fog/storage/openstack.rb @@ -74,7 +74,15 @@ def initialize(options = {}) require_mime_types @openstack_api_key = options[:openstack_api_key] @openstack_username = options[:openstack_username] - @path = '/v1/AUTH_1234' + @openstack_management_url = options[:openstack_management_url] || 'http://example:8774/v2/AUTH_1234' + + @openstack_management_uri = URI.parse(@openstack_management_url) + + @host = @openstack_management_uri.host + @path = @openstack_management_uri.path + @path.sub!(%r{/$}, '') + @port = @openstack_management_uri.port + @scheme = @openstack_management_uri.scheme end def data diff --git a/lib/fog/storage/openstack/requests/public_url.rb b/lib/fog/storage/openstack/requests/public_url.rb index 63a1e3948..a4210da23 100644 --- a/lib/fog/storage/openstack/requests/public_url.rb +++ b/lib/fog/storage/openstack/requests/public_url.rb @@ -1,7 +1,7 @@ module Fog module Storage class OpenStack - class Real + module PublicUrl # Get public_url for an object # # ==== Parameters @@ -21,6 +21,14 @@ def url "#{@scheme}://#{@host}:#{@port}#{@path}" end end + + class Real + include PublicUrl + end + + class Mock + include PublicUrl + end end end end diff --git a/lib/fog/storage/openstack/requests/put_object.rb b/lib/fog/storage/openstack/requests/put_object.rb index 51615c53f..3057510d1 100644 --- a/lib/fog/storage/openstack/requests/put_object.rb +++ b/lib/fog/storage/openstack/requests/put_object.rb @@ -36,6 +36,30 @@ def put_object(container, object, data, options = {}, &block) request(params) end end + + class Mock + require 'digest' + + def put_object(container, object, data, options = {}, &block) + dgst = Digest::MD5.new + if block_given? + Kernel.loop do + chunk = yield + break if chunk.empty? + dgst.update chunk + end + elsif data.kind_of?(String) + dgst.update data + else + dgst.file data + end + response = Excon::Response.new + response.status = 201 + response.body = '' + response.headers = {'ETag' => dgst.hexdigest} + response + end + end end end end diff --git a/test/requests/storage/object_tests.rb b/test/requests/storage/object_tests.rb index 29101e12c..42dcaf16d 100644 --- a/test/requests/storage/object_tests.rb +++ b/test/requests/storage/object_tests.rb @@ -31,14 +31,12 @@ def override_path(path) describe "success" do it "#put_object('fogobjecttests', 'fog_object')" do - skip if Fog.mocking? resp = Fog::Storage[:openstack].put_object('fogobjecttests', 'fog_object', lorem_file) resp.headers['ETag'].must_equal '80d7930fe13ff4e45156b6581656a247' end describe "with_object" do before do - skip if Fog.mocking? file = lorem_file resp = Fog::Storage[:openstack].put_object('fogobjecttests', 'fog_object', file) file.close @@ -118,7 +116,6 @@ def override_path(path) describe "put_object with block" do it "#put_object('fogobjecttests', 'fog_object', &block)" do - skip if Fog.mocking? begin file = lorem_file buffer_size = file.stat.size / 2 # chop it up into two buffers @@ -133,13 +130,11 @@ def override_path(path) describe "with_object" do before do - unless Fog.mocking? - file = lorem_file - Fog::Storage[:openstack].put_object('fogobjecttests', 'fog_block_object', nil) do - file.read(file.stat.size).to_s - end - file.close + file = lorem_file + Fog::Storage[:openstack].put_object('fogobjecttests', 'fog_block_object', nil) do + file.read(file.stat.size).to_s end + file.close end it "#get_object" do