1 // Copyright 2012 The Chromium Authors
2 // 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
7 #include "testing/gtest/include/gtest/gtest.h"
8
9 namespace net {
10
11 namespace {
12
TEST(HttpRequestHeaders,HasHeader)13 TEST(HttpRequestHeaders, HasHeader) {
14 HttpRequestHeaders headers;
15 headers.SetHeader("Foo", "bar");
16 EXPECT_TRUE(headers.HasHeader("foo"));
17 EXPECT_TRUE(headers.HasHeader("Foo"));
18 EXPECT_FALSE(headers.HasHeader("Fo"));
19
20 const HttpRequestHeaders& headers_ref = headers;
21 EXPECT_TRUE(headers_ref.HasHeader("foo"));
22 EXPECT_TRUE(headers_ref.HasHeader("Foo"));
23 EXPECT_FALSE(headers_ref.HasHeader("Fo"));
24 }
25
TEST(HttpRequestHeaders,SetHeader)26 TEST(HttpRequestHeaders, SetHeader) {
27 HttpRequestHeaders headers;
28 headers.SetHeader("Foo", "bar");
29 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString());
30 }
31
TEST(HttpRequestHeaders,SetMultipleHeaders)32 TEST(HttpRequestHeaders, SetMultipleHeaders) {
33 HttpRequestHeaders headers;
34 headers.SetHeader("Cookie-Monster", "Nom nom nom");
35 headers.SetHeader("Domo-Kun", "Loves Chrome");
36 EXPECT_EQ("Cookie-Monster: Nom nom nom\r\nDomo-Kun: Loves Chrome\r\n\r\n",
37 headers.ToString());
38 }
39
TEST(HttpRequestHeaders,SetHeaderTwice)40 TEST(HttpRequestHeaders, SetHeaderTwice) {
41 HttpRequestHeaders headers;
42 headers.SetHeader("Foo", "bar");
43 headers.SetHeader("Foo", "bar");
44 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString());
45 }
46
TEST(HttpRequestHeaders,SetHeaderTwiceCaseInsensitive)47 TEST(HttpRequestHeaders, SetHeaderTwiceCaseInsensitive) {
48 HttpRequestHeaders headers;
49 headers.SetHeader("Foo", "bar");
50 headers.SetHeader("FoO", "Bar");
51 EXPECT_EQ("Foo: Bar\r\n\r\n", headers.ToString());
52 }
53
TEST(HttpRequestHeaders,SetHeaderTwiceSamePrefix)54 TEST(HttpRequestHeaders, SetHeaderTwiceSamePrefix) {
55 HttpRequestHeaders headers;
56 headers.SetHeader("FooBar", "baz");
57 headers.SetHeader("Foo", "qux");
58 EXPECT_EQ("FooBar: baz\r\nFoo: qux\r\n\r\n", headers.ToString());
59 const HttpRequestHeaders& headers_ref = headers;
60 EXPECT_EQ("FooBar: baz\r\nFoo: qux\r\n\r\n", headers_ref.ToString());
61 }
62
TEST(HttpRequestHeaders,SetEmptyHeader)63 TEST(HttpRequestHeaders, SetEmptyHeader) {
64 HttpRequestHeaders headers;
65 headers.SetHeader("Foo", "Bar");
66 headers.SetHeader("Bar", "");
67 EXPECT_EQ("Foo: Bar\r\nBar: \r\n\r\n", headers.ToString());
68 }
69
TEST(HttpRequestHeaders,SetHeaderIfMissing)70 TEST(HttpRequestHeaders, SetHeaderIfMissing) {
71 HttpRequestHeaders headers;
72 headers.SetHeaderIfMissing("Foo", "Bar");
73 EXPECT_EQ("Foo: Bar\r\n\r\n", headers.ToString());
74 headers.SetHeaderIfMissing("Foo", "Baz");
75 EXPECT_EQ("Foo: Bar\r\n\r\n", headers.ToString());
76 }
77
TEST(HttpRequestHeaders,RemoveHeader)78 TEST(HttpRequestHeaders, RemoveHeader) {
79 HttpRequestHeaders headers;
80 headers.SetHeader("Foo", "bar");
81 headers.RemoveHeader("Foo");
82 EXPECT_EQ("\r\n", headers.ToString());
83 }
84
TEST(HttpRequestHeaders,RemoveHeaderMissingHeader)85 TEST(HttpRequestHeaders, RemoveHeaderMissingHeader) {
86 HttpRequestHeaders headers;
87 headers.SetHeader("Foo", "bar");
88 headers.RemoveHeader("Bar");
89 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString());
90 }
91
TEST(HttpRequestHeaders,RemoveHeaderCaseInsensitive)92 TEST(HttpRequestHeaders, RemoveHeaderCaseInsensitive) {
93 HttpRequestHeaders headers;
94 headers.SetHeader("Foo", "bar");
95 headers.SetHeader("All-Your-Base", "Belongs To Chrome");
96 headers.RemoveHeader("foo");
97 EXPECT_EQ("All-Your-Base: Belongs To Chrome\r\n\r\n", headers.ToString());
98 }
99
TEST(HttpRequestHeaders,AddHeaderFromString)100 TEST(HttpRequestHeaders, AddHeaderFromString) {
101 HttpRequestHeaders headers;
102 headers.AddHeaderFromString("Foo: bar");
103 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString());
104 }
105
TEST(HttpRequestHeaders,AddHeaderFromStringNoLeadingWhitespace)106 TEST(HttpRequestHeaders, AddHeaderFromStringNoLeadingWhitespace) {
107 HttpRequestHeaders headers;
108 headers.AddHeaderFromString("Foo:bar");
109 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString());
110 }
111
TEST(HttpRequestHeaders,AddHeaderFromStringMoreLeadingWhitespace)112 TEST(HttpRequestHeaders, AddHeaderFromStringMoreLeadingWhitespace) {
113 HttpRequestHeaders headers;
114 headers.AddHeaderFromString("Foo: \t \t bar");
115 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString());
116 }
117
TEST(HttpRequestHeaders,AddHeaderFromStringTrailingWhitespace)118 TEST(HttpRequestHeaders, AddHeaderFromStringTrailingWhitespace) {
119 HttpRequestHeaders headers;
120 headers.AddHeaderFromString("Foo: bar \t \t ");
121 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString());
122 }
123
TEST(HttpRequestHeaders,AddHeaderFromStringLeadingTrailingWhitespace)124 TEST(HttpRequestHeaders, AddHeaderFromStringLeadingTrailingWhitespace) {
125 HttpRequestHeaders headers;
126 headers.AddHeaderFromString("Foo: \t bar\t ");
127 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString());
128 }
129
TEST(HttpRequestHeaders,AddHeaderFromStringWithEmptyValue)130 TEST(HttpRequestHeaders, AddHeaderFromStringWithEmptyValue) {
131 HttpRequestHeaders headers;
132 headers.AddHeaderFromString("Foo:");
133 EXPECT_EQ("Foo: \r\n\r\n", headers.ToString());
134 }
135
TEST(HttpRequestHeaders,AddHeaderFromStringWithWhitespaceValue)136 TEST(HttpRequestHeaders, AddHeaderFromStringWithWhitespaceValue) {
137 HttpRequestHeaders headers;
138 headers.AddHeaderFromString("Foo: ");
139 EXPECT_EQ("Foo: \r\n\r\n", headers.ToString());
140 }
141
TEST(HttpRequestHeaders,MergeFrom)142 TEST(HttpRequestHeaders, MergeFrom) {
143 HttpRequestHeaders headers;
144 headers.SetHeader("A", "A");
145 headers.SetHeader("B", "B");
146
147 HttpRequestHeaders headers2;
148 headers2.SetHeader("B", "b");
149 headers2.SetHeader("C", "c");
150 headers.MergeFrom(headers2);
151 EXPECT_EQ("A: A\r\nB: b\r\nC: c\r\n\r\n", headers.ToString());
152 }
153
TEST(HttpRequestHeaders,Assign)154 TEST(HttpRequestHeaders, Assign) {
155 HttpRequestHeaders headers;
156 headers.SetHeader("A", "A");
157 headers.SetHeader("B", "B");
158
159 HttpRequestHeaders headers2;
160 headers2.SetHeader("B", "b");
161 headers2.SetHeader("C", "c");
162 headers = headers2;
163 EXPECT_EQ("B: b\r\nC: c\r\n\r\n", headers.ToString());
164 }
165
TEST(HttpRequestHeaders,Copy)166 TEST(HttpRequestHeaders, Copy) {
167 HttpRequestHeaders headers;
168 headers.SetHeader("A", "A");
169 headers.SetHeader("B", "B");
170
171 HttpRequestHeaders headers2 = headers;
172 EXPECT_EQ(headers.ToString(), headers2.ToString());
173 }
174
175 } // namespace
176
177 } // namespace net
178