aliyun-oss-ex 0.7.0.1402831795
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 +7 -0
- data/COPYING +19 -0
- data/INSTALL +35 -0
- data/README +443 -0
- data/Rakefile +334 -0
- data/bin/oss +6 -0
- data/bin/setup.rb +11 -0
- data/lib/aliyun/oss.rb +55 -0
- data/lib/aliyun/oss/acl.rb +132 -0
- data/lib/aliyun/oss/authentication.rb +222 -0
- data/lib/aliyun/oss/base.rb +241 -0
- data/lib/aliyun/oss/bucket.rb +320 -0
- data/lib/aliyun/oss/connection.rb +279 -0
- data/lib/aliyun/oss/error.rb +70 -0
- data/lib/aliyun/oss/exceptions.rb +134 -0
- data/lib/aliyun/oss/extensions.rb +405 -0
- data/lib/aliyun/oss/logging.rb +304 -0
- data/lib/aliyun/oss/object.rb +612 -0
- data/lib/aliyun/oss/owner.rb +45 -0
- data/lib/aliyun/oss/parsing.rb +100 -0
- data/lib/aliyun/oss/response.rb +181 -0
- data/lib/aliyun/oss/service.rb +52 -0
- data/lib/aliyun/oss/version.rb +14 -0
- data/support/faster-xml-simple/lib/faster_xml_simple.rb +188 -0
- data/support/faster-xml-simple/test/regression_test.rb +48 -0
- data/support/faster-xml-simple/test/test_helper.rb +18 -0
- data/support/faster-xml-simple/test/xml_simple_comparison_test.rb +47 -0
- data/support/rdoc/code_info.rb +212 -0
- data/test/acl_test.rb +70 -0
- data/test/authentication_test.rb +114 -0
- data/test/base_test.rb +137 -0
- data/test/bucket_test.rb +75 -0
- data/test/connection_test.rb +218 -0
- data/test/error_test.rb +71 -0
- data/test/extensions_test.rb +346 -0
- data/test/fixtures.rb +90 -0
- data/test/fixtures/buckets.yml +133 -0
- data/test/fixtures/errors.yml +34 -0
- data/test/fixtures/headers.yml +3 -0
- data/test/fixtures/logging.yml +15 -0
- data/test/fixtures/loglines.yml +5 -0
- data/test/fixtures/logs.yml +7 -0
- data/test/fixtures/policies.yml +16 -0
- data/test/logging_test.rb +90 -0
- data/test/mocks/fake_response.rb +27 -0
- data/test/object_test.rb +221 -0
- data/test/parsing_test.rb +67 -0
- data/test/remote/acl_test.rb +28 -0
- data/test/remote/bucket_test.rb +147 -0
- data/test/remote/logging_test.rb +86 -0
- data/test/remote/object_test.rb +350 -0
- data/test/remote/test_file.data +0 -0
- data/test/remote/test_helper.rb +34 -0
- data/test/response_test.rb +69 -0
- data/test/service_test.rb +24 -0
- data/test/test_helper.rb +110 -0
- metadata +177 -0
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require File.dirname(__FILE__) + '/test_helper'
|
3
|
+
|
4
|
+
class RemoteACLTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
establish_real_connection
|
8
|
+
end
|
9
|
+
|
10
|
+
def teardown
|
11
|
+
disconnect!
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_acl
|
15
|
+
Bucket.create(TEST_BUCKET)
|
16
|
+
Bucket.acl(TEST_BUCKET, :private) # Wipe out the existing bucket's ACL
|
17
|
+
|
18
|
+
bucket_policy = Bucket.acl(TEST_BUCKET)
|
19
|
+
assert_equal 'private', bucket_policy
|
20
|
+
|
21
|
+
assert_nothing_raised do
|
22
|
+
Bucket.acl(TEST_BUCKET, :public_read)
|
23
|
+
end
|
24
|
+
|
25
|
+
bucket = Bucket.find(TEST_BUCKET)
|
26
|
+
assert_equal 'public-read', bucket.acl
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,147 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require File.dirname(__FILE__) + '/test_helper'
|
3
|
+
|
4
|
+
class RemoteBucketTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
establish_real_connection
|
8
|
+
assert Bucket.find(TEST_BUCKET).delete_all
|
9
|
+
end
|
10
|
+
|
11
|
+
def teardown
|
12
|
+
disconnect!
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_bucket
|
16
|
+
# Fetch the testing bucket
|
17
|
+
|
18
|
+
bucket = nil
|
19
|
+
assert_nothing_raised do
|
20
|
+
bucket = Bucket.find(TEST_BUCKET)
|
21
|
+
end
|
22
|
+
|
23
|
+
assert bucket
|
24
|
+
|
25
|
+
# Confirm we can fetch the bucket implicitly
|
26
|
+
|
27
|
+
bucket = nil
|
28
|
+
assert_nothing_raised do
|
29
|
+
bucket = TestBucket.find
|
30
|
+
end
|
31
|
+
|
32
|
+
assert bucket
|
33
|
+
|
34
|
+
# Confirm the bucket has the right name
|
35
|
+
|
36
|
+
assert_equal TEST_BUCKET, bucket.name
|
37
|
+
|
38
|
+
assert bucket.empty?
|
39
|
+
assert_equal 0, bucket.size
|
40
|
+
|
41
|
+
# Add some files to the bucket
|
42
|
+
|
43
|
+
assert_nothing_raised do
|
44
|
+
%w(a m z).each do |file_name|
|
45
|
+
OSSObject.create(file_name, file_name, bucket.name, :content_type => 'text/plain')
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Confirm that we can reload the objects
|
50
|
+
|
51
|
+
assert_nothing_raised do
|
52
|
+
bucket.objects(:reload)
|
53
|
+
end
|
54
|
+
|
55
|
+
assert !bucket.empty?
|
56
|
+
assert_equal 3, bucket.size
|
57
|
+
|
58
|
+
assert_nothing_raised do
|
59
|
+
bucket.objects(:marker => 'm')
|
60
|
+
end
|
61
|
+
|
62
|
+
assert_equal 1, bucket.size
|
63
|
+
assert bucket['z']
|
64
|
+
|
65
|
+
assert_equal 1, Bucket.find(TEST_BUCKET, :max_keys => 1).size
|
66
|
+
|
67
|
+
assert_nothing_raised do
|
68
|
+
bucket.objects(:reload)
|
69
|
+
end
|
70
|
+
|
71
|
+
assert_equal 3, bucket.size
|
72
|
+
|
73
|
+
# Ensure the reloaded buckets have been repatriated
|
74
|
+
|
75
|
+
assert_equal bucket, bucket.objects.first.bucket
|
76
|
+
|
77
|
+
# Confirm that we can delete one of the objects and it will be removed
|
78
|
+
|
79
|
+
object_to_be_deleted = bucket.objects.last
|
80
|
+
assert_nothing_raised do
|
81
|
+
object_to_be_deleted.delete
|
82
|
+
end
|
83
|
+
|
84
|
+
assert !bucket.objects.include?(object_to_be_deleted)
|
85
|
+
|
86
|
+
# Confirm that we can add an object
|
87
|
+
|
88
|
+
object = bucket.new_object(:value => 'hello')
|
89
|
+
|
90
|
+
assert_raises(NoKeySpecified) do
|
91
|
+
object.store
|
92
|
+
end
|
93
|
+
|
94
|
+
object.key = 'abc'
|
95
|
+
assert_nothing_raised do
|
96
|
+
object.store
|
97
|
+
end
|
98
|
+
|
99
|
+
assert bucket.objects.include?(object)
|
100
|
+
|
101
|
+
# Confirm that the object is still there after reloading its objects
|
102
|
+
|
103
|
+
assert_nothing_raised do
|
104
|
+
bucket.objects(:reload)
|
105
|
+
end
|
106
|
+
assert bucket.objects.include?(object)
|
107
|
+
|
108
|
+
# Check that TestBucket has the same objects fetched implicitly
|
109
|
+
|
110
|
+
assert_equal bucket.objects, TestBucket.objects
|
111
|
+
|
112
|
+
# Empty out bucket
|
113
|
+
|
114
|
+
assert_nothing_raised do
|
115
|
+
bucket.delete_all
|
116
|
+
end
|
117
|
+
|
118
|
+
assert bucket.empty?
|
119
|
+
|
120
|
+
bucket = nil
|
121
|
+
assert_nothing_raised do
|
122
|
+
bucket = Bucket.find(TEST_BUCKET)
|
123
|
+
end
|
124
|
+
|
125
|
+
assert bucket.empty?
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_bucket_name_is_switched_with_options_when_bucket_is_implicit_and_options_are_passed
|
129
|
+
Object.const_set(:ImplicitlyNamedBucket, Class.new(Bucket))
|
130
|
+
ImplicitlyNamedBucket.current_bucket = TEST_BUCKET
|
131
|
+
assert ImplicitlyNamedBucket.objects.empty?
|
132
|
+
|
133
|
+
%w(a b c).each {|key| OSSObject.store(key, 'value does not matter', TEST_BUCKET)}
|
134
|
+
|
135
|
+
assert_equal 3, ImplicitlyNamedBucket.objects.size
|
136
|
+
|
137
|
+
objects = nil
|
138
|
+
assert_nothing_raised do
|
139
|
+
objects = ImplicitlyNamedBucket.objects(:max_keys => 1)
|
140
|
+
end
|
141
|
+
|
142
|
+
assert objects
|
143
|
+
assert_equal 1, objects.size
|
144
|
+
ensure
|
145
|
+
%w(a b c).each {|key| OSSObject.delete(key, TEST_BUCKET)}
|
146
|
+
end
|
147
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require File.dirname(__FILE__) + '/test_helper'
|
3
|
+
|
4
|
+
class RemoteLoggingTest < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
establish_real_connection
|
7
|
+
end
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
disconnect!
|
11
|
+
end
|
12
|
+
|
13
|
+
#TODO 日记功能API不确定
|
14
|
+
=begin
|
15
|
+
def test_logging
|
16
|
+
Bucket.create(TEST_BUCKET) # Clear out any custom grants
|
17
|
+
|
18
|
+
# Confirm that logging is not enabled on the test bucket
|
19
|
+
|
20
|
+
assert !Bucket.logging_enabled_for?(TEST_BUCKET)
|
21
|
+
assert !Bucket.find(TEST_BUCKET).logging_enabled?
|
22
|
+
|
23
|
+
assert_equal [], Bucket.logs_for(TEST_BUCKET)
|
24
|
+
|
25
|
+
# Confirm the current bucket doesn't have logging grants
|
26
|
+
|
27
|
+
policy = Bucket.acl(TEST_BUCKET)
|
28
|
+
assert !policy.grants.include?(:logging_read_acp)
|
29
|
+
assert !policy.grants.include?(:logging_write)
|
30
|
+
|
31
|
+
# Confirm that we can enable logging
|
32
|
+
|
33
|
+
assert_nothing_raised do
|
34
|
+
Bucket.enable_logging_for TEST_BUCKET
|
35
|
+
end
|
36
|
+
|
37
|
+
# Confirm enabling logging worked
|
38
|
+
|
39
|
+
assert Service.response.success?
|
40
|
+
|
41
|
+
assert Bucket.logging_enabled_for?(TEST_BUCKET)
|
42
|
+
assert Bucket.find(TEST_BUCKET).logging_enabled?
|
43
|
+
|
44
|
+
# Confirm the appropriate grants were added
|
45
|
+
|
46
|
+
policy = Bucket.acl(TEST_BUCKET)
|
47
|
+
assert policy.grants.include?(:logging_read_acp)
|
48
|
+
assert policy.grants.include?(:logging_write)
|
49
|
+
|
50
|
+
# Confirm logging status used defaults
|
51
|
+
|
52
|
+
logging_status = Bucket.logging_status_for TEST_BUCKET
|
53
|
+
assert_equal TEST_BUCKET, logging_status.target_bucket
|
54
|
+
assert_equal 'log-', logging_status.target_prefix
|
55
|
+
|
56
|
+
# Confirm we can update the logging status
|
57
|
+
|
58
|
+
logging_status.target_prefix = 'access-log-'
|
59
|
+
|
60
|
+
assert_nothing_raised do
|
61
|
+
Bucket.logging_status_for TEST_BUCKET, logging_status
|
62
|
+
end
|
63
|
+
|
64
|
+
assert Service.response.success?
|
65
|
+
|
66
|
+
logging_status = Bucket.logging_status_for TEST_BUCKET
|
67
|
+
assert_equal 'access-log-', logging_status.target_prefix
|
68
|
+
|
69
|
+
# Confirm we can make a request for the bucket's logs
|
70
|
+
|
71
|
+
assert_nothing_raised do
|
72
|
+
Bucket.logs_for TEST_BUCKET
|
73
|
+
end
|
74
|
+
|
75
|
+
# Confirm we can disable logging
|
76
|
+
|
77
|
+
assert_nothing_raised do
|
78
|
+
Bucket.disable_logging_for(TEST_BUCKET)
|
79
|
+
end
|
80
|
+
|
81
|
+
assert Service.response.success?
|
82
|
+
|
83
|
+
assert !Bucket.logging_enabled_for?(TEST_BUCKET)
|
84
|
+
end
|
85
|
+
=end
|
86
|
+
end
|
@@ -0,0 +1,350 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require File.dirname(__FILE__) + '/test_helper'
|
3
|
+
|
4
|
+
class RemoteOSSObjectTest < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
establish_real_connection
|
7
|
+
end
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
disconnect!
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_object
|
14
|
+
key = 'testing_ossobjects'
|
15
|
+
value = 'testing'
|
16
|
+
content_type = 'text/plain'
|
17
|
+
unauthenticated_url = ['http:/', Base.connection.http.address, TEST_BUCKET, key].join('/')
|
18
|
+
|
19
|
+
# Create an object
|
20
|
+
|
21
|
+
response = nil
|
22
|
+
assert_nothing_raised do
|
23
|
+
response = OSSObject.create(key, value, TEST_BUCKET, :content_type => content_type)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Check response
|
27
|
+
|
28
|
+
assert response.success?
|
29
|
+
|
30
|
+
# Extract the object's etag
|
31
|
+
|
32
|
+
etag = nil
|
33
|
+
assert_nothing_raised do
|
34
|
+
etag = response.etag
|
35
|
+
end
|
36
|
+
|
37
|
+
assert etag
|
38
|
+
|
39
|
+
# Confirm we can't create an object unless the bucket is set
|
40
|
+
|
41
|
+
assert_raises(NoBucketSpecified) do
|
42
|
+
object = OSSObject.new
|
43
|
+
object.key = 'hello'
|
44
|
+
object.store
|
45
|
+
end
|
46
|
+
|
47
|
+
# Fetch newly created object to show it was actually created
|
48
|
+
|
49
|
+
object = nil
|
50
|
+
assert_nothing_raised do
|
51
|
+
object = OSSObject.find(key, TEST_BUCKET)
|
52
|
+
end
|
53
|
+
|
54
|
+
assert object
|
55
|
+
|
56
|
+
# Confirm it has the right etag
|
57
|
+
|
58
|
+
assert_equal etag, object.etag
|
59
|
+
|
60
|
+
# Check if its owner is properly set
|
61
|
+
|
62
|
+
assert_nothing_raised do
|
63
|
+
object.owner.display_name
|
64
|
+
end
|
65
|
+
|
66
|
+
# Confirm we can get the object's key
|
67
|
+
|
68
|
+
assert_equal key, object.key
|
69
|
+
|
70
|
+
# Confirm its value was properly set
|
71
|
+
|
72
|
+
assert_equal value, object.value
|
73
|
+
assert_equal value, OSSObject.value(key, TEST_BUCKET)
|
74
|
+
streamed_value = ''
|
75
|
+
assert_nothing_raised do
|
76
|
+
OSSObject.stream(key, TEST_BUCKET) do |segment|
|
77
|
+
streamed_value << segment
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
assert_equal value, streamed_value
|
82
|
+
|
83
|
+
# Change its value
|
84
|
+
|
85
|
+
new_value = "<script>alert('foo');</script>"
|
86
|
+
assert_nothing_raised do
|
87
|
+
object.value = new_value
|
88
|
+
end
|
89
|
+
assert_equal new_value, object.value
|
90
|
+
|
91
|
+
# Confirm content type was properly set
|
92
|
+
|
93
|
+
assert_equal content_type, object.content_type
|
94
|
+
|
95
|
+
# Change its content type
|
96
|
+
|
97
|
+
new_content_type = 'text/javascript'
|
98
|
+
assert_nothing_raised do
|
99
|
+
object.content_type = new_content_type
|
100
|
+
end
|
101
|
+
|
102
|
+
assert_equal new_content_type, object.content_type
|
103
|
+
|
104
|
+
# Test that it is publicly readable
|
105
|
+
|
106
|
+
Bucket.acl(TEST_BUCKET, :public_read)
|
107
|
+
response = fetch_object_at(unauthenticated_url)
|
108
|
+
assert (200..299).include?(response.code.to_i)
|
109
|
+
|
110
|
+
# Confirm that it has no meta data
|
111
|
+
|
112
|
+
assert object.metadata.empty?
|
113
|
+
|
114
|
+
# Set some meta data
|
115
|
+
|
116
|
+
metadata_key = :secret_sauce
|
117
|
+
metadata_value = "it's a secret"
|
118
|
+
object.metadata[metadata_key] = metadata_value
|
119
|
+
|
120
|
+
# Persist all changes
|
121
|
+
|
122
|
+
assert_nothing_raised do
|
123
|
+
object.store
|
124
|
+
end
|
125
|
+
|
126
|
+
# Refetch the object
|
127
|
+
|
128
|
+
key = object.key
|
129
|
+
object = nil
|
130
|
+
assert_nothing_raised do
|
131
|
+
object = OSSObject.find(key, TEST_BUCKET)
|
132
|
+
end
|
133
|
+
|
134
|
+
# Confirm all changes were persisted
|
135
|
+
|
136
|
+
assert object
|
137
|
+
assert_equal key, object.key
|
138
|
+
|
139
|
+
assert_equal new_content_type, object.content_type
|
140
|
+
|
141
|
+
assert_equal new_value, object.value
|
142
|
+
assert_equal new_value, object.value(:reload)
|
143
|
+
|
144
|
+
assert !object.metadata.empty?
|
145
|
+
assert_equal metadata_value, object.metadata[metadata_key]
|
146
|
+
|
147
|
+
# Change acl
|
148
|
+
|
149
|
+
Bucket.acl(TEST_BUCKET, :private)
|
150
|
+
|
151
|
+
# Confirm object is no longer publicly readable
|
152
|
+
|
153
|
+
response = fetch_object_at(unauthenticated_url)
|
154
|
+
assert (400..499).include?(response.code.to_i)
|
155
|
+
|
156
|
+
# Confirm object is accessible from its authenticated url
|
157
|
+
|
158
|
+
response = fetch_object_at(object.url)
|
159
|
+
assert (200..299).include?(response.code.to_i)
|
160
|
+
|
161
|
+
# Copy the object
|
162
|
+
|
163
|
+
assert_nothing_raised do
|
164
|
+
object.copy('testing_ossobjects-copy')
|
165
|
+
end
|
166
|
+
|
167
|
+
# Confirm the object is identical
|
168
|
+
|
169
|
+
copy = nil
|
170
|
+
assert_nothing_raised do
|
171
|
+
copy = OSSObject.find('testing_ossobjects-copy', TEST_BUCKET)
|
172
|
+
end
|
173
|
+
|
174
|
+
assert copy
|
175
|
+
|
176
|
+
assert_equal object.value, copy.value
|
177
|
+
assert_equal object.content_type, copy.content_type
|
178
|
+
|
179
|
+
# Delete object
|
180
|
+
|
181
|
+
assert_nothing_raised do
|
182
|
+
object.delete
|
183
|
+
end
|
184
|
+
|
185
|
+
# Confirm we can rename objects
|
186
|
+
|
187
|
+
renamed_to = copy.key + '-renamed'
|
188
|
+
renamed_value = copy.value
|
189
|
+
assert_nothing_raised do
|
190
|
+
OSSObject.rename(copy.key, renamed_to, TEST_BUCKET)
|
191
|
+
end
|
192
|
+
|
193
|
+
# Confirm renamed copy exists
|
194
|
+
|
195
|
+
renamed = nil
|
196
|
+
assert_nothing_raised do
|
197
|
+
renamed = OSSObject.find(renamed_to, TEST_BUCKET)
|
198
|
+
end
|
199
|
+
|
200
|
+
assert renamed
|
201
|
+
assert_equal renamed_value, renamed.value
|
202
|
+
|
203
|
+
# Confirm copy is deleted
|
204
|
+
|
205
|
+
assert_raises(NoSuchKey) do
|
206
|
+
OSSObject.find(copy.key, TEST_BUCKET)
|
207
|
+
end
|
208
|
+
|
209
|
+
# Confirm that you can not store an object once it is deleted
|
210
|
+
|
211
|
+
assert_raises(DeletedObject) do
|
212
|
+
object.store
|
213
|
+
end
|
214
|
+
|
215
|
+
assert_raises(NoSuchKey) do
|
216
|
+
OSSObject.find(key, TEST_BUCKET)
|
217
|
+
end
|
218
|
+
|
219
|
+
# Confirm we can pass in an IO stream and have the uploading sent in chunks
|
220
|
+
|
221
|
+
response = nil
|
222
|
+
test_file_key = File.basename(TEST_FILE)
|
223
|
+
assert_nothing_raised do
|
224
|
+
response = OSSObject.store(test_file_key, open(TEST_FILE), TEST_BUCKET)
|
225
|
+
end
|
226
|
+
assert response.success?
|
227
|
+
|
228
|
+
assert_equal File.size(TEST_FILE), Integer(OSSObject.about(test_file_key, TEST_BUCKET)['content-length'])
|
229
|
+
|
230
|
+
result = nil
|
231
|
+
assert_nothing_raised do
|
232
|
+
result = OSSObject.delete(test_file_key, TEST_BUCKET)
|
233
|
+
end
|
234
|
+
|
235
|
+
assert result
|
236
|
+
end
|
237
|
+
|
238
|
+
def test_content_type_inference
|
239
|
+
# Confirm appropriate content type is inferred when not specified
|
240
|
+
|
241
|
+
content_type_objects = {'foo.jpg' => 'image/jpeg', 'no-extension-specified' => 'binary/octet-stream', 'foo.txt' => 'text/plain'}
|
242
|
+
content_type_objects.each_key do |key|
|
243
|
+
OSSObject.store(key, 'fake data', TEST_BUCKET) # No content type explicitly set
|
244
|
+
end
|
245
|
+
|
246
|
+
content_type_objects.each do |key, content_type|
|
247
|
+
assert_equal content_type, OSSObject.about(key, TEST_BUCKET)['content-type']
|
248
|
+
end
|
249
|
+
|
250
|
+
# Confirm we can update the content type
|
251
|
+
|
252
|
+
assert_nothing_raised do
|
253
|
+
object = OSSObject.find('no-extension-specified', TEST_BUCKET)
|
254
|
+
object.content_type = 'application/pdf'
|
255
|
+
object.store
|
256
|
+
end
|
257
|
+
|
258
|
+
assert_equal 'application/pdf', OSSObject.about('no-extension-specified', TEST_BUCKET)['content-type']
|
259
|
+
|
260
|
+
ensure
|
261
|
+
# Get rid of objects we just created
|
262
|
+
content_type_objects.each_key {|key| OSSObject.delete(key, TEST_BUCKET) }
|
263
|
+
end
|
264
|
+
|
265
|
+
def test_body_can_be_more_than_just_string_or_io
|
266
|
+
require 'stringio'
|
267
|
+
key = 'testing-body-as-string-io'
|
268
|
+
io = StringIO.new('hello there')
|
269
|
+
OSSObject.store(key, io, TEST_BUCKET)
|
270
|
+
assert_equal 'hello there', OSSObject.value(key, TEST_BUCKET)
|
271
|
+
ensure
|
272
|
+
OSSObject.delete(key, TEST_BUCKET)
|
273
|
+
end
|
274
|
+
|
275
|
+
def test_fetching_information_about_an_object_that_does_not_exist_raises_no_such_key
|
276
|
+
assert_raises(NoSuchKey) do
|
277
|
+
OSSObject.about('asdfasdfasdfas-this-does-not-exist', TEST_BUCKET)
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
281
|
+
# Regression test for http://developer.aliyunwebservices.com/connect/thread.jspa?messageID=49152&tstart=0#49152
|
282
|
+
def test_finding_an_object_with_slashes_in_its_name_does_not_escape_the_slash
|
283
|
+
OSSObject.store('rails/1', 'value does not matter', TEST_BUCKET)
|
284
|
+
OSSObject.store('rails/1.html', 'value does not matter', TEST_BUCKET)
|
285
|
+
|
286
|
+
object = nil
|
287
|
+
assert_nothing_raised do
|
288
|
+
object = OSSObject.find('rails/1.html', TEST_BUCKET)
|
289
|
+
end
|
290
|
+
|
291
|
+
assert_equal 'rails/1.html', object.key
|
292
|
+
ensure
|
293
|
+
%w(rails/1 rails/1.html).each {|key| OSSObject.delete(key, TEST_BUCKET)}
|
294
|
+
end
|
295
|
+
|
296
|
+
def test_finding_an_object_with_spaces_in_its_name
|
297
|
+
assert_nothing_raised do
|
298
|
+
OSSObject.store('name with spaces', 'value does not matter', TEST_BUCKET)
|
299
|
+
end
|
300
|
+
|
301
|
+
object = nil
|
302
|
+
assert_nothing_raised do
|
303
|
+
object = OSSObject.find('name with spaces', TEST_BUCKET)
|
304
|
+
end
|
305
|
+
|
306
|
+
assert object
|
307
|
+
assert_equal 'name with spaces', object.key
|
308
|
+
|
309
|
+
# Confirm authenticated url is generated correctly despite space in file name
|
310
|
+
|
311
|
+
response = fetch_object_at(object.url)
|
312
|
+
assert (200..299).include?(response.code.to_i)
|
313
|
+
|
314
|
+
ensure
|
315
|
+
OSSObject.delete('name with spaces', TEST_BUCKET)
|
316
|
+
end
|
317
|
+
|
318
|
+
def test_handling_a_path_that_is_not_valid_utf8
|
319
|
+
key = "318597/620065/GTL_75\24300_A600_A610.zip"
|
320
|
+
assert_nothing_raised do
|
321
|
+
OSSObject.store(key, 'value does not matter', TEST_BUCKET)
|
322
|
+
end
|
323
|
+
|
324
|
+
object = nil
|
325
|
+
assert_nothing_raised do
|
326
|
+
object = OSSObject.find(key, TEST_BUCKET)
|
327
|
+
end
|
328
|
+
|
329
|
+
assert object
|
330
|
+
|
331
|
+
url = nil
|
332
|
+
assert_nothing_raised do
|
333
|
+
url = OSSObject.url_for(key, TEST_BUCKET)
|
334
|
+
end
|
335
|
+
|
336
|
+
assert url
|
337
|
+
|
338
|
+
assert_equal object.value, fetch_object_at(url).body
|
339
|
+
ensure
|
340
|
+
assert_nothing_raised do
|
341
|
+
OSSObject.delete(key, TEST_BUCKET)
|
342
|
+
end
|
343
|
+
end
|
344
|
+
|
345
|
+
private
|
346
|
+
def fetch_object_at(url)
|
347
|
+
Net::HTTP.get_response(URI.parse(url))
|
348
|
+
end
|
349
|
+
|
350
|
+
end
|