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:
parent
75e91ce668
commit
05040409d9
@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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");
|
||||
}
|
||||
|
||||
@ -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");
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user