cloudfiles 1.4.18 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,6 +6,8 @@ class CloudfilesConnectionTest < Test::Unit::TestCase
6
6
  def setup
7
7
  CloudFiles::Authentication.expects(:new).returns(true)
8
8
  @connection = CloudFiles::Connection.new('dummy_user', 'dummy_key')
9
+ @connection.storagescheme = "http"
10
+ @connection.storageport = 80
9
11
  @connection.storagehost = "test.setup.example"
10
12
  @connection.storagepath = "/dummypath/setup"
11
13
  @connection.cdnmgmthost = "test.cdn.example"
@@ -17,6 +19,13 @@ class CloudfilesConnectionTest < Test::Unit::TestCase
17
19
  assert_equal @connection.authkey, 'dummy_key'
18
20
  end
19
21
 
22
+ def test_initalize_with_hash
23
+ CloudFiles::Authentication.expects(:new).returns(true)
24
+ @hash_connection = CloudFiles::Connection.new(:username => 'dummy_user', :api_key => 'dummy_key')
25
+ assert_equal @hash_connection.authuser, "dummy_user"
26
+ assert_equal @hash_connection.authkey, "dummy_key"
27
+ end
28
+
20
29
  def test_authok
21
30
  # This would normally be set in CloudFiles::Authentication
22
31
  assert_equal @connection.authok?, false
@@ -30,326 +39,176 @@ class CloudfilesConnectionTest < Test::Unit::TestCase
30
39
  @connection.expects(:snet?).returns(true)
31
40
  assert_equal @connection.snet?, true
32
41
  end
33
-
34
- def test_cfreq_get
35
- build_net_http_object
36
- assert_nothing_raised do
37
- response = @connection.cfreq("GET", "test.server.example", "/dummypath", "80", "http")
38
- end
39
- end
40
-
41
- def test_cfreq_post
42
- build_net_http_object
43
- assert_nothing_raised do
44
- response = @connection.cfreq("POST", "test.server.example", "/dummypath", "80", "http")
45
- end
46
- end
47
-
48
- def test_cfreq_put
49
- build_net_http_object
50
- assert_nothing_raised do
51
- response = @connection.cfreq("PUT", "test.server.example", "/dummypath", "80", "http")
52
- end
53
- end
54
-
55
- def test_cfreq_delete
56
- build_net_http_object
57
- assert_nothing_raised do
58
- response = @connection.cfreq("DELETE", "test.server.example", "/dummypath", "80", "http")
59
- end
60
- end
61
-
62
- def test_cfreq_with_static_data
63
- build_net_http_object
64
- assert_nothing_raised do
65
- response = @connection.cfreq("PUT", "test.server.example", "/dummypath", "80", "http", {}, "This is string data")
66
- end
67
- end
68
-
69
- def test_cfreq_with_stream_data
70
- build_net_http_object
71
- require 'tempfile'
72
- file = Tempfile.new("test")
73
- assert_nothing_raised do
74
- response = @connection.cfreq("PUT", "test.server.example", "/dummypath", "80", "http", {}, file)
75
- end
76
- end
77
-
78
- def test_cfreq_head
79
- build_net_http_object
80
- assert_nothing_raised do
81
- response = @connection.cfreq("HEAD", "test.server.example", "/dummypath", "80", "http")
82
- end
83
- end
84
-
85
- def test_storage_request
86
- build_net_http_object
87
- assert_nothing_raised do
88
- response = @connection.storage_request("HEAD", "dummypath")
89
- end
90
- end
91
42
 
92
- def test_storage_request_adds_path
93
- build_net_http_object({}, {:method => "HEAD", :path => "#{@connection.storagepath}/dummypath"})
94
- assert_nothing_raised do
95
- response = @connection.storage_request("HEAD", "dummypath")
96
- end
97
- end
98
-
99
- def test_storage_path_does_not_add_path_when_absolute
100
- build_net_http_object({}, {:method => "HEAD", :path => "/dummypath"})
101
- assert_nothing_raised do
102
- response = @connection.storage_request("HEAD", "/dummypath")
103
- end
104
- end
105
-
106
- def test_cdn_request
107
- build_net_http_object
108
- assert_nothing_raised do
109
- response = @connection.cdn_request("HEAD", "dummypath")
110
- end
111
- end
112
-
113
- def test_cdn_request_adds_path
114
- build_net_http_object({}, {:method => "HEAD", :path => "#{@connection.cdnmgmtpath}/dummypath"})
115
- assert_nothing_raised do
116
- response = @connection.cdn_request("HEAD", "dummypath")
117
- end
118
- end
119
-
120
- def test_cdn_path_does_not_add_path_when_absolute
121
- build_net_http_object({}, {:method => "HEAD", :path => "/dummypath"})
122
- assert_nothing_raised do
123
- response = @connection.cdn_request("HEAD", "/dummypath")
124
- end
125
- end
126
-
127
- def test_net_http_raises_connection_exception
128
- Net::HTTP.expects(:new).raises(CloudFiles::Exception::Connection)
129
- assert_raises(CloudFiles::Exception::Connection) do
130
- response = @connection.cfreq("GET", "test.server.example", "/dummypath", "80", "http")
131
- end
132
- end
133
-
134
- def test_net_http_raises_one_eof_exception
135
- response = {'x-cdn-management-url' => 'http://cdn.example.com/path', 'x-storage-url' => 'http://cdn.example.com/storage', 'authtoken' => 'dummy_token'}
136
- response.stubs(:code).returns('204')
137
- server = stub(:use_ssl= => true, :verify_mode= => true, :start => true, :finish => true)
138
- server.stubs(:request).raises(EOFError).then.returns(response)
139
- Net::HTTP.stubs(:new).returns(server)
140
- assert_nothing_raised do
141
- response = @connection.cfreq("GET", "test.server.example", "/dummypath", "443", "https")
142
- end
143
- end
144
-
145
- def test_net_http_raises_one_expired_token
146
- CloudFiles::Authentication.expects(:new).returns(true)
147
- response = {'x-cdn-management-url' => 'http://cdn.example.com/path', 'x-storage-url' => 'http://cdn.example.com/storage', 'authtoken' => 'dummy_token'}
148
- response.stubs(:code).returns('401').then.returns('204')
149
- server = stub(:use_ssl= => true, :verify_mode= => true, :start => true)
150
- server.stubs(:request).returns(response)
151
- Net::HTTP.stubs(:new).returns(server)
152
- assert_nothing_raised do
153
- response = @connection.cfreq("GET", "test.server.example", "/dummypath", "80", "http")
154
- end
155
- end
156
-
157
- def test_net_http_raises_continual_eof_exceptions
158
- response = {'x-cdn-management-url' => 'http://cdn.example.com/path', 'x-storage-url' => 'http://cdn.example.com/storage', 'authtoken' => 'dummy_token'}
159
- response.stubs(:code).returns('204')
160
- server = stub(:use_ssl= => true, :verify_mode= => true, :start => true)
161
- server.stubs(:finish).returns(true)
162
- server.stubs(:request).raises(EOFError)
163
- CloudFiles::Connection.any_instance.stubs(:get_info).returns({:bytes => @bytes, :count => @count})
164
- Net::HTTP.stubs(:new).returns(server)
165
- assert_raises(CloudFiles::Exception::Connection) do
166
- response = @connection.cfreq("GET", "test.server.example", "/dummypath", "80", "http")
167
- end
168
- end
169
-
170
43
  def test_get_info
