cloudfiles 1.4.18 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,60 +2,54 @@ $:.unshift File.dirname(__FILE__)
2
2
  require 'test_helper'
3
3
 
4
4
  class CloudfilesStorageObjectTest < 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)
8
- response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5', 'last-modified' => Time.now.to_s}
9
- response.stubs(:code).returns('204')
10
- connection.stubs(:storage_request => response)
11
- container = CloudFiles::Container.new(connection, 'test_container')
12
- @object = CloudFiles::StorageObject.new(container, 'test_object')
7
+ build_swift_client_object
13
8
  assert_equal @object.name, 'test_object'
14
9
  assert_equal @object.class, CloudFiles::StorageObject
15
10
  assert_equal @object.to_s, 'test_object'
16
11
  end
17
12
 
18
13
  def test_object_creation_with_no_cdn_available
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)
20
- response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5', 'last-modified' => Time.now.to_s}
21
- response.stubs(:code).returns('204')
22
- connection.stubs(:storage_request => response)
23
- container = CloudFiles::Container.new(connection, 'test_container')
24
- @object = CloudFiles::StorageObject.new(container, 'test_object')
14
+ build_swift_client_object(:connection=>{:cdn_available? => false})
25
15
  assert_equal @object.name, 'test_object'
26
16
  assert_equal @object.class, CloudFiles::StorageObject
27
17
  assert_equal @object.to_s, 'test_object'
28
18
  end
29
19
 
30
20
  def test_public_url_exists
31
- build_net_http_object(:public => true, :name => 'test object', :cdn_request => true)
21
+ build_swift_client_object(:name => 'test object', :public => true)
32
22
  assert_equal @object.public_url, "http://cdn.test.example/test%20object"
33
23
  end
34
24
 
35
25
  def test_public_url_does_not_exist
36
- build_net_http_object
26
+ build_swift_client_object(:connection => {:cdn_available? => false})
37
27
  assert_equal @object.public_url, nil
38
28
  end
39
29
 
40
30
  def test_data_succeeds
41
- build_net_http_object(:code => '200', :body => 'This is good data')
31
+ SwiftClient.stubs(:get_object).returns([{"etag"=>"foo", "last-modified"=>"Tue, 21 Jun 2011 19:54:36 GMT", "content-type"=>"text/html", "date"=>"Thu, 15 Sep 2011 22:12:19 GMT", "content-length"=>"17", "accept-ranges"=>"bytes", "x-trans-id"=>"foo"}, "This is good data"])
32
+ build_swift_client_object
42
33
  assert_equal @object.data, 'This is good data'
43
34
  end
44
35
 
45
36
  def test_data_with_offset_succeeds
46
- build_net_http_object(:code => '200', :body => 'Thi')
37
+ SwiftClient.stubs(:get_object).returns([{"etag"=>"foo", "last-modified"=>"Tue, 21 Jun 2011 19:54:36 GMT", "content-type"=>"text/html", "date"=>"Thu, 15 Sep 2011 22:12:19 GMT", "content-length"=>"17", "accept-ranges"=>"bytes", "x-trans-id"=>"foo"}, "Thi"])
38
+ build_swift_client_object
47
39
  assert_equal @object.data(3), 'Thi'
48
40
  end
49
41
 
50
42
  def test_data_fails
51
- build_net_http_object(:code => '999', :body => 'This is bad data')
43
+ SwiftClient.stubs(:get_object).raises(ClientException.new("test_data_fails", :http_status => 999))
44
+ build_swift_client_object
52
45
  assert_raise(CloudFiles::Exception::NoSuchObject) do
53
46
  @object.data
54
47
  end
55
48
  end
56
49
 
57
50
  def test_data_stream_succeeds
58
- build_net_http_object(:code => '200', :body => 'This is good data')
51
+ SwiftClient.stubs(:get_object).returns([{"etag"=>"foo", "last-modified"=>"Tue, 21 Jun 2011 19:54:36 GMT", "content-type"=>"text/html", "date"=>"Thu, 15 Sep 2011 22:12:19 GMT", "content-length"=>"17", "accept-ranges"=>"bytes", "x-trans-id"=>"foo"}, "This is good data"])
52
+ build_swift_client_object
59
53
  data = ""
