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