From 0f785006a33cbc9beec8acc90783a5b5cd987daa Mon Sep 17 00:00:00 2001 From: Vlad Yarotsky Date: Fri, 30 Jun 2017 13:13:11 -0700 Subject: [PATCH 1/2] Fix AWS credential mocking The change introduced in #252 does not actually prevent HTTP requests from being made because of a missing early return statement. --- lib/fog/aws/credential_fetcher.rb | 2 +- tests/credentials_tests.rb | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/fog/aws/credential_fetcher.rb b/lib/fog/aws/credential_fetcher.rb index 6bf467bc6e..05dc2f7057 100644 --- a/lib/fog/aws/credential_fetcher.rb +++ b/lib/fog/aws/credential_fetcher.rb @@ -11,7 +11,7 @@ module CredentialFetcher module ServiceMethods def fetch_credentials(options) if options[:use_iam_profile] && Fog.mocking? - Fog::Compute::AWS::Mock.data[:iam_role_based_creds] + return Fog::Compute::AWS::Mock.data[:iam_role_based_creds] end if options[:use_iam_profile] begin diff --git a/tests/credentials_tests.rb b/tests/credentials_tests.rb index e431db574c..4b911c910b 100644 --- a/tests/credentials_tests.rb +++ b/tests/credentials_tests.rb @@ -2,10 +2,9 @@ old_mock_value = Excon.defaults[:mock] fog_was_mocked = Fog.mocking? Excon.stubs.clear - Fog.mock! + Fog.unmock! begin Excon.defaults[:mock] = true - default_credentials = Fog::Compute::AWS.fetch_credentials({}) Excon.stub({:method => :get, :path => "/latest/meta-data/iam/security-credentials/"}, {:status => 200, :body => 'arole'}) Excon.stub({:method => :get, :path => "/latest/meta-data/placement/availability-zone/"}, {:status => 200, :body => 'us-west-1a'}) @@ -17,7 +16,6 @@ 'Expiration' => expires_at.xmlschema } - Fog::Compute::AWS::Mock.data[:iam_role_based_creds] = credentials Excon.stub({:method => :get, :path => "/latest/meta-data/iam/security-credentials/arole"}, {:status => 200, :body => Fog::JSON.encode(credentials)}) tests("#fetch_credentials") do @@ -60,16 +58,29 @@ end Fog::Time.now = Time.now + default_credentials = Fog::Compute::AWS.fetch_credentials({}) tests("#fetch_credentials when the url 404s") do Excon.stub({:method => :get, :path => "/latest/meta-data/iam/security-credentials/"}, {:status => 404, :body => 'not bound'}) Excon.stub({:method => :get, :path => "/latest/meta-data/placement/availability-zone/"}, {:status => 400, :body => 'not found'}) returns(default_credentials) {Fog::Compute::AWS.fetch_credentials(:use_iam_profile => true)} end + mocked_credentials = { + aws_access_key_id: "access-key-id", + aws_secret_access_key: "secret-access-key", + aws_session_token: "session-token", + aws_credentials_expire_at: Time.at(Time.now.to_i + 500).xmlschema + } + tests("#fetch_credentials when mocking") do + Fog.mock! + Fog::Compute::AWS::Mock.data[:iam_role_based_creds] = mocked_credentials + returns(mocked_credentials) {Fog::Compute::AWS.fetch_credentials(:use_iam_profile => true)} + end + ensure ENV["AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"] = nil Excon.stubs.clear Excon.defaults[:mock] = old_mock_value - Fog.unmock! if !fog_was_mocked + Fog.mock! if fog_was_mocked end end From e85c2c9d0fa13f58a92e33131490c34e35e2d767 Mon Sep 17 00:00:00 2001 From: Vlad Yarotsky Date: Fri, 30 Jun 2017 13:26:34 -0700 Subject: [PATCH 2/2] Ruby 1.8 compat --- tests/credentials_tests.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/credentials_tests.rb b/tests/credentials_tests.rb index 4b911c910b..f0eb1b242b 100644 --- a/tests/credentials_tests.rb +++ b/tests/credentials_tests.rb @@ -66,10 +66,10 @@ end mocked_credentials = { - aws_access_key_id: "access-key-id", - aws_secret_access_key: "secret-access-key", - aws_session_token: "session-token", - aws_credentials_expire_at: Time.at(Time.now.to_i + 500).xmlschema + :aws_access_key_id => "access-key-id", + :aws_secret_access_key => "secret-access-key", + :aws_session_token => "session-token", + :aws_credentials_expire_at => Time.at(Time.now.to_i + 500).xmlschema } tests("#fetch_credentials when mocking") do Fog.mock!