xref: /aosp_15_r20/external/cronet/net/http/http_request_headers_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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