aliyun-oss-ruby-sdk 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +95 -0
  3. data/README.md +423 -0
  4. data/examples/aliyun/oss/bucket.rb +144 -0
  5. data/examples/aliyun/oss/callback.rb +61 -0
  6. data/examples/aliyun/oss/object.rb +182 -0
  7. data/examples/aliyun/oss/resumable_download.rb +42 -0
  8. data/examples/aliyun/oss/resumable_upload.rb +49 -0
  9. data/examples/aliyun/oss/streaming.rb +124 -0
  10. data/examples/aliyun/oss/using_sts.rb +48 -0
  11. data/examples/aliyun/sts/assume_role.rb +59 -0
  12. data/lib/aliyun_sdk/common.rb +6 -0
  13. data/lib/aliyun_sdk/common/exception.rb +18 -0
  14. data/lib/aliyun_sdk/common/logging.rb +46 -0
  15. data/lib/aliyun_sdk/common/struct.rb +56 -0
  16. data/lib/aliyun_sdk/oss.rb +16 -0
  17. data/lib/aliyun_sdk/oss/bucket.rb +661 -0
  18. data/lib/aliyun_sdk/oss/client.rb +106 -0
  19. data/lib/aliyun_sdk/oss/config.rb +39 -0
  20. data/lib/aliyun_sdk/oss/download.rb +255 -0
  21. data/lib/aliyun_sdk/oss/exception.rb +108 -0
  22. data/lib/aliyun_sdk/oss/http.rb +338 -0
  23. data/lib/aliyun_sdk/oss/iterator.rb +92 -0
  24. data/lib/aliyun_sdk/oss/multipart.rb +74 -0
  25. data/lib/aliyun_sdk/oss/object.rb +15 -0
  26. data/lib/aliyun_sdk/oss/protocol.rb +1499 -0
  27. data/lib/aliyun_sdk/oss/struct.rb +208 -0
  28. data/lib/aliyun_sdk/oss/upload.rb +238 -0
  29. data/lib/aliyun_sdk/oss/util.rb +89 -0
  30. data/lib/aliyun_sdk/sts.rb +9 -0
  31. data/lib/aliyun_sdk/sts/client.rb +38 -0
  32. data/lib/aliyun_sdk/sts/config.rb +22 -0
  33. data/lib/aliyun_sdk/sts/exception.rb +53 -0
  34. data/lib/aliyun_sdk/sts/protocol.rb +130 -0
  35. data/lib/aliyun_sdk/sts/struct.rb +64 -0
  36. data/lib/aliyun_sdk/sts/util.rb +48 -0
  37. data/lib/aliyun_sdk/version.rb +7 -0
  38. data/spec/aliyun/oss/bucket_spec.rb +597 -0
  39. data/spec/aliyun/oss/client/bucket_spec.rb +554 -0
  40. data/spec/aliyun/oss/client/client_spec.rb +297 -0
  41. data/spec/aliyun/oss/client/resumable_download_spec.rb +220 -0
  42. data/spec/aliyun/oss/client/resumable_upload_spec.rb +413 -0
  43. data/spec/aliyun/oss/http_spec.rb +83 -0
  44. data/spec/aliyun/oss/multipart_spec.rb +686 -0
  45. data/spec/aliyun/oss/object_spec.rb +785 -0
  46. data/spec/aliyun/oss/service_spec.rb +142 -0
  47. data/spec/aliyun/oss/util_spec.rb +50 -0
  48. data/spec/aliyun/sts/client_spec.rb +150 -0
  49. data/spec/aliyun/sts/util_spec.rb +39 -0
  50. data/tests/config.rb +31 -0
  51. data/tests/test_content_encoding.rb +54 -0
  52. data/tests/test_content_type.rb +95 -0
  53. data/tests/test_custom_headers.rb +70 -0
  54. data/tests/test_encoding.rb +77 -0
  55. data/tests/test_large_file.rb +66 -0
  56. data/tests/test_multipart.rb +97 -0
  57. data/tests/test_object_acl.rb +49 -0
  58. data/tests/test_object_key.rb +68 -0
  59. data/tests/test_object_url.rb +69 -0
  60. data/tests/test_resumable.rb +40 -0
  61. metadata +240 -0
