From 57bdc0f6d6e485e3946e5f97872a7a4fe3387f60 Mon Sep 17 00:00:00 2001 From: Victor Vazquez Date: Mon, 13 Jul 2020 17:21:08 -0700 Subject: [PATCH] Adding toLower for header names and unit testd (#270) --- sdk/core/azure-core/src/http/request.cpp | 6 ++++-- sdk/core/azure-core/src/http/response.cpp | 3 +-- sdk/core/azure-core/test/ut/http.cpp | 17 +++++++++-------- sdk/core/azure-core/test/ut/string.cpp | 16 ++++++++++++++++ 4 files changed, 30 insertions(+), 12 deletions(-) diff --git a/sdk/core/azure-core/src/http/request.cpp b/sdk/core/azure-core/src/http/request.cpp index 7c75b70c4..3d82a15f5 100644 --- a/sdk/core/azure-core/src/http/request.cpp +++ b/sdk/core/azure-core/src/http/request.cpp @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // SPDX-License-Identifier: MIT +#include #include #include #include @@ -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(name, value)); + this->m_headers.insert(std::pair(headerNameLowerCase, value)); } } diff --git a/sdk/core/azure-core/src/http/response.cpp b/sdk/core/azure-core/src/http/response.cpp index abfe0dbb9..7d35ee372 100644 --- a/sdk/core/azure-core/src/http/response.cpp +++ b/sdk/core/azure-core/src/http/response.cpp @@ -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')) { diff --git a/sdk/core/azure-core/test/ut/http.cpp b/sdk/core/azure-core/test/ut/http.cpp index 5693d5e8b..2a340eedb 100644 --- a/sdk/core/azure-core/test/ut/http.cpp +++ b/sdk/core/azure-core/test/ut/http.cpp @@ -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"); } diff --git a/sdk/core/azure-core/test/ut/string.cpp b/sdk/core/azure-core/test/ut/string.cpp index 3d503d6d9..25ec75598 100644 --- a/sdk/core/azure-core/test/ut/string.cpp +++ b/sdk/core/azure-core/test/ut/string.cpp @@ -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"); +}