Skip to content

Commit 48d9fea

Browse files
update all the things and add a local docker dev setup
1 parent 759d70c commit 48d9fea

File tree

6 files changed

+63
-28
lines changed

6 files changed

+63
-28
lines changed

Dockerfile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Base image for Ruby (you can specify a version)
2+
FROM ruby:3.9.1
3+
4+
# Install any system dependencies (adjust based on your gem's needs)
5+
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
6+
7+
# Set the working directory inside the container
8+
WORKDIR /app
9+
10+
# Expose a shell to allow interaction inside the container
11+
CMD ["/bin/bash"]

Rakefile

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1-
require "bundler/gem_tasks"
2-
require "rake/testtask"
1+
require 'bundler/gem_tasks'
2+
require 'rake/testtask'
33

44
Rake::TestTask.new(:test) do |t|
5-
t.libs << "test"
6-
t.libs << "lib"
5+
t.libs << 'test'
6+
t.libs << 'lib'
77
t.test_files = FileList['test/**/*_test.rb']
8+
9+
# Enable detailed warnings
10+
t.ruby_opts << '-W2'
11+
t.verbose = true # Shows the detailed output of each test
812
end
913

10-
task :default => :test
14+
task default: :test

aws-google.gemspec

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,14 @@ Gem::Specification.new do |spec|
2222
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
2323
spec.require_paths = ['lib']
2424

25-
spec.add_dependency 'aws-sdk-core', '~> 3.201'
26-
spec.add_dependency 'google-apis-core'
27-
spec.add_dependency 'launchy', '~> 2'
25+
spec.add_dependency 'aws-sdk-core', '~> 3.209.1'
26+
spec.add_dependency 'google-apis-core', '~> 0.15.1'
27+
spec.add_dependency 'launchy', '~> 3.0.1'
2828

2929
spec.add_development_dependency 'activesupport', '~> 6.1.7.8'
3030
spec.add_development_dependency 'minitest', '~> 5.25.1'
31-
spec.add_development_dependency 'mocha', '~> 2.4'
32-
spec.add_development_dependency 'rake', '~> 13'
33-
spec.add_development_dependency 'timecop', '~> 0.8'
34-
spec.add_development_dependency 'webmock', '~> 3'
31+
spec.add_development_dependency 'mocha', '~> 2.4.5'
32+
spec.add_development_dependency 'rake', '~> 13.2.1'
33+
spec.add_development_dependency 'timecop', '~> 0.9.10'
34+
spec.add_development_dependency 'webmock', '3.24.0'
3535
end

docker-compose.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
version: '3'
2+
services:
3+
ruby:
4+
build: .
5+
volumes:
6+
- .:/app # Map the current directory to /app inside the container
7+
stdin_open: true
8+
tty: true
9+
ports:
10+
- "3000:3000" # If you're using a server (e.g., for testing with Rails), map the port

lib/aws/google/cached_credentials.rb

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,26 @@ def initialize(options = {})
1717

1818
@profile = options[:profile] || ENV['AWS_PROFILE'] || ENV['AWS_DEFAULT_PROFILE'] || 'default'
1919
@session_profile = @profile + '_session'
20-
@expiration = Aws.shared_config.expiration(profile: @session_profile) rescue nil
21-
@credentials = Aws.shared_config.credentials(profile: @session_profile) rescue nil
20+
@expiration = begin
21+
Aws.shared_config.expiration(profile: @session_profile)
22+
rescue StandardError
23+
nil
24+
end
25+
@credentials = begin
26+
Aws.shared_config.credentials(profile: @session_profile)
27+
rescue StandardError
28+
nil
29+
end
2230
refresh_if_near_expiration
2331
end
2432

2533
def refresh_if_near_expiration
26-
if near_expiration?(SYNC_EXPIRATION_LENGTH)
27-
@mutex.synchronize do
28-
if near_expiration?(SYNC_EXPIRATION_LENGTH)
29-
refresh
30-
write_credentials
31-
end
34+
return unless near_expiration?(SYNC_EXPIRATION_LENGTH)
35+
36+
@mutex.synchronize do
37+
if near_expiration?(SYNC_EXPIRATION_LENGTH)
38+
refresh
39+
write_credentials
3240
end
3341
end
3442
end
@@ -42,7 +50,8 @@ def write_credentials
4250
credentials_map = {
4351
'aws_access_key_id' => @credentials.access_key_id,
4452
'aws_secret_access_key' => @credentials.secret_access_key,
45-
'aws_session_token' => @credentials.session_token
53+
'aws_session_token' => @credentials.session_token,
54+
'expiration' => @expiration
4655
}
4756

4857
# Use the AWS CLI to set the credentials in the session profile

test/aws/google_test.rb

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272

7373
it 'creates credentials from a Google auth token' do
7474
@oauth_default.once
75-
system.times(4)
75+
system.times(5)
7676

7777
c = Aws::Google.new(config).credentials
7878
_(c.credentials.access_key_id).must_equal credentials[:access_key_id]
@@ -88,7 +88,7 @@
8888
.then.returns(JWT.encode({ email: 'email' }, ''))
8989
Google::Auth.stubs(:get_application_default).returns(m)
9090

91-
system.times(4)
91+
system.times(5)
9292

9393
c = Aws::Google.new(config).credentials
9494
_(c.credentials.access_key_id).must_equal credentials[:access_key_id]
@@ -108,14 +108,15 @@
108108
expiration = provider.expiration
109109
_(expiration).must_equal(provider.expiration)
110110
Timecop.travel(1.5.hours.from_now) do
111+
# This test is failing. I don't see where we'd be triggering a refresh, and some debugging sugguests the refresh logic is never called.
111112
_(expiration).wont_equal(provider.expiration)
112113
end
113114
end
114115

115116
it 'refreshes saved expired credentials' do
116117
config[:profile] = 'cdo-expired'
117118
@oauth_default.once
118-
system.times(4)
119+
system.times(5)
119120
Aws::Google.new(config).credentials
120121
end
121122

@@ -128,7 +129,7 @@
128129
it 'uses config defaults for new AWS clients' do
129130
Aws::Google.stubs(:config).returns(config)
130131
@oauth_default.once
131-
system.times(4)
132+
system.times(5)
132133
c = Aws::STS::Client.new.config.credentials
133134
_(c.credentials.access_key_id).must_equal credentials[:access_key_id]
134135
_(c.credentials.secret_access_key).must_equal credentials[:secret_access_key]
@@ -147,7 +148,7 @@
147148
end
148149

149150
it 'retries Google auth when invalid credentials are provided' do
150-
system.times(4)
151+
system.times(5)
151152
@oauth_default.once
152153
Aws::Google.any_instance.expects(:google_oauth).returns(oauth)
153154
Aws::Google.new(config).credentials
@@ -198,7 +199,7 @@
198199
end
199200

200201
it 'refreshes Google auth token when expired' do
201-
system.times(4)
202+
system.times(5)
202203
@oauth_default.once
203204
Aws::Google.any_instance.expects(:google_oauth).returns(oauth).once
204205
Aws::Google.new(config).credentials
@@ -218,7 +219,7 @@
218219
Aws::Google.stubs(:config).returns(config)
219220

220221
@oauth_default.once
221-
system.times(4)
222+
system.times(5)
222223

223224
c = Aws::STS::Client.new(region: 'us-east-1').config.credentials
224225
_(c.credentials.access_key_id).must_equal credentials[:access_key_id]

0 commit comments

Comments
 (0)