aliyun-sdk 0.4.1 → 0.7.2

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.
Files changed (67) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +25 -0
  3. data/README.md +174 -172
  4. data/examples/aliyun/oss/bucket.rb +0 -0
  5. data/examples/aliyun/oss/callback.rb +0 -0
  6. data/examples/aliyun/oss/object.rb +0 -0
  7. data/examples/aliyun/oss/resumable_download.rb +0 -0
  8. data/examples/aliyun/oss/resumable_upload.rb +0 -0
  9. data/examples/aliyun/oss/streaming.rb +0 -0
  10. data/examples/aliyun/oss/using_sts.rb +0 -0
  11. data/examples/aliyun/sts/assume_role.rb +0 -0
  12. data/ext/crcx/crc64_ecma.c +270 -0
  13. data/ext/crcx/crcx.c +45 -0
  14. data/ext/crcx/crcx.h +8 -0
  15. data/ext/crcx/extconf.rb +3 -0
  16. data/lib/aliyun/common.rb +0 -0
  17. data/lib/aliyun/common/exception.rb +0 -0
  18. data/lib/aliyun/common/logging.rb +6 -1
  19. data/lib/aliyun/common/struct.rb +0 -0
  20. data/lib/aliyun/oss.rb +1 -0
  21. data/lib/aliyun/oss/bucket.rb +41 -33
  22. data/lib/aliyun/oss/client.rb +10 -2
  23. data/lib/aliyun/oss/config.rb +4 -1
  24. data/lib/aliyun/oss/download.rb +2 -2
  25. data/lib/aliyun/oss/exception.rb +6 -0
  26. data/lib/aliyun/oss/http.rb +32 -48
  27. data/lib/aliyun/oss/iterator.rb +0 -0
  28. data/lib/aliyun/oss/multipart.rb +1 -1
  29. data/lib/aliyun/oss/object.rb +0 -0
  30. data/lib/aliyun/oss/protocol.rb +68 -8
  31. data/lib/aliyun/oss/struct.rb +2 -2
  32. data/lib/aliyun/oss/upload.rb +0 -0
  33. data/lib/aliyun/oss/util.rb +25 -1
  34. data/lib/aliyun/sts.rb +0 -0
  35. data/lib/aliyun/sts/client.rb +1 -1
  36. data/lib/aliyun/sts/config.rb +0 -0
  37. data/lib/aliyun/sts/exception.rb +0 -0
  38. data/lib/aliyun/sts/protocol.rb +3 -3
  39. data/lib/aliyun/sts/struct.rb +0 -0
  40. data/lib/aliyun/sts/util.rb +0 -0
  41. data/lib/aliyun/version.rb +1 -1
  42. data/spec/aliyun/oss/bucket_spec.rb +194 -18
  43. data/spec/aliyun/oss/client/bucket_spec.rb +342 -30
  44. data/spec/aliyun/oss/client/client_spec.rb +26 -1
  45. data/spec/aliyun/oss/client/resumable_download_spec.rb +0 -0
  46. data/spec/aliyun/oss/client/resumable_upload_spec.rb +0 -0
  47. data/spec/aliyun/oss/http_spec.rb +26 -0
  48. data/spec/aliyun/oss/multipart_spec.rb +53 -8
  49. data/spec/aliyun/oss/object_spec.rb +256 -10
  50. data/spec/aliyun/oss/service_spec.rb +0 -0
  51. data/spec/aliyun/oss/util_spec.rb +101 -0
  52. data/spec/aliyun/sts/client_spec.rb +0 -0
  53. data/spec/aliyun/sts/util_spec.rb +0 -0
  54. data/tests/config.rb +2 -0
  55. data/tests/helper.rb +15 -0
  56. data/tests/test_content_encoding.rb +0 -0
  57. data/tests/test_content_type.rb +0 -0
  58. data/tests/test_crc_check.rb +184 -0
  59. data/tests/test_custom_headers.rb +14 -6
  60. data/tests/test_encoding.rb +0 -0
  61. data/tests/test_large_file.rb +0 -0
  62. data/tests/test_multipart.rb +0 -0
  63. data/tests/test_object_acl.rb +0 -0
  64. data/tests/test_object_key.rb +18 -0
  65. data/tests/test_object_url.rb +20 -0
  66. data/tests/test_resumable.rb +0 -0
  67. metadata +33 -12
File without changes
@@ -44,6 +44,107 @@ module Aliyun
44
44
  expect(signature).to eq("7Oh2wobzeg6dw/cWYbF/2m6s6qc=")
45
45
  end
46
46
 
