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

Side by Side Diff: chrome/utility/local_discovery/service_discovery_client_unittest.cc

Issue 87693002: Refactored to make MDnsSocketFactory return array of sockets. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "base/memory/weak_ptr.h" 5 #include "base/memory/weak_ptr.h"
6 #include "base/run_loop.h" 6 #include "base/run_loop.h"
7 #include "chrome/utility/local_discovery/service_discovery_client_impl.h" 7 #include "chrome/utility/local_discovery/service_discovery_client_impl.h"
8 #include "net/base/net_errors.h" 8 #include "net/base/net_errors.h"
9 #include "net/dns/dns_protocol.h" 9 #include "net/dns/dns_protocol.h"
10 #include "net/dns/mdns_client_impl.h" 10 #include "net/dns/mdns_client_impl.h"
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 176
177 ServiceWatcher::UpdatedCallback GetCallback() { 177 ServiceWatcher::UpdatedCallback GetCallback() {
178 return base::Bind(&MockServiceWatcherClient::OnServiceUpdated, 178 return base::Bind(&MockServiceWatcherClient::OnServiceUpdated,
179 base::Unretained(this)); 179 base::Unretained(this));
180 } 180 }
181 }; 181 };
182 182
183 class ServiceDiscoveryTest : public ::testing::Test { 183 class ServiceDiscoveryTest : public ::testing::Test {
184 public: 184 public:
185 ServiceDiscoveryTest() 185 ServiceDiscoveryTest()
186 : socket_factory_(new net::MockMDnsSocketFactory), 186 : service_discovery_client_(&mdns_client_) {
187 mdns_client_( 187 mdns_client_.StartListening(&socket_factory_);
188 scoped_ptr<net::MDnsConnection::SocketFactory>(
189 socket_factory_)),
190 service_discovery_client_(&mdns_client_) {
191 mdns_client_.StartListening();
192 } 188 }
193 189
194 virtual ~ServiceDiscoveryTest() { 190 virtual ~ServiceDiscoveryTest() {
195 } 191 }
196 192
197 protected: 193 protected:
198 void RunFor(base::TimeDelta time_period) { 194 void RunFor(base::TimeDelta time_period) {
199 base::CancelableCallback<void()> callback(base::Bind( 195 base::CancelableCallback<void()> callback(base::Bind(
200 &ServiceDiscoveryTest::Stop, base::Unretained(this))); 196 &ServiceDiscoveryTest::Stop, base::Unretained(this)));
201 base::MessageLoop::current()->PostDelayedTask( 197 base::MessageLoop::current()->PostDelayedTask(
202 FROM_HERE, callback.callback(), time_period); 198 FROM_HERE, callback.callback(), time_period);
203 199
204 base::MessageLoop::current()->Run(); 200 base::MessageLoop::current()->Run();
205 callback.Cancel(); 201 callback.Cancel();
206 } 202 }
207 203
208 void Stop() { 204 void Stop() {
209 base::MessageLoop::current()->Quit(); 205 base::MessageLoop::current()->Quit();
210 } 206 }
211 207
212 net::MockMDnsSocketFactory* socket_factory_; 208 net::MockMDnsSocketFactory socket_factory_;
213 net::MDnsClientImpl mdns_client_; 209 net::MDnsClientImpl mdns_client_;
214 ServiceDiscoveryClientImpl service_discovery_client_; 210 ServiceDiscoveryClientImpl service_discovery_client_;
215 base::MessageLoop loop_; 211 base::MessageLoop loop_;
216 }; 212 };
217 213
218 TEST_F(ServiceDiscoveryTest, AddRemoveService) { 214 TEST_F(ServiceDiscoveryTest, AddRemoveService) {
219 StrictMock<MockServiceWatcherClient> delegate; 215 StrictMock<MockServiceWatcherClient> delegate;
220 216
221 scoped_ptr<ServiceWatcher> watcher( 217 scoped_ptr<ServiceWatcher> watcher(
222 service_discovery_client_.CreateServiceWatcher( 218 service_discovery_client_.CreateServiceWatcher(
223 "_privet._tcp.local", delegate.GetCallback())); 219 "_privet._tcp.local", delegate.GetCallback()));
224 220
225 watcher->Start(); 221 watcher->Start();
226 222
227 EXPECT_CALL(delegate, OnServiceUpdated(ServiceWatcher::UPDATE_ADDED, 223 EXPECT_CALL(delegate, OnServiceUpdated(ServiceWatcher::UPDATE_ADDED,
228 "hello._privet._tcp.local")) 224 "hello._privet._tcp.local"))
229 .Times(Exactly(1)); 225 .Times(Exactly(1));
230 226
231 socket_factory_->SimulateReceive( 227 socket_factory_.SimulateReceive(kSamplePacketPTR, sizeof(kSamplePacketPTR));
232 kSamplePacketPTR, sizeof(kSamplePacketPTR));
233 228
234 EXPECT_CALL(delegate, OnServiceUpdated(ServiceWatcher::UPDATE_REMOVED, 229 EXPECT_CALL(delegate, OnServiceUpdated(ServiceWatcher::UPDATE_REMOVED,
235 "hello._privet._tcp.local")) 230 "hello._privet._tcp.local"))
236 .Times(Exactly(1)); 231 .Times(Exactly(1));
237 232
238 RunFor(base::TimeDelta::FromSeconds(2)); 233 RunFor(base::TimeDelta::FromSeconds(2));
239 }; 234 };
240 235
241 TEST_F(ServiceDiscoveryTest, DiscoverNewServices) { 236 TEST_F(ServiceDiscoveryTest, DiscoverNewServices) {
242 StrictMock<MockServiceWatcherClient> delegate; 237 StrictMock<MockServiceWatcherClient> delegate;
243 238
244 scoped_ptr<ServiceWatcher> watcher( 239 scoped_ptr<ServiceWatcher> watcher(
245 service_discovery_client_.CreateServiceWatcher( 240 service_discovery_client_.CreateServiceWatcher(
246 "_privet._tcp.local", delegate.GetCallback())); 241 "_privet._tcp.local", delegate.GetCallback()));
247 242
248 watcher->Start(); 243 watcher->Start();
249 244
250 EXPECT_CALL(*socket_factory_, OnSendTo(_)) 245 EXPECT_CALL(socket_factory_, OnSendTo(_)).Times(2);
251 .Times(2);
252 246
253 watcher->DiscoverNewServices(false); 247 watcher->DiscoverNewServices(false);
254 }; 248 };
255 249
256 TEST_F(ServiceDiscoveryTest, ReadCachedServices) { 250 TEST_F(ServiceDiscoveryTest, ReadCachedServices) {
257 socket_factory_->SimulateReceive( 251 socket_factory_.SimulateReceive(kSamplePacketPTR, sizeof(kSamplePacketPTR));
258 kSamplePacketPTR, sizeof(kSamplePacketPTR));
259 252
260 StrictMock<MockServiceWatcherClient> delegate; 253 StrictMock<MockServiceWatcherClient> delegate;
261 254
262 scoped_ptr<ServiceWatcher> watcher( 255 scoped_ptr<ServiceWatcher> watcher(
263 service_discovery_client_.CreateServiceWatcher( 256 service_discovery_client_.CreateServiceWatcher(
264 "_privet._tcp.local", delegate.GetCallback())); 257 "_privet._tcp.local", delegate.GetCallback()));
265 258
266 watcher->Start(); 259 watcher->Start();
267 260
268 EXPECT_CALL(delegate, OnServiceUpdated(ServiceWatcher::UPDATE_ADDED, 261 EXPECT_CALL(delegate, OnServiceUpdated(ServiceWatcher::UPDATE_ADDED,
269 "hello._privet._tcp.local")) 262 "hello._privet._tcp.local"))
270 .Times(Exactly(1)); 263 .Times(Exactly(1));
271 264
272 base::MessageLoop::current()->RunUntilIdle(); 265 base::MessageLoop::current()->RunUntilIdle();
273 }; 266 };
274 267
275 268
276 TEST_F(ServiceDiscoveryTest, ReadCachedServicesMultiple) { 269 TEST_F(ServiceDiscoveryTest, ReadCachedServicesMultiple) {
277 socket_factory_->SimulateReceive( 270 socket_factory_.SimulateReceive(kSamplePacketPTR2, sizeof(kSamplePacketPTR2));
278 kSamplePacketPTR2, sizeof(kSamplePacketPTR2));
279 271
280 StrictMock<MockServiceWatcherClient> delegate; 272 StrictMock<MockServiceWatcherClient> delegate;
281 scoped_ptr<ServiceWatcher> watcher = 273 scoped_ptr<ServiceWatcher> watcher =
282 service_discovery_client_.CreateServiceWatcher( 274 service_discovery_client_.CreateServiceWatcher(
283 "_privet._tcp.local", delegate.GetCallback()); 275 "_privet._tcp.local", delegate.GetCallback());
284 276
285 watcher->Start(); 277 watcher->Start();
286 278
287 EXPECT_CALL(delegate, OnServiceUpdated(ServiceWatcher::UPDATE_ADDED, 279 EXPECT_CALL(delegate, OnServiceUpdated(ServiceWatcher::UPDATE_ADDED,
288 "hello._privet._tcp.local")) 280 "hello._privet._tcp.local"))
(...skipping 12 matching lines...) Expand all
301 scoped_ptr<ServiceWatcher> watcher( 293 scoped_ptr<ServiceWatcher> watcher(
302 service_discovery_client_.CreateServiceWatcher( 294 service_discovery_client_.CreateServiceWatcher(
303 "_privet._tcp.local", delegate.GetCallback())); 295 "_privet._tcp.local", delegate.GetCallback()));
304 296
305 watcher->Start(); 297 watcher->Start();
306 298
307 EXPECT_CALL(delegate, OnServiceUpdated(ServiceWatcher::UPDATE_ADDED, 299 EXPECT_CALL(delegate, OnServiceUpdated(ServiceWatcher::UPDATE_ADDED,
308 "hello._privet._tcp.local")) 300 "hello._privet._tcp.local"))
309 .Times(Exactly(1)); 301 .Times(Exactly(1));
310 302
311 socket_factory_->SimulateReceive( 303 socket_factory_.SimulateReceive(kSamplePacketPTR, sizeof(kSamplePacketPTR));
312 kSamplePacketPTR, sizeof(kSamplePacketPTR));
313 304
314 base::MessageLoop::current()->RunUntilIdle(); 305 base::MessageLoop::current()->RunUntilIdle();
315 306
316 EXPECT_CALL(delegate, OnServiceUpdated(ServiceWatcher::UPDATE_CHANGED, 307 EXPECT_CALL(delegate, OnServiceUpdated(ServiceWatcher::UPDATE_CHANGED,
317 "hello._privet._tcp.local")) 308 "hello._privet._tcp.local"))
318 .Times(Exactly(1)); 309 .Times(Exactly(1));
319 310
320 socket_factory_->SimulateReceive( 311 socket_factory_.SimulateReceive(kSamplePacketSRV, sizeof(kSamplePacketSRV));
321 kSamplePacketSRV, sizeof(kSamplePacketSRV));
322 312
323 socket_factory_->SimulateReceive( 313 socket_factory_.SimulateReceive(kSamplePacketTXT, sizeof(kSamplePacketTXT));
324 kSamplePacketTXT, sizeof(kSamplePacketTXT));
325 314
326 base::MessageLoop::current()->RunUntilIdle(); 315 base::MessageLoop::current()->RunUntilIdle();
327 }; 316 };
328 317
329 TEST_F(ServiceDiscoveryTest, SinglePacket) { 318 TEST_F(ServiceDiscoveryTest, SinglePacket) {
330 StrictMock<MockServiceWatcherClient> delegate; 319 StrictMock<MockServiceWatcherClient> delegate;
331 scoped_ptr<ServiceWatcher> watcher( 320 scoped_ptr<ServiceWatcher> watcher(
332 service_discovery_client_.CreateServiceWatcher( 321 service_discovery_client_.CreateServiceWatcher(
333 "_privet._tcp.local", delegate.GetCallback())); 322 "_privet._tcp.local", delegate.GetCallback()));
334 323
335 watcher->Start(); 324 watcher->Start();
336 325
337 EXPECT_CALL(delegate, OnServiceUpdated(ServiceWatcher::UPDATE_ADDED, 326 EXPECT_CALL(delegate, OnServiceUpdated(ServiceWatcher::UPDATE_ADDED,
338 "hello._privet._tcp.local")) 327 "hello._privet._tcp.local"))
339 .Times(Exactly(1)); 328 .Times(Exactly(1));
340 329
341 socket_factory_->SimulateReceive( 330 socket_factory_.SimulateReceive(kSamplePacketPTR, sizeof(kSamplePacketPTR));
342 kSamplePacketPTR, sizeof(kSamplePacketPTR));
343 331
344 // Reset the "already updated" flag. 332 // Reset the "already updated" flag.
345 base::MessageLoop::current()->RunUntilIdle(); 333 base::MessageLoop::current()->RunUntilIdle();
346 334
347 EXPECT_CALL(delegate, OnServiceUpdated(ServiceWatcher::UPDATE_CHANGED, 335 EXPECT_CALL(delegate, OnServiceUpdated(ServiceWatcher::UPDATE_CHANGED,
348 "hello._privet._tcp.local")) 336 "hello._privet._tcp.local"))
349 .Times(Exactly(1)); 337 .Times(Exactly(1));
350 338
351 socket_factory_->SimulateReceive( 339 socket_factory_.SimulateReceive(kSamplePacketSRV, sizeof(kSamplePacketSRV));
352 kSamplePacketSRV, sizeof(kSamplePacketSRV));
353 340
354 socket_factory_->SimulateReceive( 341 socket_factory_.SimulateReceive(kSamplePacketTXT, sizeof(kSamplePacketTXT));
355 kSamplePacketTXT, sizeof(kSamplePacketTXT));
356 342
357 base::MessageLoop::current()->RunUntilIdle(); 343 base::MessageLoop::current()->RunUntilIdle();
358 }; 344 };
359 345
360 class ServiceResolverTest : public ServiceDiscoveryTest { 346 class ServiceResolverTest : public ServiceDiscoveryTest {
361 public: 347 public:
362 ServiceResolverTest() { 348 ServiceResolverTest() {
363 metadata_expected_.push_back("hello"); 349 metadata_expected_.push_back("hello");
364 address_expected_ = net::HostPortPair("myhello.local", 8888); 350 address_expected_ = net::HostPortPair("myhello.local", 8888);
365 ip_address_expected_.push_back(1); 351 ip_address_expected_.push_back(1);
(...skipping 28 matching lines...) Expand all
394 380
395 protected: 381 protected:
396 scoped_ptr<ServiceResolver> resolver_; 382 scoped_ptr<ServiceResolver> resolver_;
397 net::IPAddressNumber ip_address_; 383 net::IPAddressNumber ip_address_;
398 net::HostPortPair address_expected_; 384 net::HostPortPair address_expected_;
399 std::vector<std::string> metadata_expected_; 385 std::vector<std::string> metadata_expected_;
400 net::IPAddressNumber ip_address_expected_; 386 net::IPAddressNumber ip_address_expected_;
401 }; 387 };
402 388
403 TEST_F(ServiceResolverTest, TxtAndSrvButNoA) { 389 TEST_F(ServiceResolverTest, TxtAndSrvButNoA) {
404 EXPECT_CALL(*socket_factory_, OnSendTo(_)) 390 EXPECT_CALL(socket_factory_, OnSendTo(_)).Times(4);
405 .Times(4);
406 391
407 resolver_->StartResolving(); 392 resolver_->StartResolving();
408 393
409 socket_factory_->SimulateReceive( 394 socket_factory_.SimulateReceive(kSamplePacketSRV, sizeof(kSamplePacketSRV));
410 kSamplePacketSRV, sizeof(kSamplePacketSRV));
411 395
412 base::MessageLoop::current()->RunUntilIdle(); 396 base::MessageLoop::current()->RunUntilIdle();
413 397
414 EXPECT_CALL(*this, 398 EXPECT_CALL(*this,
415 OnFinishedResolvingInternal(ServiceResolver::STATUS_SUCCESS, 399 OnFinishedResolvingInternal(ServiceResolver::STATUS_SUCCESS,
416 address_expected_.ToString(), 400 address_expected_.ToString(),
417 metadata_expected_, 401 metadata_expected_,
418 net::IPAddressNumber())); 402 net::IPAddressNumber()));
419 403
420 socket_factory_->SimulateReceive( 404 socket_factory_.SimulateReceive(kSamplePacketTXT, sizeof(kSamplePacketTXT));
421 kSamplePacketTXT, sizeof(kSamplePacketTXT));
422 }; 405 };
423 406
424 TEST_F(ServiceResolverTest, TxtSrvAndA) { 407 TEST_F(ServiceResolverTest, TxtSrvAndA) {
425 EXPECT_CALL(*socket_factory_, OnSendTo(_)) 408 EXPECT_CALL(socket_factory_, OnSendTo(_)).Times(4);
426 .Times(4);
427 409
428 resolver_->StartResolving(); 410 resolver_->StartResolving();
429 411
430 EXPECT_CALL(*this, 412 EXPECT_CALL(*this,
431 OnFinishedResolvingInternal(ServiceResolver::STATUS_SUCCESS, 413 OnFinishedResolvingInternal(ServiceResolver::STATUS_SUCCESS,
432 address_expected_.ToString(), 414 address_expected_.ToString(),
433 metadata_expected_, 415 metadata_expected_,
434 ip_address_expected_)); 416 ip_address_expected_));
435 417
436 socket_factory_->SimulateReceive( 418 socket_factory_.SimulateReceive(kSamplePacketTXT, sizeof(kSamplePacketTXT));
437 kSamplePacketTXT, sizeof(kSamplePacketTXT));
438 419
439 socket_factory_->SimulateReceive( 420 socket_factory_.SimulateReceive(kSamplePacketSRVA, sizeof(kSamplePacketSRVA));
440 kSamplePacketSRVA, sizeof(kSamplePacketSRVA));
441 }; 421 };
442 422
443 TEST_F(ServiceResolverTest, JustSrv) { 423 TEST_F(ServiceResolverTest, JustSrv) {
444 EXPECT_CALL(*socket_factory_, OnSendTo(_)) 424 EXPECT_CALL(socket_factory_, OnSendTo(_)).Times(4);
445 .Times(4);
446 425
447 resolver_->StartResolving(); 426 resolver_->StartResolving();
448 427
449 EXPECT_CALL(*this, 428 EXPECT_CALL(*this,
450 OnFinishedResolvingInternal(ServiceResolver::STATUS_SUCCESS, 429 OnFinishedResolvingInternal(ServiceResolver::STATUS_SUCCESS,
451 address_expected_.ToString(), 430 address_expected_.ToString(),
452 std::vector<std::string>(), 431 std::vector<std::string>(),
453 ip_address_expected_)); 432 ip_address_expected_));
454 433
455 socket_factory_->SimulateReceive( 434 socket_factory_.SimulateReceive(kSamplePacketSRVA, sizeof(kSamplePacketSRVA));
456 kSamplePacketSRVA, sizeof(kSamplePacketSRVA));
457 435
458 // TODO(noamsml): When NSEC record support is added, change this to use an 436 // TODO(noamsml): When NSEC record support is added, change this to use an
459 // NSEC record. 437 // NSEC record.
460 RunFor(base::TimeDelta::FromSeconds(4)); 438 RunFor(base::TimeDelta::FromSeconds(4));
461 }; 439 };
462 440
463 TEST_F(ServiceResolverTest, WithNothing) { 441 TEST_F(ServiceResolverTest, WithNothing) {
464 EXPECT_CALL(*socket_factory_, OnSendTo(_)) 442 EXPECT_CALL(socket_factory_, OnSendTo(_)).Times(4);
465 .Times(4);
466 443
467 resolver_->StartResolving(); 444 resolver_->StartResolving();
468 445
469 EXPECT_CALL(*this, OnFinishedResolvingInternal( 446 EXPECT_CALL(*this, OnFinishedResolvingInternal(
470 ServiceResolver::STATUS_REQUEST_TIMEOUT, _, _, _)); 447 ServiceResolver::STATUS_REQUEST_TIMEOUT, _, _, _));
471 448
472 // TODO(noamsml): When NSEC record support is added, change this to use an 449 // TODO(noamsml): When NSEC record support is added, change this to use an
473 // NSEC record. 450 // NSEC record.
474 RunFor(base::TimeDelta::FromSeconds(4)); 451 RunFor(base::TimeDelta::FromSeconds(4));
475 }; 452 };
476 453
477 } // namespace 454 } // namespace
478 455
479 } // namespace local_discovery 456 } // namespace local_discovery
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698