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

Side by Side Diff: net/dns/host_resolver_mojo_unittest.cc

Issue 2083463002: Replace //net TypeConverters with StructTraits. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@type-converter-cleanup--gurl
Patch Set: Created 4 years, 6 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
OLDNEW
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"
18 #include "net/test/event_waiter.h" 17 #include "net/test/event_waiter.h"
19 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
20 19
21 namespace net { 20 namespace net {
22 namespace { 21 namespace {
23 22
24 void Fail(int result) { 23 void Fail(int result) {
25 FAIL() << "Unexpected callback called with error " << result; 24 FAIL() << "Unexpected callback called with error " << result;
26 } 25 }
27 26
(...skipping 20 matching lines...) Expand all
48 error_callback_.Run(); 47 error_callback_.Run();
49 } 48 }
50 49
51 struct HostResolverAction { 50 struct HostResolverAction {
52 enum Action { 51 enum Action {
53 COMPLETE, 52 COMPLETE,
54 DROP, 53 DROP,
55 RETAIN, 54 RETAIN,
56 }; 55 };
57 56
58 static std::unique_ptr<HostResolverAction> ReturnError(Error error) { 57 static HostResolverAction ReturnError(Error error) {
59 std::unique_ptr<HostResolverAction> result(new HostResolverAction); 58 HostResolverAction result;
60 result->error = error; 59 result.error = error;
61 return result; 60 return result;
62 } 61 }
63 62
64 static std::unique_ptr<HostResolverAction> ReturnResult( 63 static HostResolverAction ReturnResult(const AddressList& address_list) {
65 const AddressList& address_list) { 64 HostResolverAction result;
66 std::unique_ptr<HostResolverAction> result(new HostResolverAction); 65 result.addresses = address_list;
67 result->addresses = interfaces::AddressList::From(address_list);
68 return result; 66 return result;
69 } 67 }
70 68
71 static std::unique_ptr<HostResolverAction> DropRequest() { 69 static HostResolverAction DropRequest() {
72 std::unique_ptr<HostResolverAction> result(new HostResolverAction); 70 HostResolverAction result;
73 result->action = DROP; 71 result.action = DROP;
74 return result; 72 return result;
75 } 73 }
76 74
77 static std::unique_ptr<HostResolverAction> RetainRequest() { 75 static HostResolverAction RetainRequest() {
78 std::unique_ptr<HostResolverAction> result(new HostResolverAction); 76 HostResolverAction result;
79 result->action = RETAIN; 77 result.action = RETAIN;
80 return result; 78 return result;
81 } 79 }
82 80
83 Action action = COMPLETE; 81 Action action = COMPLETE;
84 interfaces::AddressListPtr addresses; 82 AddressList addresses;
85 Error error = OK; 83 Error error = OK;
86 }; 84 };
87 85
88 class MockMojoHostResolver : public HostResolverMojo::Impl { 86 class MockMojoHostResolver : public HostResolverMojo::Impl {
89 public: 87 public:
90 explicit MockMojoHostResolver( 88 explicit MockMojoHostResolver(
91 const base::Closure& request_connection_error_callback); 89 const base::Closure& request_connection_error_callback);
92 ~MockMojoHostResolver() override; 90 ~MockMojoHostResolver() override;
93 91
94 void AddAction(std::unique_ptr<HostResolverAction> action); 92 void AddAction(HostResolverAction action);
95 93
96 const mojo::Array<interfaces::HostResolverRequestInfoPtr>& requests() { 94 const std::vector<HostResolver::RequestInfo>& requests() {
97 return requests_received_; 95 return requests_received_;
98 } 96 }
99 97
100 void ResolveDns(interfaces::HostResolverRequestInfoPtr request_info, 98 void ResolveDns(std::unique_ptr<HostResolver::RequestInfo> request_info,
101 interfaces::HostResolverRequestClientPtr client) override; 99 interfaces::HostResolverRequestClientPtr client) override;
102 100
103 private: 101 private:
104 std::vector<std::unique_ptr<HostResolverAction>> actions_; 102 std::vector<HostResolverAction> actions_;
105 size_t results_returned_ = 0; 103 size_t results_returned_ = 0;
106 mojo::Array<interfaces::HostResolverRequestInfoPtr> requests_received_; 104 std::vector<HostResolver::RequestInfo> requests_received_;
107 const base::Closure request_connection_error_callback_; 105 const base::Closure request_connection_error_callback_;
108 std::vector<std::unique_ptr<MockMojoHostResolverRequest>> requests_; 106 std::vector<std::unique_ptr<MockMojoHostResolverRequest>> requests_;
109 }; 107 };
110 108
111 MockMojoHostResolver::MockMojoHostResolver( 109 MockMojoHostResolver::MockMojoHostResolver(
112 const base::Closure& request_connection_error_callback) 110 const base::Closure& request_connection_error_callback)
113 : request_connection_error_callback_(request_connection_error_callback) { 111 : request_connection_error_callback_(request_connection_error_callback) {
114 } 112 }
115 113
116 MockMojoHostResolver::~MockMojoHostResolver() { 114 MockMojoHostResolver::~MockMojoHostResolver() {
117 EXPECT_EQ(results_returned_, actions_.size()); 115 EXPECT_EQ(results_returned_, actions_.size());
118 } 116 }
119 117
120 void MockMojoHostResolver::AddAction( 118 void MockMojoHostResolver::AddAction(HostResolverAction action) {
121 std::unique_ptr<HostResolverAction> action) {
122 actions_.push_back(std::move(action)); 119 actions_.push_back(std::move(action));
123 } 120 }
124 121
125 void MockMojoHostResolver::ResolveDns( 122 void MockMojoHostResolver::ResolveDns(
126 interfaces::HostResolverRequestInfoPtr request_info, 123 std::unique_ptr<HostResolver::RequestInfo> request_info,
127 interfaces::HostResolverRequestClientPtr client) { 124 interfaces::HostResolverRequestClientPtr client) {
128 requests_received_.push_back(std::move(request_info)); 125 requests_received_.push_back(std::move(*request_info));
129 ASSERT_LE(results_returned_, actions_.size()); 126 ASSERT_LE(results_returned_, actions_.size());
130 switch (actions_[results_returned_]->action) { 127 switch (actions_[results_returned_].action) {
131 case HostResolverAction::COMPLETE: 128 case HostResolverAction::COMPLETE:
132 client->ReportResult(actions_[results_returned_]->error, 129 client->ReportResult(actions_[results_returned_].error,
133 std::move(actions_[results_returned_]->addresses)); 130 std::move(actions_[results_returned_].addresses));
134 break; 131 break;
135 case HostResolverAction::RETAIN: 132 case HostResolverAction::RETAIN:
136 requests_.push_back(base::WrapUnique(new MockMojoHostResolverRequest( 133 requests_.push_back(base::WrapUnique(new MockMojoHostResolverRequest(
137 std::move(client), request_connection_error_callback_))); 134 std::move(client), request_connection_error_callback_)));
138 break; 135 break;
139 case HostResolverAction::DROP: 136 case HostResolverAction::DROP:
140 client.reset(); 137 client.reset();
141 break; 138 break;
142 } 139 }
143 results_returned_++; 140 results_returned_++;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 mock_resolver_->AddAction(HostResolverAction::ReturnResult(address_list)); 181 mock_resolver_->AddAction(HostResolverAction::ReturnResult(address_list));
185 HostResolver::RequestInfo request_info( 182 HostResolver::RequestInfo request_info(
186 HostPortPair::FromString("example.com:12345")); 183 HostPortPair::FromString("example.com:12345"));
187 AddressList result; 184 AddressList result;
188 EXPECT_EQ(OK, Resolve(request_info, &result)); 185 EXPECT_EQ(OK, Resolve(request_info, &result));
189 ASSERT_EQ(2u, result.size()); 186 ASSERT_EQ(2u, result.size());
190 EXPECT_EQ(address_list[0], result[0]); 187 EXPECT_EQ(address_list[0], result[0]);
191 EXPECT_EQ(address_list[1], result[1]); 188 EXPECT_EQ(address_list[1], result[1]);
192 189
193 ASSERT_EQ(1u, mock_resolver_->requests().size()); 190 ASSERT_EQ(1u, mock_resolver_->requests().size());
194 interfaces::HostResolverRequestInfo& request = *mock_resolver_->requests()[0]; 191 const HostResolver::RequestInfo& request = mock_resolver_->requests()[0];
195 EXPECT_EQ("example.com", request.host.To<std::string>()); 192 EXPECT_EQ("example.com", request.hostname());
196 EXPECT_EQ(12345, request.port); 193 EXPECT_EQ(12345, request.port());
197 EXPECT_EQ(interfaces::AddressFamily::UNSPECIFIED, request.address_family); 194 EXPECT_EQ(ADDRESS_FAMILY_UNSPECIFIED, request.address_family());
198 EXPECT_FALSE(request.is_my_ip_address); 195 EXPECT_FALSE(request.is_my_ip_address());
199 } 196 }
200 197
201 TEST_F(HostResolverMojoTest, ResolveCachedResult) { 198 TEST_F(HostResolverMojoTest, ResolveCachedResult) {
202 AddressList address_list; 199 AddressList address_list;
203 IPAddress address(1, 2, 3, 4); 200 IPAddress address(1, 2, 3, 4);
204 address_list.push_back(IPEndPoint(address, 12345)); 201 address_list.push_back(IPEndPoint(address, 12345));
205 address_list.push_back( 202 address_list.push_back(
206 IPEndPoint(ConvertIPv4ToIPv4MappedIPv6(address), 12345)); 203 IPEndPoint(ConvertIPv4ToIPv4MappedIPv6(address), 12345));
207 mock_resolver_->AddAction(HostResolverAction::ReturnResult(address_list)); 204 mock_resolver_->AddAction(HostResolverAction::ReturnResult(address_list));
208 HostResolver::RequestInfo request_info( 205 HostResolver::RequestInfo request_info(
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 resolver_->Resolve(request_info2, DEFAULT_PRIORITY, &result2, 258 resolver_->Resolve(request_info2, DEFAULT_PRIORITY, &result2,
262 callback2.callback(), &request_handle2, 259 callback2.callback(), &request_handle2,
263 BoundNetLog())); 260 BoundNetLog()));
264 EXPECT_EQ(OK, callback1.GetResult(ERR_IO_PENDING)); 261 EXPECT_EQ(OK, callback1.GetResult(ERR_IO_PENDING));
265 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback2.GetResult(ERR_IO_PENDING)); 262 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback2.GetResult(ERR_IO_PENDING));
266 ASSERT_EQ(1u, result1.size()); 263 ASSERT_EQ(1u, result1.size());
267 EXPECT_EQ(address_list[0], result1[0]); 264 EXPECT_EQ(address_list[0], result1[0]);
268 ASSERT_EQ(0u, result2.size()); 265 ASSERT_EQ(0u, result2.size());
269 266
270 ASSERT_EQ(2u, mock_resolver_->requests().size()); 267 ASSERT_EQ(2u, mock_resolver_->requests().size());
271 interfaces::HostResolverRequestInfo& request1 = 268 const HostResolver::RequestInfo& request1 = mock_resolver_->requests()[0];
272 *mock_resolver_->requests()[0]; 269 EXPECT_EQ("example.com", request1.hostname());
273 EXPECT_EQ("example.com", request1.host.To<std::string>()); 270 EXPECT_EQ(12345, request1.port());
274 EXPECT_EQ(12345, request1.port); 271 EXPECT_EQ(ADDRESS_FAMILY_IPV4, request1.address_family());
275 EXPECT_EQ(interfaces::AddressFamily::IPV4, request1.address_family); 272 EXPECT_TRUE(request1.is_my_ip_address());
276 EXPECT_TRUE(request1.is_my_ip_address); 273 const HostResolver::RequestInfo& request2 = mock_resolver_->requests()[1];
277 interfaces::HostResolverRequestInfo& request2 = 274 EXPECT_EQ("example.org", request2.hostname());
278 *mock_resolver_->requests()[1]; 275 EXPECT_EQ(80, request2.port());
279 EXPECT_EQ("example.org", request2.host.To<std::string>()); 276 EXPECT_EQ(ADDRESS_FAMILY_IPV6, request2.address_family());
280 EXPECT_EQ(80, request2.port); 277 EXPECT_FALSE(request2.is_my_ip_address());
281 EXPECT_EQ(interfaces::AddressFamily::IPV6, request2.address_family);
282 EXPECT_FALSE(request2.is_my_ip_address);
283 } 278 }
284 279
285 TEST_F(HostResolverMojoTest, Error) { 280 TEST_F(HostResolverMojoTest, Error) {
286 mock_resolver_->AddAction( 281 mock_resolver_->AddAction(
287 HostResolverAction::ReturnError(ERR_NAME_NOT_RESOLVED)); 282 HostResolverAction::ReturnError(ERR_NAME_NOT_RESOLVED));
288 HostResolver::RequestInfo request_info( 283 HostResolver::RequestInfo request_info(
289 HostPortPair::FromString("example.com:8080")); 284 HostPortPair::FromString("example.com:8080"));
290 request_info.set_address_family(ADDRESS_FAMILY_IPV4); 285 request_info.set_address_family(ADDRESS_FAMILY_IPV4);
291 AddressList result; 286 AddressList result;
292 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, Resolve(request_info, &result)); 287 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, Resolve(request_info, &result));
293 EXPECT_TRUE(result.empty()); 288 EXPECT_TRUE(result.empty());
294 289
295 ASSERT_EQ(1u, mock_resolver_->requests().size()); 290 ASSERT_EQ(1u, mock_resolver_->requests().size());
296 interfaces::HostResolverRequestInfo& request = *mock_resolver_->requests()[0]; 291 const HostResolver::RequestInfo& request = mock_resolver_->requests()[0];
297 EXPECT_EQ("example.com", request.host.To<std::string>()); 292 EXPECT_EQ("example.com", request.hostname());
298 EXPECT_EQ(8080, request.port); 293 EXPECT_EQ(8080, request.port());
299 EXPECT_EQ(interfaces::AddressFamily::IPV4, request.address_family); 294 EXPECT_EQ(ADDRESS_FAMILY_IPV4, request.address_family());
300 EXPECT_FALSE(request.is_my_ip_address); 295 EXPECT_FALSE(request.is_my_ip_address());
301 } 296 }
302 297
303 TEST_F(HostResolverMojoTest, EmptyResult) { 298 TEST_F(HostResolverMojoTest, EmptyResult) {
304 mock_resolver_->AddAction(HostResolverAction::ReturnError(OK)); 299 mock_resolver_->AddAction(HostResolverAction::ReturnError(OK));
305 HostResolver::RequestInfo request_info( 300 HostResolver::RequestInfo request_info(
306 HostPortPair::FromString("example.com:8080")); 301 HostPortPair::FromString("example.com:8080"));
307 AddressList result; 302 AddressList result;
308 EXPECT_EQ(OK, Resolve(request_info, &result)); 303 EXPECT_EQ(OK, Resolve(request_info, &result));
309 EXPECT_TRUE(result.empty()); 304 EXPECT_TRUE(result.empty());
310 305
311 ASSERT_EQ(1u, mock_resolver_->requests().size()); 306 ASSERT_EQ(1u, mock_resolver_->requests().size());
312 } 307 }
313 308
314 TEST_F(HostResolverMojoTest, Cancel) { 309 TEST_F(HostResolverMojoTest, Cancel) {
315 mock_resolver_->AddAction(HostResolverAction::RetainRequest()); 310 mock_resolver_->AddAction(HostResolverAction::RetainRequest());
316 HostResolver::RequestInfo request_info( 311 HostResolver::RequestInfo request_info(
317 HostPortPair::FromString("example.com:80")); 312 HostPortPair::FromString("example.com:80"));
318 request_info.set_address_family(ADDRESS_FAMILY_IPV6); 313 request_info.set_address_family(ADDRESS_FAMILY_IPV6);
319 AddressList result; 314 AddressList result;
320 HostResolver::RequestHandle request_handle = nullptr; 315 HostResolver::RequestHandle request_handle = nullptr;
321 resolver_->Resolve(request_info, DEFAULT_PRIORITY, &result, base::Bind(&Fail), 316 resolver_->Resolve(request_info, DEFAULT_PRIORITY, &result, base::Bind(&Fail),
322 &request_handle, BoundNetLog()); 317 &request_handle, BoundNetLog());
323 resolver_->CancelRequest(request_handle); 318 resolver_->CancelRequest(request_handle);
324 waiter_.WaitForEvent(ConnectionErrorSource::REQUEST); 319 waiter_.WaitForEvent(ConnectionErrorSource::REQUEST);
325 EXPECT_TRUE(result.empty()); 320 EXPECT_TRUE(result.empty());
326 321
327 ASSERT_EQ(1u, mock_resolver_->requests().size()); 322 ASSERT_EQ(1u, mock_resolver_->requests().size());
328 interfaces::HostResolverRequestInfo& request = *mock_resolver_->requests()[0]; 323 const HostResolver::RequestInfo& request = mock_resolver_->requests()[0];
329 EXPECT_EQ("example.com", request.host.To<std::string>()); 324 EXPECT_EQ("example.com", request.hostname());
330 EXPECT_EQ(80, request.port); 325 EXPECT_EQ(80, request.port());
331 EXPECT_EQ(interfaces::AddressFamily::IPV6, request.address_family); 326 EXPECT_EQ(ADDRESS_FAMILY_IPV6, request.address_family());
332 EXPECT_FALSE(request.is_my_ip_address); 327 EXPECT_FALSE(request.is_my_ip_address());
333 } 328 }
334 329
335 TEST_F(HostResolverMojoTest, ImplDropsClientConnection) { 330 TEST_F(HostResolverMojoTest, ImplDropsClientConnection) {
336 mock_resolver_->AddAction(HostResolverAction::DropRequest()); 331 mock_resolver_->AddAction(HostResolverAction::DropRequest());
337 HostResolver::RequestInfo request_info( 332 HostResolver::RequestInfo request_info(
338 HostPortPair::FromString("example.com:1")); 333 HostPortPair::FromString("example.com:1"));
339 AddressList result; 334 AddressList result;
340 EXPECT_EQ(ERR_FAILED, Resolve(request_info, &result)); 335 EXPECT_EQ(ERR_FAILED, Resolve(request_info, &result));
341 EXPECT_TRUE(result.empty()); 336 EXPECT_TRUE(result.empty());
342 337
343 ASSERT_EQ(1u, mock_resolver_->requests().size()); 338 ASSERT_EQ(1u, mock_resolver_->requests().size());
344 interfaces::HostResolverRequestInfo& request = *mock_resolver_->requests()[0]; 339 const HostResolver::RequestInfo& request = mock_resolver_->requests()[0];
345 EXPECT_EQ("example.com", request.host.To<std::string>()); 340 EXPECT_EQ("example.com", request.hostname());
346 EXPECT_EQ(1, request.port); 341 EXPECT_EQ(1, request.port());
347 EXPECT_EQ(interfaces::AddressFamily::UNSPECIFIED, request.address_family); 342 EXPECT_EQ(ADDRESS_FAMILY_UNSPECIFIED, request.address_family());
348 EXPECT_FALSE(request.is_my_ip_address); 343 EXPECT_FALSE(request.is_my_ip_address());
349 } 344 }
350 345
351 TEST_F(HostResolverMojoTest, ResolveFromCache_Miss) { 346 TEST_F(HostResolverMojoTest, ResolveFromCache_Miss) {
352 HostResolver::RequestInfo request_info( 347 HostResolver::RequestInfo request_info(
353 HostPortPair::FromString("example.com:8080")); 348 HostPortPair::FromString("example.com:8080"));
354 AddressList result; 349 AddressList result;
355 EXPECT_EQ(ERR_DNS_CACHE_MISS, 350 EXPECT_EQ(ERR_DNS_CACHE_MISS,
356 resolver_->ResolveFromCache(request_info, &result, BoundNetLog())); 351 resolver_->ResolveFromCache(request_info, &result, BoundNetLog()));
357 EXPECT_TRUE(result.empty()); 352 EXPECT_TRUE(result.empty());
358 } 353 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 EXPECT_EQ(ERR_DNS_CACHE_MISS, 392 EXPECT_EQ(ERR_DNS_CACHE_MISS,
398 resolver_->ResolveFromCache(request_info, &result, BoundNetLog())); 393 resolver_->ResolveFromCache(request_info, &result, BoundNetLog()));
399 EXPECT_TRUE(result.empty()); 394 EXPECT_TRUE(result.empty());
400 } 395 }
401 396
402 TEST_F(HostResolverMojoTest, GetHostCache) { 397 TEST_F(HostResolverMojoTest, GetHostCache) {
403 EXPECT_TRUE(resolver_->GetHostCache()); 398 EXPECT_TRUE(resolver_->GetHostCache());
404 } 399 }
405 400
406 } // namespace net 401 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698