171
- build_net_http_object(:response => {'x-account-bytes-used' => '9999', 'x-account-container-count' => '5'}, :code => '204')
44
+ @connection.authok = true
45
+ response = {'x-account-bytes-used' => '9999', 'x-account-container-count' => '5'}
46
+ SwiftClient.stubs(:head_account).returns(response)
172
47
  @connection.get_info
173
48
  assert_equal @connection.bytes, 9999
174
49
  assert_equal @connection.count, 5
175
50
  end
176
51
 
177
52
  def test_get_info_fails
178
- build_net_http_object(:response => {'x-account-bytes-used' => '9999', 'x-account-container-count' => '5'}, :code => '999')
53
+ @connection.authok = true
54
+ SwiftClient.stubs(:head_account).raises(ClientException.new("foo", :http_status => 999))
179
55
  assert_raises(CloudFiles::Exception::InvalidResponse) do
180
56
  @connection.get_info
181
57
  end
182
58
  end
183
59
 
184
60
  def test_public_containers
185
- build_net_http_object(:body => "foo\nbar\nbaz", :code => '200', :response => {})
61
+ response = [nil, [{"name" => 'foo'}, {"name" => "bar"}, {"name" => "baz"}]]
62
+ SwiftClient.stubs(:get_account).returns(response)
186
63
  public_containers = @connection.public_containers
187
64
  assert_equal public_containers.size, 3
188
65
  assert_equal public_containers.first, 'foo'
189
66
  end
190
67
 
191
68
  def test_public_containers_empty
192
- build_net_http_object
69
+ response = [nil, []]
70
+ SwiftClient.stubs(:get_account).returns(response)
193
71
  public_containers = @connection.public_containers
194
72
  assert_equal public_containers.size, 0
195
73
  assert_equal public_containers.class, Array
196
74
  end
197
75
 
198
76
  def test_public_containers_exception
199
- build_net_http_object(:code => '999')
77
+ SwiftClient.stubs(:get_account).raises(ClientException.new("test_public_containers_exception", :http_status => 999))
200
78
  assert_raises(CloudFiles::Exception::InvalidResponse) do
201
79
  public_containers = @connection.public_containers
202
80
  end
203
81
  end
204
82
 
205
83
  def test_delete_container
206
- build_net_http_object
84
+ SwiftClient.stubs(:delete_container).returns(nil)
207
85
  response = @connection.delete_container("good_container")
208
86
  assert_equal response, true
209
87
  end
210
88
 
211
89
  def test_delete_nonempty_container
212
- build_net_http_object(:code => '409')
90
+ SwiftClient.stubs(:delete_container).raises(ClientException.new("test_delete_nonempty_container", :http_status => 409))
213
91
  assert_raises(CloudFiles::Exception::NonEmptyContainer) do
214
92
  response = @connection.delete_container("not_empty")
215
93
  end
216
94
  end
217
95
 
218
96
  def test_delete_unknown_container
219
- build_net_http_object(:code => '999')
97
+ SwiftClient.stubs(:delete_container).raises(ClientException.new("test_delete_unknown_container", :http_status => 999))
220
98
  assert_raises(CloudFiles::Exception::NoSuchContainer) do
221
99
  response = @connection.delete_container("not_empty")
222
100
  end
223
101
  end
224
102
 
225
103
  def test_create_container
226
- CloudFiles::Container.any_instance.stubs(:populate)
227
- build_net_http_object(:code => '201')
104
+ response = [ { "content-type"=>"application/json; charset=utf-8", "x-container-object-count"=>"1", "date"=>"", "x-container-bytes-used"=>"0", "content-length"=>"0", "accept-ranges"=>"bytes", "x-trans-id"=>"foo" }, [ { "bytes"=>0, "name"=>"foo.jpg", "content_type"=>"image/jpeg", "hash"=>"foo", "last_modified"=>"" } ] ]
105
+ CloudFiles::Container.any_instance.stubs(:container_metadata).returns(response[0])
106
+ SwiftClient.stubs(:put_container).returns(nil)
228
107
  container = @connection.create_container('good_container')
229
108
  assert_equal container.name, 'good_container'
230
109
  end
231
110
 
232
111
  def test_create_container_with_invalid_name
233
- CloudFiles::Container.stubs(:new)
234
112
  assert_raise(CloudFiles::Exception::Syntax) do
235
113
  container = @connection.create_container('a'*300)
236
114
  end
237
115
  end
238
116
 
239
117
  def test_create_container_name_filter
240
- CloudFiles::Container.any_instance.stubs(:populate)
241
- build_net_http_object(:code => '201')
242
118
  assert_raises(CloudFiles::Exception::Syntax) do
243
119
  container = @connection.create_container('this/has/bad?characters')
244
120
  end
245
121
  end
246
122
 
123
+ def test_create_container_error
124
+ SwiftClient.stubs(:put_container).raises(ClientException.new("test_create_container_general_error", :http_status => 999))
125
+ assert_raise(CloudFiles::Exception::InvalidResponse) do
126
+ container = @connection.create_container('foobar')
127
+ end
128
+ end
129
+
247
130
  def test_container_exists_true
248
- build_net_http_object
131
+ response = {"x-container-object-count"=>"0", "date"=>"Fri, 02 Sep 2011 20:27:15 GMT", "x-container-bytes-used"=>"0", "content-length"=>"0", "accept-ranges"=>"bytes", "x-trans-id"=>"foo"}
132
+ SwiftClient.stubs(:head_container).returns(response)
249
133
  assert_equal @connection.container_exists?('this_container_exists'), true
250
134
  end
251
135
 
252
136
  def test_container_exists_false
