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
data/lib/aliyun/sts/config.rb
CHANGED
File without changes
|
data/lib/aliyun/sts/exception.rb
CHANGED
File without changes
|
data/lib/aliyun/sts/protocol.rb
CHANGED
@@ -27,7 +27,7 @@ module Aliyun
|
|
27
27
|
# @param role [String] the role arn
|
28
28
|
# @param session [String] the session name
|
29
29
|
# @param policy [STS::Policy] the policy
|
30
|
-
# @param duration [
|
30
|
+
# @param duration [Integer] the duration seconds for the
|
31
31
|
# requested token
|
32
32
|
# @return [STS::Token] the sts token
|
33
33
|
def assume_role(role, session, policy = nil, duration = 3600)
|
@@ -88,14 +88,14 @@ module Aliyun
|
|
88
88
|
:method => 'POST',
|
89
89
|
:url => @config.endpoint || ENDPOINT,
|
90
90
|
:payload => query
|
91
|
-
) do |response,
|
91
|
+
) do |response, &blk|
|
92
92
|
|
93
93
|
if response.code >= 300
|
94
94
|
e = ServerError.new(response)
|
95
95
|
logger.error(e.to_s)
|
96
96
|
raise e
|
97
97
|
else
|
98
|
-
response.return!(
|
98
|
+
response.return!(&blk)
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
data/lib/aliyun/sts/struct.rb
CHANGED
File without changes
|
data/lib/aliyun/sts/util.rb
CHANGED
File without changes
|
data/lib/aliyun/version.rb
CHANGED
@@ -89,7 +89,7 @@ module Aliyun
|
|
89
89
|
if opts.enabled?
|
90
90
|
xml.LoggingEnabled {
|
91
91
|
xml.TargetBucket opts.target_bucket
|
92
|
-
xml.TargetPrefix opts.target_prefix
|
92
|
+
xml.TargetPrefix opts.target_prefix if opts.target_prefix
|
93
93
|
}
|
94
94
|
end
|
95
95
|
}
|
@@ -356,7 +356,7 @@ module Aliyun
|
|
356
356
|
|
357
357
|
context "acl, logging, website, referer, lifecycle" do
|
358
358
|
it "should update acl" do
|
359
|
-
query = {'acl' =>
|
359
|
+
query = {'acl' => nil}
|
360
360
|
stub_request(:put, request_path).with(:query => query)
|
361
361
|
|
362
362
|
@protocol.put_bucket_acl(@bucket, ACL::PUBLIC_READ)
|
@@ -366,7 +366,7 @@ module Aliyun
|
|
366
366
|
end
|
367
367
|
|
368
368
|
it "should get acl" do
|
369
|
-
query = {'acl' =>
|
369
|
+
query = {'acl' => nil}
|
370
370
|
return_acl = ACL::PUBLIC_READ
|
371
371
|
stub_request(:get, request_path)
|
372
372
|
.with(:query => query)
|
@@ -380,7 +380,7 @@ module Aliyun
|
|
380
380
|
end
|
381
381
|
|
382
382
|
it "should enable logging" do
|
383
|
-
query = {'logging' =>
|
383
|
+
query = {'logging' => nil}
|
384
384
|
stub_request(:put, request_path).with(:query => query)
|
385
385
|
|
386
386
|
logging_opts = BucketLogging.new(
|
@@ -392,8 +392,21 @@ module Aliyun
|
|
392
392
|
.with(:query => query, :body => mock_logging(logging_opts))
|
393
393
|
end
|
394
394
|
|
395
|
+
it "should enable logging without target prefix" do
|
396
|
+
query = {'logging' => nil}
|
397
|
+
stub_request(:put, request_path).with(:query => query)
|
398
|
+
|
399
|
+
logging_opts = BucketLogging.new(
|
400
|
+
:enable => true,
|
401
|
+
:target_bucket => 'target-bucket')
|
402
|
+
@protocol.put_bucket_logging(@bucket, logging_opts)
|
403
|
+
|
404
|
+
expect(WebMock).to have_requested(:put, request_path)
|
405
|
+
.with(:query => query, :body => mock_logging(logging_opts))
|
406
|
+
end
|
407
|
+
|
395
408
|
it "should disable logging" do
|
396
|
-
query = {'logging' =>
|
409
|
+
query = {'logging' => nil}
|
397
410
|
stub_request(:put, request_path).with(:query => query)
|
398
411
|
|
399
412
|
logging_opts = BucketLogging.new(:enable => false)
|
@@ -404,7 +417,7 @@ module Aliyun
|
|
404
417
|
end
|
405
418
|
|
406
419
|
it "should get logging" do
|
407
|
-
query = {'logging' =>
|
420
|
+
query = {'logging' => nil}
|
408
421
|
logging_opts = BucketLogging.new(
|
409
422
|
:enable => true,
|
410
423
|
:target_bucket => 'target-bucket', :target_prefix => 'foo')
|
@@ -420,8 +433,25 @@ module Aliyun
|
|
420
433
|
expect(logging.to_s).to eq(logging_opts.to_s)
|
421
434
|
end
|
422
435
|
|
436
|
+
it "should get logging without target-bucket" do
|
437
|
+
query = {'logging' => nil}
|
438
|
+
logging_opts = BucketLogging.new(
|
439
|
+
:enable => false,
|
440
|
+
:target_bucket => nil, :target_prefix => nil)
|
441
|
+
|
442
|
+
stub_request(:get, request_path)
|
443
|
+
.with(:query => query)
|
444
|
+
.to_return(:body => mock_logging(logging_opts))
|
445
|
+
|
446
|
+
logging = @protocol.get_bucket_logging(@bucket)
|
447
|
+
|
448
|
+
expect(WebMock).to have_requested(:get, request_path)
|
449
|
+
.with(:query => query, :body => nil)
|
450
|
+
expect(logging.to_s).to eq(logging_opts.to_s)
|
451
|
+
end
|
452
|
+
|
423
453
|
it "should delete logging" do
|
424
|
-
query = {'logging' =>
|
454
|
+
query = {'logging' => nil}
|
425
455
|
stub_request(:delete, request_path).with(:query => query)
|
426
456
|
|
427
457
|
@protocol.delete_bucket_logging(@bucket)
|
@@ -430,8 +460,20 @@ module Aliyun
|
|
430
460
|
.with(:query => query, :body => nil)
|
431
461
|
end
|
432
462
|
|
463
|
+
it "should raise Exception when enable logging" do
|
464
|
+
query = {'logging' => nil}
|
465
|
+
stub_request(:put, request_path).with(:query => query)
|
466
|
+
|
467
|
+
logging_opts = BucketLogging.new(
|
468
|
+
:enable => true,
|
469
|
+
:target_bucket => nil, :target_prefix => nil)
|
470
|
+
expect {
|
471
|
+
@protocol.put_bucket_logging(@bucket, logging_opts)
|
472
|
+
}.to raise_error(ClientError)
|
473
|
+
end
|
474
|
+
|
433
475
|
it "should update website" do
|
434
|
-
query = {'website' =>
|
476
|
+
query = {'website' => nil}
|
435
477
|
stub_request(:put, request_path).with(:query => query)
|
436
478
|
|
437
479
|
website_opts = BucketWebsite.new(
|
@@ -442,8 +484,20 @@ module Aliyun
|
|
442
484
|
.with(:query => query, :body => mock_website(website_opts))
|
443
485
|
end
|
444
486
|
|
487
|
+
it "should update website with index only" do
|
488
|
+
query = {'website' => nil}
|
489
|
+
stub_request(:put, request_path).with(:query => query)
|
490
|
+
|
491
|
+
website_opts = BucketWebsite.new(
|
492
|
+
:enable => true, :index => 'index.html', :error => nil)
|
493
|
+
@protocol.put_bucket_website(@bucket, website_opts)
|
494
|
+
|
495
|
+
expect(WebMock).to have_requested(:put, request_path)
|
496
|
+
.with(:query => query, :body => mock_website(website_opts))
|
497
|
+
end
|
498
|
+
|
445
499
|
it "should get website" do
|
446
|
-
query = {'website' =>
|
500
|
+
query = {'website' => nil}
|
447
501
|
website_opts = BucketWebsite.new(
|
448
502
|
:enable => true, :index => 'index.html', :error => 'error.html')
|
449
503
|
|
@@ -459,7 +513,7 @@ module Aliyun
|
|
459
513
|
end
|
460
514
|
|
461
515
|
it "should delete website" do
|
462
|
-
query = {'website' =>
|
516
|
+
query = {'website' => nil}
|
463
517
|
stub_request(:delete, request_path).with(:query => query)
|
464
518
|
|
465
519
|
@protocol.delete_bucket_website(@bucket)
|
@@ -468,8 +522,20 @@ module Aliyun
|
|
468
522
|
.with(:query => query, :body => nil)
|
469
523
|
end
|
470
524
|
|
525
|
+
it "should raise Exception when update website" do
|
526
|
+
query = {'website' => nil}
|
527
|
+
stub_request(:put, request_path).with(:query => query)
|
528
|
+
|
529
|
+
website_opts = BucketWebsite.new(
|
530
|
+
:enable => true, :index => nil)
|
531
|
+
|
532
|
+
expect {
|
533
|
+
@protocol.put_bucket_website(@bucket, website_opts)
|
534
|
+
}.to raise_error(ClientError)
|
535
|
+
end
|
536
|
+
|
471
537
|
it "should update referer" do
|
472
|
-
query = {'referer' =>
|
538
|
+
query = {'referer' => nil}
|
473
539
|
stub_request(:put, request_path).with(:query => query)
|
474
540
|
|
475
541
|
referer_opts = BucketReferer.new(
|
@@ -481,7 +547,7 @@ module Aliyun
|
|
481
547
|
end
|
482
548
|
|
483
549
|
it "should get referer" do
|
484
|
-
query = {'referer' =>
|
550
|
+
query = {'referer' => nil}
|
485
551
|
referer_opts = BucketReferer.new(
|
486
552
|
:allow_empty => true, :whitelist => ['xxx', 'yyy'])
|
487
553
|
|
@@ -497,7 +563,7 @@ module Aliyun
|
|
497
563
|
end
|
498
564
|
|
499
565
|
it "should update lifecycle" do
|
500
|
-
query = {'lifecycle' =>
|
566
|
+
query = {'lifecycle' => nil}
|
501
567
|
stub_request(:put, request_path).with(:query => query)
|
502
568
|
|
503
569
|
rules = (1..5).map do |i|
|
@@ -513,7 +579,7 @@ module Aliyun
|
|
513
579
|
end
|
514
580
|
|
515
581
|
it "should get lifecycle" do
|
516
|
-
query = {'lifecycle' =>
|
582
|
+
query = {'lifecycle' => nil}
|
517
583
|
return_rules = (1..5).map do |i|
|
518
584
|
LifeCycleRule.new(
|
519
585
|
:id => i, :enable => i % 2 == 0, :prefix => "foo#{i}",
|
@@ -532,7 +598,7 @@ module Aliyun
|
|
532
598
|
end
|
533
599
|
|
534
600
|
it "should delete lifecycle" do
|
535
|
-
query = {'lifecycle' =>
|
601
|
+
query = {'lifecycle' => nil}
|
536
602
|
stub_request(:delete, request_path).with(:query => query)
|
537
603
|
|
538
604
|
@protocol.delete_bucket_lifecycle(@bucket)
|
@@ -541,8 +607,46 @@ module Aliyun
|
|
541
607
|
.with(:query => query, :body => nil)
|
542
608
|
end
|
543
609
|
|
610
|
+
it "should raise Exception when update lifecycle " do
|
611
|
+
query = {'lifecycle' => nil}
|
612
|
+
stub_request(:put, request_path).with(:query => query)
|
613
|
+
|
614
|
+
rules = (1..5).map do |i|
|
615
|
+
LifeCycleRule.new(
|
616
|
+
:id => i, :enable => i % 2 == 0, :prefix => "foo#{i}",
|
617
|
+
:expiry => 'invalid')
|
618
|
+
end
|
619
|
+
|
620
|
+
expect {
|
621
|
+
@protocol.put_bucket_lifecycle(@bucket, rules)
|
622
|
+
}.to raise_error(ClientError)
|
623
|
+
end
|
624
|
+
|
625
|
+
it "should raise Exception when get lifecycle " do
|
626
|
+
query = {'lifecycle' => nil}
|
627
|
+
body = '<LifecycleConfiguration>
|
628
|
+
<Rule>
|
629
|
+
<ID>delete after one day</ID>
|
630
|
+
<Prefix>logs/</Prefix>
|
631
|
+
<Status>Enabled</Status>
|
632
|
+
<Expiration>
|
633
|
+
<Days>1</Days>
|
634
|
+
<Date>2017-01-01T00:00:00.000Z</Date>
|
635
|
+
</Expiration>
|
636
|
+
</Rule>
|
637
|
+
</LifecycleConfiguration>'
|
638
|
+
|
639
|
+
stub_request(:get, request_path)
|
640
|
+
.with(:query => query)
|
641
|
+
.to_return(:body => body)
|
642
|
+
|
643
|
+
expect {
|
644
|
+
rules = @protocol.get_bucket_lifecycle(@bucket)
|
645
|
+
}.to raise_error(ClientError)
|
646
|
+
end
|
647
|
+
|
544
648
|
it "should set cors" do
|
545
|
-
query = {'cors' =>
|
649
|
+
query = {'cors' => nil}
|
546
650
|
stub_request(:put, request_path).with(:query => query)
|
547
651
|
|
548
652
|
rules = (1..5).map do |i|
|
@@ -558,8 +662,26 @@ module Aliyun
|
|
558
662
|
.with(:query => query, :body => mock_cors(rules))
|
559
663
|
end
|
560
664
|
|
665
|
+
it "should set cors with MaxAgeSeconds " do
|
666
|
+
query = {'cors' => nil}
|
667
|
+
stub_request(:put, request_path).with(:query => query)
|
668
|
+
|
669
|
+
rules = (1..5).map do |i|
|
670
|
+
CORSRule.new(
|
671
|
+
:allowed_origins => (1..3).map {|x| "origin-#{x}"},
|
672
|
+
:allowed_methods => ['PUT', 'GET'],
|
673
|
+
:allowed_headers => (1..3).map {|x| "header-#{x}"},
|
674
|
+
:expose_headers => (1..3).map {|x| "header-#{x}"},
|
675
|
+
:max_age_seconds => 5)
|
676
|
+
end
|
677
|
+
@protocol.set_bucket_cors(@bucket, rules)
|
678
|
+
|
679
|
+
expect(WebMock).to have_requested(:put, request_path)
|
680
|
+
.with(:query => query, :body => mock_cors(rules))
|
681
|
+
end
|
682
|
+
|
561
683
|
it "should get cors" do
|
562
|
-
query = {'cors' =>
|
684
|
+
query = {'cors' => nil}
|
563
685
|
return_rules = (1..5).map do |i|
|
564
686
|
CORSRule.new(
|
565
687
|
:allowed_origins => (1..3).map {|x| "origin-#{x}"},
|
@@ -580,7 +702,7 @@ module Aliyun
|
|
580
702
|
end
|
581
703
|
|
582
704
|
it "should delete cors" do
|
583
|
-
query = {'cors' =>
|
705
|
+
query = {'cors' => nil}
|
584
706
|
|
585
707
|
stub_request(:delete, request_path).with(:query => query)
|
586
708
|
|
@@ -120,7 +120,7 @@ module Aliyun
|
|
120
120
|
|
121
121
|
context "bucket operations" do
|
122
122
|
it "should get acl" do
|
123
|
-
query = {'acl' =>
|
123
|
+
query = {'acl' => nil}
|
124
124
|
return_acl = ACL::PUBLIC_READ
|
125
125
|
|
126
126
|
stub_request(:get, bucket_url)
|
@@ -135,7 +135,7 @@ module Aliyun
|
|
135
135
|
end
|
136
136
|
|
137
137
|
it "should set acl" do
|
138
|
-
query = {'acl' =>
|
138
|
+
query = {'acl' => nil}
|
139
139
|
|
140
140
|
stub_request(:put, bucket_url).with(:query => query)
|
141
141
|
|
@@ -146,7 +146,7 @@ module Aliyun
|
|
146
146
|
end
|
147
147
|
|
148
148
|
it "should delete logging setting" do
|
149
|
-
query = {'logging' =>
|
149
|
+
query = {'logging' => nil}
|
150
150
|
|
151
151
|
stub_request(:delete, bucket_url).with(:query => query)
|
152
152
|
|
@@ -156,6 +156,226 @@ module Aliyun
|
|
156
156
|
.with(:query => query, :body => nil)
|
157
157
|
end
|
158
158
|
|
159
|
+
it "should set logging setting" do
|
160
|
+
query = {'logging' => nil}
|
161
|
+
|
162
|
+
body = Nokogiri::XML::Builder.new do |xml|
|
163
|
+
xml.BucketLoggingStatus {
|
164
|
+
xml.LoggingEnabled {
|
165
|
+
xml.TargetBucket 'target-bucket'
|
166
|
+
}
|
167
|
+
}
|
168
|
+
end.to_xml
|
169
|
+
|
170
|
+
stub_request(:put, bucket_url).with(:query => query)
|
171
|
+
|
172
|
+
@bucket.logging = BucketLogging.new(:enable => true, :target_bucket => 'target-bucket')
|
173
|
+
|
174
|
+
expect(WebMock).to have_requested(:put, bucket_url)
|
175
|
+
.with(:query => query, :body => body)
|
176
|
+
end
|
177
|
+
|
178
|
+
it "should get logging setting" do
|
179
|
+
query = {'logging' => nil}
|
180
|
+
|
181
|
+
retbody = Nokogiri::XML::Builder.new do |xml|
|
182
|
+
xml.BucketLoggingStatus {
|
183
|
+
xml.LoggingEnabled {
|
184
|
+
xml.TargetBucket 'target-bucket'
|
185
|
+
xml.TargetPrefix 'target-prefix'
|
186
|
+
}
|
187
|
+
}
|
188
|
+
end.to_xml
|
189
|
+
|
190
|
+
stub_request(:get, bucket_url)
|
191
|
+
.with(:query => query)
|
192
|
+
.to_return(status: 200, :body => retbody)
|
193
|
+
|
194
|
+
logging = @bucket.logging
|
195
|
+
|
196
|
+
expect(WebMock).to have_requested(:get, bucket_url)
|
197
|
+
.with(:query => query, :body => nil)
|
198
|
+
expect(logging.enable).to eq(true)
|
199
|
+
expect(logging.target_bucket).to eq('target-bucket')
|
200
|
+
|
201
|
+
end
|
202
|
+
|
203
|
+
it "should set webseit" do
|
204
|
+
query = {'website' => nil}
|
205
|
+
|
206
|
+
body = Nokogiri::XML::Builder.new do |xml|
|
207
|
+
xml.WebsiteConfiguration {
|
208
|
+
xml.IndexDocument {
|
209
|
+
xml.Suffix 'index.html'
|
210
|
+
}
|
211
|
+
}
|
212
|
+
end.to_xml
|
213
|
+
|
214
|
+
stub_request(:put, bucket_url)
|
215
|
+
.with(:query => query)
|
216
|
+
.to_return(status: 200, :body => nil)
|
217
|
+
|
218
|
+
@bucket.website = BucketWebsite.new(:enable => true, :index => 'index.html')
|
219
|
+
|
220
|
+
expect(WebMock).to have_requested(:put, bucket_url)
|
221
|
+
.with(:query => query, :body => body)
|
222
|
+
end
|
223
|
+
|
224
|
+
it "should delete webseit" do
|
225
|
+
query = {'website' => nil}
|
226
|
+
|
227
|
+
stub_request(:delete, bucket_url)
|
228
|
+
.with(:query => query)
|
229
|
+
.to_return(status: 204, :body => nil)
|
230
|
+
|
231
|
+
@bucket.website = BucketWebsite.new(:enable => false)
|
232
|
+
|
233
|
+
expect(WebMock).to have_requested(:delete, bucket_url)
|
234
|
+
.with(:query => query, :body => nil)
|
235
|
+
end
|
236
|
+
|
237
|
+
it "should get webseit" do
|
238
|
+
query = {'website' => nil}
|
239
|
+
|
240
|
+
body = Nokogiri::XML::Builder.new do |xml|
|
241
|
+
xml.WebsiteConfiguration {
|
242
|
+
xml.IndexDocument {
|
243
|
+
xml.Suffix 'index.html'
|
244
|
+
}
|
245
|
+
xml.ErrorDocument {
|
246
|
+
xml.Key 'error.html'
|
247
|
+
}
|
248
|
+
}
|
249
|
+
end.to_xml
|
250
|
+
|
251
|
+
stub_request(:get, bucket_url)
|
252
|
+
.with(:query => query)
|
253
|
+
.to_return(status: 200, :body => body)
|
254
|
+
|
255
|
+
website = @bucket.website
|
256
|
+
|
257
|
+
expect(WebMock).to have_requested(:get, bucket_url)
|
258
|
+
.with(:query => query, :body => nil)
|
259
|
+
|
260
|
+
expect(website.enable).to eq(true)
|
261
|
+
expect(website.index).to eq('index.html')
|
262
|
+
expect(website.error).to eq('error.html')
|
263
|
+
end
|
264
|
+
|
265
|
+
it "should set referer" do
|
266
|
+
query = {'referer' => nil}
|
267
|
+
|
268
|
+
body = Nokogiri::XML::Builder.new do |xml|
|
269
|
+
xml.RefererConfiguration {
|
270
|
+
xml.AllowEmptyReferer 'true'
|
271
|
+
xml.RefererList {
|
272
|
+
xml.Referer 'http://www.aliyun.com'
|
273
|
+
}
|
274
|
+
}
|
275
|
+
end.to_xml
|
276
|
+
|
277
|
+
stub_request(:put, bucket_url)
|
278
|
+
.with(:query => query)
|
279
|
+
.to_return(status: 200, :body => nil)
|
280
|
+
|
281
|
+
@bucket.referer = BucketReferer.new(:allow_empty => true, :whitelist => ['http://www.aliyun.com'])
|
282
|
+
|
283
|
+
expect(WebMock).to have_requested(:put, bucket_url)
|
284
|
+
.with(:query => query, :body => body)
|
285
|
+
end
|
286
|
+
|
287
|
+
it "should get referer" do
|
288
|
+
query = {'referer' => nil}
|
289
|
+
|
290
|
+
body = Nokogiri::XML::Builder.new do |xml|
|
291
|
+
xml.RefererConfiguration {
|
292
|
+
xml.AllowEmptyReferer 'true'
|
293
|
+
xml.RefererList {
|
294
|
+
xml.Referer 'http://www.aliyun.com'
|
295
|
+
}
|
296
|
+
}
|
297
|
+
end.to_xml
|
298
|
+
|
299
|
+
stub_request(:get, bucket_url)
|
300
|
+
.with(:query => query)
|
301
|
+
.to_return(status: 200, :body => body)
|
302
|
+
|
303
|
+
referer = @bucket.referer
|
304
|
+
|
305
|
+
expect(WebMock).to have_requested(:get, bucket_url)
|
306
|
+
.with(:query => query, :body => nil)
|
307
|
+
|
308
|
+
expect(referer.allow_empty).to eq(true)
|
309
|
+
expect(referer.whitelist).to eq(['http://www.aliyun.com'])
|
310
|
+
end
|
311
|
+
|
312
|
+
it "should set cors" do
|
313
|
+
query = {'cors' => nil}
|
314
|
+
|
315
|
+
body = Nokogiri::XML::Builder.new do |xml|
|
316
|
+
xml.CORSConfiguration {
|
317
|
+
xml.CORSRule {
|
318
|
+
xml.AllowedOrigin '*'
|
319
|
+
xml.AllowedMethod 'PUT'
|
320
|
+
xml.AllowedHeader 'Authorization'
|
321
|
+
}
|
322
|
+
}
|
323
|
+
end.to_xml
|
324
|
+
|
325
|
+
stub_request(:put, bucket_url)
|
326
|
+
.with(:query => query)
|
327
|
+
.to_return(status: 200, :body => nil)
|
328
|
+
|
329
|
+
rules = [
|
330
|
+
CORSRule.new(
|
331
|
+
:allowed_origins => ['*'],
|
332
|
+
:allowed_methods => ['PUT'],
|
333
|
+
:allowed_headers => ['Authorization'],
|
334
|
+
:expose_headers =>[])
|
335
|
+
]
|
336
|
+
|
337
|
+
@bucket.cors = rules
|
338
|
+
|
339
|
+
expect(WebMock).to have_requested(:put, bucket_url)
|
340
|
+
.with(:query => query, :body => body)
|
341
|
+
end
|
342
|
+
|
343
|
+
it "should delete cors" do
|
344
|
+
query = {'cors' => nil}
|
345
|
+
|
346
|
+
stub_request(:delete, bucket_url)
|
347
|
+
.with(:query => query)
|
348
|
+
.to_return(status: 204, :body => nil)
|
349
|
+
|
350
|
+
@bucket.cors = []
|
351
|
+
|
352
|
+
expect(WebMock).to have_requested(:delete, bucket_url)
|
353
|
+
.with(:query => query, :body => nil)
|
354
|
+
end
|
355
|
+
|
356
|
+
it "should get cors" do
|
357
|
+
query = {'cors' => nil}
|
358
|
+
|
359
|
+
body = Nokogiri::XML::Builder.new do |xml|
|
360
|
+
xml.CORSConfiguration {
|
361
|
+
xml.CORSRule {
|
362
|
+
xml.AllowedOrigin '*'
|
363
|
+
xml.AllowedMethod 'PUT'
|
364
|
+
xml.AllowedHeader 'Authorization'
|
365
|
+
}
|
366
|
+
}
|
367
|
+
end.to_xml
|
368
|
+
|
369
|
+
stub_request(:get, bucket_url)
|
370
|
+
.with(:query => query)
|
371
|
+
.to_return(status: 200, :body => body)
|
372
|
+
|
373
|
+
cors = @bucket.cors
|
374
|
+
|
375
|
+
expect(WebMock).to have_requested(:get, bucket_url)
|
376
|
+
.with(:query => query, :body => nil)
|
377
|
+
end
|
378
|
+
|
159
379
|
it "should get bucket url" do
|
160
380
|
expect(@bucket.bucket_url)
|
161
381
|
.to eq('http://rubysdk-bucket.oss-cn-hangzhou.aliyuncs.com/')
|
@@ -303,7 +523,7 @@ module Aliyun
|
|
303
523
|
|
304
524
|
it "should set custom headers when append object" do
|
305
525
|
key = 'ruby'
|
306
|
-
query = {'append' =>
|
526
|
+
query = {'append' => nil, 'position' => 11}
|
307
527
|
stub_request(:post, object_url(key)).with(:query => query)
|
308
528
|
|
309
529
|
@bucket.append_object(
|
@@ -362,7 +582,7 @@ module Aliyun
|
|
362
582
|
|
363
583
|
it "should append object from file" do
|
364
584
|
key = 'ruby'
|
365
|
-
query = {'append' =>
|
585
|
+
query = {'append' => nil, 'position' => 11}
|
366
586
|
stub_request(:post, object_url(key)).with(:query => query)
|
367
587
|
|
368
588
|
content = (1..10).map{ |i| i.to_s.rjust(9, '0') }.join("\n")
|
@@ -378,7 +598,7 @@ module Aliyun
|
|
378
598
|
|
379
599
|
it "should append object with acl" do
|
380
600
|
key = 'ruby'
|
381
|
-
query = {'append' =>
|
601
|
+
query = {'append' => nil, 'position' => 11}
|
382
602
|
stub_request(:post, object_url(key)).with(:query => query)
|
383
603
|
|
384
604
|
@bucket.append_object(key, 11, :acl => ACL::PUBLIC_READ_WRITE)
|
@@ -467,29 +687,55 @@ module Aliyun
|
|
467
687
|
expect(signature).to eq(sig)
|
468
688
|
end
|
469
689
|
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
.
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
690
|
+
context 'should use STS' do
|
691
|
+
it "get object url" do
|
692
|
+
sts_bucket = Client.new(
|
693
|
+
:endpoint => @endpoint,
|
694
|
+
:access_key_id => 'xxx',
|
695
|
+
:access_key_secret => 'yyy',
|
696
|
+
:sts_token => 'zzz').get_bucket(@bucket_name)
|
697
|
+
|
698
|
+
object_url = 'http://rubysdk-bucket.oss-cn-hangzhou.aliyuncs.com/yeah'
|
699
|
+
|
700
|
+
url = sts_bucket.object_url('yeah')
|
701
|
+
path = url[0, url.index('?')]
|
702
|
+
expect(path).to eq(object_url)
|
703
|
+
|
704
|
+
query = {}
|
705
|
+
url[url.index('?') + 1, url.size].split('&')
|
706
|
+
.each { |s| k, v = s.split('='); query[k] = v }
|
707
|
+
|
708
|
+
expect(query.key?('Expires')).to be true
|
709
|
+
expect(query.key?('Signature')).to be true
|
710
|
+
expect(query['OSSAccessKeyId']).to eq('xxx')
|
711
|
+
expect(query['security-token']).to eq('zzz')
|
712
|
+
end
|
713
|
+
|
714
|
+
it "get object url with query string" do
|
715
|
+
sts_bucket = Client.new(
|
716
|
+
:endpoint => @endpoint,
|
717
|
+
:access_key_id => 'xxx',
|
718
|
+
:access_key_secret => 'yyy',
|
719
|
+
:sts_token => 'zzz').get_bucket(@bucket_name)
|
720
|
+
|
721
|
+
param = {
|
722
|
+
'x-oss-process' => 'image/resize,m_fill,h_100,w_100',
|
723
|
+
}
|
724
|
+
url = sts_bucket.object_url('ico.png', true, 60, param)
|
725
|
+
path = url[0, url.index('?')]
|
726
|
+
expect(path).to eq('http://rubysdk-bucket.oss-cn-hangzhou.aliyuncs.com/ico.png')
|
727
|
+
|
728
|
+
query = {}
|
729
|
+
url[url.index('?') + 1, url.size].split('&')
|
730
|
+
.each { |s| k, v = s.split('='); query[k] = v }
|
731
|
+
|
732
|
+
expect(query.key?('Expires')).to be true
|
733
|
+
expect(query.key?('Signature')).to be true
|
734
|
+
expect(query['OSSAccessKeyId']).to eq('xxx')
|
735
|
+
expect(query['security-token']).to eq('zzz')
|
736
|
+
expect(query['x-oss-process']).to eq('image%2Fresize%2Cm_fill%2Ch_100%2Cw_100')
|
737
|
+
end
|
491
738
|
end
|
492
|
-
|
493
739
|
end # object operations
|
494
740
|
|
495
741
|
context "multipart operations" do
|
@@ -497,7 +743,7 @@ module Aliyun
|
|
497
743
|
query_1 = {
|
498
744
|
:prefix => 'list-',
|
499
745
|
'encoding-type' => 'url',
|
500
|
-
'uploads' =>
|
746
|
+
'uploads' => nil
|
501
747
|
}
|
502
748
|
return_up_1 = (1..5).map{ |i| Multipart::Transaction.new(
|
503
749
|
:id => "txn-#{i}",
|
@@ -513,7 +759,7 @@ module Aliyun
|
|
513
759
|
:prefix => 'list-',
|
514
760
|
'upload-id-marker' => 'txn-5',
|
515
761
|
'encoding-type' => 'url',
|
516
|
-
'uploads' =>
|
762
|
+
'uploads' => nil
|
517
763
|
}
|
518
764
|
return_up_2 = (6..8).map{ |i| Multipart::Transaction.new(
|
519
765
|
:id => "txn-#{i}",
|