cloudfiles 1.4.15 → 1.4.16
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.
- data/.gitignore +1 -0
- data/CHANGELOG +7 -0
- data/CONTRIBUTORS +2 -0
- data/VERSION +1 -1
- data/cloudfiles.gemspec +2 -2
- data/lib/cloudfiles/authentication.rb +1 -0
- data/lib/cloudfiles/connection.rb +4 -0
- data/lib/cloudfiles/container.rb +42 -27
- data/lib/cloudfiles/exception.rb +2 -1
- data/lib/cloudfiles/storage_object.rb +21 -14
- data/test/cloudfiles_authentication_test.rb +4 -4
- data/test/cloudfiles_container_test.rb +26 -7
- data/test/cloudfiles_storage_object_test.rb +25 -5
- metadata +4 -4
data/.gitignore
CHANGED
data/CHANGELOG
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
================================================================================
|
2
|
+
1.4.16 (2011/03/17)
|
3
|
+
================================================================================
|
4
|
+
o Bugfix on CDN purging. (CvX)
|
5
|
+
o Better OpenStack Swift support with regards to handling the lack of
|
6
|
+
available CDN. (Topper Bowers)
|
7
|
+
|
1
8
|
================================================================================
|
2
9
|
1.4.15 (2011/03/09)
|
3
10
|
================================================================================
|
data/CONTRIBUTORS
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.4.
|
1
|
+
1.4.16
|
data/cloudfiles.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{cloudfiles}
|
8
|
-
s.version = "1.4.
|
8
|
+
s.version = "1.4.16"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["H. Wade Minter", "Rackspace Hosting"]
|
12
|
-
s.date = %q{2011-03-
|
12
|
+
s.date = %q{2011-03-17}
|
13
13
|
s.description = %q{A Ruby version of the Rackspace Cloud Files API.}
|
14
14
|
s.email = %q{minter@lunenburg.org}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -27,6 +27,7 @@ module CloudFiles
|
|
27
27
|
response = server.get(path, hdrhash)
|
28
28
|
if (response.code =~ /^20./)
|
29
29
|
if response["x-cdn-management-url"]
|
30
|
+
connection.cdn_available = true
|
30
31
|
connection.cdnmgmthost = URI.parse(response["x-cdn-management-url"]).host
|
31
32
|
connection.cdnmgmtpath = URI.parse(response["x-cdn-management-url"]).path
|
32
33
|
connection.cdnmgmtport = URI.parse(response["x-cdn-management-url"]).port
|
@@ -15,6 +15,10 @@ module CloudFiles
|
|
15
15
|
# API host to authenticate to
|
16
16
|
attr_reader :auth_url
|
17
17
|
|
18
|
+
# Set at auth to see if a CDN is available for use
|
19
|
+
attr_accessor :cdn_available
|
20
|
+
alias :cdn_available? :cdn_available
|
21
|
+
|
18
22
|
# Hostname of the CDN management server
|
19
23
|
attr_accessor :cdnmgmthost
|
20
24
|
|
data/lib/cloudfiles/container.rb
CHANGED
@@ -20,10 +20,12 @@ module CloudFiles
|
|
20
20
|
@storagepath = self.connection.storagepath + "/" + CloudFiles.escape(@name)
|
21
21
|
@storageport = self.connection.storageport
|
22
22
|
@storagescheme = self.connection.storagescheme
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
if self.connection.cdn_available?
|
24
|
+
@cdnmgmthost = self.connection.cdnmgmthost
|
25
|
+
@cdnmgmtpath = self.connection.cdnmgmtpath + "/" + CloudFiles.escape(@name) if self.connection.cdnmgmtpath
|
26
|
+
@cdnmgmtport = self.connection.cdnmgmtport
|
27
|
+
@cdnmgmtscheme = self.connection.cdnmgmtscheme
|
28
|
+
end
|
27
29
|
# Load the metadata now, so we'll get a CloudFiles::Exception::NoSuchContainer exception should the container
|
28
30
|
# not exist.
|
29
31
|
self.metadata
|
@@ -57,19 +59,24 @@ module CloudFiles
|
|
57
59
|
|
58
60
|
# Retrieves CDN-Enabled Meta Data
|
59
61
|
def cdn_metadata
|
60
|
-
@cdn_metadata
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
62
|
+
return @cdn_metadata if @cdn_metadata
|
63
|
+
if cdn_available?
|
64
|
+
@cdn_metadata = (
|
65
|
+
response = self.connection.cfreq("HEAD", @cdnmgmthost, @cdnmgmtpath, @cdnmgmtport, @cdnmgmtscheme)
|
66
|
+
cdn_enabled = ((response["x-cdn-enabled"] || "").downcase == "true") ? true : false
|
67
|
+
{
|
68
|
+
:cdn_enabled => cdn_enabled,
|
69
|
+
:cdn_ttl => cdn_enabled ? response["x-ttl"].to_i : nil,
|
70
|
+
:cdn_url => cdn_enabled ? response["x-cdn-uri"] : nil,
|
71
|
+
:cdn_ssl_url => cdn_enabled ? response["x-cdn-ssl-uri"] : nil,
|
72
|
+
:user_agent_acl => response["x-user-agent-acl"],
|
73
|
+
:referrer_acl => response["x-referrer-acl"],
|
74
|
+
:cdn_log => (cdn_enabled and response["x-log-retention"] == "True") ? true : false
|
75
|
+
}
|
76
|
+
)
|
77
|
+
else
|
78
|
+
@cdn_metadata = {}
|
79
|
+
end
|
73
80
|
end
|
74
81
|
|
75
82
|
# Size of the container (in bytes)
|
@@ -92,7 +99,7 @@ module CloudFiles
|
|
92
99
|
# private_container.public?
|
93
100
|
# => false
|
94
101
|
def cdn_enabled
|
95
|
-
self.cdn_metadata[:cdn_enabled]
|
102
|
+
cdn_available? && self.cdn_metadata[:cdn_enabled]
|
96
103
|
end
|
97
104
|
alias :cdn_enabled? :cdn_enabled
|
98
105
|
alias :public? :cdn_enabled
|
@@ -134,6 +141,7 @@ module CloudFiles
|
|
134
141
|
# These logs will be periodically (at unpredictable intervals) compressed and uploaded
|
135
142
|
# to a “.CDN_ACCESS_LOGS” container in the form of “container_name.YYYYMMDDHH-XXXX.gz”.
|
136
143
|
def log_retention=(value)
|
144
|
+
raise Exception::CDNNotAvailable unless cdn_available?
|
137
145
|
response = self.connection.cfreq("POST", @cdnmgmthost, @cdnmgmtpath, @cdnmgmtport, @cdnmgmtscheme, {"x-log-retention" => value.to_s.capitalize})
|
138
146
|
raise CloudFiles::Exception::InvalidResponse, "Invalid response code #{response.code}" unless (response.code == "201" or response.code == "202")
|
139
147
|
return true
|
@@ -289,6 +297,7 @@ module CloudFiles
|
|
289
297
|
# container.make_public(:ttl => 8900, :user_agent_acl => "/Mozilla/", :referrer_acl => "/^http://rackspace.com")
|
290
298
|
# => true
|
291
299
|
def make_public(options = {:ttl => 86400})
|
300
|
+
raise Exception::CDNNotAvailable unless cdn_available?
|
292
301
|
if options.is_a?(Fixnum)
|
293
302
|
print "DEPRECATED: make_public takes a hash of options now, instead of a TTL number"
|
294
303
|
ttl = options
|
@@ -315,6 +324,7 @@ module CloudFiles
|
|
315
324
|
# container.make_private
|
316
325
|
# => true
|
317
326
|
def make_private
|
327
|
+
raise Exception::CDNNotAvailable unless cdn_available?
|
318
328
|
headers = { "X-CDN-Enabled" => "False" }
|
319
329
|
response = self.connection.cfreq("POST", @cdnmgmthost, @cdnmgmtpath, @cdnmgmtport, @cdnmgmtscheme, headers)
|
320
330
|
raise CloudFiles::Exception::NoSuchContainer, "Container #{@name} does not exist" unless (response.code == "201" || response.code == "202")
|
@@ -340,21 +350,26 @@ module CloudFiles
|
|
340
350
|
# container.purge_from_cdn("User@domain.com, User2@domain.com")
|
341
351
|
# => true
|
342
352
|
def purge_from_cdn(email=nil)
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
353
|
+
raise Exception::CDNNotAvailable unless cdn_available?
|
354
|
+
if email
|
355
|
+
headers = {"X-Purge-Email" => email}
|
356
|
+
response = self.connection.cfreq("DELETE", @cdnmgmthost, @cdnmgmtpath, @cdnmgmtport, @cdnmgmtscheme, headers)
|
357
|
+
raise CloudFiles::Exception::Connection, "Error Unable to Purge Container: #{@name}" unless (response.code > "200" && response.code < "299")
|
358
|
+
else
|
359
|
+
response = self.connection.cfreq("DELETE", @cdnmgmthost, @cdnmgmtpath, @cdnmgmtport, @cdnmgmtscheme)
|
360
|
+
raise CloudFiles::Exception::Connection, "Error Unable to Purge Container: #{@name}" unless (response.code > "200" && response.code < "299")
|
361
|
+
true
|
362
|
+
end
|
352
363
|
end
|
353
364
|
|
354
365
|
def to_s # :nodoc:
|
355
366
|
@name
|
356
367
|
end
|
357
368
|
|
369
|
+
def cdn_available?
|
370
|
+
self.connection.cdn_available?
|
371
|
+
end
|
372
|
+
|
358
373
|
end
|
359
374
|
|
360
375
|
end
|
data/lib/cloudfiles/exception.rb
CHANGED
@@ -24,10 +24,12 @@ module CloudFiles
|
|
24
24
|
@storagepath = self.container.connection.storagepath + "/#{CloudFiles.escape @containername}/#{CloudFiles.escape @name, '/'}"
|
25
25
|
@storageport = self.container.connection.storageport
|
26
26
|
@storagescheme = self.container.connection.storagescheme
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
27
|
+
if self.container.connection.cdn_available?
|
28
|
+
@cdnmgmthost = self.container.connection.cdnmgmthost
|
29
|
+
@cdnmgmtpath = self.container.connection.cdnmgmtpath + "/#{CloudFiles.escape @containername}/#{CloudFiles.escape @name, '/'}"
|
30
|
+
@cdnmgmtport = self.container.connection.cdnmgmtport
|
31
|
+
@cdnmgmtscheme = self.container.connection.cdnmgmtscheme
|
32
|
+
end
|
31
33
|
if force_exists
|
32
34
|
raise CloudFiles::Exception::NoSuchObject, "Object #{@name} does not exist" unless container.object_exists?(objectname)
|
33
35
|
end
|
@@ -210,16 +212,17 @@ module CloudFiles
|
|
210
212
|
#
|
211
213
|
# obj.purge_from_cdn("User@domain.com, User2@domain.com")
|
212
214
|
# => true
|
213
|
-
def purge_from_cdn(email=nil)
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
215
|
+
def purge_from_cdn(email=nil)
|
216
|
+
raise Exception::CDNNotAvailable unless cdn_available?
|
217
|
+
if email
|
218
|
+
headers = {"X-Purge-Email" => email}
|
219
|
+
response = self.container.connection.cfreq("DELETE", @cdnmgmthost, @cdnmgmtpath, @cdnmgmtport, @cdnmgmtscheme, headers)
|
220
|
+
raise CloudFiles::Exception::Connection, "Error Unable to Purge Object: #{@name}" unless (response.code.to_s =~ /^20.$/)
|
221
|
+
else
|
222
|
+
response = self.container.connection.cfreq("DELETE", @cdnmgmthost, @cdnmgmtpath, @cdnmgmtport, @cdnmgmtscheme)
|
223
|
+
raise CloudFiles::Exception::Connection, "Error Unable to Purge Object: #{@name}" unless (response.code.to_s =~ /^20.$/)
|
224
|
+
end
|
225
|
+
true
|
223
226
|
end
|
224
227
|
|
225
228
|
# A convenience method to stream data into an object from a local file (or anything that can be loaded by Ruby's open method)
|
@@ -344,6 +347,10 @@ module CloudFiles
|
|
344
347
|
|
345
348
|
private
|
346
349
|
|
350
|
+
def cdn_available?
|
351
|
+
@cdn_available ||= self.container.connection.cdn_available?
|
352
|
+
end
|
353
|
+
|
347
354
|
def make_path(path) # :nodoc:
|
348
355
|
if path == "." || path == "/"
|
349
356
|
return
|
@@ -10,7 +10,7 @@ class CloudfilesAuthenticationTest < Test::Unit::TestCase
|
|
10
10
|
server = mock(:use_ssl= => true, :verify_mode= => true, :start => true, :finish => true)
|
11
11
|
server.stubs(:get).returns(response)
|
12
12
|
CloudFiles::Authentication.any_instance.stubs(:get_server).returns(server)
|
13
|
-
@connection = stub(:authuser => 'dummy_user', :authkey => 'dummy_key', :cdnmgmthost= => true, :cdnmgmtpath= => true, :cdnmgmtport= => true, :cdnmgmtscheme= => true, :storagehost= => true, :storagepath= => true, :storageport= => true, :storagescheme= => true, :authtoken= => true, :authok= => true, :snet? => false, :auth_url => 'https://auth.api.rackspacecloud.com/v1.0')
|
13
|
+
@connection = stub(:authuser => 'dummy_user', :authkey => 'dummy_key', :cdnmgmthost= => true, :cdnmgmtpath= => true, :cdnmgmtport= => true, :cdnmgmtscheme= => true, :storagehost= => true, :storagepath= => true, :storageport= => true, :storagescheme= => true, :authtoken= => true, :authok= => true, :snet? => false, :auth_url => 'https://auth.api.rackspacecloud.com/v1.0', :cdn_available? => true, :cdn_available= => true)
|
14
14
|
result = CloudFiles::Authentication.new(@connection)
|
15
15
|
assert_equal result.class, CloudFiles::Authentication
|
16
16
|
end
|
@@ -21,7 +21,7 @@ class CloudfilesAuthenticationTest < Test::Unit::TestCase
|
|
21
21
|
server = mock(:use_ssl= => true, :verify_mode= => true, :start => true, :finish => true)
|
22
22
|
server.stubs(:get).returns(response)
|
23
23
|
CloudFiles::Authentication.any_instance.stubs(:get_server).returns(server)
|
24
|
-
@connection = stub(:authuser => 'dummy_user', :authkey => 'dummy_key', :cdnmgmthost= => true, :cdnmgmtpath= => true, :cdnmgmtport= => true, :cdnmgmtscheme= => true, :storagehost= => true, :storagepath= => true, :storageport= => true, :storagescheme= => true, :authtoken= => true, :authok= => true, :snet? => true, :auth_url => 'https://auth.api.rackspacecloud.com/v1.0')
|
24
|
+
@connection = stub(:authuser => 'dummy_user', :authkey => 'dummy_key', :cdnmgmthost= => true, :cdnmgmtpath= => true, :cdnmgmtport= => true, :cdnmgmtscheme= => true, :storagehost= => true, :storagepath= => true, :storageport= => true, :storagescheme= => true, :authtoken= => true, :authok= => true, :snet? => true, :auth_url => 'https://auth.api.rackspacecloud.com/v1.0', :cdn_available? => true, :cdn_available= => true)
|
25
25
|
result = CloudFiles::Authentication.new(@connection)
|
26
26
|
assert_equal result.class, CloudFiles::Authentication
|
27
27
|
end
|
@@ -32,7 +32,7 @@ class CloudfilesAuthenticationTest < Test::Unit::TestCase
|
|
32
32
|
server = mock(:use_ssl= => true, :verify_mode= => true, :start => true)
|
33
33
|
server.stubs(:get).returns(response)
|
34
34
|
CloudFiles::Authentication.any_instance.stubs(:get_server).returns(server)
|
35
|
-
@connection = stub(:authuser => 'bad_user', :authkey => 'bad_key', :authok= => true, :authtoken= => true, :auth_url => 'https://auth.api.rackspacecloud.com/v1.0')
|
35
|
+
@connection = stub(:authuser => 'bad_user', :authkey => 'bad_key', :authok= => true, :authtoken= => true, :auth_url => 'https://auth.api.rackspacecloud.com/v1.0', :cdn_available? => true)
|
36
36
|
assert_raises(CloudFiles::Exception::Authentication) do
|
37
37
|
result = CloudFiles::Authentication.new(@connection)
|
38
38
|
end
|
@@ -40,7 +40,7 @@ class CloudfilesAuthenticationTest < Test::Unit::TestCase
|
|
40
40
|
|
41
41
|
def test_bad_hostname
|
42
42
|
Net::HTTP.stubs(:new).raises(CloudFiles::Exception::Connection)
|
43
|
-
@connection = stub(:proxy_host => nil, :proxy_port => nil, :authuser => 'bad_user', :authkey => 'bad_key', :authok= => true, :authtoken= => true, :auth_url => 'https://auth.api.rackspacecloud.com/v1.0')
|
43
|
+
@connection = stub(:proxy_host => nil, :proxy_port => nil, :authuser => 'bad_user', :authkey => 'bad_key', :authok= => true, :authtoken= => true, :auth_url => 'https://auth.api.rackspacecloud.com/v1.0', :cdn_available? => true)
|
44
44
|
assert_raises(CloudFiles::Exception::Connection) do
|
45
45
|
result = CloudFiles::Authentication.new(@connection)
|
46
46
|
end
|
@@ -4,7 +4,7 @@ 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')
|
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
8
|
response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5'}
|
9
9
|
response.stubs(:code).returns('204')
|
10
10
|
connection.stubs(:cfreq => response)
|
@@ -15,9 +15,20 @@ class CloudfilesContainerTest < Test::Unit::TestCase
|
|
15
15
|
assert_equal @container.cdn_url, nil
|
16
16
|
assert_equal @container.cdn_ttl, nil
|
17
17
|
end
|
18
|
+
|
19
|
+
def test_object_creation_with_no_cdn_available
|
20
|
+
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)
|
21
|
+
response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5'}
|
22
|
+
response.stubs(:code).returns('204')
|
23
|
+
connection.stubs(:cfreq => response)
|
24
|
+
@container = CloudFiles::Container.new(connection, 'test_container')
|
25
|
+
assert_equal 'test_container', @container.name
|
26
|
+
assert_equal CloudFiles::Container, @container.class
|
27
|
+
assert_equal false, @container.public?
|
28
|
+
end
|
18
29
|
|
19
30
|
def test_object_creation_no_such_container
|
20
|
-
connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https')
|
31
|
+
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)
|
21
32
|
response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5'}
|
22
33
|
response.stubs(:code).returns('999')
|
23
34
|
connection.stubs(:cfreq => response)
|
@@ -27,7 +38,7 @@ class CloudfilesContainerTest < Test::Unit::TestCase
|
|
27
38
|
end
|
28
39
|
|
29
40
|
def test_object_creation_with_cdn
|
30
|
-
connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https')
|
41
|
+
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)
|
31
42
|
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'}
|
32
43
|
response.stubs(:code).returns('204')
|
33
44
|
connection.stubs(:cfreq => response)
|
@@ -73,7 +84,7 @@ class CloudfilesContainerTest < Test::Unit::TestCase
|
|
73
84
|
end
|
74
85
|
|
75
86
|
def test_empty_is_false
|
76
|
-
connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https')
|
87
|
+
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)
|
77
88
|
response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5'}
|
78
89
|
response.stubs(:code).returns('204')
|
79
90
|
connection.stubs(:cfreq => response)
|
@@ -82,7 +93,7 @@ class CloudfilesContainerTest < Test::Unit::TestCase
|
|
82
93
|
end
|
83
94
|
|
84
95
|
def test_empty_is_true
|
85
|
-
connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https')
|
96
|
+
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)
|
86
97
|
response = {'x-container-bytes-used' => '0', 'x-container-object-count' => '0'}
|
87
98
|
response.stubs(:code).returns('204')
|
88
99
|
connection.stubs(:cfreq => response)
|
@@ -91,7 +102,7 @@ class CloudfilesContainerTest < Test::Unit::TestCase
|
|
91
102
|
end
|
92
103
|
|
93
104
|
def test_log_retention_is_true
|
94
|
-
connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https')
|
105
|
+
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)
|
95
106
|
response = {'x-container-bytes-used' => '0', 'x-container-object-count' => '0', 'x-cdn-enabled' => 'True', 'x-log-retention' => 'True'}
|
96
107
|
response.stubs(:code).returns('204')
|
97
108
|
connection.stubs(:cfreq => response)
|
@@ -240,12 +251,20 @@ class CloudfilesContainerTest < Test::Unit::TestCase
|
|
240
251
|
assert(@container.log_retention='false')
|
241
252
|
end
|
242
253
|
|
254
|
+
def test_purge_from_cdn_succeeds
|
255
|
+
build_net_http_object
|
256
|
+
assert_nothing_raised do
|
257
|
+
@container.purge_from_cdn
|
258
|
+
@container.purge_from_cdn("small.fox@hole.org")
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
243
262
|
private
|
244
263
|
|
245
264
|
def build_net_http_object(args={:code => '204' }, cfreq_expectations={})
|
246
265
|
CloudFiles::Container.any_instance.stubs(:populate).returns(true)
|
247
266
|
CloudFiles::Container.any_instance.stubs(:metadata).returns({})
|
248
|
-
connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https')
|
267
|
+
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)
|
249
268
|
args[:response] = {} unless args[:response]
|
250
269
|
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])
|
251
270
|
response.stubs(:code).returns(args[:code])
|
@@ -4,7 +4,19 @@ require 'test_helper'
|
|
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')
|
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(:cfreq => response)
|
11
|
+
container = CloudFiles::Container.new(connection, 'test_container')
|
12
|
+
@object = CloudFiles::StorageObject.new(container, 'test_object')
|
13
|
+
assert_equal @object.name, 'test_object'
|
14
|
+
assert_equal @object.class, CloudFiles::StorageObject
|
15
|
+
assert_equal @object.to_s, 'test_object'
|
16
|
+
end
|
17
|
+
|
18
|
+
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)
|
8
20
|
response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5', 'last-modified' => Time.now.to_s}
|
9
21
|
response.stubs(:code).returns('204')
|
10
22
|
connection.stubs(:cfreq => response)
|
@@ -16,7 +28,7 @@ class CloudfilesStorageObjectTest < Test::Unit::TestCase
|
|
16
28
|
end
|
17
29
|
|
18
30
|
def test_object_creation_with_invalid_name
|
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')
|
31
|
+
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)
|
20
32
|
response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5', 'last-modified' => Time.now.to_s}
|
21
33
|
response.stubs(:code).returns('204')
|
22
34
|
connection.stubs(:cfreq => response)
|
@@ -108,7 +120,7 @@ class CloudfilesStorageObjectTest < Test::Unit::TestCase
|
|
108
120
|
end
|
109
121
|
|
110
122
|
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')
|
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)
|
112
124
|
response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5', 'x-object-meta-foo' => 'Bar', 'last-modified' => Time.now.to_s}
|
113
125
|
response.stubs(:code).returns('204')
|
114
126
|
connection.stubs(:cfreq => response)
|
@@ -127,7 +139,7 @@ class CloudfilesStorageObjectTest < Test::Unit::TestCase
|
|
127
139
|
end
|
128
140
|
|
129
141
|
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')
|
142
|
+
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
143
|
response = {'x-container-bytes-used' => '42', 'x-container-object-count' => '5', 'last-modified' => Time.now.to_s}
|
132
144
|
response.stubs(:code).returns('204').then.returns('204').then.returns('201').then.returns('204')
|
133
145
|
connection.stubs(:cfreq => response)
|
@@ -161,6 +173,14 @@ class CloudfilesStorageObjectTest < Test::Unit::TestCase
|
|
161
173
|
end
|
162
174
|
end
|
163
175
|
|
176
|
+
def test_purge_from_cdn_succeeds
|
177
|
+
build_net_http_object
|
178
|
+
assert_nothing_raised do
|
179
|
+
@object.purge_from_cdn
|
180
|
+
@object.purge_from_cdn("small.fox@hole.org")
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
164
184
|
def test_write_with_no_data_dies
|
165
185
|
build_net_http_object
|
166
186
|
assert_raise(CloudFiles::Exception::Syntax) do
|
@@ -194,7 +214,7 @@ class CloudfilesStorageObjectTest < Test::Unit::TestCase
|
|
194
214
|
def build_net_http_object(args={:code => '204' })
|
195
215
|
CloudFiles::Container.any_instance.stubs(:metadata).returns({})
|
196
216
|
CloudFiles::Container.any_instance.stubs(:populate).returns(true)
|
197
|
-
connection = stub(:storagehost => 'test.storage.example', :storagepath => '/dummy/path', :storageport => 443, :storagescheme => 'https', :cdnmgmthost => 'cdm.test.example', :cdnmgmtpath => '/dummy/path', :cdnmgmtport => 443, :cdnmgmtscheme => 'https')
|
217
|
+
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)
|
198
218
|
args[:response] = {} unless args[:response]
|
199
219
|
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])
|
200
220
|
response.stubs(:code).returns(args[:code])
|
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:
|
4
|
+
hash: 39
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 4
|
9
|
-
-
|
10
|
-
version: 1.4.
|
9
|
+
- 16
|
10
|
+
version: 1.4.16
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- H. Wade Minter
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-03-
|
19
|
+
date: 2011-03-17 00:00:00 -04:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|