s3 0.3.25 → 0.3.26
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.
- checksums.yaml +5 -5
- data/.gitignore +8 -7
- data/.travis.yml +3 -5
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +5 -1
- data/Gemfile.lock +14 -10
- data/LICENSE.txt +21 -0
- data/Rakefile +5 -16
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/s3.rb +2 -1
- data/lib/s3/bucket.rb +1 -4
- data/lib/s3/connection.rb +1 -1
- data/lib/s3/object.rb +18 -3
- data/lib/s3/parser.rb +23 -23
- data/lib/s3/signature.rb +1 -3
- data/lib/s3/version.rb +1 -1
- data/s3.gemspec +24 -24
- metadata +34 -24
- data/LICENSE +0 -20
- data/test/bucket_test.rb +0 -245
- data/test/connection_test.rb +0 -214
- data/test/object_test.rb +0 -222
- data/test/service_test.rb +0 -127
- data/test/signature_test.rb +0 -228
- data/test/test_helper.rb +0 -3
metadata
CHANGED
@@ -1,31 +1,45 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: s3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.26
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kuba Kuźma
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
20
|
-
type: :
|
19
|
+
version: '1.16'
|
20
|
+
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: '1.16'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: test-unit
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
45
|
- - ">="
|
@@ -39,7 +53,7 @@ dependencies:
|
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
56
|
+
name: mocha
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - ">="
|
@@ -53,13 +67,13 @@ dependencies:
|
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
70
|
+
name: addressable
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - ">="
|
60
74
|
- !ruby/object:Gem::Version
|
61
75
|
version: '0'
|
62
|
-
type: :
|
76
|
+
type: :runtime
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
@@ -67,21 +81,20 @@ dependencies:
|
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
84
|
+
name: proxies
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - ">="
|
74
88
|
- !ruby/object:Gem::Version
|
75
89
|
version: '0'
|
76
|
-
type: :
|
90
|
+
type: :runtime
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
94
|
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
83
|
-
description:
|
84
|
-
both: European and US buckets through REST API.'
|
97
|
+
description: S3 library provides access to Amazon's Simple Storage Service.
|
85
98
|
email:
|
86
99
|
- kuba@jah.pl
|
87
100
|
executables: []
|
@@ -90,11 +103,14 @@ extra_rdoc_files: []
|
|
90
103
|
files:
|
91
104
|
- ".gitignore"
|
92
105
|
- ".travis.yml"
|
106
|
+
- CODE_OF_CONDUCT.md
|
93
107
|
- Gemfile
|
94
108
|
- Gemfile.lock
|
95
|
-
- LICENSE
|
109
|
+
- LICENSE.txt
|
96
110
|
- README.rdoc
|
97
111
|
- Rakefile
|
112
|
+
- bin/console
|
113
|
+
- bin/setup
|
98
114
|
- lib/s3.rb
|
99
115
|
- lib/s3/bucket.rb
|
100
116
|
- lib/s3/buckets_extension.rb
|
@@ -108,12 +124,6 @@ files:
|
|
108
124
|
- lib/s3/signature.rb
|
109
125
|
- lib/s3/version.rb
|
110
126
|
- s3.gemspec
|
111
|
-
- test/bucket_test.rb
|
112
|
-
- test/connection_test.rb
|
113
|
-
- test/object_test.rb
|
114
|
-
- test/service_test.rb
|
115
|
-
- test/signature_test.rb
|
116
|
-
- test/test_helper.rb
|
117
127
|
homepage: http://github.com/qoobaa/s3
|
118
128
|
licenses:
|
119
129
|
- MIT
|
@@ -131,10 +141,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
131
141
|
requirements:
|
132
142
|
- - ">="
|
133
143
|
- !ruby/object:Gem::Version
|
134
|
-
version:
|
144
|
+
version: '0'
|
135
145
|
requirements: []
|
136
|
-
rubyforge_project:
|
137
|
-
rubygems_version: 2.
|
146
|
+
rubyforge_project:
|
147
|
+
rubygems_version: 2.7.3
|
138
148
|
signing_key:
|
139
149
|
specification_version: 4
|
140
150
|
summary: Library for accessing S3 objects and buckets
|
data/LICENSE
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
Copyright (c) 2009 Jakub Kuźma, Mirosław Boruta
|
2
|
-
|
3
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
-
a copy of this software and associated documentation files (the
|
5
|
-
"Software"), to deal in the Software without restriction, including
|
6
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
-
permit persons to whom the Software is furnished to do so, subject to
|
9
|
-
the following conditions:
|
10
|
-
|
11
|
-
The above copyright notice and this permission notice shall be
|
12
|
-
included in all copies or substantial portions of the Software.
|
13
|
-
|
14
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/test/bucket_test.rb
DELETED
@@ -1,245 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
class BucketTest < Test::Unit::TestCase
|
4
|
-
def setup
|
5
|
-
@bucket_vhost = S3::Bucket.send(:new, S3::Service.new(access_key_id: 'test', secret_access_key: 'secret'), "Data-Bucket")
|
6
|
-
@bucket_path = S3::Bucket.send(:new, S3::Service.new(access_key_id: 'test', secret_access_key: 'secret', use_vhost: false), "Data_Bucket")
|
7
|
-
@secure_bucket = S3::Bucket.send(:new, S3::Service.new(access_key_id: 'test', secret_access_key: 'secret', use_ssl: true), "Data-Secured")
|
8
|
-
@bucket = @bucket_vhost
|
9
|
-
|
10
|
-
@bucket_location = "EU"
|
11
|
-
@bucket_location_body = <<-EOLocation
|
12
|
-
<?xml version="1.0" encoding="UTF-8"?>\n<LocationConstraint xmlns="http://s3.amazonaws.com/doc/2006-03-01/">EU</LocationConstraint>
|
13
|
-
EOLocation
|
14
|
-
|
15
|
-
@response_location = Net::HTTPOK.new("1.1", "200", "OK")
|
16
|
-
@response_location.stubs(:body).returns(@bucket_location_body)
|
17
|
-
|
18
|
-
@bucket_owned_by_you_body = <<-EOOwnedByYou
|
19
|
-
<?xml version="1.0" encoding="UTF-8"?>\n<Error> <Code>BucketAlreadyOwnedByYou</Code> <Message>Your previous request to create the named bucket succeeded and you already own it.</Message> <BucketName>bucket</BucketName> <RequestId>117D08EA0EC6E860</RequestId> <HostId>4VpMSvmJ+G5+DLtVox6O5cZNgdPlYcjCu3l0n4HjDe01vPxxuk5eTAtcAkUynRyV</HostId> </Error>
|
20
|
-
EOOwnedByYou
|
21
|
-
|
22
|
-
@response_owned_by_you = Net::HTTPConflict.new("1.1", "409", "Conflict")
|
23
|
-
@response_owned_by_you.stubs(:body).returns(@bucket_owned_by_you_body)
|
24
|
-
|
25
|
-
@bucket_already_exists_body = <<-EOAlreadyExists
|
26
|
-
<?xml version="1.0" encoding="UTF-8"?>\n<Error> <Code>BucketAlreadyExists</Code> <Message>The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.</Message> <BucketName>bucket</BucketName> <RequestId>4C154D32807C92BD</RequestId> <HostId>/xyHQgXcUXTZQhoO+NUBzbaxbFrIhKlyuaRHFnmcId0bMePvY9Zwg+dyk2LYE4g5</HostId> </Error>
|
27
|
-
EOAlreadyExists
|
28
|
-
|
29
|
-
@response_already_exists = Net::HTTPConflict.new("1.1", "409", "Conflict")
|
30
|
-
@response_already_exists.stubs(:body).returns(@bucket_already_exists_body)
|
31
|
-
|
32
|
-
@objects_list_empty = []
|
33
|
-
@objects_list = [
|
34
|
-
S3::Object.send(:new, @bucket, :key => "obj1"),
|
35
|
-
S3::Object.send(:new, @bucket, :key => "obj2"),
|
36
|
-
S3::Object.send(:new, @bucket, :key => "prefix/"),
|
37
|
-
S3::Object.send(:new, @bucket, :key => "prefix/obj3")
|
38
|
-
]
|
39
|
-
|
40
|
-
@objects_list_prefix = [
|
41
|
-
S3::Object.send(:new, @bucket, :key => "prefix/"),
|
42
|
-
S3::Object.send(:new, @bucket, :key => "prefix/obj3")
|
43
|
-
]
|
44
|
-
|
45
|
-
@response_objects_list_empty_body = <<-EOEmpty
|
46
|
-
<?xml version="1.0" encoding="UTF-8"?>\n<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Name>bucket</Name> <Prefix></Prefix> <Marker></Marker> <MaxKeys>1000</MaxKeys> <IsTruncated>false</IsTruncated> </ListBucketResult>
|
47
|
-
EOEmpty
|
48
|
-
|
49
|
-
@response_objects_list_empty = Net::HTTPOK.new("1.1", "200", "OK")
|
50
|
-
@response_objects_list_empty.stubs(:body).returns(@response_objects_list_empty_body)
|
51
|
-
|
52
|
-
@response_objects_list_body = <<-EOObjects
|
53
|
-
<?xml version="1.0" encoding="UTF-8"?>\n<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Name>bucket</Name> <Prefix></Prefix> <Marker></Marker> <MaxKeys>1000</MaxKeys> <IsTruncated>false</IsTruncated> <Contents> <Key>obj1</Key> <LastModified>2009-07-03T10:17:33.000Z</LastModified> <ETag>"99519cdf14c255e580e1b7bca85a458c"</ETag> <Size>1729</Size> <Owner> <ID>df864aeb6f42be43f1d9e60aaabe3f15e245b035a4b79d1cfe36c4deaec67205</ID> <DisplayName>owner</DisplayName> </Owner> <StorageClass>STANDARD</StorageClass> </Contents> <Contents> <Key>obj2</Key> <LastModified>2009-07-03T11:17:33.000Z</LastModified> <ETag>"99519cdf14c255e586e1b12bca85a458c"</ETag> <Size>179</Size> <Owner> <ID>df864aeb6f42be43f1d9e60aaabe3f17e247b037a4b79d1cfe36c4deaec67205</ID> <DisplayName>owner</DisplayName> </Owner> <StorageClass>STANDARD</StorageClass> </Contents> <Contents> <Key>prefix/</Key> <LastModified>2009-07-03T10:17:33.000Z</LastModified> <ETag>"99519cdf14c255e580e1b7bca85a458c"</ETag> <Size>1729</Size> <Owner> <ID>df864aeb6f42be43f1d9e60aaabe3f15e245b035a4b79d1cfe36c4deaec67205</ID> <DisplayName>owner</DisplayName> </Owner> <StorageClass>STANDARD</StorageClass> </Contents> <Contents> <Key>prefix/obj3</Key> <LastModified>2009-07-03T10:17:33.000Z</LastModified> <ETag>"99519cdf14c255e580e1b7bca85a458c"</ETag> <Size>1729</Size> <Owner> <ID>df864aeb6f42be43f1d9e60aaabe3f15e245b035a4b79d1cfe36c4deaec67205</ID> <DisplayName>owner</DisplayName> </Owner> <StorageClass>STANDARD</StorageClass> </Contents> </ListBucketResult>
|
54
|
-
EOObjects
|
55
|
-
|
56
|
-
@response_objects_list = Net::HTTPOK.new("1.1", "200", "OK")
|
57
|
-
@response_objects_list.stubs(:body).returns(@response_objects_list_body)
|
58
|
-
|
59
|
-
@response_objects_list_body_prefix = <<-EOObjectsPrefix
|
60
|
-
<?xml version="1.0" encoding="UTF-8"?>\n<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Name>bucket</Name> <Prefix>prefix</Prefix> <Marker></Marker> <MaxKeys>1000</MaxKeys> <IsTruncated>false</IsTruncated> <Contents> <Key>prefix/</Key> <LastModified>2009-07-03T10:17:33.000Z</LastModified> <ETag>"99519cdf14c255e580e1b7bca85a458c"</ETag> <Size>1729</Size> <Owner> <ID>df864aeb6f42be43f1d9e60aaabe3f15e245b035a4b79d1cfe36c4deaec67205</ID> <DisplayName>owner</DisplayName> </Owner> <StorageClass>STANDARD</StorageClass> </Contents> <Contents> <Key>prefix/obj3</Key> <LastModified>2009-07-03T10:17:33.000Z</LastModified> <ETag>"99519cdf14c255e580e1b7bca85a458c"</ETag> <Size>1729</Size> <Owner> <ID>df864aeb6f42be43f1d9e60aaabe3f15e245b035a4b79d1cfe36c4deaec67205</ID> <DisplayName>owner</DisplayName> </Owner> <StorageClass>STANDARD</StorageClass> </Contents> </ListBucketResult>
|
61
|
-
EOObjectsPrefix
|
62
|
-
|
63
|
-
|
64
|
-
@response_objects_list_prefix = Net::HTTPOK.new("1.1", "200", "OK")
|
65
|
-
@response_objects_list_prefix.stubs(:body).returns(@response_objects_list_body_prefix)
|
66
|
-
end
|
67
|
-
|
68
|
-
test "name valid" do
|
69
|
-
assert_raise ArgumentError do S3::Bucket.send(:new, nil, "") end # should not be valid with empty name
|
70
|
-
assert_raise ArgumentError do S3::Bucket.send(:new, nil, "10.0.0.1") end # should not be valid with IP as name
|
71
|
-
assert_raise ArgumentError do S3::Bucket.send(:new, nil, "as") end # should not be valid with name shorter than 3 characters
|
72
|
-
assert_raise ArgumentError do S3::Bucket.send(:new, nil, "a" * 256) end # should not be valid with name longer than 255 characters
|
73
|
-
assert_raise ArgumentError do S3::Bucket.send(:new, nil, ".asdf") end # should not allow special characters as first character
|
74
|
-
assert_raise ArgumentError do S3::Bucket.send(:new, nil, "-asdf") end # should not allow special characters as first character
|
75
|
-
assert_raise ArgumentError do S3::Bucket.send(:new, nil, "_asdf") end # should not allow special characters as first character
|
76
|
-
|
77
|
-
assert_nothing_raised do
|
78
|
-
S3::Bucket.send(:new, nil, "a-a-")
|
79
|
-
S3::Bucket.send(:new, nil, "a.a.")
|
80
|
-
S3::Bucket.send(:new, nil, "a_a_")
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
test "path prefix" do
|
85
|
-
expected = ""
|
86
|
-
actual = @bucket_vhost.path_prefix
|
87
|
-
assert_equal expected, actual
|
88
|
-
|
89
|
-
expected = "Data_Bucket/"
|
90
|
-
actual = @bucket_path.path_prefix
|
91
|
-
assert_equal expected, actual
|
92
|
-
end
|
93
|
-
|
94
|
-
test "host" do
|
95
|
-
expected = "Data-Bucket.s3.amazonaws.com"
|
96
|
-
actual = @bucket_vhost.host
|
97
|
-
assert_equal expected, actual
|
98
|
-
|
99
|
-
expected = "s3.amazonaws.com"
|
100
|
-
actual = @bucket_path.host
|
101
|
-
assert_equal expected, actual
|
102
|
-
|
103
|
-
expected = "s3.amazonaws.com"
|
104
|
-
actual = @secure_bucket.host
|
105
|
-
assert_equal expected, actual
|
106
|
-
end
|
107
|
-
|
108
|
-
test "vhost" do
|
109
|
-
assert @bucket_vhost.vhost?
|
110
|
-
assert ! @bucket_path.vhost?
|
111
|
-
end
|
112
|
-
|
113
|
-
test "exists" do
|
114
|
-
@bucket.expects(:retrieve).returns(@bucket_vhost)
|
115
|
-
assert @bucket.exists?
|
116
|
-
|
117
|
-
@bucket.expects(:retrieve).raises(S3::Error::NoSuchBucket.new(nil, nil))
|
118
|
-
assert ! @bucket.exists?
|
119
|
-
end
|
120
|
-
|
121
|
-
test "location and parse location" do
|
122
|
-
@bucket.expects(:bucket_request).with(:get, { :params => { :location => nil } }).returns(@response_location)
|
123
|
-
|
124
|
-
expected = @bucket_location
|
125
|
-
actual = @bucket.location
|
126
|
-
assert_equal expected, actual
|
127
|
-
|
128
|
-
@bucket.stubs(:bucket_request).with(:get, { :params => { :location => nil } })
|
129
|
-
actual = @bucket.location
|
130
|
-
assert_equal expected, actual
|
131
|
-
end
|
132
|
-
|
133
|
-
test "save" do
|
134
|
-
@bucket.expects(:bucket_request).with(:put, { :headers => {} })
|
135
|
-
assert @bucket.save
|
136
|
-
# mock ensures that bucket_request was called
|
137
|
-
end
|
138
|
-
|
139
|
-
test "save failure owned by you" do
|
140
|
-
@bucket.expects(:bucket_request).with(:put, { :headers => {} }).raises(S3::Error::BucketAlreadyOwnedByYou.new(409, @response_owned_by_you))
|
141
|
-
assert_raise S3::Error::BucketAlreadyOwnedByYou do
|
142
|
-
@bucket.save
|
143
|
-
end
|
144
|
-
|
145
|
-
@bucket.expects(:bucket_request).with(:put, { :headers => {} }).raises(S3::Error::BucketAlreadyExists.new(409, @response_already_exists))
|
146
|
-
assert_raise S3::Error::BucketAlreadyExists do
|
147
|
-
@bucket.save
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
test "objects" do
|
152
|
-
@bucket.expects(:list_bucket).returns(@objects_list_empty)
|
153
|
-
expected = @objects_list_empty
|
154
|
-
actual = @bucket.objects
|
155
|
-
assert_equal expected, actual
|
156
|
-
|
157
|
-
@bucket.stubs(:list_bucket).returns(@objects_list_empty)
|
158
|
-
actual = @bucket.objects
|
159
|
-
assert_equal expected, actual
|
160
|
-
|
161
|
-
@bucket.stubs(:list_bucket).returns(@objects_list)
|
162
|
-
|
163
|
-
expected = @objects_list
|
164
|
-
actual = @bucket.objects
|
165
|
-
assert_equal expected, actual
|
166
|
-
|
167
|
-
@bucket.stubs(:list_bucket).with(:prefix=>'prefix').returns(@objects_list_prefix)
|
168
|
-
expected = @objects_list_prefix
|
169
|
-
actual = @bucket.objects(:prefix => 'prefix')
|
170
|
-
assert_equal expected, actual
|
171
|
-
end
|
172
|
-
|
173
|
-
test "list bucket and parse objects" do
|
174
|
-
@bucket.expects(:bucket_request).with(:get, :params => { :test=>true }).returns(@response_objects_list_empty)
|
175
|
-
expected = @objects_list_empty
|
176
|
-
actual = @bucket.objects.find_all(:test => true)
|
177
|
-
assert_equal expected, actual
|
178
|
-
|
179
|
-
@bucket.expects(:bucket_request).with(:get, :params => { :test => true }).returns(@response_objects_list)
|
180
|
-
expected = @objects_list
|
181
|
-
actual = @bucket.objects.find_all(:test => true)
|
182
|
-
assert_equal expected, actual
|
183
|
-
|
184
|
-
@bucket.expects(:bucket_request).with(:get, :params => { :test => true }).returns(@response_objects_list_prefix)
|
185
|
-
expected = @objects_list_prefix
|
186
|
-
actual = @bucket.objects(:prefix => "prefix").find_all(:test => true)
|
187
|
-
assert_equal expected, actual
|
188
|
-
end
|
189
|
-
|
190
|
-
test "destroy" do
|
191
|
-
@bucket.expects(:bucket_request).with(:delete)
|
192
|
-
assert @bucket.destroy
|
193
|
-
end
|
194
|
-
|
195
|
-
test "objects build" do
|
196
|
-
@bucket.stubs(:bucket_request)
|
197
|
-
|
198
|
-
expected = "object_name"
|
199
|
-
actual = @bucket.objects.build("object_name")
|
200
|
-
assert_kind_of S3::Object, actual
|
201
|
-
assert_equal expected, actual.key
|
202
|
-
end
|
203
|
-
|
204
|
-
test "objects find first" do
|
205
|
-
assert_nothing_raised do
|
206
|
-
S3::Object.any_instance.stubs(:retrieve).returns(S3::Object.send(:new, nil, :key => "obj2"))
|
207
|
-
expected = "obj2"
|
208
|
-
actual = @bucket.objects.find_first("obj2")
|
209
|
-
assert_equal "obj2", actual.key
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
test "objects find first fail" do
|
214
|
-
assert_raise S3::Error::NoSuchKey do
|
215
|
-
S3::Object.any_instance.stubs(:retrieve).raises(S3::Error::NoSuchKey.new(404, nil))
|
216
|
-
@bucket.objects.find_first("obj3")
|
217
|
-
end
|
218
|
-
end
|
219
|
-
|
220
|
-
test "objects find all on empty list" do
|
221
|
-
@bucket.stubs(:list_bucket).returns(@objects_list_empty)
|
222
|
-
assert_nothing_raised do
|
223
|
-
expected = @objects_list_empty
|
224
|
-
actual = @bucket.objects.find_all
|
225
|
-
assert_equal expected, actual
|
226
|
-
end
|
227
|
-
end
|
228
|
-
|
229
|
-
test "objects find all" do
|
230
|
-
@bucket.stubs(:list_bucket).returns(@objects_list)
|
231
|
-
assert_nothing_raised do
|
232
|
-
expected = @objects_list
|
233
|
-
actual = @bucket.objects.find_all
|
234
|
-
assert_equal expected, actual
|
235
|
-
end
|
236
|
-
end
|
237
|
-
|
238
|
-
test "objects destroy all" do
|
239
|
-
@bucket.stubs(:list_bucket).returns(@objects_list)
|
240
|
-
@bucket.objects.each do |obj|
|
241
|
-
obj.expects(:destroy)
|
242
|
-
end
|
243
|
-
@bucket.objects.destroy_all
|
244
|
-
end
|
245
|
-
end
|
data/test/connection_test.rb
DELETED
@@ -1,214 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
class ConnectionTest < Test::Unit::TestCase
|
4
|
-
def setup
|
5
|
-
@connection = S3::Connection.new(
|
6
|
-
:access_key_id => "12345678901234567890",
|
7
|
-
:secret_access_key => "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDF"
|
8
|
-
)
|
9
|
-
@http_request = Net::HTTP.new("")
|
10
|
-
@response_ok = Net::HTTPOK.new("1.1", "200", "OK")
|
11
|
-
@response_not_found = Net::HTTPNotFound.new("1.1", "404", "Not Found")
|
12
|
-
@response_error = Net::HTTPInternalServerError.new("1.1", "500", "Internal Server Error")
|
13
|
-
@response_temporary_redirect = Net::HTTPInternalServerError.new("1.1", "307", "Temporary Redirect")
|
14
|
-
@connection.stubs(:http).returns(@http_request)
|
15
|
-
|
16
|
-
@http_request.stubs(:start).returns(@response_ok)
|
17
|
-
end
|
18
|
-
|
19
|
-
test "handle response not modify response when ok" do
|
20
|
-
assert_nothing_raised do
|
21
|
-
response = @connection.request(
|
22
|
-
:get,
|
23
|
-
:host => "s3.amazonaws.com",
|
24
|
-
:path => "/"
|
25
|
-
)
|
26
|
-
assert_equal @response_ok, response
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
test "handle response throws exception when error" do
|
31
|
-
response_body = <<-EOFakeBody
|
32
|
-
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
|
33
|
-
<Error>
|
34
|
-
<Code>NoSuchBucket</Code>
|
35
|
-
<Message>The specified bucket does not exist</Message>
|
36
|
-
</Error>
|
37
|
-
EOFakeBody
|
38
|
-
|
39
|
-
@http_request.stubs(:start).returns(@response_not_found)
|
40
|
-
@response_not_found.stubs(:body).returns(response_body)
|
41
|
-
|
42
|
-
assert_raise S3::Error::NoSuchBucket do
|
43
|
-
response = @connection.request(
|
44
|
-
:get,
|
45
|
-
:host => "data.example.com.s3.amazonaws.com",
|
46
|
-
:path => "/"
|
47
|
-
)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
test "handle response throws standard exception when error" do
|
52
|
-
@http_request.stubs(:start).returns(@response_error)
|
53
|
-
@response_error.stubs(:body)
|
54
|
-
assert_raise S3::Error::ResponseError do
|
55
|
-
response = @connection.request(
|
56
|
-
:get,
|
57
|
-
:host => "data.example.com.s3.amazonaws.com",
|
58
|
-
:path => "/"
|
59
|
-
)
|
60
|
-
end
|
61
|
-
|
62
|
-
@response_error.stubs(:body).returns("")
|
63
|
-
assert_raise S3::Error::ResponseError do
|
64
|
-
response = @connection.request(
|
65
|
-
:get,
|
66
|
-
:host => "data.example.com.s3.amazonaws.com",
|
67
|
-
:path => "/"
|
68
|
-
)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
test "parse params empty" do
|
73
|
-
expected = ""
|
74
|
-
actual = S3::Connection.parse_params({})
|
75
|
-
assert_equal expected, actual
|
76
|
-
end
|
77
|
-
|
78
|
-
test "parse params only interesting params" do
|
79
|
-
expected = ""
|
80
|
-
actual = S3::Connection.parse_params(:param1 => "1", :maxkeys => "2")
|
81
|
-
assert_equal expected, actual
|
82
|
-
end
|
83
|
-
|
84
|
-
test "parse params remove underscore" do
|
85
|
-
expected = "max-keys=100"
|
86
|
-
actual = S3::Connection.parse_params(:max_keys => 100)
|
87
|
-
assert_equal expected, actual
|
88
|
-
end
|
89
|
-
|
90
|
-
test "parse params with and without values" do
|
91
|
-
params = S3::Connection.parse_params(:max_keys => 100, :prefix => nil)
|
92
|
-
|
93
|
-
splitted_params = params.split("&")
|
94
|
-
assert_equal 2, splitted_params.length
|
95
|
-
assert splitted_params.include?("max-keys=100")
|
96
|
-
assert splitted_params.include?("prefix")
|
97
|
-
end
|
98
|
-
|
99
|
-
test "headers empty" do
|
100
|
-
expected = {}
|
101
|
-
actual = S3::Connection.parse_headers({})
|
102
|
-
assert_equal expected, actual
|
103
|
-
end
|
104
|
-
|
105
|
-
test "parse only interesting headers" do
|
106
|
-
expected = {}
|
107
|
-
actual = S3::Connection.parse_headers(
|
108
|
-
:accept => "text/*, text/html, text/html;level=1, */*",
|
109
|
-
:accept_charset => "iso-8859-2, unicode-1-1;q=0.8"
|
110
|
-
)
|
111
|
-
assert_equal expected, actual
|
112
|
-
end
|
113
|
-
|
114
|
-
test "parse headers remove underscore" do
|
115
|
-
expected = {
|
116
|
-
"content-type" => nil,
|
117
|
-
"x-amz-acl" => nil,
|
118
|
-
"x-amz-storage-class" => nil,
|
119
|
-
"if-modified-since" => nil,
|
120
|
-
"if-unmodified-since" => nil,
|
121
|
-
"if-match" => nil,
|
122
|
-
"if-none-match" => nil,
|
123
|
-
"content-disposition" => nil,
|
124
|
-
"content-encoding" => nil
|
125
|
-
}
|
126
|
-
actual = S3::Connection.parse_headers(
|
127
|
-
:content_type => nil,
|
128
|
-
:x_amz_acl => nil,
|
129
|
-
:x_amz_storage_class => nil,
|
130
|
-
:if_modified_since => nil,
|
131
|
-
:if_unmodified_since => nil,
|
132
|
-
:if_match => nil,
|
133
|
-
:if_none_match => nil,
|
134
|
-
:content_disposition => nil,
|
135
|
-
:content_encoding => nil
|
136
|
-
)
|
137
|
-
assert_equal expected, actual
|
138
|
-
end
|
139
|
-
|
140
|
-
test "parse headers with values" do
|
141
|
-
expected = {
|
142
|
-
"content-type" => "text/html",
|
143
|
-
"x-amz-acl" => "public-read",
|
144
|
-
"x-amz-storage-class" => "STANDARD",
|
145
|
-
"if-modified-since" => "today",
|
146
|
-
"if-unmodified-since" => "tomorrow",
|
147
|
-
"if-match" => "1234",
|
148
|
-
"if-none-match" => "1243",
|
149
|
-
"content-disposition" => "inline",
|
150
|
-
"content-encoding" => "gzip"
|
151
|
-
}
|
152
|
-
actual = S3::Connection.parse_headers(
|
153
|
-
:content_type => "text/html",
|
154
|
-
:x_amz_acl => "public-read",
|
155
|
-
:x_amz_storage_class => "STANDARD",
|
156
|
-
:if_modified_since => "today",
|
157
|
-
:if_unmodified_since => "tomorrow",
|
158
|
-
:if_match => "1234",
|
159
|
-
:if_none_match => "1243",
|
160
|
-
:content_disposition => "inline",
|
161
|
-
:content_encoding => "gzip"
|
162
|
-
)
|
163
|
-
assert_equal expected, actual
|
164
|
-
end
|
165
|
-
|
166
|
-
test "parse headers with range" do
|
167
|
-
expected = {
|
168
|
-
"range" => "bytes=0-100"
|
169
|
-
}
|
170
|
-
actual = S3::Connection.parse_headers(
|
171
|
-
:range => 0..100
|
172
|
-
)
|
173
|
-
assert_equal expected, actual
|
174
|
-
end
|
175
|
-
|
176
|
-
test "response.body is nil on TemporaryRedirect" do
|
177
|
-
@http_request.stubs(:start).returns(@response_temporary_redirect)
|
178
|
-
@response_temporary_redirect.stubs(:body).returns(nil)
|
179
|
-
|
180
|
-
assert_nothing_raised do
|
181
|
-
response = @connection.request(
|
182
|
-
:get,
|
183
|
-
:host => "data.example.com.s3.amazonaws.com",
|
184
|
-
:path => "/"
|
185
|
-
)
|
186
|
-
assert_equal nil, response
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
test "response body with new host on TemporaryRedirect" do
|
191
|
-
response_body = <<-EOFakeBody
|
192
|
-
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>
|
193
|
-
<Error>
|
194
|
-
<Code>TemporaryRedirect</Code>
|
195
|
-
<Message>Please re-send this request to the specified temporary endpoint. Continue to use the original request endpoint for future requests.</Message>
|
196
|
-
<RequestId>24A0BB91158D470B</RequestId>
|
197
|
-
<Bucket>data.example.com</Bucket>
|
198
|
-
<HostId>DFcq9ktw5HvWZLduutz8fnVzqtXLwIZcAezc7mgyS7lJ2ux+RChY4qAJGa2fQDjV</HostId>
|
199
|
-
<Endpoint>data.example.com.s3-external-3.amazonaws.com</Endpoint>
|
200
|
-
</Error>"
|
201
|
-
EOFakeBody
|
202
|
-
|
203
|
-
@response_temporary_redirect.stubs(:body).returns(response_body)
|
204
|
-
|
205
|
-
assert_nothing_raised do
|
206
|
-
response = @connection.request(
|
207
|
-
:get,
|
208
|
-
:host => "data.example.com.s3.amazonaws.com",
|
209
|
-
:path => "/"
|
210
|
-
)
|
211
|
-
assert_equal @response_ok, response
|
212
|
-
end
|
213
|
-
end
|
214
|
-
end
|