OLD | NEW |
| (Empty) |
1 // Copyright (c) 2006-2008 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 <algorithm> | |
6 | |
7 #include "net/http/http_request_info.h" | |
8 #include "net/http/http_response_headers.h" | |
9 #include "net/http/http_vary_data.h" | |
10 #include "testing/gtest/include/gtest/gtest.h" | |
11 | |
12 namespace { | |
13 | |
14 typedef testing::Test HttpVaryDataTest; | |
15 | |
16 struct TestTransaction { | |
17 net::HttpRequestInfo request; | |
18 scoped_refptr<net::HttpResponseHeaders> response; | |
19 | |
20 void Init(const std::string& request_headers, | |
21 const std::string& response_headers) { | |
22 std::string temp(response_headers); | |
23 std::replace(temp.begin(), temp.end(), '\n', '\0'); | |
24 response = new net::HttpResponseHeaders(temp); | |
25 | |
26 request.extra_headers.Clear(); | |
27 request.extra_headers.AddHeadersFromString(request_headers); | |
28 } | |
29 }; | |
30 | |
31 } // namespace | |
32 | |
33 TEST(HttpVaryDataTest, IsInvalid) { | |
34 // All of these responses should result in an invalid vary data object. | |
35 const char* const kTestResponses[] = { | |
36 "HTTP/1.1 200 OK\n\n", | |
37 "HTTP/1.1 200 OK\nVary: *\n\n", | |
38 "HTTP/1.1 200 OK\nVary: cookie, *, bar\n\n", | |
39 "HTTP/1.1 200 OK\nVary: cookie\nFoo: 1\nVary: *\n\n", | |
40 }; | |
41 | |
42 for (size_t i = 0; i < arraysize(kTestResponses); ++i) { | |
43 TestTransaction t; | |
44 t.Init(std::string(), kTestResponses[i]); | |
45 | |
46 net::HttpVaryData v; | |
47 EXPECT_FALSE(v.is_valid()); | |
48 EXPECT_FALSE(v.Init(t.request, *t.response.get())); | |
49 EXPECT_FALSE(v.is_valid()); | |
50 } | |
51 } | |
52 | |
53 TEST(HttpVaryDataTest, MultipleInit) { | |
54 net::HttpVaryData v; | |
55 | |
56 // Init to something valid. | |
57 TestTransaction t1; | |
58 t1.Init("Foo: 1\r\nbar: 23", "HTTP/1.1 200 OK\nVary: foo, bar\n\n"); | |
59 EXPECT_TRUE(v.Init(t1.request, *t1.response.get())); | |
60 EXPECT_TRUE(v.is_valid()); | |
61 | |
62 // Now overwrite by initializing to something invalid. | |
63 TestTransaction t2; | |
64 t2.Init("Foo: 1\r\nbar: 23", "HTTP/1.1 200 OK\nVary: *\n\n"); | |
65 EXPECT_FALSE(v.Init(t2.request, *t2.response.get())); | |
66 EXPECT_FALSE(v.is_valid()); | |
67 } | |
68 | |
69 TEST(HttpVaryDataTest, DoesVary) { | |
70 TestTransaction a; | |
71 a.Init("Foo: 1", "HTTP/1.1 200 OK\nVary: foo\n\n"); | |
72 | |
73 TestTransaction b; | |
74 b.Init("Foo: 2", "HTTP/1.1 200 OK\nVary: foo\n\n"); | |
75 | |
76 net::HttpVaryData v; | |
77 EXPECT_TRUE(v.Init(a.request, *a.response.get())); | |
78 | |
79 EXPECT_FALSE(v.MatchesRequest(b.request, *b.response.get())); | |
80 } | |
81 | |
82 TEST(HttpVaryDataTest, DoesVary2) { | |
83 TestTransaction a; | |
84 a.Init("Foo: 1\r\nbar: 23", "HTTP/1.1 200 OK\nVary: foo, bar\n\n"); | |
85 | |
86 TestTransaction b; | |
87 b.Init("Foo: 12\r\nbar: 3", "HTTP/1.1 200 OK\nVary: foo, bar\n\n"); | |
88 | |
89 net::HttpVaryData v; | |
90 EXPECT_TRUE(v.Init(a.request, *a.response.get())); | |
91 | |
92 EXPECT_FALSE(v.MatchesRequest(b.request, *b.response.get())); | |
93 } | |
94 | |
95 TEST(HttpVaryDataTest, DoesntVary) { | |
96 TestTransaction a; | |
97 a.Init("Foo: 1", "HTTP/1.1 200 OK\nVary: foo\n\n"); | |
98 | |
99 TestTransaction b; | |
100 b.Init("Foo: 1", "HTTP/1.1 200 OK\nVary: foo\n\n"); | |
101 | |
102 net::HttpVaryData v; | |
103 EXPECT_TRUE(v.Init(a.request, *a.response.get())); | |
104 | |
105 EXPECT_TRUE(v.MatchesRequest(b.request, *b.response.get())); | |
106 } | |
107 | |
108 TEST(HttpVaryDataTest, DoesntVary2) { | |
109 TestTransaction a; | |
110 a.Init("Foo: 1\r\nbAr: 2", "HTTP/1.1 200 OK\nVary: foo, bar\n\n"); | |
111 | |
112 TestTransaction b; | |
113 b.Init("Foo: 1\r\nbaR: 2", "HTTP/1.1 200 OK\nVary: foo\nVary: bar\n\n"); | |
114 | |
115 net::HttpVaryData v; | |
116 EXPECT_TRUE(v.Init(a.request, *a.response.get())); | |
117 | |
118 EXPECT_TRUE(v.MatchesRequest(b.request, *b.response.get())); | |
119 } | |
120 | |
121 TEST(HttpVaryDataTest, ImplicitCookieForRedirect) { | |
122 TestTransaction a; | |
123 a.Init("Cookie: 1", "HTTP/1.1 301 Moved\nLocation: x\n\n"); | |
124 | |
125 TestTransaction b; | |
126 b.Init("Cookie: 2", "HTTP/1.1 301 Moved\nLocation: x\n\n"); | |
127 | |
128 net::HttpVaryData v; | |
129 EXPECT_TRUE(v.Init(a.request, *a.response.get())); | |
130 | |
131 EXPECT_FALSE(v.MatchesRequest(b.request, *b.response.get())); | |
132 } | |
133 | |
134 TEST(HttpVaryDataTest, ImplicitCookieForRedirect2) { | |
135 // This should be no different than the test above | |
136 | |
137 TestTransaction a; | |
138 a.Init("Cookie: 1", "HTTP/1.1 301 Moved\nLocation: x\nVary: coOkie\n\n"); | |
139 | |
140 TestTransaction b; | |
141 b.Init("Cookie: 2", "HTTP/1.1 301 Moved\nLocation: x\nVary: cooKie\n\n"); | |
142 | |
143 net::HttpVaryData v; | |
144 EXPECT_TRUE(v.Init(a.request, *a.response.get())); | |
145 | |
146 EXPECT_FALSE(v.MatchesRequest(b.request, *b.response.get())); | |
147 } | |
OLD | NEW |