blob: a321427253f872a27b379836c69266d95d3958d5 [file] [log] [blame]
[email protected]3abacd62012-06-10 20:20:321// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]270c6412010-03-29 22:02:472// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "net/http/http_request_headers.h"
6
danakj1fd259a02016-04-16 03:17:097#include <memory>
8
[email protected]3abacd62012-06-10 20:20:329#include "base/values.h"
mikecironef22f9812016-10-04 03:40:1910#include "net/log/net_log_capture_mode.h"
[email protected]270c6412010-03-29 22:02:4711#include "testing/gtest/include/gtest/gtest.h"
12
13namespace net {
14
15namespace {
16
[email protected]8c76ae22010-04-20 22:15:4317TEST(HttpRequestHeaders, HasHeader) {
[email protected]270c6412010-03-29 22:02:4718 HttpRequestHeaders headers;
[email protected]8c76ae22010-04-20 22:15:4319 headers.SetHeader("Foo", "bar");
20 EXPECT_TRUE(headers.HasHeader("foo"));
21 EXPECT_TRUE(headers.HasHeader("Foo"));
22 EXPECT_FALSE(headers.HasHeader("Fo"));
23
24 const HttpRequestHeaders& headers_ref = headers;
25 EXPECT_TRUE(headers_ref.HasHeader("foo"));
26 EXPECT_TRUE(headers_ref.HasHeader("Foo"));
27 EXPECT_FALSE(headers_ref.HasHeader("Fo"));
[email protected]270c6412010-03-29 22:02:4728}
29
30TEST(HttpRequestHeaders, SetHeader) {
31 HttpRequestHeaders headers;
32 headers.SetHeader("Foo", "bar");
33 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString());
34}
35
36TEST(HttpRequestHeaders, SetMultipleHeaders) {
37 HttpRequestHeaders headers;
38 headers.SetHeader("Cookie-Monster", "Nom nom nom");
39 headers.SetHeader("Domo-Kun", "Loves Chrome");
40 EXPECT_EQ("Cookie-Monster: Nom nom nom\r\nDomo-Kun: Loves Chrome\r\n\r\n",
41 headers.ToString());
42}
43
44TEST(HttpRequestHeaders, SetHeaderTwice) {
45 HttpRequestHeaders headers;
46 headers.SetHeader("Foo", "bar");
47 headers.SetHeader("Foo", "bar");
48 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString());
49}
50
51TEST(HttpRequestHeaders, SetHeaderTwiceCaseInsensitive) {
52 HttpRequestHeaders headers;
53 headers.SetHeader("Foo", "bar");
54 headers.SetHeader("FoO", "Bar");
55 EXPECT_EQ("Foo: Bar\r\n\r\n", headers.ToString());
56}
57
58TEST(HttpRequestHeaders, SetHeaderTwiceSamePrefix) {
59 HttpRequestHeaders headers;
Zhongyi Shi22ab9312020-07-16 13:24:3260 headers.SetHeader("FooBar", "baz");
61 headers.SetHeader("Foo", "qux");
62 EXPECT_EQ("FooBar: baz\r\nFoo: qux\r\n\r\n", headers.ToString());
[email protected]8c76ae22010-04-20 22:15:4363 const HttpRequestHeaders& headers_ref = headers;
Zhongyi Shi22ab9312020-07-16 13:24:3264 EXPECT_EQ("FooBar: baz\r\nFoo: qux\r\n\r\n", headers_ref.ToString());
[email protected]270c6412010-03-29 22:02:4765}
66
67TEST(HttpRequestHeaders, SetEmptyHeader) {
68 HttpRequestHeaders headers;
69 headers.SetHeader("Foo", "Bar");
70 headers.SetHeader("Bar", "");
Matt Menke444d67b2018-10-05 22:19:3571 EXPECT_EQ("Foo: Bar\r\nBar: \r\n\r\n", headers.ToString());
[email protected]270c6412010-03-29 22:02:4772}
73
[email protected]50ba404b2011-01-21 13:38:4574TEST(HttpRequestHeaders, SetHeaderIfMissing) {
75 HttpRequestHeaders headers;
76 headers.SetHeaderIfMissing("Foo", "Bar");
77 EXPECT_EQ("Foo: Bar\r\n\r\n", headers.ToString());
78 headers.SetHeaderIfMissing("Foo", "Baz");
79 EXPECT_EQ("Foo: Bar\r\n\r\n", headers.ToString());
80}
81
[email protected]270c6412010-03-29 22:02:4782TEST(HttpRequestHeaders, RemoveHeader) {
83 HttpRequestHeaders headers;
84 headers.SetHeader("Foo", "bar");
85 headers.RemoveHeader("Foo");
86 EXPECT_EQ("\r\n", headers.ToString());
87}
88
89TEST(HttpRequestHeaders, RemoveHeaderMissingHeader) {
90 HttpRequestHeaders headers;
91 headers.SetHeader("Foo", "bar");
92 headers.RemoveHeader("Bar");
93 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString());
94}
95
96TEST(HttpRequestHeaders, RemoveHeaderCaseInsensitive) {
97 HttpRequestHeaders headers;
98 headers.SetHeader("Foo", "bar");
99 headers.SetHeader("All-Your-Base", "Belongs To Chrome");
100 headers.RemoveHeader("foo");
101 EXPECT_EQ("All-Your-Base: Belongs To Chrome\r\n\r\n", headers.ToString());
102}
103
104TEST(HttpRequestHeaders, AddHeaderFromString) {
105 HttpRequestHeaders headers;
106 headers.AddHeaderFromString("Foo: bar");
107 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString());
108}
109
110TEST(HttpRequestHeaders, AddHeaderFromStringNoLeadingWhitespace) {
111 HttpRequestHeaders headers;
112 headers.AddHeaderFromString("Foo:bar");
113 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString());
114}
115
116TEST(HttpRequestHeaders, AddHeaderFromStringMoreLeadingWhitespace) {
117 HttpRequestHeaders headers;
118 headers.AddHeaderFromString("Foo: \t \t bar");
119 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString());
120}
121
122TEST(HttpRequestHeaders, AddHeaderFromStringTrailingWhitespace) {
123 HttpRequestHeaders headers;
124 headers.AddHeaderFromString("Foo: bar \t \t ");
125 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString());
126}
127
128TEST(HttpRequestHeaders, AddHeaderFromStringLeadingTrailingWhitespace) {
129 HttpRequestHeaders headers;
130 headers.AddHeaderFromString("Foo: \t bar\t ");
131 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString());
132}
133
134TEST(HttpRequestHeaders, AddHeaderFromStringWithEmptyValue) {
135 HttpRequestHeaders headers;
136 headers.AddHeaderFromString("Foo:");
Matt Menke444d67b2018-10-05 22:19:35137 EXPECT_EQ("Foo: \r\n\r\n", headers.ToString());
[email protected]270c6412010-03-29 22:02:47138}
139
140TEST(HttpRequestHeaders, AddHeaderFromStringWithWhitespaceValue) {
141 HttpRequestHeaders headers;
142 headers.AddHeaderFromString("Foo: ");
Matt Menke444d67b2018-10-05 22:19:35143 EXPECT_EQ("Foo: \r\n\r\n", headers.ToString());
[email protected]270c6412010-03-29 22:02:47144}
145
146TEST(HttpRequestHeaders, MergeFrom) {
147 HttpRequestHeaders headers;
148 headers.SetHeader("A", "A");
149 headers.SetHeader("B", "B");
150
151 HttpRequestHeaders headers2;
152 headers2.SetHeader("B", "b");
153 headers2.SetHeader("C", "c");
154 headers.MergeFrom(headers2);
155 EXPECT_EQ("A: A\r\nB: b\r\nC: c\r\n\r\n", headers.ToString());
156}
157
[email protected]8c76ae22010-04-20 22:15:43158TEST(HttpRequestHeaders, CopyFrom) {
159 HttpRequestHeaders headers;
160 headers.SetHeader("A", "A");
161 headers.SetHeader("B", "B");
162
163 HttpRequestHeaders headers2;
164 headers2.SetHeader("B", "b");
165 headers2.SetHeader("C", "c");
166 headers.CopyFrom(headers2);
167 EXPECT_EQ("B: b\r\nC: c\r\n\r\n", headers.ToString());
168}
169
[email protected]270c6412010-03-29 22:02:47170} // namespace
171
172} // namespace net