60
54
  assert_nothing_raised do
61
55
  @object.data_stream { |chunk|
@@ -65,7 +59,8 @@ class CloudfilesStorageObjectTest < Test::Unit::TestCase
65
59
  end
66
60
 
67
61
  def test_data_stream_with_offset_succeeds
68
- build_net_http_object(:code => '200', :body => 'This ')
62
+ SwiftClient.stubs(:get_object).returns([{"etag"=>"foo", "last-modified"=>"Tue, 21 Jun 2011 19:54:36 GMT", "content-type"=>"text/html", "date"=>"Thu, 15 Sep 2011 22:12:19 GMT", "content-length"=>"5", "accept-ranges"=>"bytes", "x-trans-id"=>"foo"}, "This "])
63
+ build_swift_client_object
69
64
  data = ""
70
65
  assert_nothing_raised do
71
66
  @object.data_stream(5) { |chunk|
@@ -76,7 +71,8 @@ class CloudfilesStorageObjectTest < Test::Unit::TestCase
76
71
 
77
72
  # Need to find a way to simulate this properly
78
73
  def data_stream_fails
79
- build_net_http_object(:code => '999', :body => 'This is bad data')
74
+ SwiftClient.stubs(:get_object).raises(ClientException.new("test_data_stream_fails", :http_status => 404))
75
+ build_swift_client_object
80
76
  data = ""
81
77
  assert_raise(CloudFiles::Exception::NoSuchObject) do
82
78
  @object.data_stream { |chunk|
@@ -86,54 +82,48 @@ class CloudfilesStorageObjectTest < Test::Unit::TestCase
86
82
  end
87
83
 
88
84
  def test_set_metadata_succeeds
89
- CloudFiles::StorageObject.any_instance.stubs(:populate).returns(true)
90
- build_net_http_object(:code => '202')
85
+ SwiftClient.stubs(:post_object).returns(nil)
86
+ build_swift_client_object
91
87
  assert_nothing_raised do
92
88
  @object.set_metadata({'Foo' =>'bar'})
93
89
  end
94
90
  end
95
91
 
96
92
  def test_set_metadata_invalid_object
97
- build_net_http_object(:code => '404')
93
+ SwiftClient.stubs(:post_object).raises(ClientException.new("test_set_metadata_invalid_object", :http_status => 404))
94
+ build_swift_client_object
98
95
  assert_raise(CloudFiles::Exception::NoSuchObject) do
99
96
  @object.set_metadata({'Foo' =>'bar'})
100
97
  end
101
98
  end
102
99
 
103
100
  def test_set_metadata_fails
104
- build_net_http_object(:code => '999')
101
+ SwiftClient.stubs(:post_object).raises(ClientException.new("test_set_metadata_fails", :http_status => 999))
102
+ build_swift_client_object
105
103
  assert_raise(CloudFiles::Exception::InvalidResponse) do
106
104
  @object.set_metadata({'Foo' =>'bar'})
107
105
  end
108
106
  end
109
107
 
110
108
  def test_read_metadata_succeeds
111
- 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)
112
109
  response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5', 'x-object-meta-foo' => 'Bar', 'x-object-meta-spam' => ['peanut', 'butter'], 'last-modified' => Time.now.to_s}
113
- response.stubs(:code).returns('204')
114
- connection.stubs(:storage_request => response)
115
- container = CloudFiles::Container.new(connection, 'test_container')
116
- @object = CloudFiles::StorageObject.new(container, 'test_object')
110
+ build_swift_client_object
111
+ SwiftClient.stubs(:head_object).returns(response)
117
112
  assert_equal @object.metadata, {'foo' => 'Bar', 'spam' => 'peanutbutter'}
118
113
  end
119
114
 
120
115
  def test_write_succeeds
121
- CloudFiles::StorageObject.any_instance.stubs(:populate).returns(true)
122
- CloudFiles::Container.any_instance.stubs(:populate).returns(true)
123
- build_net_http_object(:code => '201')
116
+ build_swift_client_object
117
+ SwiftClient.stubs(:put_object).returns("foobarbazquu")
124
118
  assert_nothing_raised do
125
119
  @object.write("This is test data")
126
120
  end
127
121
  end
128
122
 
129
123
  def test_write_with_make_path
130
- 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)
131
- response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5', 'last-modified' => Time.now.to_s}
132
- response.stubs(:code).returns('204').then.returns('204').then.returns('201').then.returns('204')
133
- connection.stubs(:storage_request => response)
134
- CloudFiles::Container.any_instance.stubs(:populate).returns(true)
135
- container = CloudFiles::Container.new(connection, 'test_container')
136
- @object = CloudFiles::StorageObject.new(container, 'path/to/my/test_object', false, true)
124
+ SwiftClient.stubs(:put_object).returns("foobarbazquu")
125
+ SwiftClient.stubs(:head_object).returns({"etag"=>"foo", "last-modified"=>"Tue, 21 Jun 2011 19:54:36 GMT", "content-type"=>"text/html", "date"=>"Thu, 15 Sep 2011 22:12:19 GMT", "content-length"=>"17", "accept-ranges"=>"bytes", "x-trans-id"=>"foo"})
126
+ build_swift_client_object(:name => "path/to/my/test_object", :obj => [false, true])
137
127
  assert_nothing_raised do
138
128
  @object.write("This is path test data")
139
129
  end
@@ -144,25 +134,24 @@ class CloudfilesStorageObjectTest < Test::Unit::TestCase
144
134
  out = Tempfile.new('test')
145
135
  out.write("This is test data")
146
136
  out.close
147
- CloudFiles::StorageObject.any_instance.stubs(:populate).returns(true)
148
- CloudFiles::Container.any_instance.stubs(:populate).returns(true)
149
- build_net_http_object(:code => '201')
137
+ SwiftClient.stubs(:put_object).returns("foobarbazquu")
138
+ build_swift_client_object
150
139
  assert_nothing_raised do
151
140
  @object.load_from_filename(out.path)
152
141
  end
153
142
  end
154
143
 
155
144
  def test_write_sets_mime_type
156
- CloudFiles::StorageObject.any_instance.stubs(:populate).returns(true)
157
- CloudFiles::Container.any_instance.stubs(:populate).returns(true)
158
- build_net_http_object(:name => 'myfile.xml', :code => '201')
145
+ SwiftClient.stubs(:put_object).returns('foobarbazquu')
146
+ build_swift_client_object(:name => 'myfile.xml')
159
147
  assert_nothing_raised do
160
148
  @object.write("This is test data")
161
149
  end
162
150
  end
163
151
 
164
152
  def test_purge_from_cdn_succeeds
165
- build_net_http_object(:cdn_request => true)
153
+ SwiftClient.stubs(:delete_object).returns(true)
154
+ build_swift_client_object(:connection => {:cdn_available? => true})
166
155
  assert_nothing_raised do
167
156
  @object.purge_from_cdn
168
157
  @object.purge_from_cdn("small.fox@hole.org")
@@ -170,56 +159,53 @@ class CloudfilesStorageObjectTest < Test::Unit::TestCase
170
159
  end
171
160
 
172
161
  def test_write_with_no_data_dies
173
- build_net_http_object
162
+ build_swift_client_object
163
+ $stdin.stubs(:tty?).returns(true)
174
164
  assert_raise(CloudFiles::Exception::Syntax) do
175
- @object.write
165
+ @object.write(nil)
176
166
  end
177
167
  end
178
168
 
179
169
  def test_write_with_invalid_content_length_dies
180
- build_net_http_object(:code => '412')
170
+ SwiftClient.stubs(:put_object).raises(ClientException.new("test_write_with_invalid_content_length_dies", :http_status => '412'))
171
+ build_swift_client_object
181
172
  assert_raise(CloudFiles::Exception::InvalidResponse) do
182
173
  @object.write('Test Data')
183
174
  end
184
175
  end
185
176
 
186
177
  def test_write_with_mismatched_md5_dies
187
- build_net_http_object(:code => '422')
178
+ SwiftClient.stubs(:put_object).raises(ClientException.new("test_write_with_mismatched_md5_dies", :http_status => '422'))
179
+ build_swift_client_object
188
180
  assert_raise(CloudFiles::Exception::MisMatchedChecksum) do
189
181
  @object.write('Test Data')
190
182
  end
191
183
  end
192
184
 
193
185
  def test_write_with_invalid_response_dies
194
- build_net_http_object(:code => '999')
186
+ SwiftClient.stubs(:put_object).raises(ClientException.new("test_write_with_invalid_response_dies", :http_status => '999'))
187
+ build_swift_client_object
195
188
  assert_raise(CloudFiles::Exception::InvalidResponse) do
196
189
  @object.write('Test Data')
197
190
  end
198
191
  end
199
192
 
200
193
  private
201
-
202
- def build_net_http_object(args={})
203
- args.merge!(:code => '204' ) unless args[:code]
194
+
195
+ def build_swift_client_object(args = {})
204
196
  CloudFiles::Container.any_instance.stubs(:metadata).returns({})
205
197
  CloudFiles::Container.any_instance.stubs(:populate).returns(true)
206
198
  CloudFiles::Container.any_instance.stubs(:container_metadata).returns({:bytes => 99, :count => 2})
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)
199
+ args[:connection] = {} unless args[:connection]
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"}.merge!(args[:connection]))
208
201
  args[:response] = {} unless args[:response]
