1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
#include "server/proxy.h"
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "util/testing.h"
using cert_trans::FilterHeaders;
using cert_trans::UrlFetcher;
using std::make_pair;
using std::shared_ptr;
using std::string;
class ProxyTest : public ::testing::Test {};
TEST_F(ProxyTest, TestFilterHeadersLeavesUnrelatedHeadersAlone) {
UrlFetcher::Headers headers;
headers.insert(make_pair("one", "1"));
headers.insert(make_pair("two", "2"));
headers.insert(make_pair("three", "3"));
headers.insert(make_pair("four", "4"));
UrlFetcher::Headers response(headers);
FilterHeaders(&response);
EXPECT_EQ(headers, response);
}
string GetAll(const UrlFetcher::Headers& headers, const string& key) {
const auto range(headers.equal_range(key));
std::string ret;
for (auto it(range.first); it != range.second; ++it) {
if (!ret.empty()) {
ret += ", ";
}
ret += it->second;
}
return ret;
}
TEST_F(ProxyTest, TestFilterHeadersRemovesReferencedHeaders) {
UrlFetcher::Headers expected;
expected.insert(make_pair("one", "1"));
expected.insert(make_pair("four", "4"));
UrlFetcher::Headers response(expected);
response.insert(make_pair("two", "2"));
response.insert(make_pair("three", "3"));
response.insert(make_pair("Connection", "two, three, wibble"));
FilterHeaders(&response);
EXPECT_EQ(expected.size(), response.size());
EXPECT_EQ(GetAll(expected, "one"), GetAll(response, "one"));
EXPECT_EQ(GetAll(expected, "four"), GetAll(response, "four"));
}
TEST_F(ProxyTest, TestFilterHeadersHandlesMultipleReferencedHeaders) {
UrlFetcher::Headers expected;
expected.insert(make_pair("one", "1a"));
expected.insert(make_pair("four", "4"));
UrlFetcher::Headers response(expected);
response.insert(make_pair("two", "2a"));
response.insert(make_pair("two", "2b"));
response.insert(make_pair("three", "3"));
response.insert(make_pair("Connection", "two, three, wibble"));
FilterHeaders(&response);
EXPECT_EQ(expected.size(), response.size());
EXPECT_EQ(GetAll(expected, "one"), GetAll(response, "one"));
EXPECT_EQ(GetAll(expected, "four"), GetAll(response, "four"));
}
TEST_F(ProxyTest, TestFilterHeadersHandlesMultipleConnectionHeaders) {
UrlFetcher::Headers expected;
expected.insert(make_pair("one", "1a"));
expected.insert(make_pair("four", "4"));
UrlFetcher::Headers response(expected);
response.insert(make_pair("two", "2"));
response.insert(make_pair("three", "3"));
response.insert(make_pair("Connection", "two"));
response.insert(make_pair("Connection", "three"));
response.insert(make_pair("Connection", "wibble"));
FilterHeaders(&response);
EXPECT_EQ(expected.size(), response.size());
EXPECT_EQ(GetAll(expected, "one"), GetAll(response, "one"));
EXPECT_EQ(GetAll(expected, "four"), GetAll(response, "four"));
}
int main(int argc, char** argv) {
cert_trans::test::InitTesting(argv[0], &argc, &argv, true);
return RUN_ALL_TESTS();
}
|