Skip to content

Commit 10c5b71

Browse files
committed
fix honoring overriden user agent
1 parent 6c59b30 commit 10c5b71

File tree

3 files changed

+42
-1
lines changed

3 files changed

+42
-1
lines changed

src/aws-cpp-sdk-core/include/aws/core/client/UserAgent.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class AWS_CORE_API UserAgent {
5353
const Aws::String m_retryStrategyName;
5454
const Aws::String m_execEnv;
5555
const Aws::String m_appId;
56+
const Aws::String m_overrideUserAgent;
5657
const Aws::String m_customizations;
5758
Aws::Set<UserAgentFeature> m_features;
5859
};

src/aws-cpp-sdk-core/source/client/UserAgent.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@ UserAgent::UserAgent(const ClientConfiguration& clientConfiguration,
109109
m_compilerMetadata{FilterUserAgentToken(Version::GetCompilerVersionString())},
110110
m_retryStrategyName{retryStrategyName},
111111
m_execEnv{FilterUserAgentToken(Aws::Environment::GetEnv(EXEC_ENV_VAR).c_str())},
112-
m_appId{FilterUserAgentToken(clientConfiguration.appId.c_str())}
112+
m_appId{FilterUserAgentToken(clientConfiguration.appId.c_str())},
113+
m_overrideUserAgent{clientConfiguration.userAgent}
113114
#if defined(AWS_USER_AGENT_CUSTOMIZATION)
114115
#define XSTR(V) STR(V)
115116
#define STR(V) #V
@@ -125,6 +126,10 @@ UserAgent::UserAgent(const ClientConfiguration& clientConfiguration,
125126
}
126127

127128
Aws::String UserAgent::SerializeWithFeatures(const Aws::Set<UserAgentFeature>& features) const {
129+
if (!m_overrideUserAgent.empty()) {
130+
return m_overrideUserAgent;
131+
}
132+
128133
// Need to be in order
129134
Aws::StringStream userAgentValue;
130135

tests/aws-cpp-sdk-s3-unit-tests/S3UnitTests.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,41 @@ TEST_F(S3UnitTest, PutObjectShouldHaveCorrectUserAgent) {
378378
EXPECT_TRUE(archMetadata < businessMetrics);
379379
}
380380

381+
TEST_F(S3UnitTest, PutObjectShouldOverrideUserAgent) {
382+
auto request = PutObjectRequest()
383+
.WithBucket("ocelot")
384+
.WithKey("revolver");
385+
386+
std::shared_ptr<IOStream> body = Aws::MakeShared<StringStream>(ALLOCATION_TAG, "lalilulelo");
387+
request.SetBody(body);
388+
389+
auto mockRequest = Aws::MakeShared<Standard::StandardHttpRequest>(ALLOCATION_TAG, "major.com/zero", HttpMethod::HTTP_PUT);
390+
mockRequest->SetResponseStreamFactory([]() -> IOStream* {
391+
return Aws::New<StringStream>(ALLOCATION_TAG, "", std::ios_base::in | std::ios_base::binary);
392+
});
393+
auto mockResponse = Aws::MakeShared<Standard::StandardHttpResponse>(ALLOCATION_TAG, mockRequest);
394+
mockResponse->SetResponseCode(HttpResponseCode::OK);
395+
396+
_mockHttpClient->AddResponseToReturn(mockResponse);
397+
398+
const AWSCredentials credentials{"mock", "credentials"};
399+
const auto epProvider = Aws::MakeShared<S3EndpointProvider>(ALLOCATION_TAG);
400+
S3ClientConfiguration configuration{};
401+
configuration.region = "us-east-1";
402+
configuration.retryStrategy = Aws::MakeShared<NoRetry>(ALLOCATION_TAG);
403+
configuration.userAgent = "youre-pretty-good";
404+
const S3Client customerUaClient{configuration};
405+
406+
const auto response =customerUaClient.PutObject(request);
407+
EXPECT_TRUE(response.IsSuccess());
408+
409+
const auto requestSeen = _mockHttpClient->GetMostRecentHttpRequest();
410+
EXPECT_TRUE(requestSeen.HasUserAgent());
411+
const auto& userAgent = requestSeen.GetUserAgent();
412+
EXPECT_TRUE(!userAgent.empty());
413+
EXPECT_EQ("youre-pretty-good", userAgent);
414+
}
415+
381416
TEST_F(S3UnitTest, PutObjectS3ExpressShouldHaveJMetric) {
382417
auto request = PutObjectRequest()
383418
.WithBucket("o-worthy-heart--usw2-az1--x-s3") // S3Express bucket pattern

0 commit comments

Comments
 (0)