@@ -0,0 +1,68 @@
1
+ # coding: utf-8
2
+ require 'minitest/autorun'
3
+ require 'yaml'
4
+ $LOAD_PATH.unshift(File.expand_path("../../lib", __FILE__))
5
+ require 'aliyun/oss'
6
+ require_relative 'config'
7
+
8
+ class TestObjectKey < Minitest::Test
9
+ def setup
10
+ AliyunSDK::Common::Logging.set_log_level(Logger::DEBUG)
11
+ client = AliyunSDK::OSS::Client.new(TestConf.creds)
12
+ @bucket = client.get_bucket(TestConf.bucket)
13
+
14
+ @prefix = 'tests/object_key/'
15
+ @keys = {
16
+ simple: 'simple_key',
17
+ chinese: '杭州・中国',
18
+ space: '是 空格 yeah +-/\\&*#',
19
+ invisible: '' << 1 << 10 << 12 << 7 << 80 << 99,
20
+ xml: 'a<b&c>d +'
21
+ }
22
+ end
23
+
24
+ def get_key(sym)
25
+ @prefix + @keys[sym]
26
+ end
27
+
28
+ def test_simple
29
+ key = get_key(:simple)
30
+ @bucket.put_object(key)
31
+ all = @bucket.list_objects(prefix: @prefix).map(&:key)
32
+ assert_includes all, key
33
+ assert_equal key, @bucket.get_object(key).key
34
+ end
35
+
36
+ def test_chinese
37
+ key = get_key(:chinese)
38
+ @bucket.put_object(key)
39
+ all = @bucket.list_objects(prefix: @prefix).map(&:key)
40
+ assert_includes all, key
41
+ assert_equal key, @bucket.get_object(key).key
42
+ end
43
+
44
+ def test_space
45
+ key = get_key(:space)
46
+ @bucket.put_object(key)
47
+ all = @bucket.list_objects(prefix: @prefix).map(&:key)
48
+ assert_includes all, key
49
+ assert_equal key, @bucket.get_object(key).key
50
+ end
51
+
52
+ def test_invisible
53
+ key = get_key(:invisible)
54
+ @bucket.put_object(key)
55
+ all = @bucket.list_objects(prefix: @prefix).map(&:key)
56
+ assert_includes all, key
57
+ assert_equal key, @bucket.get_object(key).key
58
+ end
59
+
60
+ def test_batch_delete
61
+ keys = @keys.map { |k, _| get_key(k) }
62
+ keys.each { |k| @bucket.put_object(k) }
63
+ ret = @bucket.batch_delete_objects(keys)
64
+ assert_equal keys, ret
65
+ all = @bucket.list_objects(prefix: @prefix).map(&:key)
66
+ assert all.empty?, all.to_s
67
+ end
68
+ end
@@ -0,0 +1,69 @@
1
+ require 'minitest/autorun'
2
+ require 'yaml'
3
+ $LOAD_PATH.unshift(File.expand_path("../../lib", __FILE__))
4
+ require 'aliyun/oss'
5
+ require 'aliyun/sts'
6
+ require 'rest-client'
7
+ require_relative 'config'
8
+
9
+ class TestObjectUrl < Minitest::Test
10
+ def setup
11
+ AliyunSDK::Common::Logging.set_log_level(Logger::DEBUG)
12
+ client = AliyunSDK::OSS::Client.new(TestConf.creds)
13
+ @bucket = client.get_bucket(TestConf.bucket)
14
+
15
+ @prefix = "tests/object_url/"
16
+ end
17
+
18
+ def get_key(k)
19
+ "#{@prefix}#{k}"
20
+ end
21
+
22
+ def test_signed_url_for_get
23
+ key = get_key('object-for-get')
24
+
25
+ @bucket.put_object(key, acl: AliyunSDK::OSS::ACL::PRIVATE)
26
+
27
+ plain_url = @bucket.object_url(key, false)
28
+ begin
29
+ r = RestClient.get(plain_url)
30
+ assert false, 'GET plain object url should receive 403'
31
+ rescue => e
32
+ assert_equal 403, e.response.code
33
+ end
34
+
35
+ signed_url = @bucket.object_url(key)
36
+ r = RestClient.get(signed_url)
37
+
38
+ assert_equal 200, r.code
39
+ end
40
+
41
+ def test_signed_url_with_sts
42
+ key = get_key('object-with-sts')
43
+
44
+ sts_client = AliyunSDK::STS::Client.new(TestConf.sts_creds)
45
+ token = sts_client.assume_role(TestConf.sts_role, 'app')
46
+
47
+ bucket = AliyunSDK::OSS::Client.new(
48
+ :endpoint => TestConf.creds[:endpoint],
49
+ :sts_token => token.security_token,
50
+ :access_key_id => token.access_key_id,
51
+ :access_key_secret => token.access_key_secret)
52
+ .get_bucket(TestConf.sts_bucket)
53
+
54
+ bucket.put_object(key, acl: AliyunSDK::OSS::ACL::PRIVATE)
55
+
56
+ plain_url = bucket.object_url(key, false)
57
+ begin
58
+ r = RestClient.get(plain_url)
59
+ assert false, 'GET plain object url should receive 403'
60
+ rescue => e
61
+ assert_equal 403, e.response.code
62
+ end
63
+
64
+ signed_url = bucket.object_url(key)
65
+ r = RestClient.get(signed_url)
66
+
67
+ assert_equal 200, r.code
68
+ end
69
+ end
@@ -0,0 +1,40 @@
1
+ require 'minitest/autorun'
2
+ require 'yaml'
3
+ $LOAD_PATH.unshift(File.expand_path("../../lib", __FILE__))
4
+ require 'aliyun/oss'
5
+ require_relative 'config'
6
+
7
+ class TestResumable < Minitest::Test
8
+ def setup
9
+ AliyunSDK::Common::Logging.set_log_level(Logger::DEBUG)
10
+ client = AliyunSDK::OSS::Client.new(TestConf.creds)
11
+ @bucket = client.get_bucket(TestConf.bucket)
12
+
13
+ @prefix = 'tests/resumable/'
14
+ end
15
+
16
+ def get_key(k)
17
+ @prefix + k
18
+ end
19
+
20
+ def random_string(n)
21
+ (1...n).map { (65 + rand(26)).chr }.join + "\n"
22
+ end
23
+
24
+ def test_correctness
25
+ key = get_key('resumable')
26
+ # generate 10M random data
27
+ File.open('/tmp/x', 'w') do |f|
28
+ (10 * 1024).times { f.write(random_string(1024)) }
29
+ end
30
+
31
+ # clear checkpoints
32
+ `rm -rf /tmp/x.cpt && rm -rf /tmp/y.cpt`
33
+
34
+ @bucket.resumable_upload(key, '/tmp/x', :part_size => 100 * 1024)
35
+ @bucket.resumable_download(key, '/tmp/y', :part_size => 100 * 1024)
36
+
37
+ diff = `diff /tmp/x /tmp/y`
38
+ assert diff.empty?, diff
39
+ end
40
+ end
metadata ADDED
@@ -0,0 +1,240 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aliyun-oss-ruby-sdk
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.1
5
+ platform: ruby
6
+ authors:
7
+ - Tianlong Wu
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-08-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rest-client
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.8'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.10'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.10'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.4'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.3'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.3'
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.22'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.22'
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.10.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.10.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: minitest
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '5.8'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '5.8'
125
+ description: A Ruby program to facilitate accessing Aliyun Object Storage Service
126
+ email:
127
+ - fwshun8023.@gmail.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files:
131
+ - README.md
132
+ - CHANGELOG.md
133
+ files:
134
+ - CHANGELOG.md
135
+ - README.md
136
+ - examples/aliyun/oss/bucket.rb
137
+ - examples/aliyun/oss/callback.rb
138
+ - examples/aliyun/oss/object.rb
139
+ - examples/aliyun/oss/resumable_download.rb
140
+ - examples/aliyun/oss/resumable_upload.rb
141
+ - examples/aliyun/oss/streaming.rb
142
+ - examples/aliyun/oss/using_sts.rb
143
+ - examples/aliyun/sts/assume_role.rb
144
+ - lib/aliyun_sdk/common.rb
145
+ - lib/aliyun_sdk/common/exception.rb
146
+ - lib/aliyun_sdk/common/logging.rb
147
+ - lib/aliyun_sdk/common/struct.rb
148
+ - lib/aliyun_sdk/oss.rb
149
+ - lib/aliyun_sdk/oss/bucket.rb
150
+ - lib/aliyun_sdk/oss/client.rb
151
+ - lib/aliyun_sdk/oss/config.rb
152
+ - lib/aliyun_sdk/oss/download.rb
153
+ - lib/aliyun_sdk/oss/exception.rb
154
+ - lib/aliyun_sdk/oss/http.rb
155
+ - lib/aliyun_sdk/oss/iterator.rb
156
+ - lib/aliyun_sdk/oss/multipart.rb
157
+ - lib/aliyun_sdk/oss/object.rb
158
+ - lib/aliyun_sdk/oss/protocol.rb
159
+ - lib/aliyun_sdk/oss/struct.rb
160
+ - lib/aliyun_sdk/oss/upload.rb
161
+ - lib/aliyun_sdk/oss/util.rb
162
+ - lib/aliyun_sdk/sts.rb
163
+ - lib/aliyun_sdk/sts/client.rb
164
+ - lib/aliyun_sdk/sts/config.rb
165
+ - lib/aliyun_sdk/sts/exception.rb
166
+ - lib/aliyun_sdk/sts/protocol.rb
167
+ - lib/aliyun_sdk/sts/struct.rb
168
+ - lib/aliyun_sdk/sts/util.rb
169
+ - lib/aliyun_sdk/version.rb
170
+ - spec/aliyun/oss/bucket_spec.rb
171
+ - spec/aliyun/oss/client/bucket_spec.rb
172
+ - spec/aliyun/oss/client/client_spec.rb
173
+ - spec/aliyun/oss/client/resumable_download_spec.rb
174
+ - spec/aliyun/oss/client/resumable_upload_spec.rb
175
+ - spec/aliyun/oss/http_spec.rb
176
+ - spec/aliyun/oss/multipart_spec.rb
177
+ - spec/aliyun/oss/object_spec.rb
178
+ - spec/aliyun/oss/service_spec.rb
179
+ - spec/aliyun/oss/util_spec.rb
180
+ - spec/aliyun/sts/client_spec.rb
181
+ - spec/aliyun/sts/util_spec.rb
182
+ - tests/config.rb
183
+ - tests/test_content_encoding.rb
184
+ - tests/test_content_type.rb
185
+ - tests/test_custom_headers.rb
186
+ - tests/test_encoding.rb
187
+ - tests/test_large_file.rb
188
+ - tests/test_multipart.rb
189
+ - tests/test_object_acl.rb
190
+ - tests/test_object_key.rb
191
+ - tests/test_object_url.rb
192
+ - tests/test_resumable.rb
193
+ homepage: https://github.com/fwshun8023/aliyun-oss-ruby-sdk
194
+ licenses:
195
+ - MIT
196
+ metadata: {}
197
+ post_install_message:
198
+ rdoc_options: []
199
+ require_paths:
200
+ - lib
201
+ required_ruby_version: !ruby/object:Gem::Requirement
202
+ requirements:
203
+ - - ">="
204
+ - !ruby/object:Gem::Version
205
+ version: 1.9.3
206
+ required_rubygems_version: !ruby/object:Gem::Requirement
207
+ requirements:
208
+ - - ">="
209
+ - !ruby/object:Gem::Version
210
+ version: '0'
211
+ requirements: []
212
+ rubyforge_project:
213
+ rubygems_version: 2.6.4
214
+ signing_key:
215
+ specification_version: 4
216
+ summary: Aliyun OSS SDK for Ruby
217
+ test_files:
218
+ - spec/aliyun/oss/bucket_spec.rb
219
+ - spec/aliyun/oss/client/bucket_spec.rb
220
+ - spec/aliyun/oss/client/client_spec.rb
221
+ - spec/aliyun/oss/client/resumable_download_spec.rb
222
+ - spec/aliyun/oss/client/resumable_upload_spec.rb
223
+ - spec/aliyun/oss/http_spec.rb
224
+ - spec/aliyun/oss/multipart_spec.rb
225
+ - spec/aliyun/oss/object_spec.rb
226
+ - spec/aliyun/oss/service_spec.rb
227
+ - spec/aliyun/oss/util_spec.rb
228
+ - spec/aliyun/sts/client_spec.rb
229
+ - spec/aliyun/sts/util_spec.rb
230
+ - tests/config.rb
231
+ - tests/test_content_encoding.rb
232
+ - tests/test_content_type.rb
233
+ - tests/test_custom_headers.rb
234
+ - tests/test_encoding.rb
235
+ - tests/test_large_file.rb
236
+ - tests/test_multipart.rb
237
+ - tests/test_object_acl.rb
238
+ - tests/test_object_key.rb
239
+ - tests/test_object_url.rb
240
+ - tests/test_resumable.rb