209
202
  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])
210
- response.stubs(:code).returns(args[:code])
211
- response.stubs(:body).returns args[:body] || nil
212
-
213
- connection.stubs(:cdn_request => response) if args[:cdn_request]
214
-
215
- connection.stubs(:storage_request => response)
216
-
217
203
  container = CloudFiles::Container.new(connection, 'test_container')
218
204
  container.stubs(:connection).returns(connection)
219
205
  container.stubs(:public?).returns(args[:public] || false)
220
206
  container.stubs(:cdn_url).returns('http://cdn.test.example')
221
- @object = CloudFiles::StorageObject.new(container, args[:name] || 'test_object')
207
+ args[:obj] = [] unless args[:obj]
208
+ @object = CloudFiles::StorageObject.new(container, args[:name] || 'test_object', *args[:obj] )
222
209
  end
223
210
 
224
-
225
211
  end
@@ -3,3 +3,4 @@ $:.unshift File.dirname(__FILE__) + '/../lib'
3
3
  require 'cloudfiles'
4
4
  require 'rubygems'
5
5
  require 'mocha'
6
+ require 'client'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudfiles
3
3
  version: !ruby/object:Gem::Version
4
- hash: 35
4
+ hash: 3
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 4
9
- - 18
10
- version: 1.4.18
8
+ - 5
9
+ - 0
10
+ version: 1.5.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - H. Wade Minter
@@ -16,22 +16,21 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-09-28 00:00:00 -04:00
19
+ date: 2011-11-21 00:00:00 -05:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
- name: mime-types
23
+ name: json
24
24
  prerelease: false