253
- build_net_http_object(:code => '999')
137
+ SwiftClient.stubs(:head_container).raises(ClientException.new("test_container_exists_false", :http_status => 404))
254
138
  assert_equal @connection.container_exists?('this_does_not_exist'), false
255
139
  end
256
140
 
257
141
  def test_fetch_exisiting_container
258
- CloudFiles::Container.any_instance.stubs(:populate)
259
- build_net_http_object
142
+ response = [ { "content-type"=>"application/json; charset=utf-8", "x-container-object-count"=>"1", "date"=>"", "x-container-bytes-used"=>"0", "content-length"=>"0", "accept-ranges"=>"bytes", "x-trans-id"=>"foo" }, [ { "bytes"=>0, "name"=>"foo.jpg", "content_type"=>"image/jpeg", "hash"=>"foo", "last_modified"=>"" } ] ]
143
+ CloudFiles::Container.any_instance.stubs(:container_metadata).returns(response[0])
260
144
  container = @connection.container('good_container')
261
145
  assert_equal container.name, 'good_container'
262
146
  end
263
147
 
264
148
  def test_fetch_nonexistent_container
265
149
  CloudFiles::Container.any_instance.stubs(:container_metadata).raises(CloudFiles::Exception::NoSuchContainer)
266
- build_net_http_object
267
150
  assert_raise(CloudFiles::Exception::NoSuchContainer) do
268
151
  container = @connection.container('bad_container')
269
152
  end
270
153
  end
271
154
 
272
155
  def test_containers
273
- build_net_http_object(:body => "foo\nbar\nbaz\nboo", :code => '200')
156
+ response = [nil, [{"name" => 'foo'}, {"name" => "bar"}, {"name" => "baz"}, {"name" => "boo"}]]
157
+ SwiftClient.stubs(:get_account).returns(response)
274
158
  containers = @connection.containers
275
159
  assert_equal containers.size, 4
276
160
  assert_equal containers.first, 'foo'
277
161
  end
278
162
 
279
163
  def test_containers_with_limit
280
- build_net_http_object_with_cfreq_expectations({:body => "foo", :code => '200'},
281
- {:path => includes('limit=1')})
164
+ response = [nil, [{"name" => 'foo'}]]
165
+ SwiftClient.stubs(:get_account).returns(response)
282
166
  containers = @connection.containers(1)
283
167
  assert_equal containers.size, 1
284
168
  assert_equal containers.first, 'foo'
285
169
  end
286
-
170
+
287
171
  def test_containers_with_marker
288
- build_net_http_object_with_cfreq_expectations({:body => "boo", :code => '200'},
289
- {:path => includes('marker=baz')})
172
+ response = [nil, [{"name" => "boo"}]]
173
+ SwiftClient.stubs(:get_account).returns(response)
290
174
  containers = @connection.containers(0, 'baz')
291
175
  assert_equal containers.size, 1
292
176
  assert_equal containers.first, 'boo'
293
177
  end
294
-
178
+
295
179
  def test_no_containers_yet
296
- build_net_http_object
180
+ response = [nil, []]
181
+ SwiftClient.stubs(:get_account).returns(response)
297
182
  containers = @connection.containers
298
183
  assert_equal containers.size, 0
299
184
  assert_equal containers.class, Array
300
185
  end
301
186
 
302
187
  def test_containers_bad_result
303
- build_net_http_object(:code => '999')
188
+ SwiftClient.stubs(:get_account).raises(ClientException.new("foo", :http_status => 999))
304
189
  assert_raises(CloudFiles::Exception::InvalidResponse) do
305
190
  containers = @connection.containers
306
191
  end
307
192
  end
308
193
 
309
194
  def test_containers_detail
310
- body = %{<?xml version="1.0" encoding="UTF-8"?>
311
- <account name="MossoCloudFS_012559c7-030d-4bbd-8538-7468896b0e7f">
312
- <container><name>Books</name><count>0</count><bytes>0</bytes></container><container><name>cftest</name><count>0</count><bytes>0</bytes></container><container><name>cszsa</name><count>1</count><bytes>82804</bytes></container><container><name>CWX</name><count>3</count><bytes>3645134</bytes></container><container><name>test</name><count>2</count><bytes>20</bytes></container><container><name>video</name><count>2</count><bytes>34141298</bytes></container><container><name>webpics</name><count>1</count><bytes>177496</bytes></container></account>}
313
- build_net_http_object(:body => body, :code => '200')
195
+ response = [nil, [{"bytes"=>"42", "name"=>"CWX", "count"=>"3"}]]
196
+ SwiftClient.stubs(:get_account).returns(response)
314
197
  details = @connection.containers_detail
315
198
  assert_equal details['CWX'][:count], "3"
316
199
  end
317
200
 
318
201
  def test_empty_containers_detail
319
- build_net_http_object
202
+ response = [nil, []]
203
+ SwiftClient.stubs(:get_account).returns(response)
320
204
  details = @connection.containers_detail
321
205
  assert_equal details, {}
322
206
  end
323
207
 
324
208
  def test_containers_detail_bad_response
325
- build_net_http_object(:code => '999')
209
+ SwiftClient.stubs(:get_account).raises(ClientException.new("foo", :http_status => 999))
326
210
  assert_raises(CloudFiles::Exception::InvalidResponse) do
327
211
  details = @connection.containers_detail
328
212
  end
329
213
  end
330
-
331
- private
332
-
333
- def build_net_http_object(args={}, cfreq_expectations={})
334
- args.merge!(:code => '204') unless args[:code]
335
- args[:response] = {} unless args[:response]
336
- response = {'x-cdn-management-url' => 'http://cdn.example.com/path', 'x-storage-url' => 'http://cdn.example.com/storage', 'authtoken' => 'dummy_token'}.merge(args[:response])
337
- response.stubs(:code).returns(args[:code])
338
- response.stubs(:body).returns args[:body] || nil
339
-
340
- if !cfreq_expectations.empty?
341
- parameter_expectations = [anything(), anything(), anything(), anything(), anything(), anything(), anything(), anything()]
342
- parameter_expectations[0] = cfreq_expectations[:method] if cfreq_expectations[:method]
343
- parameter_expectations[2] = cfreq_expectations[:path] if cfreq_expectations[:path]
344
-
345
- @connection.expects(:cfreq).with(*parameter_expectations).returns(response)
346
- else
347
- @connection.stubs(:cfreq).returns(response)
348
- end
349
-
350
- end
351
-
352
- def build_net_http_object_with_cfreq_expectations(args={:code => '204' }, cfreq_expectations={})
353
- build_net_http_object(args, cfreq_expectations)
354
- end
355
214
  end
