OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/dns/host_resolver_mojo.h" | 5 #include "net/dns/host_resolver_mojo.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
11 #include "mojo/public/cpp/bindings/binding.h" | 11 #include "mojo/public/cpp/bindings/binding.h" |
12 #include "net/base/address_list.h" | 12 #include "net/base/address_list.h" |
13 #include "net/base/ip_address.h" | 13 #include "net/base/ip_address.h" |
14 #include "net/base/net_errors.h" | 14 #include "net/base/net_errors.h" |
15 #include "net/base/request_priority.h" | 15 #include "net/base/request_priority.h" |
16 #include "net/base/test_completion_callback.h" | 16 #include "net/base/test_completion_callback.h" |
17 #include "net/dns/mojo_host_type_converters.h" | 17 #include "net/dns/mojo_host_type_converters.h" |
18 #include "net/test/event_waiter.h" | 18 #include "net/test/event_waiter.h" |
| 19 #include "net/test/gtest_util.h" |
| 20 #include "testing/gmock/include/gmock/gmock.h" |
19 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
20 | 22 |
| 23 using net::test::IsError; |
| 24 using net::test::IsOk; |
| 25 |
21 namespace net { | 26 namespace net { |
22 namespace { | 27 namespace { |
23 | 28 |
24 void Fail(int result) { | 29 void Fail(int result) { |
25 FAIL() << "Unexpected callback called with error " << result; | 30 FAIL() << "Unexpected callback called with error " << result; |
26 } | 31 } |
27 | 32 |
28 class MockMojoHostResolverRequest { | 33 class MockMojoHostResolverRequest { |
29 public: | 34 public: |
30 MockMojoHostResolverRequest(interfaces::HostResolverRequestClientPtr client, | 35 MockMojoHostResolverRequest(interfaces::HostResolverRequestClientPtr client, |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 TEST_F(HostResolverMojoTest, Basic) { | 183 TEST_F(HostResolverMojoTest, Basic) { |
179 AddressList address_list; | 184 AddressList address_list; |
180 IPAddress address(1, 2, 3, 4); | 185 IPAddress address(1, 2, 3, 4); |
181 address_list.push_back(IPEndPoint(address, 12345)); | 186 address_list.push_back(IPEndPoint(address, 12345)); |
182 address_list.push_back( | 187 address_list.push_back( |
183 IPEndPoint(ConvertIPv4ToIPv4MappedIPv6(address), 12345)); | 188 IPEndPoint(ConvertIPv4ToIPv4MappedIPv6(address), 12345)); |
184 mock_resolver_->AddAction(HostResolverAction::ReturnResult(address_list)); | 189 mock_resolver_->AddAction(HostResolverAction::ReturnResult(address_list)); |
185 HostResolver::RequestInfo request_info( | 190 HostResolver::RequestInfo request_info( |
186 HostPortPair::FromString("example.com:12345")); | 191 HostPortPair::FromString("example.com:12345")); |
187 AddressList result; | 192 AddressList result; |
188 EXPECT_EQ(OK, Resolve(request_info, &result)); | 193 EXPECT_THAT(Resolve(request_info, &result), IsOk()); |
189 ASSERT_EQ(2u, result.size()); | 194 ASSERT_EQ(2u, result.size()); |
190 EXPECT_EQ(address_list[0], result[0]); | 195 EXPECT_EQ(address_list[0], result[0]); |
191 EXPECT_EQ(address_list[1], result[1]); | 196 EXPECT_EQ(address_list[1], result[1]); |
192 | 197 |
193 ASSERT_EQ(1u, mock_resolver_->requests().size()); | 198 ASSERT_EQ(1u, mock_resolver_->requests().size()); |
194 interfaces::HostResolverRequestInfo& request = *mock_resolver_->requests()[0]; | 199 interfaces::HostResolverRequestInfo& request = *mock_resolver_->requests()[0]; |
195 EXPECT_EQ("example.com", request.host.To<std::string>()); | 200 EXPECT_EQ("example.com", request.host.To<std::string>()); |
196 EXPECT_EQ(12345, request.port); | 201 EXPECT_EQ(12345, request.port); |
197 EXPECT_EQ(interfaces::AddressFamily::UNSPECIFIED, request.address_family); | 202 EXPECT_EQ(interfaces::AddressFamily::UNSPECIFIED, request.address_family); |
198 EXPECT_FALSE(request.is_my_ip_address); | 203 EXPECT_FALSE(request.is_my_ip_address); |
199 } | 204 } |
200 | 205 |
201 TEST_F(HostResolverMojoTest, ResolveCachedResult) { | 206 TEST_F(HostResolverMojoTest, ResolveCachedResult) { |
202 AddressList address_list; | 207 AddressList address_list; |
203 IPAddress address(1, 2, 3, 4); | 208 IPAddress address(1, 2, 3, 4); |
204 address_list.push_back(IPEndPoint(address, 12345)); | 209 address_list.push_back(IPEndPoint(address, 12345)); |
205 address_list.push_back( | 210 address_list.push_back( |
206 IPEndPoint(ConvertIPv4ToIPv4MappedIPv6(address), 12345)); | 211 IPEndPoint(ConvertIPv4ToIPv4MappedIPv6(address), 12345)); |
207 mock_resolver_->AddAction(HostResolverAction::ReturnResult(address_list)); | 212 mock_resolver_->AddAction(HostResolverAction::ReturnResult(address_list)); |
208 HostResolver::RequestInfo request_info( | 213 HostResolver::RequestInfo request_info( |
209 HostPortPair::FromString("example.com:12345")); | 214 HostPortPair::FromString("example.com:12345")); |
210 AddressList result; | 215 AddressList result; |
211 ASSERT_EQ(OK, Resolve(request_info, &result)); | 216 ASSERT_THAT(Resolve(request_info, &result), IsOk()); |
212 ASSERT_EQ(1u, mock_resolver_->requests().size()); | 217 ASSERT_EQ(1u, mock_resolver_->requests().size()); |
213 | 218 |
214 result.clear(); | 219 result.clear(); |
215 request_info.set_host_port_pair(HostPortPair::FromString("example.com:6789")); | 220 request_info.set_host_port_pair(HostPortPair::FromString("example.com:6789")); |
216 EXPECT_EQ(OK, Resolve(request_info, &result)); | 221 EXPECT_THAT(Resolve(request_info, &result), IsOk()); |
217 ASSERT_EQ(2u, result.size()); | 222 ASSERT_EQ(2u, result.size()); |
218 address_list.clear(); | 223 address_list.clear(); |
219 address_list.push_back(IPEndPoint(address, 6789)); | 224 address_list.push_back(IPEndPoint(address, 6789)); |
220 address_list.push_back( | 225 address_list.push_back( |
221 IPEndPoint(ConvertIPv4ToIPv4MappedIPv6(address), 6789)); | 226 IPEndPoint(ConvertIPv4ToIPv4MappedIPv6(address), 6789)); |
222 EXPECT_EQ(address_list[0], result[0]); | 227 EXPECT_EQ(address_list[0], result[0]); |
223 EXPECT_EQ(address_list[1], result[1]); | 228 EXPECT_EQ(address_list[1], result[1]); |
224 EXPECT_EQ(1u, mock_resolver_->requests().size()); | 229 EXPECT_EQ(1u, mock_resolver_->requests().size()); |
225 | 230 |
226 mock_resolver_->AddAction(HostResolverAction::ReturnResult(address_list)); | 231 mock_resolver_->AddAction(HostResolverAction::ReturnResult(address_list)); |
227 result.clear(); | 232 result.clear(); |
228 request_info.set_allow_cached_response(false); | 233 request_info.set_allow_cached_response(false); |
229 EXPECT_EQ(OK, Resolve(request_info, &result)); | 234 EXPECT_THAT(Resolve(request_info, &result), IsOk()); |
230 ASSERT_EQ(2u, result.size()); | 235 ASSERT_EQ(2u, result.size()); |
231 EXPECT_EQ(address_list[0], result[0]); | 236 EXPECT_EQ(address_list[0], result[0]); |
232 EXPECT_EQ(address_list[1], result[1]); | 237 EXPECT_EQ(address_list[1], result[1]); |
233 EXPECT_EQ(2u, mock_resolver_->requests().size()); | 238 EXPECT_EQ(2u, mock_resolver_->requests().size()); |
234 } | 239 } |
235 | 240 |
236 TEST_F(HostResolverMojoTest, Multiple) { | 241 TEST_F(HostResolverMojoTest, Multiple) { |
237 AddressList address_list; | 242 AddressList address_list; |
238 IPAddress address(1, 2, 3, 4); | 243 IPAddress address(1, 2, 3, 4); |
239 address_list.push_back(IPEndPoint(address, 12345)); | 244 address_list.push_back(IPEndPoint(address, 12345)); |
(...skipping 14 matching lines...) Expand all Loading... |
254 TestCompletionCallback callback1; | 259 TestCompletionCallback callback1; |
255 TestCompletionCallback callback2; | 260 TestCompletionCallback callback2; |
256 ASSERT_EQ(ERR_IO_PENDING, | 261 ASSERT_EQ(ERR_IO_PENDING, |
257 resolver_->Resolve(request_info1, DEFAULT_PRIORITY, &result1, | 262 resolver_->Resolve(request_info1, DEFAULT_PRIORITY, &result1, |
258 callback1.callback(), &request_handle1, | 263 callback1.callback(), &request_handle1, |
259 BoundNetLog())); | 264 BoundNetLog())); |
260 ASSERT_EQ(ERR_IO_PENDING, | 265 ASSERT_EQ(ERR_IO_PENDING, |
261 resolver_->Resolve(request_info2, DEFAULT_PRIORITY, &result2, | 266 resolver_->Resolve(request_info2, DEFAULT_PRIORITY, &result2, |
262 callback2.callback(), &request_handle2, | 267 callback2.callback(), &request_handle2, |
263 BoundNetLog())); | 268 BoundNetLog())); |
264 EXPECT_EQ(OK, callback1.GetResult(ERR_IO_PENDING)); | 269 EXPECT_THAT(callback1.GetResult(ERR_IO_PENDING), IsOk()); |
265 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback2.GetResult(ERR_IO_PENDING)); | 270 EXPECT_THAT(callback2.GetResult(ERR_IO_PENDING), |
| 271 IsError(ERR_NAME_NOT_RESOLVED)); |
266 ASSERT_EQ(1u, result1.size()); | 272 ASSERT_EQ(1u, result1.size()); |
267 EXPECT_EQ(address_list[0], result1[0]); | 273 EXPECT_EQ(address_list[0], result1[0]); |
268 ASSERT_EQ(0u, result2.size()); | 274 ASSERT_EQ(0u, result2.size()); |
269 | 275 |
270 ASSERT_EQ(2u, mock_resolver_->requests().size()); | 276 ASSERT_EQ(2u, mock_resolver_->requests().size()); |
271 interfaces::HostResolverRequestInfo& request1 = | 277 interfaces::HostResolverRequestInfo& request1 = |
272 *mock_resolver_->requests()[0]; | 278 *mock_resolver_->requests()[0]; |
273 EXPECT_EQ("example.com", request1.host.To<std::string>()); | 279 EXPECT_EQ("example.com", request1.host.To<std::string>()); |
274 EXPECT_EQ(12345, request1.port); | 280 EXPECT_EQ(12345, request1.port); |
275 EXPECT_EQ(interfaces::AddressFamily::IPV4, request1.address_family); | 281 EXPECT_EQ(interfaces::AddressFamily::IPV4, request1.address_family); |
276 EXPECT_TRUE(request1.is_my_ip_address); | 282 EXPECT_TRUE(request1.is_my_ip_address); |
277 interfaces::HostResolverRequestInfo& request2 = | 283 interfaces::HostResolverRequestInfo& request2 = |
278 *mock_resolver_->requests()[1]; | 284 *mock_resolver_->requests()[1]; |
279 EXPECT_EQ("example.org", request2.host.To<std::string>()); | 285 EXPECT_EQ("example.org", request2.host.To<std::string>()); |
280 EXPECT_EQ(80, request2.port); | 286 EXPECT_EQ(80, request2.port); |
281 EXPECT_EQ(interfaces::AddressFamily::IPV6, request2.address_family); | 287 EXPECT_EQ(interfaces::AddressFamily::IPV6, request2.address_family); |
282 EXPECT_FALSE(request2.is_my_ip_address); | 288 EXPECT_FALSE(request2.is_my_ip_address); |
283 } | 289 } |
284 | 290 |
285 TEST_F(HostResolverMojoTest, Error) { | 291 TEST_F(HostResolverMojoTest, Error) { |
286 mock_resolver_->AddAction( | 292 mock_resolver_->AddAction( |
287 HostResolverAction::ReturnError(ERR_NAME_NOT_RESOLVED)); | 293 HostResolverAction::ReturnError(ERR_NAME_NOT_RESOLVED)); |
288 HostResolver::RequestInfo request_info( | 294 HostResolver::RequestInfo request_info( |
289 HostPortPair::FromString("example.com:8080")); | 295 HostPortPair::FromString("example.com:8080")); |
290 request_info.set_address_family(ADDRESS_FAMILY_IPV4); | 296 request_info.set_address_family(ADDRESS_FAMILY_IPV4); |
291 AddressList result; | 297 AddressList result; |
292 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, Resolve(request_info, &result)); | 298 EXPECT_THAT(Resolve(request_info, &result), IsError(ERR_NAME_NOT_RESOLVED)); |
293 EXPECT_TRUE(result.empty()); | 299 EXPECT_TRUE(result.empty()); |
294 | 300 |
295 ASSERT_EQ(1u, mock_resolver_->requests().size()); | 301 ASSERT_EQ(1u, mock_resolver_->requests().size()); |
296 interfaces::HostResolverRequestInfo& request = *mock_resolver_->requests()[0]; | 302 interfaces::HostResolverRequestInfo& request = *mock_resolver_->requests()[0]; |
297 EXPECT_EQ("example.com", request.host.To<std::string>()); | 303 EXPECT_EQ("example.com", request.host.To<std::string>()); |
298 EXPECT_EQ(8080, request.port); | 304 EXPECT_EQ(8080, request.port); |
299 EXPECT_EQ(interfaces::AddressFamily::IPV4, request.address_family); | 305 EXPECT_EQ(interfaces::AddressFamily::IPV4, request.address_family); |
300 EXPECT_FALSE(request.is_my_ip_address); | 306 EXPECT_FALSE(request.is_my_ip_address); |
301 } | 307 } |
302 | 308 |
303 TEST_F(HostResolverMojoTest, EmptyResult) { | 309 TEST_F(HostResolverMojoTest, EmptyResult) { |
304 mock_resolver_->AddAction(HostResolverAction::ReturnError(OK)); | 310 mock_resolver_->AddAction(HostResolverAction::ReturnError(OK)); |
305 HostResolver::RequestInfo request_info( | 311 HostResolver::RequestInfo request_info( |
306 HostPortPair::FromString("example.com:8080")); | 312 HostPortPair::FromString("example.com:8080")); |
307 AddressList result; | 313 AddressList result; |
308 EXPECT_EQ(OK, Resolve(request_info, &result)); | 314 EXPECT_THAT(Resolve(request_info, &result), IsOk()); |
309 EXPECT_TRUE(result.empty()); | 315 EXPECT_TRUE(result.empty()); |
310 | 316 |
311 ASSERT_EQ(1u, mock_resolver_->requests().size()); | 317 ASSERT_EQ(1u, mock_resolver_->requests().size()); |
312 } | 318 } |
313 | 319 |
314 TEST_F(HostResolverMojoTest, Cancel) { | 320 TEST_F(HostResolverMojoTest, Cancel) { |
315 mock_resolver_->AddAction(HostResolverAction::RetainRequest()); | 321 mock_resolver_->AddAction(HostResolverAction::RetainRequest()); |
316 HostResolver::RequestInfo request_info( | 322 HostResolver::RequestInfo request_info( |
317 HostPortPair::FromString("example.com:80")); | 323 HostPortPair::FromString("example.com:80")); |
318 request_info.set_address_family(ADDRESS_FAMILY_IPV6); | 324 request_info.set_address_family(ADDRESS_FAMILY_IPV6); |
(...skipping 11 matching lines...) Expand all Loading... |
330 EXPECT_EQ(80, request.port); | 336 EXPECT_EQ(80, request.port); |
331 EXPECT_EQ(interfaces::AddressFamily::IPV6, request.address_family); | 337 EXPECT_EQ(interfaces::AddressFamily::IPV6, request.address_family); |
332 EXPECT_FALSE(request.is_my_ip_address); | 338 EXPECT_FALSE(request.is_my_ip_address); |
333 } | 339 } |
334 | 340 |
335 TEST_F(HostResolverMojoTest, ImplDropsClientConnection) { | 341 TEST_F(HostResolverMojoTest, ImplDropsClientConnection) { |
336 mock_resolver_->AddAction(HostResolverAction::DropRequest()); | 342 mock_resolver_->AddAction(HostResolverAction::DropRequest()); |
337 HostResolver::RequestInfo request_info( | 343 HostResolver::RequestInfo request_info( |
338 HostPortPair::FromString("example.com:1")); | 344 HostPortPair::FromString("example.com:1")); |
339 AddressList result; | 345 AddressList result; |
340 EXPECT_EQ(ERR_FAILED, Resolve(request_info, &result)); | 346 EXPECT_THAT(Resolve(request_info, &result), IsError(ERR_FAILED)); |
341 EXPECT_TRUE(result.empty()); | 347 EXPECT_TRUE(result.empty()); |
342 | 348 |
343 ASSERT_EQ(1u, mock_resolver_->requests().size()); | 349 ASSERT_EQ(1u, mock_resolver_->requests().size()); |
344 interfaces::HostResolverRequestInfo& request = *mock_resolver_->requests()[0]; | 350 interfaces::HostResolverRequestInfo& request = *mock_resolver_->requests()[0]; |
345 EXPECT_EQ("example.com", request.host.To<std::string>()); | 351 EXPECT_EQ("example.com", request.host.To<std::string>()); |
346 EXPECT_EQ(1, request.port); | 352 EXPECT_EQ(1, request.port); |
347 EXPECT_EQ(interfaces::AddressFamily::UNSPECIFIED, request.address_family); | 353 EXPECT_EQ(interfaces::AddressFamily::UNSPECIFIED, request.address_family); |
348 EXPECT_FALSE(request.is_my_ip_address); | 354 EXPECT_FALSE(request.is_my_ip_address); |
349 } | 355 } |
350 | 356 |
351 TEST_F(HostResolverMojoTest, ResolveFromCache_Miss) { | 357 TEST_F(HostResolverMojoTest, ResolveFromCache_Miss) { |
352 HostResolver::RequestInfo request_info( | 358 HostResolver::RequestInfo request_info( |
353 HostPortPair::FromString("example.com:8080")); | 359 HostPortPair::FromString("example.com:8080")); |
354 AddressList result; | 360 AddressList result; |
355 EXPECT_EQ(ERR_DNS_CACHE_MISS, | 361 EXPECT_EQ(ERR_DNS_CACHE_MISS, |
356 resolver_->ResolveFromCache(request_info, &result, BoundNetLog())); | 362 resolver_->ResolveFromCache(request_info, &result, BoundNetLog())); |
357 EXPECT_TRUE(result.empty()); | 363 EXPECT_TRUE(result.empty()); |
358 } | 364 } |
359 | 365 |
360 TEST_F(HostResolverMojoTest, ResolveFromCache_Hit) { | 366 TEST_F(HostResolverMojoTest, ResolveFromCache_Hit) { |
361 AddressList address_list; | 367 AddressList address_list; |
362 IPAddress address(1, 2, 3, 4); | 368 IPAddress address(1, 2, 3, 4); |
363 address_list.push_back(IPEndPoint(address, 12345)); | 369 address_list.push_back(IPEndPoint(address, 12345)); |
364 address_list.push_back( | 370 address_list.push_back( |
365 IPEndPoint(ConvertIPv4ToIPv4MappedIPv6(address), 12345)); | 371 IPEndPoint(ConvertIPv4ToIPv4MappedIPv6(address), 12345)); |
366 mock_resolver_->AddAction(HostResolverAction::ReturnResult(address_list)); | 372 mock_resolver_->AddAction(HostResolverAction::ReturnResult(address_list)); |
367 HostResolver::RequestInfo request_info( | 373 HostResolver::RequestInfo request_info( |
368 HostPortPair::FromString("example.com:12345")); | 374 HostPortPair::FromString("example.com:12345")); |
369 AddressList result; | 375 AddressList result; |
370 ASSERT_EQ(OK, Resolve(request_info, &result)); | 376 ASSERT_THAT(Resolve(request_info, &result), IsOk()); |
371 EXPECT_EQ(1u, mock_resolver_->requests().size()); | 377 EXPECT_EQ(1u, mock_resolver_->requests().size()); |
372 | 378 |
373 result.clear(); | 379 result.clear(); |
374 EXPECT_EQ(OK, | 380 EXPECT_EQ(OK, |
375 resolver_->ResolveFromCache(request_info, &result, BoundNetLog())); | 381 resolver_->ResolveFromCache(request_info, &result, BoundNetLog())); |
376 ASSERT_EQ(2u, result.size()); | 382 ASSERT_EQ(2u, result.size()); |
377 EXPECT_EQ(address_list[0], result[0]); | 383 EXPECT_EQ(address_list[0], result[0]); |
378 EXPECT_EQ(address_list[1], result[1]); | 384 EXPECT_EQ(address_list[1], result[1]); |
379 EXPECT_EQ(1u, mock_resolver_->requests().size()); | 385 EXPECT_EQ(1u, mock_resolver_->requests().size()); |
380 } | 386 } |
381 | 387 |
382 TEST_F(HostResolverMojoTest, ResolveFromCache_CacheNotAllowed) { | 388 TEST_F(HostResolverMojoTest, ResolveFromCache_CacheNotAllowed) { |
383 AddressList address_list; | 389 AddressList address_list; |
384 IPAddress address(1, 2, 3, 4); | 390 IPAddress address(1, 2, 3, 4); |
385 address_list.push_back(IPEndPoint(address, 12345)); | 391 address_list.push_back(IPEndPoint(address, 12345)); |
386 address_list.push_back( | 392 address_list.push_back( |
387 IPEndPoint(ConvertIPv4ToIPv4MappedIPv6(address), 12345)); | 393 IPEndPoint(ConvertIPv4ToIPv4MappedIPv6(address), 12345)); |
388 mock_resolver_->AddAction(HostResolverAction::ReturnResult(address_list)); | 394 mock_resolver_->AddAction(HostResolverAction::ReturnResult(address_list)); |
389 HostResolver::RequestInfo request_info( | 395 HostResolver::RequestInfo request_info( |
390 HostPortPair::FromString("example.com:12345")); | 396 HostPortPair::FromString("example.com:12345")); |
391 AddressList result; | 397 AddressList result; |
392 ASSERT_EQ(OK, Resolve(request_info, &result)); | 398 ASSERT_THAT(Resolve(request_info, &result), IsOk()); |
393 EXPECT_EQ(1u, mock_resolver_->requests().size()); | 399 EXPECT_EQ(1u, mock_resolver_->requests().size()); |
394 | 400 |
395 result.clear(); | 401 result.clear(); |
396 request_info.set_allow_cached_response(false); | 402 request_info.set_allow_cached_response(false); |
397 EXPECT_EQ(ERR_DNS_CACHE_MISS, | 403 EXPECT_EQ(ERR_DNS_CACHE_MISS, |
398 resolver_->ResolveFromCache(request_info, &result, BoundNetLog())); | 404 resolver_->ResolveFromCache(request_info, &result, BoundNetLog())); |
399 EXPECT_TRUE(result.empty()); | 405 EXPECT_TRUE(result.empty()); |
400 } | 406 } |
401 | 407 |
402 TEST_F(HostResolverMojoTest, GetHostCache) { | 408 TEST_F(HostResolverMojoTest, GetHostCache) { |
403 EXPECT_TRUE(resolver_->GetHostCache()); | 409 EXPECT_TRUE(resolver_->GetHostCache()); |
404 } | 410 } |
405 | 411 |
406 } // namespace net | 412 } // namespace net |
OLD | NEW |