Skip to content

Commit 55abb2c

Browse files
authored
Merge pull request #375 from timuralp/improvement/mock-put-public_url
Mocks for put_object and public_url
2 parents 04dd91d + 40e150a commit 55abb2c

File tree

4 files changed

+46
-11
lines changed

4 files changed

+46
-11
lines changed

lib/fog/storage/openstack.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,15 @@ def initialize(options = {})
7474
require_mime_types
7575
@openstack_api_key = options[:openstack_api_key]
7676
@openstack_username = options[:openstack_username]
77-
@path = '/v1/AUTH_1234'
77+
@openstack_management_url = options[:openstack_management_url] || 'http://example:8774/v2/AUTH_1234'
78+
79+
@openstack_management_uri = URI.parse(@openstack_management_url)
80+
81+
@host = @openstack_management_uri.host
82+
@path = @openstack_management_uri.path
83+
@path.sub!(%r{/$}, '')
84+
@port = @openstack_management_uri.port
85+
@scheme = @openstack_management_uri.scheme
7886
end
7987

8088
def data

lib/fog/storage/openstack/requests/public_url.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module Fog
22
module Storage
33
class OpenStack
4-
class Real
4+
module PublicUrl
55
# Get public_url for an object
66
#
77
# ==== Parameters
@@ -21,6 +21,14 @@ def url
2121
"#{@scheme}://#{@host}:#{@port}#{@path}"
2222
end
2323
end
24+
25+
class Real
26+
include PublicUrl
27+
end
28+
29+
class Mock
30+
include PublicUrl
31+
end
2432
end
2533
end
2634
end

lib/fog/storage/openstack/requests/put_object.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,30 @@ def put_object(container, object, data, options = {}, &block)
3636
request(params)
3737
end
3838
end
39+
40+
class Mock
41+
require 'digest'
42+
43+
def put_object(container, object, data, options = {}, &block)
44+
dgst = Digest::MD5.new
45+
if block_given?
46+
Kernel.loop do
47+
chunk = yield
48+
break if chunk.empty?
49+
dgst.update chunk
50+
end
51+
elsif data.kind_of?(String)
52+
dgst.update data
53+
else
54+
dgst.file data
55+
end
56+
response = Excon::Response.new
57+
response.status = 201
58+
response.body = ''
59+
response.headers = {'ETag' => dgst.hexdigest}
60+
response
61+
end
62+
end
3963
end
4064
end
4165
end

test/requests/storage/object_tests.rb

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,12 @@ def override_path(path)
3131

3232
describe "success" do
3333
it "#put_object('fogobjecttests', 'fog_object')" do
34-
skip if Fog.mocking?
3534
resp = Fog::Storage[:openstack].put_object('fogobjecttests', 'fog_object', lorem_file)
3635
resp.headers['ETag'].must_equal '80d7930fe13ff4e45156b6581656a247'
3736
end
3837

3938
describe "with_object" do
4039
before do
41-
skip if Fog.mocking?
4240
file = lorem_file
4341
resp = Fog::Storage[:openstack].put_object('fogobjecttests', 'fog_object', file)
4442
file.close
@@ -118,7 +116,6 @@ def override_path(path)
118116

119117
describe "put_object with block" do
120118
it "#put_object('fogobjecttests', 'fog_object', &block)" do
121-
skip if Fog.mocking?
122119
begin
123120
file = lorem_file
124121
buffer_size = file.stat.size / 2 # chop it up into two buffers
@@ -133,13 +130,11 @@ def override_path(path)
133130

134131
describe "with_object" do
135132
before do
136-
unless Fog.mocking?
137-
file = lorem_file
138-
Fog::Storage[:openstack].put_object('fogobjecttests', 'fog_block_object', nil) do
139-
file.read(file.stat.size).to_s
140-
end
141-
file.close
133+
file = lorem_file
134+
Fog::Storage[:openstack].put_object('fogobjecttests', 'fog_block_object', nil) do
135+
file.read(file.stat.size).to_s
142136
end
137+
file.close
143138
end
144139

145140
it "#get_object" do

0 commit comments

Comments
 (0)