fog-aws 3.7.0 → 3.11.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  module Fog
2
2
  module AWS
3
- VERSION = "3.7.0"
3
+ VERSION = "3.11.0"
4
4
  end
5
5
  end
@@ -87,6 +87,18 @@ Shindo.tests('AWS | credentials', ['aws']) do
87
87
  ) { Fog::AWS::Compute.fetch_credentials(use_iam_profile: true) }
88
88
  end
89
89
 
90
+ ENV['AWS_ROLE_SESSION_NAME'] = nil
91
+
92
+ tests('#fetch_credentials token based without session name') do
93
+ returns(
94
+ aws_access_key_id: 'dummykey',
95
+ aws_secret_access_key: 'dummysecret',
96
+ aws_session_token: 'dummytoken',
97
+ region: 'us-west-1',
98
+ aws_credentials_expire_at: expires_at
99
+ ) { Fog::AWS::Compute.fetch_credentials(use_iam_profile: true) }
100
+ end
101
+
90
102
  ENV['AWS_WEB_IDENTITY_TOKEN_FILE'] = nil
91
103
 
92
104
  compute = Fog::AWS::Compute.new(use_iam_profile: true)
@@ -1,8 +1,8 @@
1
1
  module Shindo
2
2
  class Tests
3
- def succeeds
3
+ def succeeds(&block)
4
4
  test('succeeds') do
5
- !instance_eval(&Proc.new).nil?
5
+ !instance_eval(&Proc.new(&block)).nil?
6
6
  end
7
7
  end
8
8
  end
@@ -1,4 +1,117 @@
1
1
  Shindo.tests("Storage[:aws] | directory", ["aws"]) do
