jmstacey-ruby-cloudfiles 1.3.2

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.
@@ -0,0 +1,190 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class CloudfilesContainerTest < Test::Unit::TestCase
4
+
5
+ def test_object_creation
6
+ connection = mock(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path')
7
+ response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5'}
8
+ response.stubs(:code).returns('204')
9
+ connection.stubs(:cfreq => response)
10
+ @container = CloudFiles::Container.new(connection, 'test_container')
11
+ assert_equal @container.name, 'test_container'
12
+ assert_equal @container.class, CloudFiles::Container
13
+ assert_equal @container.public?, true
14
+ end
15
+
16
+ def test_object_creation_no_such_container
17
+ connection = mock(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path')
18
+ response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5'}
19
+ response.stubs(:code).returns('999')
20
+ connection.stubs(:cfreq => response)
21
+ assert_raise(NoSuchContainerException) do
22
+ @container = CloudFiles::Container.new(connection, 'test_container')
23
+ end
24
+ end
25
+
26
+ def test_object_creation_no_cdn
27
+ connection = mock(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path')
28
+ response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5'}
29
+ response.stubs(:code).returns('204').then.returns('999')
30
+ connection.stubs(:cfreq => response)
31
+ @container = CloudFiles::Container.new(connection, 'test_container')
32
+ assert_equal @container.name, 'test_container'
33
+ assert_equal @container.cdn_enabled, false
34
+ assert_equal @container.public?, false
35
+ end
36
+
37
+ def test_to_s
38
+ build_net_http_object
39
+ assert_equal @container.to_s, 'test_container'
40
+ end
41
+
42
+ def test_make_private_succeeds
43
+ build_net_http_object(:code => '201')
44
+ assert_nothing_raised do
45
+ @container.make_private
46
+ end
47
+ end
48
+
49
+ def test_make_private_fails
50
+ build_net_http_object(:code => '999')
51
+ assert_raises(NoSuchContainerException) do
52
+ @container.make_private
53
+ end
54
+ end
55
+
56
+ def test_make_public_succeeds
57
+ build_net_http_object(:code => '201')
58
+ assert_nothing_raised do
59
+ @container.make_public
60
+ end
61
+ end
62
+
63
+ def test_make_public_fails
64
+ build_net_http_object(:code => '999')
65
+ assert_raises(NoSuchContainerException) do
66
+ @container.make_public
67
+ end
68
+ end
69
+
70
+ def test_empty_is_false
71
+ connection = mock(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path')
72
+ response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5'}
73
+ response.stubs(:code).returns('204')
74
+ connection.stubs(:cfreq => response)
75
+ @container = CloudFiles::Container.new(connection, 'test_container')
76
+ assert_equal @container.empty?, false
77
+ end
78
+
79
+ def test_empty_is_true
80
+ connection = mock(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path')
81
+ response = {'x-container-bytes-used' => '0', 'x-container-object-count' => '0'}
82
+ response.stubs(:code).returns('204')
83
+ connection.stubs(:cfreq => response)
84
+ @container = CloudFiles::Container.new(connection, 'test_container')
85
+ assert_equal @container.empty?, true
86
+ end
87
+
88
+ def test_object_fetch
89
+ build_net_http_object(:code => '204', :response => {'last-modified' => 'Wed, 28 Jan 2009 16:16:26 GMT'})
90
+ object = @container.object('good_object')
91
+ assert_equal object.class, CloudFiles::StorageObject
92
+ end
93
+
94
+ def test_create_object
95
+ build_net_http_object()
96
+ object = @container.create_object('new_object')
97
+ assert_equal object.class, CloudFiles::StorageObject
98
+ end
99
+
100
+ def test_object_exists_true
101
+ build_net_http_object
102
+ assert_equal @container.object_exists?('good_object'), true
103
+ end
104
+
105
+ def test_object_exists_false
106
+ build_net_http_object(:code => '999')
107
+ assert_equal @container.object_exists?('bad_object'), false
108
+ end
109
+
110
+ def test_delete_object_succeeds
111
+ build_net_http_object
112
+ assert_nothing_raised do
113
+ @container.delete_object('good_object')
114
+ end
115
+ end
116
+
117
+ def test_delete_invalid_object_fails
118
+ build_net_http_object(:code => '404')
119
+ assert_raise(NoSuchObjectException) do
120
+ @container.delete_object('nonexistent_object')
121
+ end
122
+ end
123
+
124
+ def test_delete_invalid_response_code_fails
125
+ build_net_http_object(:code => '999')
126
+ assert_raise(InvalidResponseException) do
127
+ @container.delete_object('broken_object')
128
+ end
129
+ end
130
+
131
+ def test_fetch_objects
132
+ build_net_http_object(:code => '200', :body => "foo\nbar\nbaz")
133
+ objects = @container.objects
134
+ assert_equal objects.class, Array
135
+ assert_equal objects.size, 3
136
+ assert_equal objects.first, 'foo'
137
+ end
138
+
139
+ def test_fetch_object_detail
140
+ body = %{<?xml version="1.0" encoding="UTF-8"?>
141
+ <container name="video">
142
+ <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>
143
+ <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>
144
+ </container>
145
+ }
146
+ build_net_http_object(:code => '200', :body => body)
147
+ details = @container.objects_detail
148
+ assert_equal details.size, 2
149
+ assert_equal details['kisscam.mov'][:bytes], '9196332'
150
+ end
151
+
152
+ def test_fetch_object_detail_empty
153
+ build_net_http_object
154
+ details = @container.objects_detail
155
+ assert_equal details, {}
156
+ end
157
+
158
+ def test_fetch_object_detail_error
159
+ build_net_http_object(:code => '999')
160
+ assert_raise(InvalidResponseException) do
161
+ details = @container.objects_detail
162
+ end
163
+ end
164
+
165
+ private
166
+
167
+ def build_net_http_object(args={:code => '204' })
168
+ CloudFiles::Container.any_instance.stubs(:populate).returns(true)
169
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path')
170
+ args[:response] = {} unless args[:response]
171
+ 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])
172
+ response.stubs(:code).returns(args[:code])
173
+ response.stubs(:body).returns args[:body] || nil
174
+ connection.stubs(:cfreq => response)
175
+ #server = mock()
176
+ #server.stubs(:verify_mode= => true)
177
+ #server.stubs(:start => true)
178
+ #server.stubs(:use_ssl=).returns(true)
179
+ #server.stubs(:get).returns(response)
180
+ #server.stubs(:post).returns(response)
181
+ #server.stubs(:put).returns(response)
182
+ #server.stubs(:head).returns(response)
183
+ #server.stubs(:delete).returns(response)
184
+ #Net::HTTP.stubs(:new).returns(server)
185
+ @container = CloudFiles::Container.new(connection, 'test_container')
186
+ @container.stubs(:connection).returns(connection)
187
+ end
188
+
189
+
190
+ end
@@ -0,0 +1,170 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class CloudfilesStorageObjectTest < Test::Unit::TestCase
4
+
5
+ def test_object_creation
6
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path')
7
+ response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5', 'last-modified' => Time.now.to_s}
8
+ response.stubs(:code).returns('204')
9
+ connection.stubs(:cfreq => response)
10
+ container = CloudFiles::Container.new(connection, 'test_container')
11
+ @object = CloudFiles::StorageObject.new(container, 'test_object')
12
+ assert_equal @object.name, 'test_object'
13
+ assert_equal @object.class, CloudFiles::StorageObject
14
+ assert_equal @object.to_s, 'test_object'
15
+ end
16
+
17
+ def test_object_creation_with_invalid_name
18
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path')
19
+ response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5', 'last-modified' => Time.now.to_s}
20
+ response.stubs(:code).returns('204')
21
+ connection.stubs(:cfreq => response)
22
+ container = CloudFiles::Container.new(connection, 'test_container')
23
+ assert_raises SyntaxException do
24
+ @object = CloudFiles::StorageObject.new(container, 'test_object?')
25
+ end
26
+ end
27
+
28
+
29
+ def test_public_url_exists
30
+ build_net_http_object(:public => true, :name => 'test object')
31
+ assert_equal @object.public_url, "http://cdn.test.example/test%20object"
32
+ end
33
+
34
+ def test_public_url_does_not_exist
35
+ build_net_http_object
36
+ assert_equal @object.public_url, nil
37
+ end
38
+
39
+ def test_data_succeeds
40
+ build_net_http_object(:code => '200', :body => 'This is good data')
41
+ assert_equal @object.data, 'This is good data'
42
+ end
43
+
44
+ def test_data_fails
45
+ build_net_http_object(:code => '999', :body => 'This is bad data')
46
+ assert_raise(NoSuchObjectException) do
47
+ @object.data
48
+ end
49
+ end
50
+
51
+ def test_data_stream_succeeds
52
+ build_net_http_object(:code => '200', :body => 'This is good data')
53
+ data = ""
54
+ assert_nothing_raised do
55
+ @object.data_stream { |chunk|
56
+ data += chunk
57
+ }
58
+ end
59
+ end
60
+
61
+ def data_stream_fails
62
+ build_net_http_object(:code => '999', :body => 'This is bad data')
63
+ data = ""
64
+ assert_raise(NoSuchObjectException) do
65
+ @object.data_stream { |chunk|
66
+ data += chunk
67
+ }
68
+ end
69
+ end
70
+
71
+ def test_set_metadata_succeeds
72
+ CloudFiles::StorageObject.any_instance.stubs(:populate).returns(true)
73
+ build_net_http_object(:code => '202')
74
+ assert_nothing_raised do
75
+ @object.set_metadata({'Foo' =>'bar'})
76
+ end
77
+ end
78
+
79
+ def test_set_metadata_invalid_object
80
+ build_net_http_object(:code => '404')
81
+ assert_raise(NoSuchObjectException) do
82
+ @object.set_metadata({'Foo' =>'bar'})
83
+ end
84
+ end
85
+
86
+ def test_set_metadata_fails
87
+ build_net_http_object(:code => '999')
88
+ assert_raise(InvalidResponseException) do
89
+ @object.set_metadata({'Foo' =>'bar'})
90
+ end
91
+ end
92
+
93
+ def test_write_succeeds
94
+ CloudFiles::StorageObject.any_instance.stubs(:populate).returns(true)
95
+ CloudFiles::Container.any_instance.stubs(:populate).returns(true)
96
+ build_net_http_object(:code => '201')
97
+ assert_nothing_raised do
98
+ @object.write("This is test data")
99
+ end
100
+ end
101
+
102
+ def test_load_from_filename_succeeds
103
+ require 'tempfile'
104
+ out = Tempfile.new('test')
105
+ out.write("This is test data")
106
+ out.close
107
+ CloudFiles::StorageObject.any_instance.stubs(:populate).returns(true)
108
+ CloudFiles::Container.any_instance.stubs(:populate).returns(true)
109
+ build_net_http_object(:code => '201')
110
+ assert_nothing_raised do
111
+ @object.load_from_filename(out.path)
112
+ end
113
+ end
114
+
115
+ def test_write_sets_mime_type
116
+ CloudFiles::StorageObject.any_instance.stubs(:populate).returns(true)
117
+ CloudFiles::Container.any_instance.stubs(:populate).returns(true)
118
+ build_net_http_object(:name => 'myfile.xml', :code => '201')
119
+ assert_nothing_raised do
120
+ @object.write("This is test data")
121
+ end
122
+ end
123
+
124
+ def test_write_with_no_data_dies
125
+ build_net_http_object
126
+ assert_raise(SyntaxException) do
127
+ @object.write
128
+ end
129
+ end
130
+
131
+ def test_write_with_invalid_content_length_dies
132
+ build_net_http_object(:code => '412')
133
+ assert_raise(InvalidResponseException) do
134
+ @object.write('Test Data')
135
+ end
136
+ end
137
+
138
+ def test_write_with_mismatched_md5_dies
139
+ build_net_http_object(:code => '422')
140
+ assert_raise(MisMatchedChecksumException) do
141
+ @object.write('Test Data')
142
+ end
143
+ end
144
+
145
+ def test_write_with_invalid_response_dies
146
+ build_net_http_object(:code => '999')
147
+ assert_raise(InvalidResponseException) do
148
+ @object.write('Test Data')
149
+ end
150
+ end
151
+
152
+ private
153
+
154
+ def build_net_http_object(args={:code => '204' })
155
+ CloudFiles::Container.any_instance.stubs(:populate).returns(true)
156
+ connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path')
157
+ args[:response] = {} unless args[:response]
158
+ 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])
159
+ response.stubs(:code).returns(args[:code])
160
+ response.stubs(:body).returns args[:body] || nil
161
+ connection.stubs(:cfreq => response)
162
+ container = CloudFiles::Container.new(connection, 'test_container')
163
+ container.stubs(:connection).returns(connection)
164
+ container.stubs(:public?).returns(args[:public] || false)
165
+ container.stubs(:cdn_url).returns('http://cdn.test.example')
166
+ @object = CloudFiles::StorageObject.new(container, args[:name] || 'test_object')
167
+ end
168
+
169
+
170
+ end
@@ -0,0 +1,5 @@
1
+ require 'test/unit'
2
+ $:.unshift File.dirname(__FILE__) + '/../lib'
3
+ require 'cloudfiles'
4
+ require 'rubygems'
5
+ require 'mocha'
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jmstacey-ruby-cloudfiles
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.3.2
5
+ platform: ruby
6
+ authors:
7
+ - H. Wade Minter
8
+ - Rackspace Hosting
9
+ - Jon Stacey
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+
14
+ date: 2009-04-18 00:00:00 -07:00
15
+ default_executable:
16
+ dependencies: []
17
+
18
+ description:
19
+ email: jon@jonsview.com
20
+ executables: []
21
+
22
+ extensions: []
23
+
24
+ extra_rdoc_files:
25
+ - LICENSE
26
+ - README.markdown
27
+ files:
28
+ - LICENSE
29
+ - README.markdown
30
+ - Rakefile
31
+ - VERSION.yml
32
+ - lib/cloudfiles.rb
33
+ - lib/cloudfiles/authentication.rb
34
+ - lib/cloudfiles/connection.rb
35
+ - lib/cloudfiles/container.rb
36
+ - lib/cloudfiles/storage_object.rb
37
+ - test/cf-testunit.rb
38
+ - test/cloudfiles_authentication_test.rb
39
+ - test/cloudfiles_connection_test.rb
40
+ - test/cloudfiles_container_test.rb
41
+ - test/cloudfiles_storage_object_test.rb
42
+ - test/test_helper.rb
43
+ has_rdoc: true
44
+ homepage: http://github.com/jmstacey/ruby-cloudfiles
45
+ post_install_message:
46
+ rdoc_options:
47
+ - --charset=UTF-8
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: "0"
55
+ version:
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: "0"
61
+ version:
62
+ requirements: []
63
+
64
+ rubyforge_project:
65
+ rubygems_version: 1.2.0
66
+ signing_key:
67
+ specification_version: 2
68
+ summary: TODO
69
+ test_files:
70
+ - test/cf-testunit.rb
71
+ - test/cloudfiles_authentication_test.rb
72
+ - test/cloudfiles_connection_test.rb
73
+ - test/cloudfiles_container_test.rb
74
+ - test/cloudfiles_storage_object_test.rb
75
+ - test/test_helper.rb