@@ -4,11 +4,9 @@ require 'test_helper'
4
4
  class CloudfilesContainerTest < Test::Unit::TestCase
5
5
 
6
6
  def test_object_creation
7
- connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true)
7
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => nil, :storageurl => nil, :authtoken => "dummy token")
8
8
  response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5'}
9
- response.stubs(:code).returns('204')
10
- connection.stubs(:storage_request => response)
11
- connection.stubs(:cdn_request => response)
9
+ SwiftClient.stubs(:head_container).returns(response)
12
10
  @container = CloudFiles::Container.new(connection, 'test_container')
13
11
  assert_equal @container.name, 'test_container'
14
12
  assert_equal @container.class, CloudFiles::Container
@@ -18,10 +16,9 @@ class CloudfilesContainerTest < Test::Unit::TestCase
18
16
  end
19
17
 
20
18
  def test_object_creation_with_no_cdn_available
21
- connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => false)
19
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => false, :cdnurl => nil, :storageurl => nil, :authtoken => "dummy token")
22
20
  response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5'}
23
- response.stubs(:code).returns('204')
24
- connection.stubs(:storage_request => response)
21
+ SwiftClient.stubs(:head_container).returns(response)
25
22
  @container = CloudFiles::Container.new(connection, 'test_container')
26
23
  assert_equal 'test_container', @container.name
27
24
  assert_equal CloudFiles::Container, @container.class
@@ -29,21 +26,17 @@ class CloudfilesContainerTest < Test::Unit::TestCase
29
26
  end
30
27
 
31
28
  def test_object_creation_no_such_container
32
- connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true)
33
- response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5'}
34
- response.stubs(:code).returns('999')
35
- connection.stubs(:storage_request => response)
29
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => false, :cdnurl => nil, :storageurl => nil, :authtoken => "dummy token")
30
+ SwiftClient.stubs(:head_container).raises(ClientException.new("foobar", :http_status => 404))
36
31
  assert_raise(CloudFiles::Exception::NoSuchContainer) do
37
32
  @container = CloudFiles::Container.new(connection, 'test_container')
38
33
  end
39
34
  end
40
35
 
41
36
  def test_object_creation_with_cdn
42
- connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true)
37
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => nil, :storageurl => nil, :authtoken => "dummy token")
43
38
  response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5', 'x-cdn-enabled' => 'True', 'x-cdn-uri' => 'http://cdn.test.example/container', 'x-ttl' => '86400'}
44
- response.stubs(:code).returns('204')
45
- connection.stubs(:storage_request => response)
46
- connection.stubs(:cdn_request => response)
39
+ SwiftClient.stubs(:head_container).returns(response)
47
40
  @container = CloudFiles::Container.new(connection, 'test_container')
48
41
  assert_equal @container.name, 'test_container'
49
42
  assert_equal @container.cdn_enabled, true
@@ -53,183 +46,255 @@ class CloudfilesContainerTest < Test::Unit::TestCase
53
46
  end
54
47
 
55
48
  def test_to_s
56
- build_net_http_object
49
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => nil, :storageurl => nil, :authtoken => "dummy token")
50
+ response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5', 'x-cdn-enabled' => 'True', 'x-cdn-uri' => 'http://cdn.test.example/container', 'x-ttl' => '86400'}
51
+ SwiftClient.stubs(:head_container).returns(response)
52
+ @container = CloudFiles::Container.new(connection, 'test_container')
57
53
  assert_equal @container.to_s, 'test_container'
58
54
  end
59
55
 
60
56
  def test_make_private_succeeds
61
- build_net_http_object(:code => '201', :cdn_request => true)
57
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => nil, :storageurl => nil, :authtoken => "dummy token", :container_metadata => {'x-container-bytes-used' => '42', 'x-container-object-count' => '5'})
58
+ response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5', 'x-cdn-enabled' => 'True', 'x-cdn-uri' => 'http://cdn.test.example/container', 'x-ttl' => '86400'}
59
+ SwiftClient.stubs(:head_container).returns(response)
60
+ SwiftClient.stubs(:post_container).returns(nil)
61
+ @container = CloudFiles::Container.new(connection, 'test_container')
62
62
  assert_nothing_raised do
63
63
  @container.make_private
64
64
  end
65
65
  end
66
66
 
67
67
  def test_make_private_fails
68
- build_net_http_object(:code => '999', :cdn_request => true)
68
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => nil, :storageurl => nil, :authtoken => "dummy token", :container_metadata => {'x-container-bytes-used' => '42', 'x-container-object-count' => '5'})
69
+ response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5', 'x-cdn-enabled' => 'True', 'x-cdn-uri' => 'http://cdn.test.example/container', 'x-ttl' => '86400'}
70
+ SwiftClient.stubs(:head_container).returns(response)
71
+ SwiftClient.stubs(:post_container).raises(ClientException.new("test_make_private_fails", :http_status => 404))
72
+ @container = CloudFiles::Container.new(connection, 'test_container')
69
73
  assert_raises(CloudFiles::Exception::NoSuchContainer) do
70
74
  @container.make_private
71
75
  end
72
76
  end
73
77
 
74
78
  def test_make_public_succeeds
75
- build_net_http_object(:code => '201', :cdn_request => true)
79
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://cdn.test.example/container', :storageurl => nil, :authtoken => "dummy token")
80
+ response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5', 'x-cdn-enabled' => 'True', 'x-cdn-uri' => 'http://cdn.test.example/container', 'x-ttl' => '86400'}
81
+ SwiftClient.stubs(:put_container).returns(nil)
82
+ SwiftClient.stubs(:head_container).returns(response)
83
+ CloudFiles::Container.any_instance.stubs(:post_with_headers).returns(nil)
84
+ @container = CloudFiles::Container.new(connection, 'test_container')
76
85
  assert_nothing_raised do
77
86
  @container.make_public
78
87
  end
79
88
  end
80
89
 
90
+ def test_make_public_fixnum_ttl_deprication_warning_and_succeeds
91
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://cdn.test.example/container', :storageurl => nil, :authtoken => "dummy token")
92
+ response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5', 'x-cdn-enabled' => 'True', 'x-cdn-uri' => 'http://cdn.test.example/container', 'x-ttl' => '86400'}
93
+ SwiftClient.stubs(:put_container).returns(nil)
94
+ SwiftClient.stubs(:head_container).returns(response)
95
+ CloudFiles::Container.any_instance.stubs(:post_with_headers).returns(nil)
96
+ @container = CloudFiles::Container.new(connection, 'test_container')
97
+ assert_nothing_raised do
98
+ @container.make_public(123)
99
+ end
100
+ end
101
+
81
102
  def test_make_public_fails
