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 <map> | 5 #include <map> |
6 #include <queue> | 6 #include <queue> |
7 #include <set> | 7 #include <set> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 config_.interfaces.push_back(interface); | 44 config_.interfaces.push_back(interface); |
45 return *this; | 45 return *this; |
46 } | 46 } |
47 | 47 |
48 const UsbConfigDescriptor& config() const { return config_; } | 48 const UsbConfigDescriptor& config() const { return config_; } |
49 | 49 |
50 private: | 50 private: |
51 UsbConfigDescriptor config_; | 51 UsbConfigDescriptor config_; |
52 }; | 52 }; |
53 | 53 |
| 54 void ExpectOpenAndThen(OpenDeviceError expected, |
| 55 const base::Closure& continuation, |
| 56 OpenDeviceError error) { |
| 57 EXPECT_EQ(expected, error); |
| 58 continuation.Run(); |
| 59 } |
| 60 |
54 void ExpectDeviceInfoAndThen(const std::string& guid, | 61 void ExpectDeviceInfoAndThen(const std::string& guid, |
55 uint16_t vendor_id, | 62 uint16_t vendor_id, |
56 uint16_t product_id, | 63 uint16_t product_id, |
57 const std::string& manufacturer_name, | 64 const std::string& manufacturer_name, |
58 const std::string& product_name, | 65 const std::string& product_name, |
59 const std::string& serial_number, | 66 const std::string& serial_number, |
60 const base::Closure& continuation, | 67 const base::Closure& continuation, |
61 DeviceInfoPtr device_info) { | 68 DeviceInfoPtr device_info) { |
62 EXPECT_EQ(guid, device_info->guid); | 69 EXPECT_EQ(guid, device_info->guid); |
63 EXPECT_EQ(vendor_id, device_info->vendor_id); | 70 EXPECT_EQ(vendor_id, device_info->vendor_id); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 | 139 |
133 void set_allow_reset(bool allow_reset) { allow_reset_ = allow_reset; } | 140 void set_allow_reset(bool allow_reset) { allow_reset_ = allow_reset; } |
134 | 141 |
135 // Creates a mock device and binds a Device proxy to a Device service impl | 142 // Creates a mock device and binds a Device proxy to a Device service impl |
136 // wrapping the mock device. | 143 // wrapping the mock device. |
137 DevicePtr GetMockDeviceProxy(uint16_t vendor_id, | 144 DevicePtr GetMockDeviceProxy(uint16_t vendor_id, |
138 uint16_t product_id, | 145 uint16_t product_id, |
139 const std::string& manufacturer, | 146 const std::string& manufacturer, |
140 const std::string& product, | 147 const std::string& product, |
141 const std::string& serial) { | 148 const std::string& serial) { |
142 is_device_open_ = true; | |
143 | |
144 mock_device_ = | 149 mock_device_ = |
145 new MockUsbDevice(vendor_id, product_id, manufacturer, product, serial); | 150 new MockUsbDevice(vendor_id, product_id, manufacturer, product, serial); |
146 mock_handle_ = new MockUsbDeviceHandle(mock_device_.get()); | 151 mock_handle_ = new MockUsbDeviceHandle(mock_device_.get()); |
147 | 152 |
148 DevicePtr proxy; | 153 DevicePtr proxy; |
149 new DeviceImpl(mock_handle_, mojo::GetProxy(&proxy)); | 154 new DeviceImpl(mock_device_, mojo::GetProxy(&proxy)); |
150 | 155 |
151 // Set up mock handle calls to respond based on mock device configs | 156 // Set up mock handle calls to respond based on mock device configs |
152 // established by the test. | 157 // established by the test. |
| 158 ON_CALL(mock_device(), Open(_)) |
| 159 .WillByDefault(Invoke(this, &USBDeviceImplTest::OpenMockHandle)); |
153 ON_CALL(mock_handle(), Close()) | 160 ON_CALL(mock_handle(), Close()) |
154 .WillByDefault(Invoke(this, &USBDeviceImplTest::CloseMockHandle)); | 161 .WillByDefault(Invoke(this, &USBDeviceImplTest::CloseMockHandle)); |
155 ON_CALL(mock_handle(), SetConfiguration(_, _)) | 162 ON_CALL(mock_handle(), SetConfiguration(_, _)) |
156 .WillByDefault(Invoke(this, &USBDeviceImplTest::SetConfiguration)); | 163 .WillByDefault(Invoke(this, &USBDeviceImplTest::SetConfiguration)); |
157 ON_CALL(mock_handle(), ClaimInterface(_, _)) | 164 ON_CALL(mock_handle(), ClaimInterface(_, _)) |
158 .WillByDefault(Invoke(this, &USBDeviceImplTest::ClaimInterface)); | 165 .WillByDefault(Invoke(this, &USBDeviceImplTest::ClaimInterface)); |
159 ON_CALL(mock_handle(), ReleaseInterface(_)) | 166 ON_CALL(mock_handle(), ReleaseInterface(_)) |
160 .WillByDefault(Invoke(this, &USBDeviceImplTest::ReleaseInterface)); | 167 .WillByDefault(Invoke(this, &USBDeviceImplTest::ReleaseInterface)); |
161 ON_CALL(mock_handle(), SetInterfaceAlternateSetting(_, _, _)) | 168 ON_CALL(mock_handle(), SetInterfaceAlternateSetting(_, _, _)) |
162 .WillByDefault( | 169 .WillByDefault( |
(...skipping 22 matching lines...) Expand all Loading... |
185 | 192 |
186 void AddMockInboundData(const std::vector<uint8_t>& data) { | 193 void AddMockInboundData(const std::vector<uint8_t>& data) { |
187 mock_inbound_data_.push(data); | 194 mock_inbound_data_.push(data); |
188 } | 195 } |
189 | 196 |
190 void AddMockOutboundData(const std::vector<uint8_t>& data) { | 197 void AddMockOutboundData(const std::vector<uint8_t>& data) { |
191 mock_outbound_data_.push(data); | 198 mock_outbound_data_.push(data); |
192 } | 199 } |
193 | 200 |
194 private: | 201 private: |
| 202 void OpenMockHandle(const UsbDevice::OpenCallback& callback) { |
| 203 EXPECT_FALSE(is_device_open_); |
| 204 is_device_open_ = true; |
| 205 callback.Run(mock_handle_); |
| 206 } |
| 207 |
195 void CloseMockHandle() { | 208 void CloseMockHandle() { |
196 EXPECT_TRUE(is_device_open_); | 209 EXPECT_TRUE(is_device_open_); |
197 is_device_open_ = false; | 210 is_device_open_ = false; |
198 } | 211 } |
199 | 212 |
200 void SetConfiguration(uint8_t value, | 213 void SetConfiguration(uint8_t value, |
201 const UsbDeviceHandle::ResultCallback& callback) { | 214 const UsbDeviceHandle::ResultCallback& callback) { |
202 if (mock_configs_.find(value) != mock_configs_.end()) { | 215 if (mock_configs_.find(value) != mock_configs_.end()) { |
203 current_config_ = value; | 216 current_config_ = value; |
204 callback.Run(true); | 217 callback.Run(true); |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 std::queue<std::vector<uint8_t>> mock_inbound_data_; | 340 std::queue<std::vector<uint8_t>> mock_inbound_data_; |
328 std::queue<std::vector<uint8_t>> mock_outbound_data_; | 341 std::queue<std::vector<uint8_t>> mock_outbound_data_; |
329 | 342 |
330 std::set<uint8_t> claimed_interfaces_; | 343 std::set<uint8_t> claimed_interfaces_; |
331 | 344 |
332 DISALLOW_COPY_AND_ASSIGN(USBDeviceImplTest); | 345 DISALLOW_COPY_AND_ASSIGN(USBDeviceImplTest); |
333 }; | 346 }; |
334 | 347 |
335 } // namespace | 348 } // namespace |
336 | 349 |
| 350 TEST_F(USBDeviceImplTest, Open) { |
| 351 DevicePtr device = GetMockDeviceProxy(); |
| 352 |
| 353 EXPECT_FALSE(is_device_open()); |
| 354 |
| 355 EXPECT_CALL(mock_device(), Open(_)); |
| 356 |
| 357 base::RunLoop loop; |
| 358 device->Open( |
| 359 base::Bind(&ExpectOpenAndThen, OPEN_DEVICE_ERROR_OK, loop.QuitClosure())); |
| 360 loop.Run(); |
| 361 |
| 362 EXPECT_CALL(mock_handle(), Close()); |
| 363 } |
| 364 |
337 TEST_F(USBDeviceImplTest, Close) { | 365 TEST_F(USBDeviceImplTest, Close) { |
338 DevicePtr device = GetMockDeviceProxy(); | 366 DevicePtr device = GetMockDeviceProxy(); |
339 | 367 |
340 EXPECT_TRUE(is_device_open()); | 368 EXPECT_FALSE(is_device_open()); |
| 369 |
| 370 EXPECT_CALL(mock_device(), Open(_)); |
| 371 |
| 372 { |
| 373 base::RunLoop loop; |
| 374 device->Open(base::Bind(&ExpectOpenAndThen, OPEN_DEVICE_ERROR_OK, |
| 375 loop.QuitClosure())); |
| 376 loop.Run(); |
| 377 } |
341 | 378 |
342 EXPECT_CALL(mock_handle(), Close()); | 379 EXPECT_CALL(mock_handle(), Close()); |
343 | 380 |
344 base::RunLoop loop; | 381 { |
345 device->Close(loop.QuitClosure()); | 382 base::RunLoop loop; |
346 loop.Run(); | 383 device->Close(loop.QuitClosure()); |
| 384 loop.Run(); |
| 385 } |
347 | 386 |
348 EXPECT_FALSE(is_device_open()); | 387 EXPECT_FALSE(is_device_open()); |
349 } | 388 } |
350 | 389 |
351 // Test that the information returned via the Device::GetDeviceInfo matches that | 390 // Test that the information returned via the Device::GetDeviceInfo matches that |
352 // of the underlying device. | 391 // of the underlying device. |
353 TEST_F(USBDeviceImplTest, GetDeviceInfo) { | 392 TEST_F(USBDeviceImplTest, GetDeviceInfo) { |
354 DevicePtr device = | 393 DevicePtr device = |
355 GetMockDeviceProxy(0x1234, 0x5678, "ACME", "Frobinator", "ABCDEF"); | 394 GetMockDeviceProxy(0x1234, 0x5678, "ACME", "Frobinator", "ABCDEF"); |
356 | 395 |
357 base::RunLoop loop; | 396 base::RunLoop loop; |
358 device->GetDeviceInfo(base::Bind(&ExpectDeviceInfoAndThen, | 397 device->GetDeviceInfo(base::Bind(&ExpectDeviceInfoAndThen, |
359 mock_device().guid(), 0x1234, 0x5678, "ACME", | 398 mock_device().guid(), 0x1234, 0x5678, "ACME", |
360 "Frobinator", "ABCDEF", loop.QuitClosure())); | 399 "Frobinator", "ABCDEF", loop.QuitClosure())); |
361 loop.Run(); | 400 loop.Run(); |
362 | |
363 EXPECT_CALL(mock_handle(), Close()); | |
364 } | 401 } |
365 | 402 |
366 TEST_F(USBDeviceImplTest, SetInvalidConfiguration) { | 403 TEST_F(USBDeviceImplTest, SetInvalidConfiguration) { |
367 DevicePtr device = GetMockDeviceProxy(); | 404 DevicePtr device = GetMockDeviceProxy(); |
368 | 405 |
| 406 EXPECT_CALL(mock_device(), Open(_)); |
| 407 |
| 408 { |
| 409 base::RunLoop loop; |
| 410 device->Open(base::Bind(&ExpectOpenAndThen, OPEN_DEVICE_ERROR_OK, |
| 411 loop.QuitClosure())); |
| 412 loop.Run(); |
| 413 } |
| 414 |
369 EXPECT_CALL(mock_handle(), SetConfiguration(42, _)); | 415 EXPECT_CALL(mock_handle(), SetConfiguration(42, _)); |
370 | 416 |
371 // SetConfiguration should fail because 42 is not a valid mock configuration. | 417 { |
372 base::RunLoop loop; | 418 // SetConfiguration should fail because 42 is not a valid mock |
373 device->SetConfiguration( | 419 // configuration. |
374 42, base::Bind(&ExpectResultAndThen, false, loop.QuitClosure())); | 420 base::RunLoop loop; |
375 loop.Run(); | 421 device->SetConfiguration( |
| 422 42, base::Bind(&ExpectResultAndThen, false, loop.QuitClosure())); |
| 423 loop.Run(); |
| 424 } |
376 | 425 |
377 EXPECT_CALL(mock_handle(), Close()); | 426 EXPECT_CALL(mock_handle(), Close()); |
378 } | 427 } |
379 | 428 |
380 TEST_F(USBDeviceImplTest, SetValidConfiguration) { | 429 TEST_F(USBDeviceImplTest, SetValidConfiguration) { |
381 DevicePtr device = GetMockDeviceProxy(); | 430 DevicePtr device = GetMockDeviceProxy(); |
382 | 431 |
| 432 EXPECT_CALL(mock_device(), Open(_)); |
| 433 |
| 434 { |
| 435 base::RunLoop loop; |
| 436 device->Open(base::Bind(&ExpectOpenAndThen, OPEN_DEVICE_ERROR_OK, |
| 437 loop.QuitClosure())); |
| 438 loop.Run(); |
| 439 } |
| 440 |
383 EXPECT_CALL(mock_handle(), SetConfiguration(42, _)); | 441 EXPECT_CALL(mock_handle(), SetConfiguration(42, _)); |
384 | 442 |
385 AddMockConfig(ConfigBuilder(42)); | 443 AddMockConfig(ConfigBuilder(42)); |
386 | 444 |
387 // SetConfiguration should succeed because 42 is a valid mock configuration. | 445 { |
388 base::RunLoop loop; | 446 // SetConfiguration should succeed because 42 is a valid mock configuration. |
389 device->SetConfiguration( | 447 base::RunLoop loop; |
390 42, base::Bind(&ExpectResultAndThen, true, loop.QuitClosure())); | 448 device->SetConfiguration( |
391 loop.Run(); | 449 42, base::Bind(&ExpectResultAndThen, true, loop.QuitClosure())); |
| 450 loop.Run(); |
| 451 } |
392 | 452 |
393 EXPECT_CALL(mock_handle(), Close()); | 453 EXPECT_CALL(mock_handle(), Close()); |
394 } | 454 } |
395 | 455 |
396 // Verify that the result of Reset() reflects the underlying UsbDeviceHandle's | 456 // Verify that the result of Reset() reflects the underlying UsbDeviceHandle's |
397 // ResetDevice() result. | 457 // ResetDevice() result. |
398 TEST_F(USBDeviceImplTest, Reset) { | 458 TEST_F(USBDeviceImplTest, Reset) { |
399 DevicePtr device = GetMockDeviceProxy(); | 459 DevicePtr device = GetMockDeviceProxy(); |
400 | 460 |
| 461 EXPECT_CALL(mock_device(), Open(_)); |
| 462 |
| 463 { |
| 464 base::RunLoop loop; |
| 465 device->Open(base::Bind(&ExpectOpenAndThen, OPEN_DEVICE_ERROR_OK, |
| 466 loop.QuitClosure())); |
| 467 loop.Run(); |
| 468 } |
| 469 |
401 EXPECT_CALL(mock_handle(), ResetDevice(_)); | 470 EXPECT_CALL(mock_handle(), ResetDevice(_)); |
402 | 471 |
403 set_allow_reset(true); | 472 set_allow_reset(true); |
404 | 473 |
405 { | 474 { |
406 base::RunLoop loop; | 475 base::RunLoop loop; |
407 device->Reset(base::Bind(&ExpectResultAndThen, true, loop.QuitClosure())); | 476 device->Reset(base::Bind(&ExpectResultAndThen, true, loop.QuitClosure())); |
408 loop.Run(); | 477 loop.Run(); |
409 } | 478 } |
410 | 479 |
411 EXPECT_CALL(mock_handle(), ResetDevice(_)); | 480 EXPECT_CALL(mock_handle(), ResetDevice(_)); |
412 | 481 |
413 set_allow_reset(false); | 482 set_allow_reset(false); |
414 | 483 |
415 { | 484 { |
416 base::RunLoop loop; | 485 base::RunLoop loop; |
417 device->Reset(base::Bind(&ExpectResultAndThen, false, loop.QuitClosure())); | 486 device->Reset(base::Bind(&ExpectResultAndThen, false, loop.QuitClosure())); |
418 loop.Run(); | 487 loop.Run(); |
419 } | 488 } |
420 | 489 |
421 EXPECT_CALL(mock_handle(), Close()); | 490 EXPECT_CALL(mock_handle(), Close()); |
422 } | 491 } |
423 | 492 |
424 TEST_F(USBDeviceImplTest, ClaimAndReleaseInterface) { | 493 TEST_F(USBDeviceImplTest, ClaimAndReleaseInterface) { |
425 DevicePtr device = GetMockDeviceProxy(); | 494 DevicePtr device = GetMockDeviceProxy(); |
426 | 495 |
| 496 EXPECT_CALL(mock_device(), Open(_)); |
| 497 |
| 498 { |
| 499 base::RunLoop loop; |
| 500 device->Open(base::Bind(&ExpectOpenAndThen, OPEN_DEVICE_ERROR_OK, |
| 501 loop.QuitClosure())); |
| 502 loop.Run(); |
| 503 } |
| 504 |
427 // Now add a mock interface #1. | 505 // Now add a mock interface #1. |
428 AddMockConfig(ConfigBuilder(0).AddInterface(1, 0, 1, 2, 3)); | 506 AddMockConfig(ConfigBuilder(0).AddInterface(1, 0, 1, 2, 3)); |
429 | 507 |
430 EXPECT_CALL(mock_handle(), ClaimInterface(2, _)); | 508 EXPECT_CALL(mock_handle(), ClaimInterface(2, _)); |
431 | 509 |
432 { | 510 { |
433 // Try to claim an invalid interface and expect failure. | 511 // Try to claim an invalid interface and expect failure. |
434 base::RunLoop loop; | 512 base::RunLoop loop; |
435 device->ClaimInterface( | 513 device->ClaimInterface( |
436 2, base::Bind(&ExpectResultAndThen, false, loop.QuitClosure())); | 514 2, base::Bind(&ExpectResultAndThen, false, loop.QuitClosure())); |
(...skipping 28 matching lines...) Expand all Loading... |
465 1, base::Bind(&ExpectResultAndThen, true, loop.QuitClosure())); | 543 1, base::Bind(&ExpectResultAndThen, true, loop.QuitClosure())); |
466 loop.Run(); | 544 loop.Run(); |
467 } | 545 } |
468 | 546 |
469 EXPECT_CALL(mock_handle(), Close()); | 547 EXPECT_CALL(mock_handle(), Close()); |
470 } | 548 } |
471 | 549 |
472 TEST_F(USBDeviceImplTest, SetInterfaceAlternateSetting) { | 550 TEST_F(USBDeviceImplTest, SetInterfaceAlternateSetting) { |
473 DevicePtr device = GetMockDeviceProxy(); | 551 DevicePtr device = GetMockDeviceProxy(); |
474 | 552 |
| 553 EXPECT_CALL(mock_device(), Open(_)); |
| 554 |
| 555 { |
| 556 base::RunLoop loop; |
| 557 device->Open(base::Bind(&ExpectOpenAndThen, OPEN_DEVICE_ERROR_OK, |
| 558 loop.QuitClosure())); |
| 559 loop.Run(); |
| 560 } |
| 561 |
475 AddMockConfig(ConfigBuilder(0) | 562 AddMockConfig(ConfigBuilder(0) |
476 .AddInterface(1, 0, 1, 2, 3) | 563 .AddInterface(1, 0, 1, 2, 3) |
477 .AddInterface(1, 42, 1, 2, 3) | 564 .AddInterface(1, 42, 1, 2, 3) |
478 .AddInterface(2, 0, 1, 2, 3)); | 565 .AddInterface(2, 0, 1, 2, 3)); |
479 | 566 |
480 EXPECT_CALL(mock_handle(), SetInterfaceAlternateSetting(1, 42, _)); | 567 EXPECT_CALL(mock_handle(), SetInterfaceAlternateSetting(1, 42, _)); |
481 | 568 |
482 { | 569 { |
483 base::RunLoop loop; | 570 base::RunLoop loop; |
484 device->SetInterfaceAlternateSetting( | 571 device->SetInterfaceAlternateSetting( |
485 1, 42, base::Bind(&ExpectResultAndThen, true, loop.QuitClosure())); | 572 1, 42, base::Bind(&ExpectResultAndThen, true, loop.QuitClosure())); |
486 loop.Run(); | 573 loop.Run(); |
487 } | 574 } |
488 | 575 |
489 EXPECT_CALL(mock_handle(), SetInterfaceAlternateSetting(1, 100, _)); | 576 EXPECT_CALL(mock_handle(), SetInterfaceAlternateSetting(1, 100, _)); |
490 | 577 |
491 { | 578 { |
492 base::RunLoop loop; | 579 base::RunLoop loop; |
493 device->SetInterfaceAlternateSetting( | 580 device->SetInterfaceAlternateSetting( |
494 1, 100, base::Bind(&ExpectResultAndThen, false, loop.QuitClosure())); | 581 1, 100, base::Bind(&ExpectResultAndThen, false, loop.QuitClosure())); |
495 loop.Run(); | 582 loop.Run(); |
496 } | 583 } |
497 | 584 |
498 EXPECT_CALL(mock_handle(), Close()); | 585 EXPECT_CALL(mock_handle(), Close()); |
499 } | 586 } |
500 | 587 |
501 TEST_F(USBDeviceImplTest, ControlTransfer) { | 588 TEST_F(USBDeviceImplTest, ControlTransfer) { |
502 DevicePtr device = GetMockDeviceProxy(); | 589 DevicePtr device = GetMockDeviceProxy(); |
503 | 590 |
| 591 EXPECT_CALL(mock_device(), Open(_)); |
| 592 |
| 593 { |
| 594 base::RunLoop loop; |
| 595 device->Open(base::Bind(&ExpectOpenAndThen, OPEN_DEVICE_ERROR_OK, |
| 596 loop.QuitClosure())); |
| 597 loop.Run(); |
| 598 } |
| 599 |
504 std::vector<uint8_t> fake_data; | 600 std::vector<uint8_t> fake_data; |
505 fake_data.push_back(41); | 601 fake_data.push_back(41); |
506 fake_data.push_back(42); | 602 fake_data.push_back(42); |
507 fake_data.push_back(43); | 603 fake_data.push_back(43); |
508 | 604 |
509 AddMockInboundData(fake_data); | 605 AddMockInboundData(fake_data); |
510 | 606 |
511 EXPECT_CALL(mock_handle(), | 607 EXPECT_CALL(mock_handle(), |
512 ControlTransfer(USB_DIRECTION_INBOUND, UsbDeviceHandle::STANDARD, | 608 ControlTransfer(USB_DIRECTION_INBOUND, UsbDeviceHandle::STANDARD, |
513 UsbDeviceHandle::DEVICE, 5, 6, 7, _, _, 0, _)); | 609 UsbDeviceHandle::DEVICE, 5, 6, 7, _, _, 0, _)); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
548 loop.QuitClosure())); | 644 loop.QuitClosure())); |
549 loop.Run(); | 645 loop.Run(); |
550 } | 646 } |
551 | 647 |
552 EXPECT_CALL(mock_handle(), Close()); | 648 EXPECT_CALL(mock_handle(), Close()); |
553 } | 649 } |
554 | 650 |
555 TEST_F(USBDeviceImplTest, GenericTransfer) { | 651 TEST_F(USBDeviceImplTest, GenericTransfer) { |
556 DevicePtr device = GetMockDeviceProxy(); | 652 DevicePtr device = GetMockDeviceProxy(); |
557 | 653 |
| 654 EXPECT_CALL(mock_device(), Open(_)); |
| 655 |
| 656 { |
| 657 base::RunLoop loop; |
| 658 device->Open(base::Bind(&ExpectOpenAndThen, OPEN_DEVICE_ERROR_OK, |
| 659 loop.QuitClosure())); |
| 660 loop.Run(); |
| 661 } |
| 662 |
558 std::string message1 = "say hello please"; | 663 std::string message1 = "say hello please"; |
559 std::vector<uint8_t> fake_outbound_data(message1.size()); | 664 std::vector<uint8_t> fake_outbound_data(message1.size()); |
560 std::copy(message1.begin(), message1.end(), fake_outbound_data.begin()); | 665 std::copy(message1.begin(), message1.end(), fake_outbound_data.begin()); |
561 | 666 |
562 std::string message2 = "hello world!"; | 667 std::string message2 = "hello world!"; |
563 std::vector<uint8_t> fake_inbound_data(message2.size()); | 668 std::vector<uint8_t> fake_inbound_data(message2.size()); |
564 std::copy(message2.begin(), message2.end(), fake_inbound_data.begin()); | 669 std::copy(message2.begin(), message2.end(), fake_inbound_data.begin()); |
565 | 670 |
566 AddMockConfig(ConfigBuilder(0).AddInterface(7, 0, 1, 2, 3)); | 671 AddMockConfig(ConfigBuilder(0).AddInterface(7, 0, 1, 2, 3)); |
567 AddMockOutboundData(fake_outbound_data); | 672 AddMockOutboundData(fake_outbound_data); |
(...skipping 22 matching lines...) Expand all Loading... |
590 fake_inbound_data, loop.QuitClosure())); | 695 fake_inbound_data, loop.QuitClosure())); |
591 loop.Run(); | 696 loop.Run(); |
592 } | 697 } |
593 | 698 |
594 EXPECT_CALL(mock_handle(), Close()); | 699 EXPECT_CALL(mock_handle(), Close()); |
595 } | 700 } |
596 | 701 |
597 TEST_F(USBDeviceImplTest, IsochronousTransfer) { | 702 TEST_F(USBDeviceImplTest, IsochronousTransfer) { |
598 DevicePtr device = GetMockDeviceProxy(); | 703 DevicePtr device = GetMockDeviceProxy(); |
599 | 704 |
| 705 EXPECT_CALL(mock_device(), Open(_)); |
| 706 |
| 707 { |
| 708 base::RunLoop loop; |
| 709 device->Open(base::Bind(&ExpectOpenAndThen, OPEN_DEVICE_ERROR_OK, |
| 710 loop.QuitClosure())); |
| 711 loop.Run(); |
| 712 } |
| 713 |
600 std::string outbound_packet_data = "aaaaaaaabbbbbbbbccccccccdddddddd"; | 714 std::string outbound_packet_data = "aaaaaaaabbbbbbbbccccccccdddddddd"; |
601 std::vector<uint8_t> fake_outbound_packets(outbound_packet_data.size()); | 715 std::vector<uint8_t> fake_outbound_packets(outbound_packet_data.size()); |
602 std::copy(outbound_packet_data.begin(), outbound_packet_data.end(), | 716 std::copy(outbound_packet_data.begin(), outbound_packet_data.end(), |
603 fake_outbound_packets.begin()); | 717 fake_outbound_packets.begin()); |
604 | 718 |
605 std::string inbound_packet_data = "ddddddddccccccccbbbbbbbbaaaaaaaa"; | 719 std::string inbound_packet_data = "ddddddddccccccccbbbbbbbbaaaaaaaa"; |
606 std::vector<uint8_t> fake_inbound_packets(inbound_packet_data.size()); | 720 std::vector<uint8_t> fake_inbound_packets(inbound_packet_data.size()); |
607 std::copy(inbound_packet_data.begin(), inbound_packet_data.end(), | 721 std::copy(inbound_packet_data.begin(), inbound_packet_data.end(), |
608 fake_inbound_packets.begin()); | 722 fake_inbound_packets.begin()); |
609 | 723 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
648 1, 4, 8, 0, base::Bind(&ExpectPacketsAndThen, TRANSFER_STATUS_COMPLETED, | 762 1, 4, 8, 0, base::Bind(&ExpectPacketsAndThen, TRANSFER_STATUS_COMPLETED, |
649 packets, loop.QuitClosure())); | 763 packets, loop.QuitClosure())); |
650 loop.Run(); | 764 loop.Run(); |
651 } | 765 } |
652 | 766 |
653 EXPECT_CALL(mock_handle(), Close()); | 767 EXPECT_CALL(mock_handle(), Close()); |
654 } | 768 } |
655 | 769 |
656 } // namespace usb | 770 } // namespace usb |
657 } // namespace device | 771 } // namespace device |
OLD | NEW |