Index: device/devices_app/usb/device_impl_unittest.cc |
diff --git a/device/devices_app/usb/device_impl_unittest.cc b/device/devices_app/usb/device_impl_unittest.cc |
index 639b0d40635537a183c943d171cb63125be620b6..5868a17b55de5ea6434a3b5c24eb8882c915ecce 100644 |
--- a/device/devices_app/usb/device_impl_unittest.cc |
+++ b/device/devices_app/usb/device_impl_unittest.cc |
@@ -51,6 +51,13 @@ class ConfigBuilder { |
UsbConfigDescriptor config_; |
}; |
+void ExpectOpenAndThen(OpenDeviceError expected, |
+ const base::Closure& continuation, |
+ OpenDeviceError error) { |
+ EXPECT_EQ(expected, error); |
+ continuation.Run(); |
+} |
+ |
void ExpectDeviceInfoAndThen(const std::string& guid, |
uint16_t vendor_id, |
uint16_t product_id, |
@@ -139,17 +146,17 @@ class USBDeviceImplTest : public testing::Test { |
const std::string& manufacturer, |
const std::string& product, |
const std::string& serial) { |
- is_device_open_ = true; |
- |
mock_device_ = |
new MockUsbDevice(vendor_id, product_id, manufacturer, product, serial); |
mock_handle_ = new MockUsbDeviceHandle(mock_device_.get()); |
DevicePtr proxy; |
- new DeviceImpl(mock_handle_, mojo::GetProxy(&proxy)); |
+ new DeviceImpl(mock_device_, mojo::GetProxy(&proxy)); |
// Set up mock handle calls to respond based on mock device configs |
// established by the test. |
+ ON_CALL(mock_device(), Open(_)) |
+ .WillByDefault(Invoke(this, &USBDeviceImplTest::OpenMockHandle)); |
ON_CALL(mock_handle(), Close()) |
.WillByDefault(Invoke(this, &USBDeviceImplTest::CloseMockHandle)); |
ON_CALL(mock_handle(), SetConfiguration(_, _)) |
@@ -192,6 +199,12 @@ class USBDeviceImplTest : public testing::Test { |
} |
private: |
+ void OpenMockHandle(const UsbDevice::OpenCallback& callback) { |
+ EXPECT_FALSE(is_device_open_); |
+ is_device_open_ = true; |
+ callback.Run(mock_handle_); |
+ } |
+ |
void CloseMockHandle() { |
EXPECT_TRUE(is_device_open_); |
is_device_open_ = false; |
@@ -334,17 +347,43 @@ class USBDeviceImplTest : public testing::Test { |
} // namespace |
-TEST_F(USBDeviceImplTest, Close) { |
+TEST_F(USBDeviceImplTest, Open) { |
DevicePtr device = GetMockDeviceProxy(); |
- EXPECT_TRUE(is_device_open()); |
+ EXPECT_FALSE(is_device_open()); |
- EXPECT_CALL(mock_handle(), Close()); |
+ EXPECT_CALL(mock_device(), Open(_)); |
base::RunLoop loop; |
- device->Close(loop.QuitClosure()); |
+ device->Open( |
+ base::Bind(&ExpectOpenAndThen, OPEN_DEVICE_ERROR_OK, loop.QuitClosure())); |
loop.Run(); |
+ EXPECT_CALL(mock_handle(), Close()); |
+} |
+ |
+TEST_F(USBDeviceImplTest, Close) { |
+ DevicePtr device = GetMockDeviceProxy(); |
+ |
+ EXPECT_FALSE(is_device_open()); |
+ |
+ EXPECT_CALL(mock_device(), Open(_)); |
+ |
+ { |
+ base::RunLoop loop; |
+ device->Open(base::Bind(&ExpectOpenAndThen, OPEN_DEVICE_ERROR_OK, |
+ loop.QuitClosure())); |
+ loop.Run(); |
+ } |
+ |
+ EXPECT_CALL(mock_handle(), Close()); |
+ |
+ { |
+ base::RunLoop loop; |
+ device->Close(loop.QuitClosure()); |
+ loop.Run(); |
+ } |
+ |
EXPECT_FALSE(is_device_open()); |
} |
@@ -359,20 +398,30 @@ TEST_F(USBDeviceImplTest, GetDeviceInfo) { |
mock_device().guid(), 0x1234, 0x5678, "ACME", |
"Frobinator", "ABCDEF", loop.QuitClosure())); |
loop.Run(); |
- |
- EXPECT_CALL(mock_handle(), Close()); |
} |
TEST_F(USBDeviceImplTest, SetInvalidConfiguration) { |
DevicePtr device = GetMockDeviceProxy(); |
+ EXPECT_CALL(mock_device(), Open(_)); |
+ |
+ { |
+ base::RunLoop loop; |
+ device->Open(base::Bind(&ExpectOpenAndThen, OPEN_DEVICE_ERROR_OK, |
+ loop.QuitClosure())); |
+ loop.Run(); |
+ } |
+ |
EXPECT_CALL(mock_handle(), SetConfiguration(42, _)); |
- // SetConfiguration should fail because 42 is not a valid mock configuration. |
- base::RunLoop loop; |
- device->SetConfiguration( |
- 42, base::Bind(&ExpectResultAndThen, false, loop.QuitClosure())); |
- loop.Run(); |
+ { |
+ // SetConfiguration should fail because 42 is not a valid mock |
+ // configuration. |
+ base::RunLoop loop; |
+ device->SetConfiguration( |
+ 42, base::Bind(&ExpectResultAndThen, false, loop.QuitClosure())); |
+ loop.Run(); |
+ } |
EXPECT_CALL(mock_handle(), Close()); |
} |
@@ -380,15 +429,26 @@ TEST_F(USBDeviceImplTest, SetInvalidConfiguration) { |
TEST_F(USBDeviceImplTest, SetValidConfiguration) { |
DevicePtr device = GetMockDeviceProxy(); |
+ EXPECT_CALL(mock_device(), Open(_)); |
+ |
+ { |
+ base::RunLoop loop; |
+ device->Open(base::Bind(&ExpectOpenAndThen, OPEN_DEVICE_ERROR_OK, |
+ loop.QuitClosure())); |
+ loop.Run(); |
+ } |
+ |
EXPECT_CALL(mock_handle(), SetConfiguration(42, _)); |
AddMockConfig(ConfigBuilder(42)); |
- // SetConfiguration should succeed because 42 is a valid mock configuration. |
- base::RunLoop loop; |
- device->SetConfiguration( |
- 42, base::Bind(&ExpectResultAndThen, true, loop.QuitClosure())); |
- loop.Run(); |
+ { |
+ // SetConfiguration should succeed because 42 is a valid mock configuration. |
+ base::RunLoop loop; |
+ device->SetConfiguration( |
+ 42, base::Bind(&ExpectResultAndThen, true, loop.QuitClosure())); |
+ loop.Run(); |
+ } |
EXPECT_CALL(mock_handle(), Close()); |
} |
@@ -398,6 +458,15 @@ TEST_F(USBDeviceImplTest, SetValidConfiguration) { |
TEST_F(USBDeviceImplTest, Reset) { |
DevicePtr device = GetMockDeviceProxy(); |
+ EXPECT_CALL(mock_device(), Open(_)); |
+ |
+ { |
+ base::RunLoop loop; |
+ device->Open(base::Bind(&ExpectOpenAndThen, OPEN_DEVICE_ERROR_OK, |
+ loop.QuitClosure())); |
+ loop.Run(); |
+ } |
+ |
EXPECT_CALL(mock_handle(), ResetDevice(_)); |
set_allow_reset(true); |
@@ -424,6 +493,15 @@ TEST_F(USBDeviceImplTest, Reset) { |
TEST_F(USBDeviceImplTest, ClaimAndReleaseInterface) { |
DevicePtr device = GetMockDeviceProxy(); |
+ EXPECT_CALL(mock_device(), Open(_)); |
+ |
+ { |
+ base::RunLoop loop; |
+ device->Open(base::Bind(&ExpectOpenAndThen, OPEN_DEVICE_ERROR_OK, |
+ loop.QuitClosure())); |
+ loop.Run(); |
+ } |
+ |
// Now add a mock interface #1. |
AddMockConfig(ConfigBuilder(0).AddInterface(1, 0, 1, 2, 3)); |
@@ -472,6 +550,15 @@ TEST_F(USBDeviceImplTest, ClaimAndReleaseInterface) { |
TEST_F(USBDeviceImplTest, SetInterfaceAlternateSetting) { |
DevicePtr device = GetMockDeviceProxy(); |
+ EXPECT_CALL(mock_device(), Open(_)); |
+ |
+ { |
+ base::RunLoop loop; |
+ device->Open(base::Bind(&ExpectOpenAndThen, OPEN_DEVICE_ERROR_OK, |
+ loop.QuitClosure())); |
+ loop.Run(); |
+ } |
+ |
AddMockConfig(ConfigBuilder(0) |
.AddInterface(1, 0, 1, 2, 3) |
.AddInterface(1, 42, 1, 2, 3) |
@@ -501,6 +588,15 @@ TEST_F(USBDeviceImplTest, SetInterfaceAlternateSetting) { |
TEST_F(USBDeviceImplTest, ControlTransfer) { |
DevicePtr device = GetMockDeviceProxy(); |
+ EXPECT_CALL(mock_device(), Open(_)); |
+ |
+ { |
+ base::RunLoop loop; |
+ device->Open(base::Bind(&ExpectOpenAndThen, OPEN_DEVICE_ERROR_OK, |
+ loop.QuitClosure())); |
+ loop.Run(); |
+ } |
+ |
std::vector<uint8_t> fake_data; |
fake_data.push_back(41); |
fake_data.push_back(42); |
@@ -555,6 +651,15 @@ TEST_F(USBDeviceImplTest, ControlTransfer) { |
TEST_F(USBDeviceImplTest, GenericTransfer) { |
DevicePtr device = GetMockDeviceProxy(); |
+ EXPECT_CALL(mock_device(), Open(_)); |
+ |
+ { |
+ base::RunLoop loop; |
+ device->Open(base::Bind(&ExpectOpenAndThen, OPEN_DEVICE_ERROR_OK, |
+ loop.QuitClosure())); |
+ loop.Run(); |
+ } |
+ |
std::string message1 = "say hello please"; |
std::vector<uint8_t> fake_outbound_data(message1.size()); |
std::copy(message1.begin(), message1.end(), fake_outbound_data.begin()); |
@@ -597,6 +702,15 @@ TEST_F(USBDeviceImplTest, GenericTransfer) { |
TEST_F(USBDeviceImplTest, IsochronousTransfer) { |
DevicePtr device = GetMockDeviceProxy(); |
+ EXPECT_CALL(mock_device(), Open(_)); |
+ |
+ { |
+ base::RunLoop loop; |
+ device->Open(base::Bind(&ExpectOpenAndThen, OPEN_DEVICE_ERROR_OK, |
+ loop.QuitClosure())); |
+ loop.Run(); |
+ } |
+ |
std::string outbound_packet_data = "aaaaaaaabbbbbbbbccccccccdddddddd"; |
std::vector<uint8_t> fake_outbound_packets(outbound_packet_data.size()); |
std::copy(outbound_packet_data.begin(), outbound_packet_data.end(), |