47
+ # 测试CRC计算是否正确
48
+ it "should calculate a correct data crc" do
49
+ content = ""
50
+ crc = Util.crc(content)
51
+ expect(crc).to eq(0)
52
+
53
+ content = "hello world"
54
+ crc = Util.crc(content)
55
+ expect(crc).to eq(5981764153023615706)
56
+
57
+ content = "test\0hello\1world\2!\3"
58
+ crc = Util.crc(content)
59
+ expect(crc).to eq(6745424696046691431)
60
+ end
61
+
62
+ # 测试CRC Combine计算是否正确
63
+ it "should calculate a correct crc that crc_a combine with crc_b" do
64
+ content_a = "test\0hello\1world\2!\3"
65
+ crc_a = Util.crc(content_a)
66
+ expect(crc_a).to eq(6745424696046691431)
67
+
68
+ content_b = "hello world"
69
+ crc_b = Util.crc(content_b)
70
+ expect(crc_b).to eq(5981764153023615706)
71
+
72
+ crc_c = Util.crc_combine(crc_a, crc_b, content_b.size)
73
+ expect(crc_c).to eq(13027479509578346683)
74
+
75
+ crc_ab = Util.crc(content_a + content_b)
76
+ expect(crc_ab).to eq(crc_c)
77
+
78
+ crc_ab = Util.crc(content_b, crc_a)
79
+ expect(crc_ab).to eq(crc_c)
80
+ end
81
+
82
+ # 测试CRC校验和异常处理是否正确
83
+ it "should check inconsistent crc" do
84
+ expect {
85
+ Util.crc_check(6745424696046691431, 6745424696046691431, 'put')
86
+ }.not_to raise_error
87
+
88
+ expect {
89
+ Util.crc_check(6745424696046691431, 5981764153023615706, 'append')
90
+ }.to raise_error(CrcInconsistentError, "The crc of append between client and oss is not inconsistent.")
91
+
92
+ expect {
93
+ Util.crc_check(6745424696046691431, -1, 'post')
94
+ }.to raise_error(CrcInconsistentError, "The crc of post between client and oss is not inconsistent.")
95
+ end
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
+
47
148
  end # Util
48
149
 
49
150
  end # OSS
File without changes
File without changes
@@ -4,6 +4,8 @@ class TestConf
4
4
  {
5
5
  access_key_id: ENV['RUBY_SDK_OSS_ID'],
6
6
  access_key_secret: ENV['RUBY_SDK_OSS_KEY'],
7
+ download_crc_enable: ENV['RUBY_SDK_OSS_DOWNLOAD_CRC_ENABLE'],
8
+ upload_crc_enable: ENV['RUBY_SDK_OSS_UPLOAD_CRC_ENABLE'],
7
9
  endpoint: ENV['RUBY_SDK_OSS_ENDPOINT']
8
10
  }
