Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(684)

Side by Side Diff: net/http/disk_cache_based_quic_server_info_unittest.cc

Issue 218923002: Merge internal change: 63891842 - QuicServerId changes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/http/disk_cache_based_quic_server_info.h" 5 #include "net/http/disk_cache_based_quic_server_info.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
11 #include "net/base/net_errors.h" 11 #include "net/base/net_errors.h"
12 #include "net/http/mock_http_cache.h" 12 #include "net/http/mock_http_cache.h"
13 #include "net/quic/crypto/quic_server_info.h" 13 #include "net/quic/crypto/quic_server_info.h"
14 #include "net/quic/quic_session_key.h" 14 #include "net/quic/quic_server_id.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 16
17 namespace net { 17 namespace net {
18 namespace { 18 namespace {
19 19
20 // This is an empty transaction, needed to register the URL and the test mode. 20 // This is an empty transaction, needed to register the URL and the test mode.
21 const MockTransaction kHostInfoTransaction1 = { 21 const MockTransaction kHostInfoTransaction1 = {
22 "quicserverinfo:https://www.google.com:443", 22 "quicserverinfo:https://www.google.com:443",
23 "", 23 "",
24 base::Time(), 24 base::Time(),
(...skipping 25 matching lines...) Expand all
50 50
51 } // namespace 51 } // namespace
52 52
53 // Tests that we can delete a DiskCacheBasedQuicServerInfo object in a 53 // Tests that we can delete a DiskCacheBasedQuicServerInfo object in a
54 // completion callback for DiskCacheBasedQuicServerInfo::WaitForDataReady. 54 // completion callback for DiskCacheBasedQuicServerInfo::WaitForDataReady.
55 TEST(DiskCacheBasedQuicServerInfo, DeleteInCallback) { 55 TEST(DiskCacheBasedQuicServerInfo, DeleteInCallback) {
56 // Use the blocking mock backend factory to force asynchronous completion 56 // Use the blocking mock backend factory to force asynchronous completion
57 // of quic_server_info->WaitForDataReady(), so that the callback will run. 57 // of quic_server_info->WaitForDataReady(), so that the callback will run.
58 MockBlockingBackendFactory* factory = new MockBlockingBackendFactory(); 58 MockBlockingBackendFactory* factory = new MockBlockingBackendFactory();
59 MockHttpCache cache(factory); 59 MockHttpCache cache(factory);
60 QuicSessionKey server_key("www.verisign.com", 443, true, 60 QuicServerId server_id("www.verisign.com", 443, true, kPrivacyModeDisabled);
61 kPrivacyModeDisabled);
62 scoped_ptr<QuicServerInfo> quic_server_info( 61 scoped_ptr<QuicServerInfo> quic_server_info(
63 new DiskCacheBasedQuicServerInfo(server_key, cache.http_cache())); 62 new DiskCacheBasedQuicServerInfo(server_id, cache.http_cache()));
64 quic_server_info->Start(); 63 quic_server_info->Start();
65 TestCompletionCallback callback; 64 TestCompletionCallback callback;
66 int rv = quic_server_info->WaitForDataReady(callback.callback()); 65 int rv = quic_server_info->WaitForDataReady(callback.callback());
67 EXPECT_EQ(ERR_IO_PENDING, rv); 66 EXPECT_EQ(ERR_IO_PENDING, rv);
68 // Now complete the backend creation and let the callback run. 67 // Now complete the backend creation and let the callback run.
69 factory->FinishCreation(); 68 factory->FinishCreation();
70 EXPECT_EQ(OK, callback.GetResult(rv)); 69 EXPECT_EQ(OK, callback.GetResult(rv));
71 } 70 }
72 71
73 // Tests the basic logic of storing, retrieving and updating data. 72 // Tests the basic logic of storing, retrieving and updating data.
74 TEST(DiskCacheBasedQuicServerInfo, Update) { 73 TEST(DiskCacheBasedQuicServerInfo, Update) {
75 MockHttpCache cache; 74 MockHttpCache cache;
76 AddMockTransaction(&kHostInfoTransaction1); 75 AddMockTransaction(&kHostInfoTransaction1);
77 TestCompletionCallback callback; 76 TestCompletionCallback callback;
78 77
79 QuicSessionKey server_key("www.google.com", 443, true, kPrivacyModeDisabled); 78 QuicServerId server_id("www.google.com", 443, true, kPrivacyModeDisabled);
80 scoped_ptr<QuicServerInfo> quic_server_info( 79 scoped_ptr<QuicServerInfo> quic_server_info(
81 new DiskCacheBasedQuicServerInfo(server_key, cache.http_cache())); 80 new DiskCacheBasedQuicServerInfo(server_id, cache.http_cache()));
82 quic_server_info->Start(); 81 quic_server_info->Start();
83 int rv = quic_server_info->WaitForDataReady(callback.callback()); 82 int rv = quic_server_info->WaitForDataReady(callback.callback());
84 EXPECT_EQ(OK, callback.GetResult(rv)); 83 EXPECT_EQ(OK, callback.GetResult(rv));
85 84
86 QuicServerInfo::State* state = quic_server_info->mutable_state(); 85 QuicServerInfo::State* state = quic_server_info->mutable_state();
87 EXPECT_TRUE(state->certs.empty()); 86 EXPECT_TRUE(state->certs.empty());
88 const string server_config_a = "server_config_a"; 87 const string server_config_a = "server_config_a";
89 const string source_address_token_a = "source_address_token_a"; 88 const string source_address_token_a = "source_address_token_a";
90 const string server_config_sig_a = "server_config_sig_a"; 89 const string server_config_sig_a = "server_config_sig_a";
91 const string cert_a = "cert_a"; 90 const string cert_a = "cert_a";
92 const string cert_b = "cert_b"; 91 const string cert_b = "cert_b";
93 92
94 state->server_config = server_config_a; 93 state->server_config = server_config_a;
95 state->source_address_token = source_address_token_a; 94 state->source_address_token = source_address_token_a;
96 state->server_config_sig = server_config_sig_a; 95 state->server_config_sig = server_config_sig_a;
97 state->certs.push_back(cert_a); 96 state->certs.push_back(cert_a);
98 quic_server_info->Persist(); 97 quic_server_info->Persist();
99 98
100 // Wait until Persist() does the work. 99 // Wait until Persist() does the work.
101 base::MessageLoop::current()->RunUntilIdle(); 100 base::MessageLoop::current()->RunUntilIdle();
102 101
103 // Open the stored QuicServerInfo. 102 // Open the stored QuicServerInfo.
104 quic_server_info.reset( 103 quic_server_info.reset(
105 new DiskCacheBasedQuicServerInfo(server_key, cache.http_cache())); 104 new DiskCacheBasedQuicServerInfo(server_id, cache.http_cache()));
106 quic_server_info->Start(); 105 quic_server_info->Start();
107 rv = quic_server_info->WaitForDataReady(callback.callback()); 106 rv = quic_server_info->WaitForDataReady(callback.callback());
108 EXPECT_EQ(OK, callback.GetResult(rv)); 107 EXPECT_EQ(OK, callback.GetResult(rv));
109 108
110 // And now update the data. 109 // And now update the data.
111 state = quic_server_info->mutable_state(); 110 state = quic_server_info->mutable_state();
112 state->certs.push_back(cert_b); 111 state->certs.push_back(cert_b);
113 112
114 // Fail instead of DCHECKing double creates. 113 // Fail instead of DCHECKing double creates.
115 cache.disk_cache()->set_double_create_check(false); 114 cache.disk_cache()->set_double_create_check(false);
116 quic_server_info->Persist(); 115 quic_server_info->Persist();
117 base::MessageLoop::current()->RunUntilIdle(); 116 base::MessageLoop::current()->RunUntilIdle();
118 117
119 // Verify that the state was updated. 118 // Verify that the state was updated.
120 quic_server_info.reset( 119 quic_server_info.reset(
121 new DiskCacheBasedQuicServerInfo(server_key, cache.http_cache())); 120 new DiskCacheBasedQuicServerInfo(server_id, cache.http_cache()));
122 quic_server_info->Start(); 121 quic_server_info->Start();
123 rv = quic_server_info->WaitForDataReady(callback.callback()); 122 rv = quic_server_info->WaitForDataReady(callback.callback());
124 EXPECT_EQ(OK, callback.GetResult(rv)); 123 EXPECT_EQ(OK, callback.GetResult(rv));
125 EXPECT_TRUE(quic_server_info->IsDataReady()); 124 EXPECT_TRUE(quic_server_info->IsDataReady());
126 125
127 const QuicServerInfo::State& state1 = quic_server_info->state(); 126 const QuicServerInfo::State& state1 = quic_server_info->state();
128 EXPECT_EQ(server_config_a, state1.server_config); 127 EXPECT_EQ(server_config_a, state1.server_config);
129 EXPECT_EQ(source_address_token_a, state1.source_address_token); 128 EXPECT_EQ(source_address_token_a, state1.source_address_token);
130 EXPECT_EQ(server_config_sig_a, state1.server_config_sig); 129 EXPECT_EQ(server_config_sig_a, state1.server_config_sig);
131 EXPECT_EQ(2U, state1.certs.size()); 130 EXPECT_EQ(2U, state1.certs.size());
132 EXPECT_EQ(cert_a, state1.certs[0]); 131 EXPECT_EQ(cert_a, state1.certs[0]);
133 EXPECT_EQ(cert_b, state1.certs[1]); 132 EXPECT_EQ(cert_b, state1.certs[1]);
134 133
135 RemoveMockTransaction(&kHostInfoTransaction1); 134 RemoveMockTransaction(&kHostInfoTransaction1);
136 } 135 }
137 136
138 // Test that demonstrates different info is returned when the ports differ. 137 // Test that demonstrates different info is returned when the ports differ.
139 TEST(DiskCacheBasedQuicServerInfo, UpdateDifferentPorts) { 138 TEST(DiskCacheBasedQuicServerInfo, UpdateDifferentPorts) {
140 MockHttpCache cache; 139 MockHttpCache cache;
141 AddMockTransaction(&kHostInfoTransaction1); 140 AddMockTransaction(&kHostInfoTransaction1);
142 AddMockTransaction(&kHostInfoTransaction2); 141 AddMockTransaction(&kHostInfoTransaction2);
143 TestCompletionCallback callback; 142 TestCompletionCallback callback;
144 143
145 // Persist data for port 443. 144 // Persist data for port 443.
146 QuicSessionKey server_key1("www.google.com", 443, true, kPrivacyModeDisabled); 145 QuicServerId server_id1("www.google.com", 443, true, kPrivacyModeDisabled);
147 scoped_ptr<QuicServerInfo> quic_server_info1( 146 scoped_ptr<QuicServerInfo> quic_server_info1(
148 new DiskCacheBasedQuicServerInfo(server_key1, cache.http_cache())); 147 new DiskCacheBasedQuicServerInfo(server_id1, cache.http_cache()));
149 quic_server_info1->Start(); 148 quic_server_info1->Start();
150 int rv = quic_server_info1->WaitForDataReady(callback.callback()); 149 int rv = quic_server_info1->WaitForDataReady(callback.callback());
151 EXPECT_EQ(OK, callback.GetResult(rv)); 150 EXPECT_EQ(OK, callback.GetResult(rv));
152 151
153 QuicServerInfo::State* state1 = quic_server_info1->mutable_state(); 152 QuicServerInfo::State* state1 = quic_server_info1->mutable_state();
154 EXPECT_TRUE(state1->certs.empty()); 153 EXPECT_TRUE(state1->certs.empty());
155 const string server_config_a = "server_config_a"; 154 const string server_config_a = "server_config_a";
156 const string source_address_token_a = "source_address_token_a"; 155 const string source_address_token_a = "source_address_token_a";
157 const string server_config_sig_a = "server_config_sig_a"; 156 const string server_config_sig_a = "server_config_sig_a";
158 const string cert_a = "cert_a"; 157 const string cert_a = "cert_a";
159 158
160 state1->server_config = server_config_a; 159 state1->server_config = server_config_a;
161 state1->source_address_token = source_address_token_a; 160 state1->source_address_token = source_address_token_a;
162 state1->server_config_sig = server_config_sig_a; 161 state1->server_config_sig = server_config_sig_a;
163 state1->certs.push_back(cert_a); 162 state1->certs.push_back(cert_a);
164 quic_server_info1->Persist(); 163 quic_server_info1->Persist();
165 164
166 // Wait until Persist() does the work. 165 // Wait until Persist() does the work.
167 base::MessageLoop::current()->RunUntilIdle(); 166 base::MessageLoop::current()->RunUntilIdle();
168 167
169 // Persist data for port 80. 168 // Persist data for port 80.
170 QuicSessionKey server_key2("www.google.com", 80, false, kPrivacyModeDisabled); 169 QuicServerId server_id2("www.google.com", 80, false, kPrivacyModeDisabled);
171 scoped_ptr<QuicServerInfo> quic_server_info2( 170 scoped_ptr<QuicServerInfo> quic_server_info2(
172 new DiskCacheBasedQuicServerInfo(server_key2, cache.http_cache())); 171 new DiskCacheBasedQuicServerInfo(server_id2, cache.http_cache()));
173 quic_server_info2->Start(); 172 quic_server_info2->Start();
174 rv = quic_server_info2->WaitForDataReady(callback.callback()); 173 rv = quic_server_info2->WaitForDataReady(callback.callback());
175 EXPECT_EQ(OK, callback.GetResult(rv)); 174 EXPECT_EQ(OK, callback.GetResult(rv));
176 175
177 QuicServerInfo::State* state2 = quic_server_info2->mutable_state(); 176 QuicServerInfo::State* state2 = quic_server_info2->mutable_state();
178 EXPECT_TRUE(state2->certs.empty()); 177 EXPECT_TRUE(state2->certs.empty());
179 const string server_config_b = "server_config_b"; 178 const string server_config_b = "server_config_b";
180 const string source_address_token_b = "source_address_token_b"; 179 const string source_address_token_b = "source_address_token_b";
181 const string server_config_sig_b = "server_config_sig_b"; 180 const string server_config_sig_b = "server_config_sig_b";
182 const string cert_b = "cert_b"; 181 const string cert_b = "cert_b";
183 182
184 state2->server_config = server_config_b; 183 state2->server_config = server_config_b;
185 state2->source_address_token = source_address_token_b; 184 state2->source_address_token = source_address_token_b;
186 state2->server_config_sig = server_config_sig_b; 185 state2->server_config_sig = server_config_sig_b;
187 state2->certs.push_back(cert_b); 186 state2->certs.push_back(cert_b);
188 quic_server_info2->Persist(); 187 quic_server_info2->Persist();
189 188
190 // Wait until Persist() does the work. 189 // Wait until Persist() does the work.
191 base::MessageLoop::current()->RunUntilIdle(); 190 base::MessageLoop::current()->RunUntilIdle();
192 191
193 // Verify the stored QuicServerInfo for port 443. 192 // Verify the stored QuicServerInfo for port 443.
194 scoped_ptr<QuicServerInfo> quic_server_info( 193 scoped_ptr<QuicServerInfo> quic_server_info(
195 new DiskCacheBasedQuicServerInfo(server_key1, cache.http_cache())); 194 new DiskCacheBasedQuicServerInfo(server_id1, cache.http_cache()));
196 quic_server_info->Start(); 195 quic_server_info->Start();
197 rv = quic_server_info->WaitForDataReady(callback.callback()); 196 rv = quic_server_info->WaitForDataReady(callback.callback());
198 EXPECT_EQ(OK, callback.GetResult(rv)); 197 EXPECT_EQ(OK, callback.GetResult(rv));
199 EXPECT_TRUE(quic_server_info->IsDataReady()); 198 EXPECT_TRUE(quic_server_info->IsDataReady());
200 199
201 const QuicServerInfo::State& state_a = quic_server_info->state(); 200 const QuicServerInfo::State& state_a = quic_server_info->state();
202 EXPECT_EQ(server_config_a, state_a.server_config); 201 EXPECT_EQ(server_config_a, state_a.server_config);
203 EXPECT_EQ(source_address_token_a, state_a.source_address_token); 202 EXPECT_EQ(source_address_token_a, state_a.source_address_token);
204 EXPECT_EQ(server_config_sig_a, state_a.server_config_sig); 203 EXPECT_EQ(server_config_sig_a, state_a.server_config_sig);
205 EXPECT_EQ(1U, state_a.certs.size()); 204 EXPECT_EQ(1U, state_a.certs.size());
206 EXPECT_EQ(cert_a, state_a.certs[0]); 205 EXPECT_EQ(cert_a, state_a.certs[0]);
207 206
208 // Verify the stored QuicServerInfo for port 80. 207 // Verify the stored QuicServerInfo for port 80.
209 quic_server_info.reset( 208 quic_server_info.reset(
210 new DiskCacheBasedQuicServerInfo(server_key2, cache.http_cache())); 209 new DiskCacheBasedQuicServerInfo(server_id2, cache.http_cache()));
211 quic_server_info->Start(); 210 quic_server_info->Start();
212 rv = quic_server_info->WaitForDataReady(callback.callback()); 211 rv = quic_server_info->WaitForDataReady(callback.callback());
213 EXPECT_EQ(OK, callback.GetResult(rv)); 212 EXPECT_EQ(OK, callback.GetResult(rv));
214 EXPECT_TRUE(quic_server_info->IsDataReady()); 213 EXPECT_TRUE(quic_server_info->IsDataReady());
215 214
216 const QuicServerInfo::State& state_b = quic_server_info->state(); 215 const QuicServerInfo::State& state_b = quic_server_info->state();
217 EXPECT_EQ(server_config_b, state_b.server_config); 216 EXPECT_EQ(server_config_b, state_b.server_config);
218 EXPECT_EQ(source_address_token_b, state_b.source_address_token); 217 EXPECT_EQ(source_address_token_b, state_b.source_address_token);
219 EXPECT_EQ(server_config_sig_b, state_b.server_config_sig); 218 EXPECT_EQ(server_config_sig_b, state_b.server_config_sig);
220 EXPECT_EQ(1U, state_b.certs.size()); 219 EXPECT_EQ(1U, state_b.certs.size());
221 EXPECT_EQ(cert_b, state_b.certs[0]); 220 EXPECT_EQ(cert_b, state_b.certs[0]);
222 221
223 RemoveMockTransaction(&kHostInfoTransaction2); 222 RemoveMockTransaction(&kHostInfoTransaction2);
224 RemoveMockTransaction(&kHostInfoTransaction1); 223 RemoveMockTransaction(&kHostInfoTransaction1);
225 } 224 }
226 225
227 // Test IsReadyToPersist when there is a pending write. 226 // Test IsReadyToPersist when there is a pending write.
228 TEST(DiskCacheBasedQuicServerInfo, IsReadyToPersist) { 227 TEST(DiskCacheBasedQuicServerInfo, IsReadyToPersist) {
229 MockHttpCache cache; 228 MockHttpCache cache;
230 AddMockTransaction(&kHostInfoTransaction1); 229 AddMockTransaction(&kHostInfoTransaction1);
231 TestCompletionCallback callback; 230 TestCompletionCallback callback;
232 231
233 QuicSessionKey server_key("www.google.com", 443, true, kPrivacyModeDisabled); 232 QuicServerId server_id("www.google.com", 443, true, kPrivacyModeDisabled);
234 scoped_ptr<QuicServerInfo> quic_server_info( 233 scoped_ptr<QuicServerInfo> quic_server_info(
235 new DiskCacheBasedQuicServerInfo(server_key, cache.http_cache())); 234 new DiskCacheBasedQuicServerInfo(server_id, cache.http_cache()));
236 EXPECT_FALSE(quic_server_info->IsDataReady()); 235 EXPECT_FALSE(quic_server_info->IsDataReady());
237 quic_server_info->Start(); 236 quic_server_info->Start();
238 int rv = quic_server_info->WaitForDataReady(callback.callback()); 237 int rv = quic_server_info->WaitForDataReady(callback.callback());
239 EXPECT_EQ(OK, callback.GetResult(rv)); 238 EXPECT_EQ(OK, callback.GetResult(rv));
240 EXPECT_TRUE(quic_server_info->IsDataReady()); 239 EXPECT_TRUE(quic_server_info->IsDataReady());
241 240
242 QuicServerInfo::State* state = quic_server_info->mutable_state(); 241 QuicServerInfo::State* state = quic_server_info->mutable_state();
243 EXPECT_TRUE(state->certs.empty()); 242 EXPECT_TRUE(state->certs.empty());
244 const string server_config_a = "server_config_a"; 243 const string server_config_a = "server_config_a";
245 const string source_address_token_a = "source_address_token_a"; 244 const string source_address_token_a = "source_address_token_a";
(...skipping 11 matching lines...) Expand all
257 // has completed. 256 // has completed.
258 EXPECT_FALSE(quic_server_info->IsReadyToPersist()); 257 EXPECT_FALSE(quic_server_info->IsReadyToPersist());
259 258
260 // Wait until Persist() does the work. 259 // Wait until Persist() does the work.
261 base::MessageLoop::current()->RunUntilIdle(); 260 base::MessageLoop::current()->RunUntilIdle();
262 261
263 EXPECT_TRUE(quic_server_info->IsReadyToPersist()); 262 EXPECT_TRUE(quic_server_info->IsReadyToPersist());
264 263
265 // Verify that the state was updated. 264 // Verify that the state was updated.
266 quic_server_info.reset( 265 quic_server_info.reset(
267 new DiskCacheBasedQuicServerInfo(server_key, cache.http_cache())); 266 new DiskCacheBasedQuicServerInfo(server_id, cache.http_cache()));
268 quic_server_info->Start(); 267 quic_server_info->Start();
269 rv = quic_server_info->WaitForDataReady(callback.callback()); 268 rv = quic_server_info->WaitForDataReady(callback.callback());
270 EXPECT_EQ(OK, callback.GetResult(rv)); 269 EXPECT_EQ(OK, callback.GetResult(rv));
271 EXPECT_TRUE(quic_server_info->IsDataReady()); 270 EXPECT_TRUE(quic_server_info->IsDataReady());
272 271
273 const QuicServerInfo::State& state1 = quic_server_info->state(); 272 const QuicServerInfo::State& state1 = quic_server_info->state();
274 EXPECT_EQ(server_config_a, state1.server_config); 273 EXPECT_EQ(server_config_a, state1.server_config);
275 EXPECT_EQ(source_address_token_a, state1.source_address_token); 274 EXPECT_EQ(source_address_token_a, state1.source_address_token);
276 EXPECT_EQ(server_config_sig_a, state1.server_config_sig); 275 EXPECT_EQ(server_config_sig_a, state1.server_config_sig);
277 EXPECT_EQ(1U, state1.certs.size()); 276 EXPECT_EQ(1U, state1.certs.size());
278 EXPECT_EQ(cert_a, state1.certs[0]); 277 EXPECT_EQ(cert_a, state1.certs[0]);
279 278
280 RemoveMockTransaction(&kHostInfoTransaction1); 279 RemoveMockTransaction(&kHostInfoTransaction1);
281 } 280 }
282 281
283 } // namespace net 282 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698