Policies do not overwrite HTTP headers if they are already set (#4303)

* Policies do not overwrite HTTP headers if they are already set

* Use static constant UserAgent

---------

Co-authored-by: Anton Kolesnyk <antkmsft@users.noreply.github.com>
This commit is contained in:
Anton Kolesnyk 2023-01-31 17:58:48 -08:00 committed by GitHub
parent 75e91ce668
commit 05040409d9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 54 additions and 3 deletions

View File

@ -430,9 +430,12 @@ namespace Azure { namespace Core { namespace Http { namespace Policies {
NextHttpPolicy nextPolicy,
Context const& context) const override
{
auto uuid = Uuid::CreateUuid().ToString();
if (!request.GetHeader(RequestIdHeader).HasValue())
{
auto const uuid = Uuid::CreateUuid().ToString();
request.SetHeader(RequestIdHeader, uuid);
}
request.SetHeader(RequestIdHeader, uuid);
return nextPolicy.Send(request, context);
}
};

View File

@ -13,6 +13,12 @@ std::unique_ptr<RawResponse> Azure::Core::Http::Policies::_internal::TelemetryPo
NextHttpPolicy nextPolicy,
Context const& context) const
{
request.SetHeader("User-Agent", m_telemetryId);
static std::string const UserAgent{"User-Agent"};
if (!request.GetHeader(UserAgent).HasValue())
{
request.SetHeader(UserAgent, m_telemetryId);
}
return nextPolicy.Send(request, context);
}

View File

@ -92,3 +92,24 @@ TEST(RequestIdPolicy, Unique)
EXPECT_NE(guid1, guid2);
}
TEST(RequestIdPolicy, NoOverwrite)
{
Request request(HttpMethod::Get, Url("https://www.microsoft.com"));
request.SetHeader("x-ms-client-request-id", "0123-45-67-89-abcdef");
{
std::vector<std::unique_ptr<Azure::Core::Http::Policies::HttpPolicy>> policies;
policies.emplace_back(std::make_unique<RequestIdPolicy>());
policies.emplace_back(std::make_unique<NoOpPolicy>());
Azure::Core::Http::_internal::HttpPipeline(policies).Send(request, Azure::Core::Context());
}
auto const headers = request.GetHeaders();
auto const requestIdHeader = headers.find("x-ms-client-request-id");
EXPECT_NE(requestIdHeader, headers.end());
EXPECT_EQ(requestIdHeader->second, "0123-45-67-89-abcdef");
}

View File

@ -85,3 +85,24 @@ TEST(TelemetryPolicy, telemetryString)
EXPECT_EQ(actualValue.substr(0, test.expectedPrefix.size()), test.expectedPrefix);
}
}
TEST(TelemetryPolicy, NoOverwrite)
{
Request request(HttpMethod::Get, Url("https://www.microsoft.com"));
request.SetHeader("User-Agent", "do not touch");
{
std::vector<std::unique_ptr<Azure::Core::Http::Policies::HttpPolicy>> policies;
policies.emplace_back(std::make_unique<TelemetryPolicy>("test", "1.0.0"));
policies.emplace_back(std::make_unique<NoOpPolicy>());
Azure::Core::Http::_internal::HttpPipeline(policies).Send(request, Azure::Core::Context());
}
auto const headers = request.GetHeaders();
auto const requestIdHeader = headers.find("User-Agent");
EXPECT_NE(requestIdHeader, headers.end());
EXPECT_EQ(requestIdHeader->second, "do not touch");
}