2
+ tests('Fog::Storage[:aws]', "#request_params") do
3
+ def slice(hash, *args)
4
+ hash.select { |k, _| args.include?(k) }
5
+ end
6
+
7
+ instance = Fog::Storage[:aws]
8
+ method = instance.method(:request_params)
9
+
10
+ params = {bucket_name: 'profile-uploads', host: 'profile-uploads.s3.us-west-2.amazonaws.com'}
11
+ tests("given #{params}, request_params[:host]").returns("profile-uploads.s3.us-west-2.amazonaws.com") do
12
+ method.call(params)[:host]
13
+ end
14
+
15
+ params = {bucket_name: 'profile-uploads.johnsmith.net', cname: 'profile-uploads.johnsmith.net', virtual_host: true}
16
+ tests("given #{params}, request_params[:host]").returns("profile-uploads.johnsmith.net") do
17
+ method.call(params)[:host]
18
+ end
19
+
20
+ params = {bucket_name: 'profile-uploads.johnsmith.net', cname: 'profile-uploads.johnsmith.net', virtual_host: false}
21
+ tests("given #{params}, request_params[:host], request_params[:path]").
22
+ returns({host: "s3.amazonaws.com", path: "/profile-uploads.johnsmith.net/"}) do
23
+ slice(method.call(params), :host, :path)
24
+ end
25
+
26
+ params = {bucket_name: 'profile-uploads.johnsmith.net', bucket_cname: 'profile-uploads.johnsmith.net'}
27
+ tests("given #{params}, request_params[:host]").returns("profile-uploads.johnsmith.net") do
28
+ method.call(params)[:host]
29
+ end
30
+
31
+ params = {bucket_name: 'profile-uploads'}
32
+ tests("given #{params}, request_params[:path], request_params[:host]").
33
+ returns({path: "/", host: "profile-uploads.s3.amazonaws.com"}) do
34
+ slice(method.call(params), :path, :host)
35
+ end
36
+
37
+ params = {bucket_name: 'profile-uploads', path_style: true}
38
+ tests("given #{params}, request_params[:path], request_params[:host]").
39
+ returns({path: "/profile-uploads/", host: "s3.amazonaws.com"}) do
40
+ slice(method.call(params), :path, :host)
41
+ end
42
+
43
+ params = {bucket_name: 'profile-uploads', path_style: false}
44
+ tests("given #{params}, request_params[:path], request_params[:host]").
45
+ returns({path: "/", host: "profile-uploads.s3.amazonaws.com"}) do
46
+ slice(method.call(params), :path, :host)
47
+ end
48
+
49
+ params = {scheme: 'https', bucket_name: 'profile.uploads', path_style: false}
50
+ tests("given #{params}, request_params[:path], request_params[:host]").
51
+ returns(path: "/profile.uploads/", host: "s3.amazonaws.com") do
52
+ slice(method.call(params), :path, :host)
53
+ end
54
+
55
+ params = {:headers=>{:"Content-Type"=>"application/json"}}
56
+ tests("given #{params}, request_params[:headers]").returns({:"Content-Type"=>"application/json"}) do
57
+ method.call(params)[:headers]
58
+ end
59
+
60
+ params = {headers: {}}
61
+ tests("given #{params}, request_params[:headers]").returns({}) do
62
+ method.call(params)[:headers]
63
+ end
64
+
65
+ params = {scheme: 'http'}
66
+ tests("given #{params}, request_params[:scheme]").returns('http') do
67
+ method.call(params)[:scheme]
68
+ end
69
+
70
+ params = {}
71
+ tests("given #{params}, request_params[:scheme]").returns('https') do
72
+ method.call(params)[:scheme]
73
+ end
74
+
75
+ params = {scheme: 'http', port: 8080}
76
+ tests("given #{params} (default scheme), request_params[:port]").returns(8080) do
77
+ method.call(params)[:port]
78
+ end
79
+
80
+ params = {scheme: 'https', port: 443}
81
+ tests("given #{params}, request_params[:port]").returns(nil) do
82
+ method.call(params)[:port]
83
+ end
84
+
85
+ params = {}
86
+ tests("given #{params}, request_params[:host]").returns("s3.amazonaws.com") do
87
+ method.call(params)[:host]
88
+ end
89
+
90
+ params = {region: 'us-east-1'}
91
+ tests("given #{params}, request_params[:host]").returns("s3.amazonaws.com") do
92
+ method.call(params)[:host]
93
+ end
94
+
95
+ params = {region: 'us-west-2'}
96
+ tests("given #{params}, request_params[:host]").returns("s3.us-west-2.amazonaws.com") do
97
+ method.call(params)[:host]
98
+ end
99
+
100
+ params= {region: 'us-east-1', host: 's3.us-west-2.amazonaws.com'}
101
+ tests("given #{params}, request_params[:host]").returns("s3.us-west-2.amazonaws.com") do
102
+ method.call(params)[:host]
103
+ end
104
+
105
+ params = {object_name: 'image.png'}
106
+ tests("given #{params}, request_params[:host]").returns("/image.png") do
107
+ method.call(params)[:path]
108
+ end
109
+
110
+ params = {object_name: 'image.png', path: '/images/image.png'}
111
+ tests("given #{params}, request_params[:host]").returns("/images/image.png") do
112
+ method.call(params)[:path]
113
+ end
114
+ end
2
115
 