9
11
  end
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ module Aliyun
4
+ module Test
5
+ module Helper
6
+ def random_string(n)
7
+ (1...n).map { (65 + rand(26)).chr }.join + "\n"
8
+ end
9
+
10
+ def random_bytes(n)
11
+ (1...n).map { rand(255).chr }.join + "\n"
12
+ end
13
+ end
14
+ end
15
+ end
File without changes
File without changes
@@ -0,0 +1,184 @@
1
+ require 'minitest/autorun'
2
+ require 'yaml'
3
+ require 'tempfile'
4
+ $LOAD_PATH.unshift(File.expand_path("../../lib", __FILE__))
5
+ require 'aliyun/oss'
6
+ require_relative 'config'
7
+ require_relative 'helper'
8
+
9
+ class TestCrcCheck < Minitest::Test
10
+
11
+ include Aliyun::Test::Helper
12
+
13
+ @@tests_run = 0
14
+ @@test_file = nil
15
+
16
+ def setup
17
+ Aliyun::Common::Logging.set_log_level(Logger::DEBUG)
18
+ client = Aliyun::OSS::Client.new(TestConf.creds)
19
+ @bucket = client.get_bucket(TestConf.bucket)
20
+ @prefix = 'tests/crc_check/'
21
+
22
+ if @@tests_run == 0
23
+ @@test_file = Tempfile.new('oss_ruby_sdk_test_crc')
24
+ (10 * 1024).times { @@test_file.write(random_bytes(1024)) }
25
+ end
26
+ @@tests_run += 1
27
+ end
28
+
29
+ def teardown
30
+ if @@tests_run == TestCrcCheck.runnable_methods.length
31
+ @@test_file.unlink unless @@test_file.nil?
32
+ end
33
+ end
34
+
35
+ def get_key(k)
36
+ @prefix + k
37
+ end
38
+
39
+ def test_put_object
40
+ skip unless TestConf.creds[:upload_crc_enable]
41
+
42
+ # Check crc status
43
+ assert(@bucket.upload_crc_enable)
44
+
45
+ # Create a test file with 10MB random bytes to put.
46
+ key = get_key('put_file')
47
+
48
+ @bucket.put_object(key, :file => @@test_file.path)
49
+ test_object = @bucket.get_object(key)
50
+ assert_equal(test_object.size, 10 * 1024 * 1024)
51
+
52
+ # Check crc wrong case.
53
+ assert_raises Aliyun::OSS::CrcInconsistentError do
54
+ @bucket.put_object(key, {:init_crc => 1, :file => @@test_file.path}) do |content|
55
+ content << 'hello world.'
56
+ end
57
+ end
58
+
59
+ # Put a string to oss.
60
+ key = get_key('put_string')
61
+ @bucket.put_object(key, :init_crc => 0) do |content|
62
+ content << 'hello world.'
63
+ end
64
+ test_object = @bucket.get_object(key)
65
+ assert_equal(test_object.size, 'hello world.'.size)
66
+
67
+ # Check crc wrong case.
68
+ assert_raises Aliyun::OSS::CrcInconsistentError do
69
+ @bucket.put_object(key, :init_crc => 1) do |content|
70
+ content << 'hello world.'
71
+ end
72
+ end
73
+ ensure
74
+ @bucket.delete_object(key)
75
+ end
76
+
77
+ def test_append_object
78
+ skip unless TestConf.creds[:upload_crc_enable]
79
+ key = get_key('append_file')
80
+
81
+ # Check crc status
82
+ assert(@bucket.upload_crc_enable)
83
+
84
+ # Check $key object doesn't exist.
85
+ test_object = @bucket.get_object(key) rescue 0
86
+ @bucket.delete_object(key) if test_object.size
87
+
88
+ # Create a append object to oss with a string.
89
+ position = @bucket.append_object(key, 0, :init_crc => 0) do |content|
90
+ content << 'hello world.'
91
+ end
92
+ test_object = @bucket.get_object(key)
93
+ assert_equal(test_object.size, 'hello world.'.size)
94
+
95
+ # Append a test file to oss $key object.
96
+ @bucket.append_object(key, position, {:init_crc => test_object.headers[:x_oss_hash_crc64ecma], :file => @@test_file.path})
97
+ test_object = @bucket.get_object(key)
98
+ assert_equal(test_object.size, 'hello world.'.size + (10 * 1024 * 1024))
99
+
100
+ # No crc check when init_crc is nil
101
+ position = @bucket.append_object(key, test_object.size) do |content|
102
+ content << 'hello world.'
103
+ end
104
+ test_object = @bucket.get_object(key)
105
+ assert_equal(test_object.size, 'hello world.'.size * 2 + (10 * 1024 * 1024))
106
+
107
+ # Check crc wrong case.
108
+ assert_raises Aliyun::OSS::CrcInconsistentError do
109
+ position = @bucket.append_object(key, test_object.size, :init_crc => 0) do |content|
110
+ content << 'hello world.'
111
+ end
112
+ end
113
+
114
+ # Check crc wrong case.
115
+ test_object = @bucket.get_object(key)
116
+ assert_raises Aliyun::OSS::CrcInconsistentError do
117
+ @bucket.append_object(key, test_object.size, {:init_crc => 0, :file => @@test_file.path})
118
+ end
119
+ ensure
120
+ @bucket.delete_object(key)
121
+ end
122
+
123
+ def test_upload_object
124
+ skip unless TestConf.creds[:upload_crc_enable]
125
+ key = get_key('upload_file')
126
+
127
+ # Check crc status
128
+ assert(@bucket.upload_crc_enable)
129
+ @bucket.resumable_upload(key, @@test_file.path, :cpt_file => "#{@@test_file.path}.cpt", threads: 2, :part_size => 1024 * 1024)
130
+
131
+ test_object = @bucket.get_object(key)
132
+ assert_equal(test_object.size, (10 * 1024 * 1024))
133
+
134
+ ensure
135
+ @bucket.delete_object(key)
136
+ end
137
+
138
+ def test_get_small_object
139
+ skip unless TestConf.creds[:download_crc_enable]
140
+
141
+ # Check crc status
142
+ assert(@bucket.download_crc_enable)
143
+
144
+ # Put a string to oss.
145
+ key = get_key('get_small_object')
146
+ @bucket.put_object(key) do |content|
147
+ content << 'hello world.'
148
+ end
149
+ temp_buf = ""
150
+ test_object = @bucket.get_object(key) { |c| temp_buf << c }
151
+ assert_equal(test_object.size, 'hello world.'.size)
152
+
153
+ # Check crc wrong case.
154
+ assert_raises Aliyun::OSS::CrcInconsistentError do
155
+ @bucket.get_object(key, {:init_crc => 1}) { |c| temp_buf << c }
156
+ end
157
+ ensure
158
+ @bucket.delete_object(key)
159
+ end
160
+
161
+ def test_get_large_object
162
+ skip unless TestConf.creds[:download_crc_enable]
163
+
164
+ # Check crc status
165
+ assert(@bucket.download_crc_enable)
166
+
167
+ # put a test file with 10MB random bytes to oss for testing get.
168
+ key = get_key('get_file')
169
+ @bucket.put_object(key, :file => @@test_file.path)
170
+
171
+ get_temp_file = Tempfile.new('oss_ruby_sdk_test_crc_get')
172
+ test_object = @bucket.get_object(key, {:file => get_temp_file})
173
+ assert_equal(test_object.size, 10 * 1024 * 1024)
174
+
175
+ # Check crc wrong case.
176
+ assert_raises Aliyun::OSS::CrcInconsistentError do
177
+ @bucket.get_object(key, {:file => get_temp_file, :init_crc => 1})
178
+ end
179
+ ensure
180
+ get_temp_file.unlink unless get_temp_file.nil?
181
+ @bucket.delete_object(key)
182
+ end
183
+
184
+ end
@@ -36,6 +36,7 @@ class TestCustomHeaders < Minitest::Test
36
36
 