82
- build_net_http_object(:code => '999', :cdn_request => true)
103
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://cdn.test.example/container', :storageurl => nil, :authtoken => "dummy token")
104
+ response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5', 'x-cdn-enabled' => 'True', 'x-cdn-uri' => 'http://cdn.test.example/container', 'x-ttl' => '86400'}
105
+ SwiftClient.stubs(:head_container).returns(response)
106
+ SwiftClient.stubs(:put_container).raises(ClientException.new("test_make_public_fails", :http_status => 404))
107
+ CloudFiles::Container.any_instance.stubs(:post_with_headers).returns(nil)
108
+ @container = CloudFiles::Container.new(connection, 'test_container')
83
109
  assert_raises(CloudFiles::Exception::NoSuchContainer) do
84
110
  @container.make_public
85
111
  end
86
112
  end
87
113
 
88
114
  def test_empty_is_false
89
- connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true)
115
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://cdn.test.example/container', :storageurl => nil, :authtoken => "dummy token")
90
116
  response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5'}
91
- response.stubs(:code).returns('204')
92
- connection.stubs(:storage_request => response)
117
+ SwiftClient.stubs(:head_container).returns(response)
93
118
  @container = CloudFiles::Container.new(connection, 'test_container')
94
119
  assert_equal @container.empty?, false
95
120
  end
96
121
 
97
122
  def test_empty_is_true
98
- connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true)
123
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://cdn.test.example/container', :storageurl => nil, :authtoken => "dummy token")
99
124
  response = {'x-container-bytes-used' => '0', 'x-container-object-count' => '0'}
100
- response.stubs(:code).returns('204')
101
- connection.stubs(:storage_request => response)
125
+ SwiftClient.stubs(:head_container).returns(response)
102
126
  @container = CloudFiles::Container.new(connection, 'test_container')
103
127
  assert_equal @container.empty?, true
104
128
  end
105
129
 
106
130
  def build_acl_test_state(opts={})
107
- @connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdn_available? => false)
108
-
131
+ @connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => false, :cdnurl => 'http://cdn.test.example/container', :storageurl => nil, :authtoken => "dummy token")
132
+
109
133
  @response = {
110
134
  'x-container-bytes-used' => '0',
111
135
  'x-container-object-count' => '0',
112
136
  }.merge(opts.fetch(:response, {}))
113
137
 
114
138
  @response.stubs(:code).returns(opts.fetch(:code, '204'))
115
- @connection.stubs(:storage_request => @response)
139
+ if opts[:code] =~ /^![2]0/
140
+ SwiftClient.stubs(:head_container).raises(ClientException.new("acl_test_state", :http_status => opts.fetch(:code, 204)))
141
+ else
142
+ SwiftClient.stubs(:head_container).returns(@response)
143
+ end
116
144
  @container = CloudFiles::Container.new(@connection, 'test_container')
117
145
  end
118
146
 
119
147
  def test_read_acl_is_set_from_headers
120
- build_acl_test_state :response => { 'x-container-read' => '.r:*' }, :code => '204'
148
+ @connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => false, :cdnurl => 'http://cdn.test.example/container', :storageurl => nil, :authtoken => "dummy token")
149
+ @response = {'x-container-bytes-used' => '0','x-container-object-count' => '0', 'x-container-read' => '.r:*'}
150
+ SwiftClient.stubs(:head_container).returns(@response)
151
+ @container = CloudFiles::Container.new(@connection, 'test_container')
121
152
  assert_equal @response["x-container-read"], @container.read_acl
122
153
  end
123
154
 
124
155
  def test_set_read_acl_fails
125
- build_acl_test_state
126
-
127
- response = stub(:code => '999')
128
-
129
- @connection.stubs(:storage_request => response)
130
-
156
+ @connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => false, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
157
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '0','x-container-object-count' => '0'})
158
+ SwiftClient.stubs(:post_container).raises(ClientException.new("test_set_read_acl_fails", :http_status => 404))
159
+ @container = CloudFiles::Container.new(@connection, 'test_container')
131
160
  assert_raises(CloudFiles::Exception::NoSuchContainer) do
132
161
  @container.set_read_acl('.r:*')
133
162
  end
134
163
  end
135
164
 
136
165
  def test_set_read_acl_succeeds
137
- build_acl_test_state
138
-
139
- @connection.stubs(:storage_request => stub(:code => '204'))
140
-
166
+ @connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => false, :cdnurl => 'http://cdn.test.example/container', :storageurl => nil, :authtoken => "dummy token")
167
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '0','x-container-object-count' => '0', 'x-container-write' => '.r:*'})
168
+ SwiftClient.stubs(:post_container).returns(true)
169
+ @container = CloudFiles::Container.new(@connection, 'test_container')
141
170
  assert_equal @container.set_read_acl('.r:*'), true
142
171
  end
143
172
 
144
173
  def test_write_acl_is_set_from_headers
145
- build_acl_test_state :response => { 'x-container-write' => '.r:*' }, :code => '204'
174
+ @connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => false, :cdnurl => 'http://cdn.test.example/container', :storageurl => nil, :authtoken => "dummy token")
175
+ @response = {'x-container-bytes-used' => '0','x-container-object-count' => '0', 'x-container-write' => '.r:*'}
176
+ SwiftClient.stubs(:head_container).returns(@response)
177
+ @container = CloudFiles::Container.new(@connection, 'test_container')
146
178
  assert_equal @response["x-container-write"], @container.write_acl
147
179
  end
148
180
 
149
181
  def test_set_write_acl_fails
150
- build_acl_test_state
151
-
152
- response = stub(:code => '999')
153
-
154
- @connection.stubs(:storage_request => response)
155
-
182
+ @connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => false, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
183
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '0','x-container-object-count' => '0'})
184
+ SwiftClient.stubs(:post_container).raises(ClientException.new("test_set_write_acl_fails", :http_status => 404))
185
+ @container = CloudFiles::Container.new(@connection, 'test_container')
156
186
  assert_raises(CloudFiles::Exception::NoSuchContainer) do
157
187
  @container.set_write_acl('.r:*')
158
188
  end
159
189
  end
160
190
 
161
191
  def test_set_write_acl_succeeds