3
116
  directory_attributes = {
4
117
  :key => uniq_id('fogdirectorytests')
@@ -85,7 +198,5 @@ Shindo.tests("Storage[:aws] | directory", ["aws"]) do
85
198
  @instance.versioning?
86
199
  end
87
200
  end
88
-
89
201
  end
90
-
91
202
  end
@@ -50,6 +50,38 @@ Shindo.tests("Storage[:aws] | files", ["aws"]) do
50
50
  end
51
51
  end
52
52
 
53
+ tests('#normalize_headers') do
54
+ files = @directory.files
55
+ response = Excon::Response.new
56
+ current_time = Time.new(2021, 02, 21)
57
+
58
+ response.headers['last-modified'] = current_time.to_s
59
+ response.headers['etag'] = '12345'
60
+ response.headers['ETAG'] = '12345'
61
+ response.headers['Cache-Control'] = 'no-cache'
62
+ response.headers['Content-disposition'] = 'attachment'
63
+ response.headers['content-length'] = 100
64
+ response.headers['content-Encoding'] = 'gzip'
65
+ response.headers['content-md5'] = 'ABCDEAB'
66
+ response.headers['content-Md5'] = 'ABCDEAB'
67
+ response.headers['ConTent-Type'] = 'application/json'
68
+
69
+ expected = {
70
+ 'Last-Modified' => current_time,
71
+ 'ETag' => '12345',
72
+ 'Cache-Control' => 'no-cache',
73
+ 'Content-Disposition' => 'attachment',
74
+ 'Content-Length' => 100,
75
+ 'Content-Encoding' => 'gzip',
76
+ 'Content-MD5' => 'ABCDEAB',
77
+ 'Content-Type' => 'application/json'
78
+ }
79
+
80
+ tests('header keys are normalized').returns(expected) do
81
+ files.normalize_headers(response)
82
+ response.headers
83
+ end
84
+ end
53
85
  end
54
86
 
55
87
  @directory.versions.each(&:destroy)
@@ -158,7 +158,7 @@ Shindo.tests('Fog::Storage[:aws] | bucket requests', ["aws"]) do
158
158
  Fog::Storage[:aws].put_bucket_website(@aws_bucket_name, :IndexDocument => 'index.html')
159
159
  end
160
160
 
161
- tests("#put_bucket_website('#{@aws_bucket_name}', :RedirectAllRequestsTo => 'redirect.example..com')").succeeds do
161
+ tests("#put_bucket_website('#{@aws_bucket_name}', :RedirectAllRequestsTo => 'redirect.example.com')").succeeds do
162
162
  Fog::Storage[:aws].put_bucket_website(@aws_bucket_name, :RedirectAllRequestsTo => 'redirect.example.com')
163
163
  end
164
164
 
@@ -3,7 +3,7 @@ require 'securerandom'
3
3
  Shindo.tests('Fog::Storage[:aws] | copy requests', ["aws"]) do
4
4
 
5
5
  @directory = Fog::Storage[:aws].directories.create(:key => uniq_id('fogmultipartcopytests'))
6
- @large_data = SecureRandom.hex * 19 * 1024 * 1024
6
+ @large_data = SecureRandom.hex * 600000
7
7
  @large_blob = Fog::Storage[:aws].put_object(@directory.identity, 'large_object', @large_data)
8
8
 
9
9
  tests('copies an empty object') do
@@ -77,4 +77,17 @@ Shindo.tests('Fog::Storage[:aws] | copy requests', ["aws"]) do
77
77
 
78
78
  test("copied is the same") { copied.body == file.body }
79
79
  end
80
+
81
+ tests('copies an object with unknown headers') do
82
+ file = Fog::Storage[:aws].directories.new(key: @directory.identity).files.get('large_object')
83
+ file.multipart_chunk_size = Fog::AWS::Storage::File::MIN_MULTIPART_CHUNK_SIZE
84
+ file.concurrency = 10
85
+
86
+ tests("#copy_object('#{@directory.identity}', 'copied_object'").succeeds do
87
+ file.copy(@directory.identity, 'copied_object', { unknown: 1 } )
88
+ end
89
+
90
+ copied = Fog::Storage[:aws].directories.new(key: @directory.identity).files.get('copied_object')
91
+ test("copied is the same") { copied.body == file.body }
92
+ end
80
93
  end
@@ -18,6 +18,13 @@ Shindo.tests('AWS::Storage | object requests', ['aws']) do
18
18
  Fog::Storage[:aws].put_object(@directory.identity, 'fog_object', lorem_file)
19
19
  end
20
20
 
21
+ tests("#put_object('#{@directory.identity}', 'fog_object', lorem_file at EOF)").returns(lorem_file.read) do
22
+ file = lorem_file
23
+ file.read
24
+ Fog::Storage[:aws].put_object(@directory.identity, 'fog_object', file)
25
+ Fog::Storage[:aws].get_object(@directory.identity, 'fog_object').body
26
+ end
27
+
21
28
  tests("#copy_object('#{@directory.identity}', 'fog_object', '#{@directory.identity}', 'fog_other_object')").succeeds do
22
29
  Fog::Storage[:aws].copy_object(@directory.identity, 'fog_object', @directory.identity, 'fog_other_object')
23
30
  end
@@ -134,6 +134,44 @@ Shindo.tests('Fog::Storage[:aws] | versioning', ["aws"]) do
134
134
  end
135
135
  end
136
136
 
137
+ tests("deleting_multiple_objects_versions('#{@aws_bucket_name}", 'file') do
138
+ clear_bucket
139
+
140
+ bucket = Fog::Storage[:aws].directories.get(@aws_bucket_name)
141
+
142
+ file_count = 5
143
+ file_names = []
144
+ files = {}
145
+ file_count.times do |id|
146
+ file_names << "file_#{id}"
147
+ file_version_count = rand(1..5)
148
+ file_version_count.times do
149
+ files[file_names.last] = bucket.files.create(:body => 'a',
150
+ :key => file_names.last)
151
+ end
152
+ end
153
+
154
+ tests("deleting an object with multiple versions").returns(true) do
155
+ versions = Fog::Storage[:aws].get_bucket_object_versions(
156
+ @aws_bucket_name)
157
+ file_versions = {}
158
+ versions.body['Versions'].each do |version|
159
+ object = version[version.keys.first]
160
+ if file_versions[object['Key']]
161
+ file_versions[object['Key']] = file_versions[object['Key']] << object['VersionId']
162
+ else
163
+ file_versions[object['Key']] = [object['VersionId']]
164
+ end
165
+ end
166
+
167
+ Fog::Storage[:aws].delete_multiple_objects(@aws_bucket_name,
168
+ file_names, 'versionId' => file_versions)
169
+ versions = Fog::Storage[:aws].get_bucket_object_versions(
170
+ @aws_bucket_name)
171
+ versions.body['Versions'].empty?
172
+ end
173
+ end
174
+
137
175
  tests("deleting_multiple_objects('#{@aws_bucket_name}", 'file') do
138
176
  clear_bucket
139
177
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fog-aws
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.7.0
4
+ version: 3.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Lane
@@ -9,36 +9,36 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-12-01 00:00:00.000000000 Z
12
+ date: 2021-08-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - "~>"
18
+ - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: '2.0'
20
+ version: '0'
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - "~>"
25
+ - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: '2.0'
27
+ version: '0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: github_changelog_generator
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '1.14'
34
+ version: '1.16'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '1.14'
41
+ version: '1.16'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: rake
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -59,14 +59,14 @@ dependencies:
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: 1.3.0
62
+ version: 2.3.0
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: 1.3.0
69
+ version: 2.3.0
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: shindo
72
72
  requirement: !ruby/object:Gem::Requirement
@@ -147,20 +147,12 @@ executables: []
147
147
  extensions: []
148
148
  extra_rdoc_files: []
149
149
  files:
150
- - ".gitignore"
151
- - ".travis.yml"
152
150
  - CHANGELOG.md
153
151
  - CONTRIBUTING.md
154
152
  - CONTRIBUTORS.md
155
- - Gemfile
156
153
  - LICENSE.md
157
154
  - README.md
158
- - Rakefile
159
- - bin/console
160
- - bin/setup
161
155
  - fog-aws.gemspec
162
- - gemfiles/Gemfile-edge
163
- - gemfiles/Gemfile-ruby-2.0
164
156
  - lib/fog-aws.rb
165
157
  - lib/fog/aws.rb
166
158
  - lib/fog/aws/auto_scaling.rb
@@ -184,9 +176,7 @@ files:
184
176
  - lib/fog/aws/federation.rb
185
177
  - lib/fog/aws/glacier.rb
186
178
  - lib/fog/aws/iam.rb
187
- - lib/fog/aws/iam/default_policies.json
188
179
  - lib/fog/aws/iam/default_policies.rb
189
- - lib/fog/aws/iam/default_policy_versions.json
190
180
  - lib/fog/aws/iam/paged_collection.rb
191
181
  - lib/fog/aws/kinesis.rb
192
182
  - lib/fog/aws/kms.rb
@@ -1461,7 +1451,6 @@ files:
1461
1451
  - lib/fog/aws/sts.rb
1462
1452
  - lib/fog/aws/support.rb
1463
1453
  - lib/fog/aws/version.rb
1464
- - stale.yml
1465
1454
  - tests/credentials_tests.rb
1466
1455
  - tests/helper.rb
1467
1456
  - tests/helpers/collection_helper.rb
@@ -1744,7 +1733,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1744
1733
  - !ruby/object:Gem::Version
1745
1734
  version: '0'
1746
1735
  requirements: []
1747
- rubygems_version: 3.1.2
1736
+ rubygems_version: 3.2.15
1748
1737
  signing_key:
1749
1738
  specification_version: 4
1750
1739
  summary: Module for the 'fog' gem to support Amazon Web Services.
data/.gitignore DELETED
@@ -1,17 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
10
- *.bundle
11
- *.so
12
- *.o
13
- *.a
14
- mkmf.log
15
- tests/.fog
16
- gemfiles/Gemfile-edge.lock
17
- .idea
data/.travis.yml DELETED
@@ -1,65 +0,0 @@
1
- language: ruby
2
- sudo: false
3
- script: bundle exec rake test
4
- branches:
5
- except:
6
- - "/\\Av\\d+\\Z/"
7
- matrix:
8
- fast_finish: true
9
- include:
10
- - rvm: 2.3.0
11
- gemfile: Gemfile
12
- - rvm: 2.3.0
13
- gemfile: gemfiles/Gemfile-edge
14
- - rvm: 2.4.0
15
- gemfile: Gemfile
16
- - rvm: 2.4.0
17
- gemfile: gemfiles/Gemfile-edge
18
- - rvm: 2.5.0
19
- gemfile: Gemfile
20
- - rvm: 2.5.0
21
- gemfile: gemfiles/Gemfile-edge
22
- - rvm: 2.6.6
23
- gemfile: Gemfile
24
- - rvm: 2.6.6
25
- gemfile: gemfiles/Gemfile-edge
26
- - rvm: 2.7.2
27
- gemfile: Gemfile
28
- - rvm: 2.7.2
29
- gemfile: gemfiles/Gemfile-edge
30
- - rvm: jruby-head
31
- gemfile: Gemfile
32
- allow_failures:
33
- - rvm: jruby-head
34
- gemfile: Gemfile
35
- - rvm: 2.2.0
36
- gemfile: gemfiles/Gemfile-edge
37
- - rvm: 2.3.0
38
- gemfile: gemfiles/Gemfile-edge
39
- - rvm: 2.4.0
40
- gemfile: gemfiles/Gemfile-edge
41
- - rvm: 2.5.0
42
- gemfile: gemfiles/Gemfile-edge
43
- - rvm: 2.6.6
44
- gemfile: gemfiles/Gemfile-edge
45
- - rvm: 2.7.2
46
- gemfile: gemfiles/Gemfile-edge
47
- notifications:
48
- email: false
49
- irc:
50
- channels:
51
- - irc.freenode.org#ruby-fog
52
- template:
53
- - "[#%{build_number}] %{message} %{build_url}"
54
- - "[#%{build_number}] %{commit} on %{branch} by %{author}"
55
- - "[#%{build_number}] %{compare_url}"
56
- on_success: always
57
- on_failure: always
58
- use_notice: false
59
- before_install:
60
- - gem update bundler
61
- env:
62
- global:
63
- secure: LlDKdKSRo3sEjQ55XesbOXhKZ3RrOtqoD1ZL8Wx39K3iVzeEV3Kc8HjDfEvo7R4pOc3BMTNJcputklVEPN0FkWGN7Py+OEtbHj3IZl0MX+KEWNk0gU+4+sgPrL1eXUQyMUSkCrBsKg08rPel4KMYUOXbtnLyUU9PDbBwm4LJYOc=
64
- after_success:
65
- - bundle exec codeclimate-test-reporter