37
37
  content_encoding = 'deflate'
38
38
  expires = (Time.now + 3600).httpdate
39
+
39
40
  @bucket.put_object(
40
41
  key,
41
42
  headers: {'cache-control' => cache_control,
@@ -46,12 +47,19 @@ class TestCustomHeaders < Minitest::Test
46
47
  end
47
48
 
48
49
  content = ''
49
- obj = @bucket.get_object(key) { |c| content << c }
50
- assert_equal 'hello world', content
51
- assert_equal cache_control, obj.headers[:cache_control]
52
- assert_equal content_disposition, obj.headers[:content_disposition]
53
- assert_equal content_encoding, obj.headers[:content_encoding]
54
- assert_equal expires, obj.headers[:expires]
50
+ obj = nil
51
+ if @bucket.download_crc_enable
52
+ assert_raises Aliyun::OSS::CrcInconsistentError do
53
+ obj = @bucket.get_object(key) { |c| content << c }
54
+ end
55
+ else
56
+ obj = @bucket.get_object(key) { |c| content << c }
57
+ assert_equal 'hello world', content
58
+ assert_equal cache_control, obj.headers[:cache_control]
59
+ assert_equal content_disposition, obj.headers[:content_disposition]
60
+ assert_equal content_encoding, obj.headers[:content_encoding]
61
+ assert_equal expires, obj.headers[:expires]
62
+ end
55
63
  end
56
64
 
57
65
  def test_headers_overwrite
File without changes
File without changes
File without changes
File without changes
@@ -17,6 +17,8 @@ class TestObjectKey < Minitest::Test
17
17
  chinese: '杭州・中国',
18
18
  space: '是 空格 yeah +-/\\&*#',
19
19
  invisible: '' << 1 << 10 << 12 << 7 << 80 << 99,
20
+ specail1: 'testkey/',
21
+ specail2: 'testkey/?key=value#abc=def',
20
22
  xml: 'a<b&c>d +'
21
23
  }
22
24
  end
@@ -57,6 +59,22 @@ class TestObjectKey < Minitest::Test
57
59
  assert_equal key, @bucket.get_object(key).key
58
60
  end
59
61
 
62
+ def test_specail1
63
+ key = get_key(:specail1)
64
+ @bucket.put_object(key)
65
+ all = @bucket.list_objects(prefix: @prefix).map(&:key)
66
+ assert_includes all, key
67
+ assert_equal key, @bucket.get_object(key).key
68
+ end
69
+
70
+ def test_specail2
71
+ key = get_key(:specail2)
72
+ @bucket.put_object(key)
73
+ all = @bucket.list_objects(prefix: @prefix).map(&:key)
74
+ assert_includes all, key
75
+ assert_equal key, @bucket.get_object(key).key
76
+ end
77
+
60
78
  def test_batch_delete
61
79
  keys = @keys.map { |k, _| get_key(k) }
62
80
  keys.each { |k| @bucket.put_object(k) }
@@ -66,4 +66,24 @@ class TestObjectUrl < Minitest::Test
66
66
 
67
67
  assert_equal 200, r.code
68
68
  end
69
+
70
+ def test_signed_url_with_parameters
71
+ key = get_key('example.jpg')
72
+
73
+ @bucket.put_object(key, :file => 'tests/example.jpg', acl: Aliyun::OSS::ACL::PRIVATE)
74
+
75
+ meta = @bucket.get_object(key)
76
+ assert_equal 21839, meta.size
77
+
78
+ parameters = {
79
+ 'x-oss-process' => 'image/resize,m_fill,h_100,w_100',
80
+ }
81
+ signed_url = @bucket.object_url(key, true, 60, parameters)
82
+ r = RestClient.get(signed_url)
83
+ lenth = r.headers[:content_length].to_i
84
+ assert_equal 200, r.code
85
+ assert_equal true, lenth < meta.size
86
+
87
+ end
88
+
69
89
  end
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aliyun-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tianlong Wu
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: lib/aliyun
10
10
  cert_chain: []
11
- date: 2016-07-19 00:00:00.000000000 Z
11
+ date: 2020-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.8'
33
+ version: '2.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.8'
40
+ version: '2.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '10.4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake-compiler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.9.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.9.0
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rspec
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +100,14 @@ dependencies:
86
100
  requirements:
87
101
  - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: '1.22'
103
+ version: '3.0'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: '1.22'
110
+ version: '3.0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: simplecov
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -126,7 +140,8 @@ description: A Ruby program to facilitate accessing Aliyun Object Storage Servic
126
140
  email:
127
141
  - rockuw.@gmail.com
128
142
  executables: []
129
- extensions: []
143
+ extensions:
144
+ - ext/crcx/extconf.rb
130
145
  extra_rdoc_files:
131
146
  - README.md
132
147
  - CHANGELOG.md
@@ -141,6 +156,10 @@ files:
141
156
  - examples/aliyun/oss/streaming.rb
142
157
  - examples/aliyun/oss/using_sts.rb
143
158
  - examples/aliyun/sts/assume_role.rb
159
+ - ext/crcx/crc64_ecma.c
160
+ - ext/crcx/crcx.c
161
+ - ext/crcx/crcx.h
162
+ - ext/crcx/extconf.rb
144
163
  - lib/aliyun/common.rb
145
164
  - lib/aliyun/common/exception.rb
146
165
  - lib/aliyun/common/logging.rb
@@ -180,8 +199,10 @@ files:
180
199
  - spec/aliyun/sts/client_spec.rb
181
200
  - spec/aliyun/sts/util_spec.rb
182
201
  - tests/config.rb
202
+ - tests/helper.rb
183
203
  - tests/test_content_encoding.rb
184
204
  - tests/test_content_type.rb
205
+ - tests/test_crc_check.rb
185
206
  - tests/test_custom_headers.rb
186
207
  - tests/test_encoding.rb
187
208
  - tests/test_large_file.rb
@@ -202,15 +223,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
202
223
  requirements:
203
224
  - - ">="
204
225
  - !ruby/object:Gem::Version
205
- version: 1.9.3
226
+ version: '2.0'
206
227
  required_rubygems_version: !ruby/object:Gem::Requirement
207
228
  requirements:
208
229
  - - ">="
209
230
  - !ruby/object:Gem::Version
210
231
  version: '0'
211
232
  requirements: []
212
- rubyforge_project:
213
- rubygems_version: 2.4.5.1
233
+ rubygems_version: 3.0.3
214
234
  signing_key:
215
235
  specification_version: 4
216
236
  summary: Aliyun OSS SDK for Ruby
@@ -228,8 +248,10 @@ test_files:
228
248
  - spec/aliyun/sts/client_spec.rb
229
249
  - spec/aliyun/sts/util_spec.rb
230
250
  - tests/config.rb
251
+ - tests/helper.rb
231
252
  - tests/test_content_encoding.rb
232
253
  - tests/test_content_type.rb
254
+ - tests/test_crc_check.rb
233
255
  - tests/test_custom_headers.rb
234
256
  - tests/test_encoding.rb
235
257
  - tests/test_large_file.rb
@@ -238,4 +260,3 @@ test_files:
238
260
  - tests/test_object_key.rb
239
261
  - tests/test_object_url.rb
240
262
  - tests/test_resumable.rb
241
- has_rdoc: