77#include < aws/testing/AwsTestHelpers.h>
88#include < aws/testing/mocks/aws/client/MockAWSClient.h>
99#include < aws/testing/mocks/http/MockHttpClient.h>
10+ #include < aws/testing/platform/PlatformTesting.h>
1011#include < aws/core/auth/AWSCredentialsProvider.h>
1112#include < aws/core/client/AWSClient.h>
1213#include < aws/core/utils/StringUtils.h>
13- #include < aws/core/platform/Environment.h>
1414
1515using namespace Aws ::Client;
1616using namespace Aws ::Auth;
1717using namespace Aws ::Http;
1818
1919static const char ALLOCATION_TAG[] = " CredentialTrackingTest" ;
2020
21+ // Custom client that uses environment credential provider for testing
22+ class CredentialTestingClient : public Aws ::Client::AWSClient
23+ {
24+ public:
25+ explicit CredentialTestingClient (const Aws::Client::ClientConfiguration& configuration)
26+ : AWSClient(configuration,
27+ Aws::MakeShared<Aws::Client::AWSAuthV4Signer>(ALLOCATION_TAG,
28+ Aws::MakeShared<EnvironmentAWSCredentialsProvider>(ALLOCATION_TAG),
29+ "service", configuration.region),
30+ Aws::MakeShared<MockAWSErrorMarshaller>(ALLOCATION_TAG))
31+ {
32+ }
33+
34+ Aws::Client::HttpResponseOutcome MakeRequest (const Aws::AmazonWebServiceRequest& request)
35+ {
36+ auto uri = Aws::Http::URI (" https://test.com" );
37+ return AWSClient::AttemptExhaustively (uri, request, Aws::Http::HttpMethod::HTTP_POST, Aws::Auth::SIGV4_SIGNER);
38+ }
39+
40+ const char * GetServiceClientName () const override { return " CredentialTestingClient" ; }
2141
42+ protected:
43+ Aws::Client::AWSError<Aws::Client::CoreErrors> BuildAWSError (const std::shared_ptr<Aws::Http::HttpResponse>& response) const override
44+ {
45+ AWS_UNREFERENCED_PARAM (response);
46+ return Aws::Client::AWSError<Aws::Client::CoreErrors>(Aws::Client::CoreErrors::UNKNOWN, false );
47+ }
48+ };
2249
2350class CredentialTrackingTest : public Aws ::Testing::AwsCppSdkGTestSuite
2451{
@@ -46,12 +73,14 @@ class CredentialTrackingTest : public Aws::Testing::AwsCppSdkGTestSuite
4673
4774TEST_F (CredentialTrackingTest, TestEnvironmentCredentialsTracking)
4875{
49- Aws::Environment::SetEnv (" AWS_ACCESS_KEY_ID" , " test-access-key" , 1 );
50- Aws::Environment::SetEnv (" AWS_SECRET_ACCESS_KEY" , " test-secret-key" , 1 );
76+ Aws::Environment::EnvironmentRAII testEnvironment{{
77+ {" AWS_ACCESS_KEY_ID" , " test-access-key" },
78+ {" AWS_SECRET_ACCESS_KEY" , " test-secret-key" },
79+ }};
5180
5281 // Setup mock response
5382 std::shared_ptr<HttpRequest> requestTmp =
54- CreateHttpRequest (Aws::Http::URI (" dummy" ), Aws::Http::HttpMethod::HTTP_POST,
83+ CreateHttpRequest (Aws::Http::URI (" dummy" ), Aws::Http::HttpMethod::HTTP_POST,
5584 Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
5685 auto successResponse = Aws::MakeShared<Standard::StandardHttpResponse>(ALLOCATION_TAG, requestTmp);
5786 successResponse->SetResponseCode (HttpResponseCode::OK);
@@ -64,22 +93,20 @@ TEST_F(CredentialTrackingTest, TestEnvironmentCredentialsTracking)
6493 Aws::Client::ClientConfiguration clientConfig (cfgInit);
6594 clientConfig.region = Aws::Region::US_EAST_1;
6695
67- // Create client with environment credentials signer
68- Aws::Client::AWSClient client (clientConfig,
69- Aws::MakeShared<Aws::Client::AWSAuthV4Signer>(ALLOCATION_TAG,
70- Aws::MakeShared<EnvironmentAWSCredentialsProvider>(ALLOCATION_TAG),
71- " service" , clientConfig.region ),
72- Aws::MakeShared<MockAWSErrorMarshaller>(ALLOCATION_TAG));
73-
96+ // Create credential testing client that uses default provider chain
97+ CredentialTestingClient client (clientConfig);
98+
99+ // Create mock request
74100 AmazonWebServiceRequestMock mockRequest;
75- auto outcome = client.AttemptExhaustively (Aws::Http::URI (" https://test.com" ), mockRequest,
76- Aws::Http::HttpMethod::HTTP_POST, Aws::Auth::SIGV4_SIGNER);
77- AWS_ASSERT_SUCCESS (outcome);
101+
102+ // Make request
103+ auto outcome = client.MakeRequest (mockRequest);
104+ ASSERT_TRUE (outcome.IsSuccess ());
78105
79106 // Verify User-Agent contains environment credentials tracking
80107 auto lastRequest = mockHttpClient->GetMostRecentHttpRequest ();
81- EXPECT_TRUE (lastRequest.HasUserAgent ( ));
82- const auto & userAgent = lastRequest.GetUserAgent ( );
108+ EXPECT_TRUE (lastRequest.HasHeader (Aws::Http::USER_AGENT_HEADER ));
109+ const auto & userAgent = lastRequest.GetHeaderValue (Aws::Http::USER_AGENT_HEADER );
83110 EXPECT_FALSE (userAgent.empty ());
84111
85112 const auto userAgentParsed = Aws::Utils::StringUtils::Split (userAgent, ' ' );
@@ -89,7 +116,4 @@ TEST_F(CredentialTrackingTest, TestEnvironmentCredentialsTracking)
89116 [](const Aws::String& value) { return value.find (" m/" ) != Aws::String::npos && value.find (" g" ) != Aws::String::npos; });
90117
91118 EXPECT_TRUE (businessMetrics != userAgentParsed.end ());
92-
93- Aws::Environment::UnSetEnv (" AWS_ACCESS_KEY_ID" );
94- Aws::Environment::UnSetEnv (" AWS_SECRET_ACCESS_KEY" );
95- }
119+ }
0 commit comments