162
- build_acl_test_state
163
-
164
- @connection.stubs(:storage_request => stub(:code => '204'))
165
-
192
+ @connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => false, :cdnurl => 'http://cdn.test.example/container', :storageurl => nil, :authtoken => "dummy token")
193
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '0','x-container-object-count' => '0', 'x-container-write' => '.r:*'})
194
+ SwiftClient.stubs(:post_container).returns(true)
195
+ @container = CloudFiles::Container.new(@connection, 'test_container')
166
196
  assert_equal @container.set_write_acl('.r:*'), true
167
197
  end
168
198
 
169
199
  def test_log_retention_is_true
170
- connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true)
171
- response = {'x-container-bytes-used' => '0', 'x-container-object-count' => '0', 'x-cdn-enabled' => 'True', 'x-log-retention' => 'True'}
172
- response.stubs(:code).returns('204')
173
- connection.stubs(:cdn_request => response)
174
- connection.stubs(:storage_request => response)
200
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
201
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '0', 'x-container-object-count' => '0', 'x-cdn-enabled' => 'True', 'x-log-retention' => 'True'})
175
202
  @container = CloudFiles::Container.new(connection, 'test_container')
176
203
  assert_equal @container.log_retention?, true
177
204
  end
178
205
 
179
206
  def test_object_fetch
180
- build_net_http_object(:code => '204', :response => {'last-modified' => 'Wed, 28 Jan 2009 16:16:26 GMT'})
207
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
208
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '10','x-container-object-count' => '1'})
209
+ SwiftClient.stubs(:head_object).returns({'last-modified' => 'Wed, 28 Jan 2009 16:16:26 GMT'})
210
+ @container = CloudFiles::Container.new(connection, "test_container")
181
211
  object = @container.object('good_object')
182
212
  assert_equal object.class, CloudFiles::StorageObject
183
213
  end
184
214
 
185
215
  def test_create_object
186
- build_net_http_object()
216
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
217
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '10','x-container-object-count' => '1'})
218
+ @container = CloudFiles::Container.new(connection, "test_container")
187
219
  object = @container.create_object('new_object')
188
220
  assert_equal object.class, CloudFiles::StorageObject
189
221
  end
190
222
 
191
223
  def test_object_exists_true
192
- build_net_http_object
224
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
225
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '10','x-container-object-count' => '1'})
226
+ SwiftClient.stubs(:head_object).returns({'last-modified' => 'Wed, 28 Jan 2009 16:16:26 GMT'})
227
+ @container = CloudFiles::Container.new(connection, "test_container")
193
228
  assert_equal @container.object_exists?('good_object'), true
194
229
  end
195
230
 
196
231
  def test_object_exists_false
197
- build_net_http_object(:code => '999')
232
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
233
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '10','x-container-object-count' => '1'})
234
+ SwiftClient.stubs(:head_object).raises(ClientException.new("test_object_exists_false", :http_status => 404))
235
+ @container = CloudFiles::Container.new(connection, "test_container")
198
236
  assert_equal @container.object_exists?('bad_object'), false
199
237
  end
200
238
 
201
239
  def test_delete_object_succeeds
202
- build_net_http_object
240
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
241
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '10','x-container-object-count' => '1'})
242
+ SwiftClient.stubs(:delete_object).returns(nil)
243
+ @container = CloudFiles::Container.new(connection, "test_container")
203
244
  assert_nothing_raised do
204
245
  @container.delete_object('good_object')
205
246
  end
206
247
  end
207
248
 
208
249
  def test_delete_invalid_object_fails
209
- build_net_http_object(:code => '404')
250
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
251
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '10','x-container-object-count' => '1'})
252
+ SwiftClient.stubs(:delete_object).raises(ClientException.new('test_delete_invalid_object_fails', :http_status => 404))
253
+ @container = CloudFiles::Container.new(connection, "test_container")
210
254
  assert_raise(CloudFiles::Exception::NoSuchObject) do
211
255
  @container.delete_object('nonexistent_object')
212
256
  end
213
257
  end
214
258
 
215
259
  def test_delete_invalid_response_code_fails
216
- build_net_http_object(:code => '999')
260
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
261
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '10','x-container-object-count' => '1'})
262
+ SwiftClient.stubs(:delete_object).raises(ClientException.new('test_delete_invalid_object_fails', :http_status => 999))
263
+ @container = CloudFiles::Container.new(connection, "test_container")
217
264
  assert_raise(CloudFiles::Exception::InvalidResponse) do
218
265
  @container.delete_object('broken_object')
219
266
  end
220
267
  end
221
268
 
222
269
  def test_fetch_objects
223
- build_net_http_object(:code => '200', :body => "foo\nbar\nbaz")
270
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
271
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '10','x-container-object-count' => '1'})
272
+ SwiftClient.stubs(:get_container).returns([{'x-container-bytes-used' => '10','x-container-object-count' => '1'}, [{'name' => 'foo'},{'name' => 'bar'},{'name' => 'baz'}]])
273
+ @container = CloudFiles::Container.new(connection, "test_container")
274
+
224
275
  objects = @container.objects
225
276
  assert_equal objects.class, Array
226
277
  assert_equal objects.size, 3
227
278
  assert_equal objects.first, 'foo'
228
279
  end
229
280
 
281
+ def test_fetch_objects_fails
282
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
283
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '10','x-container-object-count' => '1'})
284
+ SwiftClient.stubs(:get_container).raises(ClientException.new("test_fetch_object_fails", :http_status => 500))
285
+ @container = CloudFiles::Container.new(connection, "test_container")
286
+
287
+ assert_raise(CloudFiles::Exception::InvalidResponse) do
288
+ objects = @container.objects
289
+ end
290
+ end
291
+
230
292
  def test_fetch_objects_with_limit
231
- build_net_http_object_with_cfreq_expectations({:code => '200', :body => "foo"},
232
- {:path => includes("limit=1")})
293
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
294
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '10','x-container-object-count' => '1'})
295
+ SwiftClient.stubs(:get_container).returns([{'x-container-bytes-used' => '10','x-container-object-count' => '1'}, [{'name' => 'foo'}]])
296
+ @container = CloudFiles::Container.new(connection, "test_container")
297
+
233
298
  objects = @container.objects(:limit => 1)
234
299
  assert_equal objects.class, Array
235
300
  assert_equal objects.size, 1
@@ -237,8 +302,11 @@ class CloudfilesContainerTest < Test::Unit::TestCase
237
302
  end
238
303
 
239
304
  def test_fetch_objects_with_marker
