fog-aws 3.7.0 → 3.11.0

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.
@@ -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