Adding toLower for header names and unit testd (#270)

This commit is contained in:
Victor Vazquez 2020-07-13 17:21:08 -07:00 committed by GitHub
parent 59d7ebabe1
commit 57bdc0f6d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 30 additions and 12 deletions

View File

@ -1,6 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// SPDX-License-Identifier: MIT
#include <azure.hpp>
#include <http/http.hpp>
#include <map>
#include <string>
@ -25,14 +26,15 @@ void Request::AddQueryParameter(std::string const& name, std::string const& valu
void Request::AddHeader(std::string const& name, std::string const& value)
{
auto headerNameLowerCase = Azure::Core::Details::ToLower(name);
if (this->m_retryModeEnabled)
{
// When retry mode is ON, any new value must override previous
this->m_retryHeaders[name] = value;
this->m_retryHeaders[headerNameLowerCase] = value;
}
else
{
this->m_headers.insert(std::pair<std::string, std::string>(name, value));
this->m_headers.insert(std::pair<std::string, std::string>(headerNameLowerCase, value));
}
}

View File

@ -30,8 +30,7 @@ void Response::AddHeader(uint8_t const* const begin, uint8_t const* const last)
}
// Always toLower() headers
// auto headerName = Azure::Core::Details::ToLower(std::string(start, end));
auto headerName = std::string(start, end);
auto headerName = Azure::Core::Details::ToLower(std::string(start, end));
start = end + 1; // start value
while (start < last && (*start == ' ' || *start == '\t'))
{

View File

@ -19,11 +19,12 @@ TEST(Http_Request, getters)
[](Http::HttpMethod a, Http::HttpMethod b) { return a == b; }, req.GetMethod(), httpMethod);
EXPECT_PRED2([](std::string a, std::string b) { return a == b; }, req.GetEncodedUrl(), url);
EXPECT_NO_THROW(req.AddHeader("name", "value"));
EXPECT_NO_THROW(req.AddHeader("name2", "value2"));
EXPECT_NO_THROW(req.AddHeader("Name", "value"));
EXPECT_NO_THROW(req.AddHeader("naME2", "value2"));
auto headers = req.GetHeaders();
// Headers should be lower-cased
EXPECT_TRUE(headers.count("name"));
EXPECT_TRUE(headers.count("name2"));
EXPECT_FALSE(headers.count("newHeader"));
@ -36,21 +37,21 @@ TEST(Http_Request, getters)
// now add to retry headers
req.StartRetry();
// same headers first, then one new
EXPECT_NO_THROW(req.AddHeader("name", "retryValue"));
EXPECT_NO_THROW(req.AddHeader("name2", "retryValue2"));
EXPECT_NO_THROW(req.AddHeader("namE", "retryValue"));
EXPECT_NO_THROW(req.AddHeader("HEADER-to-Lower-123", "retryValue2"));
EXPECT_NO_THROW(req.AddHeader("newHeader", "new"));
headers = req.GetHeaders();
EXPECT_TRUE(headers.count("name"));
EXPECT_TRUE(headers.count("name2"));
EXPECT_TRUE(headers.count("newHeader"));
EXPECT_TRUE(headers.count("header-to-lower-123"));
EXPECT_TRUE(headers.count("newheader"));
value = headers.find("name");
EXPECT_PRED2([](std::string a, std::string b) { return a == b; }, value->second, "retryValue");
value2 = headers.find("name2");
value2 = headers.find("header-to-lower-123");
EXPECT_PRED2([](std::string a, std::string b) { return a == b; }, value2->second, "retryValue2");
auto value3 = headers.find("newHeader");
auto value3 = headers.find("newheader");
EXPECT_PRED2([](std::string a, std::string b) { return a == b; }, value3->second, "new");
}

View File

@ -19,3 +19,19 @@ TEST(String, invariantCompare)
EXPECT_FALSE(LocaleInvariantCaseInsensitiveEqual("a", "aA"));
EXPECT_FALSE(LocaleInvariantCaseInsensitiveEqual("abc", "abcd"));
}
TEST(String, toLower)
{
using Azure::Core::Details::ToLower;
EXPECT_TRUE(ToLower("") == "");
EXPECT_TRUE(ToLower("a") == "a");
EXPECT_TRUE(ToLower("A") == "a");
EXPECT_TRUE(ToLower("AA") == "aa");
EXPECT_TRUE(ToLower("aA") == "aa");
EXPECT_TRUE(ToLower("ABC") == "abc");
EXPECT_TRUE(ToLower("ABC-1-,!@#$%^&*()_+=ABC") == "abc-1-,!@#$%^&*()_+=abc");
EXPECT_FALSE(ToLower("") == "a");
EXPECT_FALSE(ToLower("a") == "");
EXPECT_FALSE(ToLower("a") == "aA");
EXPECT_FALSE(ToLower("abc") == "abcd");
}