240
- build_net_http_object_with_cfreq_expectations({:code => '200', :body => "bar"},
241
- {:path => includes("marker=foo")})
305
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
306
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '10','x-container-object-count' => '1'})
307
+ SwiftClient.stubs(:get_container).returns([{'x-container-bytes-used' => '10','x-container-object-count' => '1'}, [{'name' => 'bar'}]])
308
+ @container = CloudFiles::Container.new(connection, "test_container")
309
+
242
310
  objects = @container.objects(:marker => 'foo')
243
311
  assert_equal objects.class, Array
244
312
  assert_equal objects.size, 1
@@ -246,8 +314,11 @@ class CloudfilesContainerTest < Test::Unit::TestCase
246
314
  end
247
315
 
248
316
  def test_fetch_objects_with_deprecated_offset_param
249
- build_net_http_object_with_cfreq_expectations({:code => '200', :body => "bar"},
250
- {:path => includes("marker=foo")})
317
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
318
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '10','x-container-object-count' => '1'})
319
+ SwiftClient.stubs(:get_container).returns([{'x-container-bytes-used' => '10','x-container-object-count' => '1'}, [{'name' => 'bar'}]])
320
+ @container = CloudFiles::Container.new(connection, "test_container")
321
+
251
322
  objects = @container.objects(:offset => 'foo')
252
323
  assert_equal objects.class, Array
253
324
  assert_equal objects.size, 1
@@ -255,108 +326,169 @@ class CloudfilesContainerTest < Test::Unit::TestCase
255
326
  end
256
327
 
257
328
  def object_detail_body(skip_kisscam=false)
258
- lines = ['<?xml version="1.0" encoding="UTF-8"?>',
259
- '<container name="video">']
260
- unless skip_kisscam
261
- lines << '<object><name>kisscam.mov</name><hash>96efd5a0d78b74cfe2a911c479b98ddd</hash><bytes>9196332</bytes><content_type>video/quicktime</content_type><last_modified>2008-12-18T10:34:43.867648</last_modified></object>
262
- >'
263
- end
264
- lines << '<object><name>penaltybox.mov</name><hash>d2a4c0c24d8a7b4e935bee23080e0685</hash><bytes>24944966</bytes><content_type>video/quicktime</content_type><last_modified>2008-12-18T10:35:19.273927</last_modified></object>'
265
- lines << '</container>'
266
-
267
- lines.join("\n\n")
329
+ lines = []
330
+ lines << {'name' => 'kisscam.mov', 'hash' => '96efd5a0d78b74cfe2a911c479b98ddd', 'bytes' => '9196332', 'content_type' => 'video/quicktime', 'last_modified' => '2008-12-18T10:34:43.867648'} unless skip_kisscam
331
+ lines << {'name' => 'penaltybox.mov', 'hash' => 'd2a4c0c24d8a7b4e935bee23080e0685', 'bytes' => '24944966', 'content_type' => 'video/quicktime', 'last_modified' => '2008-12-18T10:35:19.273927'}
268
332
  end
269
333
 
270
334
  def test_fetch_objects_detail
271
- build_net_http_object(:code => '200', :body => object_detail_body)
335
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
336
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '10','x-container-object-count' => '2'})
337
+ SwiftClient.stubs(:get_container).returns([{'x-container-bytes-used' => '10','x-container-object-count' => '2'}, object_detail_body])
338
+ @container = CloudFiles::Container.new(connection, "test_container")
339
+
272
340
  details = @container.objects_detail
273
341
  assert_equal details.size, 2
274
342
  assert_equal details['kisscam.mov'][:bytes], '9196332'
275
343
  end
276
344
 
277
345
  def test_fetch_objects_details_with_limit
278
- build_net_http_object_with_cfreq_expectations({:code => '200', :body => object_detail_body},
279
- {:path => includes("limit=2")})
346
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
347
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '10','x-container-object-count' => '2'})
348
+ SwiftClient.stubs(:get_container).returns([{'x-container-bytes-used' => '10','x-container-object-count' => '2'}, object_detail_body])
349
+ @container = CloudFiles::Container.new(connection, "test_container")
350
+
280
351
  details = @container.objects_detail(:limit => 2)
281
352
  assert_equal details.size, 2
282
353
  assert_equal details['kisscam.mov'][:bytes], '9196332'
283
354
  end
284
355
 
285
356
  def test_fetch_objects_detail_with_marker
286
- build_net_http_object_with_cfreq_expectations({:code => '200', :body => object_detail_body(true)},
287
- {:path => includes("marker=kisscam.mov")})
357
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
358
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '10','x-container-object-count' => '1'})
359
+ SwiftClient.stubs(:get_container).returns([{'x-container-bytes-used' => '10','x-container-object-count' => '1'}, object_detail_body(true)])
360
+ @container = CloudFiles::Container.new(connection, "test_container")
361
+
288
362
  details = @container.objects_detail(:marker => 'kisscam.mov')
289
363
  assert_equal details.size, 1
290
364
  assert_equal details['penaltybox.mov'][:bytes], '24944966'
291
365
  end
292
366
 
293
367
  def test_fetch_objects_detail_with_deprecated_offset_param
294
- build_net_http_object_with_cfreq_expectations({:code => '200', :body => object_detail_body(true)},
295
- {:path => includes("marker=kisscam.mov")})
368
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
369
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '10','x-container-object-count' => '1'})
370
+ SwiftClient.stubs(:get_container).returns([{'x-container-bytes-used' => '10','x-container-object-count' => '1'}, object_detail_body(true)])
371
+ @container = CloudFiles::Container.new(connection, "test_container")
372
+
296
373
  details = @container.objects_detail(:offset => 'kisscam.mov')
297
374
  assert_equal details.size, 1
298
375
  assert_equal details['penaltybox.mov'][:bytes], '24944966'
299
376
  end
300
377
 
301
-
378
+
302
379
  def test_fetch_object_detail_empty
303
- build_net_http_object
380
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
381
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '0','x-container-object-count' => '0'})
382
+ SwiftClient.stubs(:get_container).returns([{'x-container-bytes-used' => '0','x-container-object-count' => '0'}, {}])
383
+ @container = CloudFiles::Container.new(connection, "test_container")
384
+
304
385
  details = @container.objects_detail
305
386
  assert_equal details, {}
306
387
  end
307
388
 
308
389
  def test_fetch_object_detail_error
309
- build_net_http_object(:code => '999')
390
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
391
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '0','x-container-object-count' => '0'})
392
+ SwiftClient.stubs(:get_container).raises(ClientException.new('test_fetch_object_detail_error', :http_status => 999))
393
+ @container = CloudFiles::Container.new(connection, "test_container")
394
+
310
395
  assert_raise(CloudFiles::Exception::InvalidResponse) do
