Add a function in NetworkCommon parseHeaderList which parses a header list as a string into a vector of header pairs (#2623)

This commit is contained in:
pajlada
2021-04-17 13:49:19 +02:00
committed by GitHub
parent cceadf473a
commit 2f906c5504
9 changed files with 119 additions and 11 deletions
+2
View File
@@ -9,6 +9,7 @@ set(chatterino_SOURCES
${CMAKE_SOURCE_DIR}/src/common/ChatterinoSetting.cpp
${CMAKE_SOURCE_DIR}/src/common/Modes.cpp
${CMAKE_SOURCE_DIR}/src/common/NetworkCommon.cpp
${CMAKE_SOURCE_DIR}/src/common/NetworkManager.cpp
${CMAKE_SOURCE_DIR}/src/common/NetworkPrivate.cpp
${CMAKE_SOURCE_DIR}/src/common/NetworkRequest.cpp
@@ -35,6 +36,7 @@ set(chatterino_SOURCES
set(test_SOURCES
${CMAKE_CURRENT_LIST_DIR}/src/main.cpp
${CMAKE_CURRENT_LIST_DIR}/src/NetworkCommon.cpp
${CMAKE_CURRENT_LIST_DIR}/src/NetworkRequest.cpp
${CMAKE_CURRENT_LIST_DIR}/src/UsernameSet.cpp
${CMAKE_CURRENT_LIST_DIR}/src/HighlightPhrase.cpp
+59
View File
@@ -0,0 +1,59 @@
#include "common/NetworkCommon.hpp"
#include <gtest/gtest.h>
using namespace chatterino;
TEST(NetworkCommon, parseHeaderList1)
{
const QString input = "Authorization:secretKey;NextHeader:boo";
const std::vector<std::pair<QByteArray, QByteArray>> expected = {
{"Authorization", "secretKey"},
{"NextHeader", "boo"},
};
const auto actual = parseHeaderList(input);
ASSERT_EQ(expected, actual);
}
TEST(NetworkCommon, parseHeaderListTrimmed)
{
const QString input = "Authorization: secretKey; NextHeader :boo";
const std::vector<std::pair<QByteArray, QByteArray>> expected = {
{"Authorization", "secretKey"},
{"NextHeader", "boo"},
};
const auto actual = parseHeaderList(input);
ASSERT_EQ(expected, actual);
}
TEST(NetworkCommon, parseHeaderListColonInValue)
{
// The input values first header pair contains an invalid value, too many colons. We expect this value to be skipped
const QString input = "Authorization: secretKey:hehe; NextHeader :boo";
const std::vector<std::pair<QByteArray, QByteArray>> expected = {
{"Authorization", "secretKey:hehe"},
{"NextHeader", "boo"},
};
const auto actual = parseHeaderList(input);
ASSERT_EQ(expected, actual);
}
TEST(NetworkCommon, parseHeaderListBadPair)
{
// The input values first header pair doesn't have a colon, so we don't know where the header name and value start/end
const QString input = "Authorization secretKeybad; NextHeader :boo";
const std::vector<std::pair<QByteArray, QByteArray>> expected = {
{"NextHeader", "boo"},
};
const auto actual = parseHeaderList(input);
ASSERT_EQ(expected, actual);
ASSERT_EQ(1, actual.size());
}