license.bot | bf09a50 | 2008-08-24 00:55:55 | [diff] [blame] | 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. |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 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 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 12 | namespace net { |
| 13 | |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 14 | namespace { |
| 15 | |
| 16 | typedef testing::Test HttpVaryDataTest; |
| 17 | |
| 18 | struct TestTransaction { |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 19 | HttpRequestInfo request; |
| 20 | scoped_refptr<HttpResponseHeaders> response; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 21 | |
| 22 | void Init(const std::string& request_headers, |
| 23 | const std::string& response_headers) { |
| 24 | std::string temp(response_headers); |
| 25 | std::replace(temp.begin(), temp.end(), '\n', '\0'); |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 26 | response = new HttpResponseHeaders(temp); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 27 | |
[email protected] | 8c76ae2 | 2010-04-20 22:15:43 | [diff] [blame] | 28 | request.extra_headers.Clear(); |
| 29 | request.extra_headers.AddHeadersFromString(request_headers); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 30 | } |
| 31 | }; |
| 32 | |
| 33 | } // namespace |
| 34 | |
[email protected] | 89ceba9a | 2009-03-21 03:46:06 | [diff] [blame] | 35 | TEST(HttpVaryDataTest, IsInvalid) { |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 36 | // All of these responses should result in an invalid vary data object. |
thestig | 9d3bb0c | 2015-01-24 00:49:51 | [diff] [blame] | 37 | const char* const kTestResponses[] = { |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 38 | "HTTP/1.1 200 OK\n\n", |
| 39 | "HTTP/1.1 200 OK\nVary: *\n\n", |
| 40 | "HTTP/1.1 200 OK\nVary: cookie, *, bar\n\n", |
| 41 | "HTTP/1.1 200 OK\nVary: cookie\nFoo: 1\nVary: *\n\n", |
| 42 | }; |
| 43 | |
| 44 | for (size_t i = 0; i < arraysize(kTestResponses); ++i) { |
| 45 | TestTransaction t; |
[email protected] | 007b3f8 | 2013-04-09 08:46:45 | [diff] [blame] | 46 | t.Init(std::string(), kTestResponses[i]); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 47 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 48 | HttpVaryData v; |
[email protected] | 89ceba9a | 2009-03-21 03:46:06 | [diff] [blame] | 49 | EXPECT_FALSE(v.is_valid()); |
[email protected] | 9049948 | 2013-06-01 00:39:50 | [diff] [blame] | 50 | EXPECT_FALSE(v.Init(t.request, *t.response.get())); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 51 | EXPECT_FALSE(v.is_valid()); |
| 52 | } |
| 53 | } |
| 54 | |
[email protected] | 89ceba9a | 2009-03-21 03:46:06 | [diff] [blame] | 55 | TEST(HttpVaryDataTest, MultipleInit) { |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 56 | HttpVaryData v; |
[email protected] | 89ceba9a | 2009-03-21 03:46:06 | [diff] [blame] | 57 | |
| 58 | // Init to something valid. |
| 59 | TestTransaction t1; |
[email protected] | 8c76ae2 | 2010-04-20 22:15:43 | [diff] [blame] | 60 | t1.Init("Foo: 1\r\nbar: 23", "HTTP/1.1 200 OK\nVary: foo, bar\n\n"); |
[email protected] | 9049948 | 2013-06-01 00:39:50 | [diff] [blame] | 61 | EXPECT_TRUE(v.Init(t1.request, *t1.response.get())); |
[email protected] | 89ceba9a | 2009-03-21 03:46:06 | [diff] [blame] | 62 | EXPECT_TRUE(v.is_valid()); |
| 63 | |
| 64 | // Now overwrite by initializing to something invalid. |
| 65 | TestTransaction t2; |
[email protected] | 8c76ae2 | 2010-04-20 22:15:43 | [diff] [blame] | 66 | t2.Init("Foo: 1\r\nbar: 23", "HTTP/1.1 200 OK\nVary: *\n\n"); |
[email protected] | 9049948 | 2013-06-01 00:39:50 | [diff] [blame] | 67 | EXPECT_FALSE(v.Init(t2.request, *t2.response.get())); |
[email protected] | 89ceba9a | 2009-03-21 03:46:06 | [diff] [blame] | 68 | EXPECT_FALSE(v.is_valid()); |
| 69 | } |
| 70 | |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 71 | TEST(HttpVaryDataTest, DoesVary) { |
| 72 | TestTransaction a; |
| 73 | a.Init("Foo: 1", "HTTP/1.1 200 OK\nVary: foo\n\n"); |
| 74 | |
| 75 | TestTransaction b; |
| 76 | b.Init("Foo: 2", "HTTP/1.1 200 OK\nVary: foo\n\n"); |
| 77 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 78 | HttpVaryData v; |
[email protected] | 9049948 | 2013-06-01 00:39:50 | [diff] [blame] | 79 | EXPECT_TRUE(v.Init(a.request, *a.response.get())); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 80 | |
[email protected] | 9049948 | 2013-06-01 00:39:50 | [diff] [blame] | 81 | EXPECT_FALSE(v.MatchesRequest(b.request, *b.response.get())); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 82 | } |
| 83 | |
| 84 | TEST(HttpVaryDataTest, DoesVary2) { |
| 85 | TestTransaction a; |
[email protected] | 8c76ae2 | 2010-04-20 22:15:43 | [diff] [blame] | 86 | a.Init("Foo: 1\r\nbar: 23", "HTTP/1.1 200 OK\nVary: foo, bar\n\n"); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 87 | |
| 88 | TestTransaction b; |
[email protected] | 8c76ae2 | 2010-04-20 22:15:43 | [diff] [blame] | 89 | b.Init("Foo: 12\r\nbar: 3", "HTTP/1.1 200 OK\nVary: foo, bar\n\n"); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 90 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 91 | HttpVaryData v; |
[email protected] | 9049948 | 2013-06-01 00:39:50 | [diff] [blame] | 92 | EXPECT_TRUE(v.Init(a.request, *a.response.get())); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 93 | |
[email protected] | 9049948 | 2013-06-01 00:39:50 | [diff] [blame] | 94 | EXPECT_FALSE(v.MatchesRequest(b.request, *b.response.get())); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 95 | } |
| 96 | |
| 97 | TEST(HttpVaryDataTest, DoesntVary) { |
| 98 | TestTransaction a; |
| 99 | a.Init("Foo: 1", "HTTP/1.1 200 OK\nVary: foo\n\n"); |
| 100 | |
| 101 | TestTransaction b; |
| 102 | b.Init("Foo: 1", "HTTP/1.1 200 OK\nVary: foo\n\n"); |
| 103 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 104 | HttpVaryData v; |
[email protected] | 9049948 | 2013-06-01 00:39:50 | [diff] [blame] | 105 | EXPECT_TRUE(v.Init(a.request, *a.response.get())); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 106 | |
[email protected] | 9049948 | 2013-06-01 00:39:50 | [diff] [blame] | 107 | EXPECT_TRUE(v.MatchesRequest(b.request, *b.response.get())); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 108 | } |
| 109 | |
| 110 | TEST(HttpVaryDataTest, DoesntVary2) { |
| 111 | TestTransaction a; |
[email protected] | 8c76ae2 | 2010-04-20 22:15:43 | [diff] [blame] | 112 | a.Init("Foo: 1\r\nbAr: 2", "HTTP/1.1 200 OK\nVary: foo, bar\n\n"); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 113 | |
| 114 | TestTransaction b; |
[email protected] | 8c76ae2 | 2010-04-20 22:15:43 | [diff] [blame] | 115 | b.Init("Foo: 1\r\nbaR: 2", "HTTP/1.1 200 OK\nVary: foo\nVary: bar\n\n"); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 116 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 117 | HttpVaryData v; |
[email protected] | 9049948 | 2013-06-01 00:39:50 | [diff] [blame] | 118 | EXPECT_TRUE(v.Init(a.request, *a.response.get())); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 119 | |
[email protected] | 9049948 | 2013-06-01 00:39:50 | [diff] [blame] | 120 | EXPECT_TRUE(v.MatchesRequest(b.request, *b.response.get())); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 121 | } |
| 122 | |
gabadie | dd6d9b1 | 2016-05-11 16:52:36 | [diff] [blame] | 123 | TEST(HttpVaryDataTest, DoesntVaryByCookieForRedirect) { |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 124 | TestTransaction a; |
| 125 | a.Init("Cookie: 1", "HTTP/1.1 301 Moved\nLocation: x\n\n"); |
| 126 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 127 | HttpVaryData v; |
gabadie | dd6d9b1 | 2016-05-11 16:52:36 | [diff] [blame] | 128 | EXPECT_FALSE(v.Init(a.request, *a.response.get())); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 129 | } |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 130 | |
| 131 | } // namespace net |