311
396
  details = @container.objects_detail
312
397
  end
313
398
  end
314
399
 
315
400
  def test_setting_log_retention
316
- build_net_http_object(:code => '201', :cdn_request => true)
401
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
402
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '0','x-container-object-count' => '0'})
403
+ SwiftClient.stubs(:post_container).returns(true)
404
+ @container = CloudFiles::Container.new(connection, "test_container")
405
+
317
406
  assert(@container.log_retention='false')
318
407
  end
408
+
409
+ def test_setting_log_retention_fails
410
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
411
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '0','x-container-object-count' => '0'})
412
+ SwiftClient.stubs(:post_container).raises(ClientException.new("test_setting_log_retention_fails", :http_status => 500))
413
+ @container = CloudFiles::Container.new(connection, "test_container")
414
+
415
+ assert_raise(CloudFiles::Exception::InvalidResponse) do
416
+ @container.log_retention='false'
417
+ end
418
+ end
319
419
 
320
420
  def test_purge_from_cdn_succeeds
321
- build_net_http_object(:cdn_request => true)
421
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
422
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '0','x-container-object-count' => '0'})
423
+ SwiftClient.stubs(:delete_container).returns(nil)
424
+ @container = CloudFiles::Container.new(connection, "test_container")
425
+
322
426
  assert_nothing_raised do
323
427
  @container.purge_from_cdn
324
428
  @container.purge_from_cdn("small.fox@hole.org")
325
429
  end
326
430
  end
327
431
 
328
- private
329
-
330
- def build_net_http_object(args={}, cfreq_expectations={})
331
- args.merge!(:code => '204') unless args[:code]
332
- CloudFiles::Container.any_instance.stubs(:populate).returns(true)
333
- CloudFiles::Container.any_instance.stubs(:metadata).returns()
334
- CloudFiles::Container.any_instance.stubs(:container_metadata).returns({:bytes => 99, :count => 2})
335
- connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true)
336
- args[:response] = {} unless args[:response]
337
- response = {'x-cdn-management-url' => 'http://cdn.example.com/path', 'x-storage-url' => 'http://cdn.example.com/storage', 'authtoken' => 'dummy_token', 'last-modified' => Time.now.to_s}.merge(args[:response])
338
- response.stubs(:code).returns(args[:code])
339
- response.stubs(:body).returns args[:body] || nil
432
+ def test_purge_from_cdn_fails
433
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
434
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '0','x-container-object-count' => '0'})
435
+ SwiftClient.stubs(:delete_container).raises(ClientException.new("test_purge_from_cdn_fails", :http_status => 500))
436
+ @container = CloudFiles::Container.new(connection, "test_container")
340
437
 
341
- if !cfreq_expectations.empty?
342
- #cfreq(method,server,path,port,scheme,headers = {},data = nil,attempts = 0,&block)
343
-
344
- parameter_expectations = [anything(), anything(), anything(), anything(), anything(), anything()]
345
- parameter_expectations[0] = cfreq_expectations[:method] if cfreq_expectations[:method]
346
- parameter_expectations[1] = cfreq_expectations[:path] if cfreq_expectations[:path]
347
-
348
- connection.expects(:cdn_request).with(*parameter_expectations).returns(response) if args[:cdn_request]
349
- connection.expects(:storage_request).with(*parameter_expectations).returns(response)
350
- else
351
- connection.stubs(:cdn_request => response) if args[:cdn_request]
352
- connection.stubs(:storage_request => response)
438
+ assert_raise(CloudFiles::Exception::Connection) do
439
+ @container.purge_from_cdn
353
440
  end
354
-
355
- @container = CloudFiles::Container.new(connection, 'test_container')
356
- @container.stubs(:connection).returns(connection)
357
441
  end
358
442
 
359
- def build_net_http_object_with_cfreq_expectations(args={}, cfreq_expectations={})
360
- build_net_http_object(args, cfreq_expectations)
443
+ def test_cdn_metadata_fails
444
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
445
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '0','x-container-object-count' => '0'})
446
+ @container = CloudFiles::Container.new(connection, "test_container")
447
+ SwiftClient.stubs(:head_container).raises(ClientException.new("test_cdn_metadata_fails", :http_status => 404))
448
+ assert_raise(CloudFiles::Exception::NoSuchContainer) do
449
+ @container.cdn_metadata
450
+ end
451
+ end
452
+
453
+ def test_cdn_metadata_no_cdn
454
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => false, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
455
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '0','x-container-object-count' => '0'})
456
+ @container = CloudFiles::Container.new(connection, "test_container")
457
+ assert_equal @container.cdn_metadata, {}
458
+ end
459
+
460
+ def test_bytes
461
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => false, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
462
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '99','x-container-object-count' => '10'})
463
+ @container = CloudFiles::Container.new(connection, "test_container")
464
+ assert_equal @container.bytes, 99
465
+ end
466
+
467
+ def test_count
468
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => false, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
469
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '0','x-container-object-count' => '10'})
470
+ @container = CloudFiles::Container.new(connection, "test_container")
471
+ assert_equal @container.count, 10
472
+ end
473
+
474
+ def test_cdn_ssl_url
475
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
476
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '0','x-container-object-count' => '10', 'x-cdn-ssl-uri' => 'https://ssl.cdn.test.example/container', "x-cdn-enabled" => 'True'})
477
+ @container = CloudFiles::Container.new(connection, "test_container")
478
+ assert_equal @container.cdn_ssl_url, 'https://ssl.cdn.test.example/container'
479
+ end
480
+
481
+ def test_cdn_url
482
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
483
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '0','x-container-object-count' => '10', 'x-cdn-uri' => 'http://cdn.test.example/container', "x-cdn-enabled" => 'True'})
484
+ @container = CloudFiles::Container.new(connection, "test_container")
485
+ assert_equal @container.cdn_url, 'http://cdn.test.example/container'
486
+ end
487
+
488
+ def test_metadata
489
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https', :cdn_available? => true, :cdnurl => 'http://foo.test.example/container', :storageurl => 'http://foo.test.example/container', :authtoken => "dummy token")
490
+ SwiftClient.stubs(:head_container).returns({'x-container-bytes-used' => '0','x-container-object-count' => '10', 'x-container-meta-foo' => 'bar'})
491
+ @container = CloudFiles::Container.new(connection, "test_container")
492
+ assert_equal @container.metadata, {'foo' => 'bar'}
361
493
  end
362
494
  end