25
25
  requirement: &id001 !ruby/object:Gem::Requirement
26
26
  none: false
27
27
  requirements:
28
28
  - - ">="
29
29
  - !ruby/object:Gem::Version
30
- hash: 47
30
+ hash: 3
31
31
  segments:
32
- - 1
33
- - 16
34
- version: "1.16"
32
+ - 0
33
+ version: "0"
35
34
  type: :runtime
36
35
  version_requirements: *id001
37
36
  - !ruby/object:Gem::Dependency
@@ -70,6 +69,7 @@ files:
70
69
  - TODO
71
70
  - cloudfiles.gemspec
72
71
  - lib/cloudfiles.rb
72
+ - lib/client.rb
73
73
  - lib/cloudfiles/authentication.rb
74
74
  - lib/cloudfiles/connection.rb
75
75
  - lib/cloudfiles/container.rb
@@ -81,6 +81,7 @@ files:
81
81
  - test/cloudfiles_connection_test.rb
82
82
  - test/cloudfiles_container_test.rb
83
83
  - test/cloudfiles_storage_object_test.rb
84
+ - test/cloudfiles_client_test.rb
84
85
  - test/test_helper.rb
85
86
  has_rdoc: true
86
87
  homepage: http://www.rackspacecloud.com/cloud_hosting_products/files
@@ -122,4 +123,5 @@ test_files:
122
123
  - test/cloudfiles_connection_test.rb
123
124
  - test/cloudfiles_container_test.rb
124
125
  - test/cloudfiles_storage_object_test.rb
126
+ - test/cloudfiles_client_test.rb
125
127
  - test/test_helper.rb