aliyun-sdk 0.5.0 → 0.7.3
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/CHANGELOG.md +25 -0
- data/README.md +174 -172
- data/examples/aliyun/oss/bucket.rb +0 -0
- data/examples/aliyun/oss/callback.rb +0 -0
- data/examples/aliyun/oss/object.rb +0 -0
- data/examples/aliyun/oss/resumable_download.rb +0 -0
- data/examples/aliyun/oss/resumable_upload.rb +0 -0
- data/examples/aliyun/oss/streaming.rb +0 -0
- data/examples/aliyun/oss/using_sts.rb +0 -0
- data/examples/aliyun/sts/assume_role.rb +0 -0
- data/ext/crcx/crc64_ecma.c +0 -0
- data/ext/crcx/crcx.c +0 -0
- data/ext/crcx/crcx.h +0 -0
- data/ext/crcx/extconf.rb +0 -0
- data/lib/aliyun/common.rb +0 -0
- data/lib/aliyun/common/exception.rb +0 -0
- data/lib/aliyun/common/logging.rb +3 -2
- data/lib/aliyun/common/struct.rb +0 -0
- data/lib/aliyun/oss.rb +0 -0
- data/lib/aliyun/oss/bucket.rb +29 -32
- data/lib/aliyun/oss/client.rb +6 -2
- data/lib/aliyun/oss/config.rb +0 -0
- data/lib/aliyun/oss/download.rb +0 -0
- data/lib/aliyun/oss/exception.rb +0 -0
- data/lib/aliyun/oss/http.rb +25 -46
- data/lib/aliyun/oss/iterator.rb +0 -0
- data/lib/aliyun/oss/multipart.rb +0 -0
- data/lib/aliyun/oss/object.rb +0 -0
- data/lib/aliyun/oss/protocol.rb +27 -12
- data/lib/aliyun/oss/struct.rb +2 -2
- data/lib/aliyun/oss/upload.rb +0 -0
- data/lib/aliyun/oss/util.rb +6 -0
- data/lib/aliyun/sts.rb +0 -0
- data/lib/aliyun/sts/client.rb +1 -1
- data/lib/aliyun/sts/config.rb +0 -0
- data/lib/aliyun/sts/exception.rb +0 -0
- data/lib/aliyun/sts/protocol.rb +3 -3
- data/lib/aliyun/sts/struct.rb +0 -0
- data/lib/aliyun/sts/util.rb +0 -0
- data/lib/aliyun/version.rb +1 -1
- data/spec/aliyun/oss/bucket_spec.rb +140 -18
- data/spec/aliyun/oss/client/bucket_spec.rb +276 -30
- data/spec/aliyun/oss/client/client_spec.rb +26 -1
- data/spec/aliyun/oss/client/resumable_download_spec.rb +0 -0
- data/spec/aliyun/oss/client/resumable_upload_spec.rb +0 -0
- data/spec/aliyun/oss/http_spec.rb +0 -0
- data/spec/aliyun/oss/multipart_spec.rb +10 -10
- data/spec/aliyun/oss/object_spec.rb +109 -16
- data/spec/aliyun/oss/service_spec.rb +0 -0
- data/spec/aliyun/oss/util_spec.rb +51 -0
- data/spec/aliyun/sts/client_spec.rb +0 -0
- data/spec/aliyun/sts/util_spec.rb +0 -0
- data/tests/config.rb +0 -0
- data/tests/helper.rb +0 -0
- data/tests/test_content_encoding.rb +0 -0
- data/tests/test_content_type.rb +0 -0
- data/tests/test_crc_check.rb +0 -0
- data/tests/test_custom_headers.rb +0 -0
- data/tests/test_encoding.rb +0 -0
- data/tests/test_large_file.rb +0 -0
- data/tests/test_multipart.rb +0 -0
- data/tests/test_object_acl.rb +0 -0
- data/tests/test_object_key.rb +18 -0
- data/tests/test_object_url.rb +20 -0
- data/tests/test_resumable.rb +0 -0
- metadata +8 -10
@@ -127,6 +127,31 @@ module Aliyun
|
|
127
127
|
expect(WebMock).to have_requested(:get, "#{bucket}.#{ep1}/#{object}")
|
128
128
|
expect(WebMock).to have_requested(:put, "#{bucket}.#{ep2}/#{object}")
|
129
129
|
end
|
130
|
+
|
131
|
+
it "should fail with invalid bucket name" do
|
132
|
+
bucket = 'INVALID'
|
133
|
+
ep1 = 'oss-cn-hangzhou.aliyuncs.com'
|
134
|
+
client = Client.new(
|
135
|
+
:endpoint => ep1,
|
136
|
+
:access_key_id => 'xxx', :access_key_secret => 'yyy')
|
137
|
+
|
138
|
+
expect {
|
139
|
+
client.create_bucket(bucket)
|
140
|
+
}.to raise_error(ClientError, "The bucket name is invalid.")
|
141
|
+
|
142
|
+
expect {
|
143
|
+
client.delete_bucket(bucket)
|
144
|
+
}.to raise_error(ClientError, "The bucket name is invalid.")
|
145
|
+
|
146
|
+
expect {
|
147
|
+
client.bucket_exists?(bucket)
|
148
|
+
}.to raise_error(ClientError, "The bucket name is invalid.")
|
149
|
+
|
150
|
+
expect {
|
151
|
+
client.get_bucket(bucket)
|
152
|
+
}.to raise_error(ClientError, "The bucket name is invalid.")
|
153
|
+
end
|
154
|
+
|
130
155
|
end # construct
|
131
156
|
|
132
157
|
def mock_buckets(buckets, more = {})
|
@@ -247,7 +272,7 @@ module Aliyun
|
|
247
272
|
end
|
248
273
|
|
249
274
|
it "should test bucket existence" do
|
250
|
-
query = {'acl' =>
|
275
|
+
query = {'acl' => nil}
|
251
276
|
return_acl = ACL::PUBLIC_READ
|
252
277
|
stub_request(:get, bucket_url)
|
253
278
|
.with(:query => query)
|
File without changes
|
File without changes
|
File without changes
|
@@ -26,8 +26,8 @@ module Aliyun
|
|
26
26
|
def crc_protocol
|
27
27
|
Protocol.new(
|
28
28
|
Config.new(:endpoint => @endpoint,
|
29
|
-
:access_key_id => 'xxx',
|
30
|
-
:access_key_secret => 'yyy',
|
29
|
+
:access_key_id => 'xxx',
|
30
|
+
:access_key_secret => 'yyy',
|
31
31
|
:upload_crc_enable => true,
|
32
32
|
:download_crc_enable => true))
|
33
33
|
end
|
@@ -111,7 +111,7 @@ module Aliyun
|
|
111
111
|
context "Initiate multipart upload" do
|
112
112
|
|
113
113
|
it "should POST to create transaction" do
|
114
|
-
query = {'uploads' =>
|
114
|
+
query = {'uploads' => nil}
|
115
115
|
stub_request(:post, request_path).with(:query => query)
|
116
116
|
|
117
117
|
@protocol.initiate_multipart_upload(
|
@@ -129,7 +129,7 @@ module Aliyun
|
|
129
129
|
end
|
130
130
|
|
131
131
|
it "should return transaction id" do
|
132
|
-
query = {'uploads' =>
|
132
|
+
query = {'uploads' => nil}
|
133
133
|
return_txn_id = 'zyx'
|
134
134
|
stub_request(:post, request_path).
|
135
135
|
with(:query => query).
|
@@ -143,7 +143,7 @@ module Aliyun
|
|
143
143
|
end
|
144
144
|
|
145
145
|
it "should raise Exception on error" do
|
146
|
-
query = {'uploads' =>
|
146
|
+
query = {'uploads' => nil}
|
147
147
|
|
148
148
|
code = 'InvalidArgument'
|
149
149
|
message = 'Invalid argument.'
|
@@ -462,7 +462,7 @@ module Aliyun
|
|
462
462
|
|
463
463
|
it "should GET to list multiparts" do
|
464
464
|
request_path = "#{@bucket}.#{@endpoint}/"
|
465
|
-
query = {'uploads' =>
|
465
|
+
query = {'uploads' => nil}
|
466
466
|
|
467
467
|
stub_request(:get, request_path).with(:query => query)
|
468
468
|
|
@@ -475,7 +475,7 @@ module Aliyun
|
|
475
475
|
it "should send extra params when list multiparts" do
|
476
476
|
request_path = "#{@bucket}.#{@endpoint}/"
|
477
477
|
query = {
|
478
|
-
'uploads' =>
|
478
|
+
'uploads' => nil,
|
479
479
|
'prefix' => 'foo-',
|
480
480
|
'upload-id-marker' => 'id-marker',
|
481
481
|
'key-marker' => 'key-marker',
|
@@ -501,7 +501,7 @@ module Aliyun
|
|
501
501
|
it "should get multipart transactions" do
|
502
502
|
request_path = "#{@bucket}.#{@endpoint}/"
|
503
503
|
query = {
|
504
|
-
'uploads' =>
|
504
|
+
'uploads' => nil,
|
505
505
|
'prefix' => 'foo-',
|
506
506
|
'upload-id-marker' => 'id-marker',
|
507
507
|
'key-marker' => 'key-marker',
|
@@ -548,7 +548,7 @@ module Aliyun
|
|
548
548
|
it "should decode object key" do
|
549
549
|
request_path = "#{@bucket}.#{@endpoint}/"
|
550
550
|
query = {
|
551
|
-
'uploads' =>
|
551
|
+
'uploads' => nil,
|
552
552
|
'prefix' => 'foo-',
|
553
553
|
'upload-id-marker' => 'id-marker',
|
554
554
|
'key-marker' => 'key-marker',
|
@@ -614,7 +614,7 @@ module Aliyun
|
|
614
614
|
|
615
615
|
it "should raise Exception on error" do
|
616
616
|
request_path = "#{@bucket}.#{@endpoint}/"
|
617
|
-
query = {'uploads' =>
|
617
|
+
query = {'uploads' => nil}
|
618
618
|
|
619
619
|
code = 'InvalidArgument'
|
620
620
|
message = 'Invalid argument.'
|
@@ -20,8 +20,8 @@ module Aliyun
|
|
20
20
|
def crc_protocol
|
21
21
|
Protocol.new(
|
22
22
|
Config.new(:endpoint => @endpoint,
|
23
|
-
:access_key_id => 'xxx',
|
24
|
-
:access_key_secret => 'yyy',
|
23
|
+
:access_key_id => 'xxx',
|
24
|
+
:access_key_secret => 'yyy',
|
25
25
|
:upload_crc_enable => true,
|
26
26
|
:download_crc_enable => true))
|
27
27
|
end
|
@@ -236,7 +236,7 @@ module Aliyun
|
|
236
236
|
object_name = 'ruby'
|
237
237
|
url = get_request_path(object_name)
|
238
238
|
|
239
|
-
query = {'append' =>
|
239
|
+
query = {'append' => nil, 'position' => 11}
|
240
240
|
return_headers = {'x-oss-next-append-position' => '101'}
|
241
241
|
stub_request(:post, url).with(:query => query)
|
242
242
|
.to_return(:headers => return_headers)
|
@@ -255,7 +255,7 @@ module Aliyun
|
|
255
255
|
object_name = 'ruby'
|
256
256
|
url = get_request_path(object_name)
|
257
257
|
|
258
|
-
query = {'append' =>
|
258
|
+
query = {'append' => nil, 'position' => 11}
|
259
259
|
code = 'ObjectNotAppendable'
|
260
260
|
message = 'Normal object cannot be appended.'
|
261
261
|
stub_request(:post, url).with(:query => query).
|
@@ -275,7 +275,7 @@ module Aliyun
|
|
275
275
|
it "should use default content-type" do
|
276
276
|
object_name = 'ruby'
|
277
277
|
url = get_request_path(object_name)
|
278
|
-
query = {'append' =>
|
278
|
+
query = {'append' => nil, 'position' => 0}
|
279
279
|
|
280
280
|
stub_request(:post, url).with(:query => query)
|
281
281
|
|
@@ -292,7 +292,7 @@ module Aliyun
|
|
292
292
|
it "should use customized content-type" do
|
293
293
|
object_name = 'ruby'
|
294
294
|
url = get_request_path(object_name)
|
295
|
-
query = {'append' =>
|
295
|
+
query = {'append' => nil, 'position' => 0}
|
296
296
|
|
297
297
|
stub_request(:post, url).with(:query => query)
|
298
298
|
|
@@ -311,7 +311,7 @@ module Aliyun
|
|
311
311
|
it "should set user defined metas" do
|
312
312
|
object_name = 'ruby'
|
313
313
|
url = get_request_path(object_name)
|
314
|
-
query = {'append' =>
|
314
|
+
query = {'append' => nil, 'position' => 0}
|
315
315
|
|
316
316
|
stub_request(:post, url).with(:query => query)
|
317
317
|
|
@@ -335,7 +335,7 @@ module Aliyun
|
|
335
335
|
content = "hello world"
|
336
336
|
content_crc = Aliyun::OSS::Util.crc(content)
|
337
337
|
|
338
|
-
query = {'append' =>
|
338
|
+
query = {'append' => nil, 'position' => 11}
|
339
339
|
return_headers = {'x-oss-next-append-position' => '101', :x_oss_hash_crc64ecma => content_crc.to_i + 1}
|
340
340
|
stub_request(:post, url).with(:query => query)
|
341
341
|
.to_return(:headers => return_headers)
|
@@ -353,7 +353,7 @@ module Aliyun
|
|
353
353
|
content = "hello world"
|
354
354
|
content_crc = Aliyun::OSS::Util.crc(content)
|
355
355
|
|
356
|
-
query = {'append' =>
|
356
|
+
query = {'append' => nil, 'position' => 11}
|
357
357
|
return_headers = {'x-oss-next-append-position' => '101', :x_oss_hash_crc64ecma => content_crc}
|
358
358
|
stub_request(:post, url).with(:query => query)
|
359
359
|
.to_return(:headers => return_headers)
|
@@ -377,11 +377,11 @@ module Aliyun
|
|
377
377
|
content = "hello world"
|
378
378
|
content_crc = Aliyun::OSS::Util.crc(content)
|
379
379
|
|
380
|
-
query = {'append' =>
|
380
|
+
query = {'append' => nil, 'position' => 11}
|
381
381
|
return_headers = {'x-oss-next-append-position' => '101', :x_oss_hash_crc64ecma => content_crc + 1}
|
382
382
|
stub_request(:post, url).with(:query => query)
|
383
383
|
.to_return(:headers => return_headers)
|
384
|
-
|
384
|
+
|
385
385
|
expect(crc_protocol.upload_crc_enable).to eq(true)
|
386
386
|
next_pos = 0
|
387
387
|
expect {
|
@@ -611,6 +611,15 @@ module Aliyun
|
|
611
611
|
})
|
612
612
|
end
|
613
613
|
|
614
|
+
it "should raise Exception on error when setting invalid range" do
|
615
|
+
object_name = 'ruby'
|
616
|
+
url = get_request_path(object_name)
|
617
|
+
stub_request(:get, url)
|
618
|
+
expect {
|
619
|
+
@protocol.get_object(@bucket, object_name, {:range => [0, 10, 5]}) {}
|
620
|
+
}.to raise_error(ClientError)
|
621
|
+
end
|
622
|
+
|
614
623
|
it "should match modify time and etag" do
|
615
624
|
object_name = 'ruby'
|
616
625
|
url = get_request_path(object_name)
|
@@ -662,6 +671,22 @@ module Aliyun
|
|
662
671
|
.with(:body => nil, :query => query)
|
663
672
|
end
|
664
673
|
|
674
|
+
it "should get object with headers" do
|
675
|
+
object_name = 'ruby'
|
676
|
+
url = get_request_path(object_name)
|
677
|
+
headers = {
|
678
|
+
'Range' => 'bytes=0-9'
|
679
|
+
}
|
680
|
+
stub_request(:get, url)
|
681
|
+
|
682
|
+
@protocol.get_object(@bucket, object_name, {:headers => headers}) {}
|
683
|
+
|
684
|
+
expect(WebMock).to have_requested(:get, url)
|
685
|
+
.with(:body => nil, :query => {},
|
686
|
+
:headers => {
|
687
|
+
'Range' => 'bytes=0-9'
|
688
|
+
})
|
689
|
+
end
|
665
690
|
|
666
691
|
it "should raise crc exception on error" do
|
667
692
|
object_name = 'ruby'
|
@@ -710,6 +735,23 @@ module Aliyun
|
|
710
735
|
'Range' => 'bytes=0-9'
|
711
736
|
})
|
712
737
|
end
|
738
|
+
|
739
|
+
it "should get to get object with special chars" do
|
740
|
+
object_name = 'ruby///adfadfa//!@#%^*//?key=value&aabc#abc=ad'
|
741
|
+
url = get_request_path(object_name)
|
742
|
+
|
743
|
+
return_content = "hello world"
|
744
|
+
stub_request(:get, url).to_return(:body => return_content)
|
745
|
+
|
746
|
+
content = ""
|
747
|
+
@protocol.get_object(@bucket, object_name) {|c| content << c}
|
748
|
+
|
749
|
+
expect(WebMock).to have_requested(:get, url)
|
750
|
+
.with(:body => nil, :query => {})
|
751
|
+
|
752
|
+
expect(content).to eq(return_content)
|
753
|
+
end
|
754
|
+
|
713
755
|
end # Get object
|
714
756
|
|
715
757
|
context "Get object meta" do
|
@@ -804,7 +846,7 @@ module Aliyun
|
|
804
846
|
|
805
847
|
it "should batch delete objects" do
|
806
848
|
url = get_request_path
|
807
|
-
query = {'delete' =>
|
849
|
+
query = {'delete' => nil}
|
808
850
|
|
809
851
|
object_names = (1..5).map do |i|
|
810
852
|
"object-#{i}"
|
@@ -814,7 +856,7 @@ module Aliyun
|
|
814
856
|
.with(:query => query)
|
815
857
|
.to_return(:body => mock_delete_result(object_names))
|
816
858
|
|
817
|
-
opts = {:quiet => false
|
859
|
+
opts = {:quiet => false}
|
818
860
|
deleted = @protocol.batch_delete_objects(@bucket, object_names, opts)
|
819
861
|
|
820
862
|
expect(WebMock).to have_requested(:post, url)
|
@@ -824,7 +866,7 @@ module Aliyun
|
|
824
866
|
|
825
867
|
it "should decode object key in batch delete response" do
|
826
868
|
url = get_request_path
|
827
|
-
query = {'delete' =>
|
869
|
+
query = {'delete' => nil, 'encoding-type' => KeyEncoding::URL}
|
828
870
|
|
829
871
|
object_names = (1..5).map do |i|
|
830
872
|
"对象-#{i}"
|
@@ -844,6 +886,57 @@ module Aliyun
|
|
844
886
|
.with(:query => query, :body => mock_delete(object_names, opts))
|
845
887
|
expect(deleted).to match_array(object_names)
|
846
888
|
end
|
889
|
+
|
890
|
+
it "should batch delete objects in quiet mode" do
|
891
|
+
url = get_request_path
|
892
|
+
query = {'delete' => nil}
|
893
|
+
|
894
|
+
object_names = (1..5).map do |i|
|
895
|
+
"object-#{i}"
|
896
|
+
end
|
897
|
+
|
898
|
+
stub_request(:post, url)
|
899
|
+
.with(:query => query)
|
900
|
+
.to_return(:body => "")
|
901
|
+
|
902
|
+
opts = {:quiet => true}
|
903
|
+
deleted = @protocol.batch_delete_objects(@bucket, object_names, opts)
|
904
|
+
|
905
|
+
expect(WebMock).to have_requested(:post, url)
|
906
|
+
.with(:query => query, :body => mock_delete(object_names, opts))
|
907
|
+
expect(deleted).to match_array([])
|
908
|
+
end
|
909
|
+
|
910
|
+
it "should rasie Exception wiht invalid responsed body" do
|
911
|
+
url = get_request_path
|
912
|
+
query = {'delete' => nil}
|
913
|
+
body = '<DeleteResult>
|
914
|
+
<EncodingType>invaid<EncodingType>
|
915
|
+
<Deleted>
|
916
|
+
<Key>multipart.data</Key>
|
917
|
+
</Deleted>
|
918
|
+
<Deleted>
|
919
|
+
<Key>test.jpg</Key>
|
920
|
+
</Deleted>
|
921
|
+
<Deleted>
|
922
|
+
<Key>demo.jpg</Key>
|
923
|
+
</Deleted>
|
924
|
+
</DeleteResult>'
|
925
|
+
|
926
|
+
object_names = (1..5).map do |i|
|
927
|
+
"object-#{i}"
|
928
|
+
end
|
929
|
+
|
930
|
+
stub_request(:post, url)
|
931
|
+
.with(:query => query)
|
932
|
+
.to_return(:body => body)
|
933
|
+
|
934
|
+
opts = {:quiet => false}
|
935
|
+
expect {
|
936
|
+
deleted = @protocol.batch_delete_objects(@bucket, object_names, opts)
|
937
|
+
}.to raise_error(ClientError)
|
938
|
+
|
939
|
+
end
|
847
940
|
end # delete object
|
848
941
|
|
849
942
|
context "acl" do
|
@@ -851,7 +944,7 @@ module Aliyun
|
|
851
944
|
object_name = 'ruby'
|
852
945
|
url = get_request_path(object_name)
|
853
946
|
|
854
|
-
query = {'acl' =>
|
947
|
+
query = {'acl' => nil}
|
855
948
|
stub_request(:put, url).with(:query => query)
|
856
949
|
|
857
950
|
@protocol.put_object_acl(@bucket, object_name, ACL::PUBLIC_READ)
|
@@ -866,7 +959,7 @@ module Aliyun
|
|
866
959
|
object_name = 'ruby'
|
867
960
|
url = get_request_path(object_name)
|
868
961
|
|
869
|
-
query = {'acl' =>
|
962
|
+
query = {'acl' => nil}
|
870
963
|
return_acl = ACL::PUBLIC_READ
|
871
964
|
|
872
965
|
stub_request(:get, url)
|
File without changes
|
@@ -94,6 +94,57 @@ module Aliyun
|
|
94
94
|
}.to raise_error(CrcInconsistentError, "The crc of post between client and oss is not inconsistent.")
|
95
95
|
end
|
96
96
|
|
97
|
+
it "should check bucket name valid" do
|
98
|
+
expect {
|
99
|
+
Util.ensure_bucket_name_valid('abc')
|
100
|
+
}.not_to raise_error
|
101
|
+
|
102
|
+
expect {
|
103
|
+
Util.ensure_bucket_name_valid('abc123-321cba')
|
104
|
+
}.not_to raise_error
|
105
|
+
|
106
|
+
expect {
|
107
|
+
Util.ensure_bucket_name_valid('abcdefghijklmnopqrstuvwxyz1234567890-0987654321zyxwuvtsrqponmlk')
|
108
|
+
}.not_to raise_error
|
109
|
+
|
110
|
+
#>63
|
111
|
+
expect {
|
112
|
+
Util.ensure_bucket_name_valid('abcdefghijklmnopqrstuvwxyz1234567890-0987654321zyxwuvtsrqponmlkj')
|
113
|
+
}.to raise_error(ClientError, "The bucket name is invalid.")
|
114
|
+
|
115
|
+
#<3
|
116
|
+
expect {
|
117
|
+
Util.ensure_bucket_name_valid('12')
|
118
|
+
}.to raise_error(ClientError, "The bucket name is invalid.")
|
119
|
+
|
120
|
+
#not [a-z0-9-]
|
121
|
+
expect {
|
122
|
+
Util.ensure_bucket_name_valid('Aabc')
|
123
|
+
}.to raise_error(ClientError, "The bucket name is invalid.")
|
124
|
+
|
125
|
+
expect {
|
126
|
+
Util.ensure_bucket_name_valid('abc/')
|
127
|
+
}.to raise_error(ClientError, "The bucket name is invalid.")
|
128
|
+
|
129
|
+
expect {
|
130
|
+
Util.ensure_bucket_name_valid('abc#')
|
131
|
+
}.to raise_error(ClientError, "The bucket name is invalid.")
|
132
|
+
|
133
|
+
expect {
|
134
|
+
Util.ensure_bucket_name_valid('abc?')
|
135
|
+
}.to raise_error(ClientError, "The bucket name is invalid.")
|
136
|
+
|
137
|
+
#start & end not -
|
138
|
+
expect {
|
139
|
+
Util.ensure_bucket_name_valid('-abc')
|
140
|
+
}.to raise_error(ClientError, "The bucket name is invalid.")
|
141
|
+
|
142
|
+
expect {
|
143
|
+
Util.ensure_bucket_name_valid('abc-')
|
144
|
+
}.to raise_error(ClientError, "The bucket name is invalid.")
|
145
|
+
|
146
|
+
end
|
147
|
+
|
97
148
|
end # Util
|
98
149
|
|
99
150
|
end # OSS
|
File without changes
|
File without changes
|
data/tests/config.rb
CHANGED
File without changes
|
data/tests/helper.rb
CHANGED
File without changes
|
File without changes
|
data/tests/test_content_type.rb
CHANGED
File without changes
|
data/tests/test_crc_check.rb
CHANGED
File without changes
|
File without changes
|