| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "base/strings/string_piece.h" | 10 #include "base/strings/string_piece.h" |
| 11 #include "device/serial/data_receiver.h" | 11 #include "device/serial/data_receiver.h" |
| 12 #include "device/serial/data_sender.h" | 12 #include "device/serial/data_sender.h" |
| 13 #include "device/serial/data_stream.mojom.h" | 13 #include "device/serial/data_stream.mojom.h" |
| 14 #include "device/serial/serial.mojom.h" | 14 #include "device/serial/serial.mojom.h" |
| 15 #include "device/serial/serial_connection.h" | 15 #include "device/serial/serial_connection.h" |
| 16 #include "device/serial/serial_service_impl.h" | 16 #include "device/serial/serial_service_impl.h" |
| 17 #include "device/serial/test_serial_io_handler.h" | 17 #include "device/serial/test_serial_io_handler.h" |
| 18 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 19 #include "third_party/mojo/src/mojo/public/cpp/bindings/error_handler.h" | |
| 20 #include "third_party/mojo/src/mojo/public/cpp/bindings/interface_ptr.h" | 19 #include "third_party/mojo/src/mojo/public/cpp/bindings/interface_ptr.h" |
| 21 #include "third_party/mojo/src/mojo/public/cpp/bindings/interface_request.h" | 20 #include "third_party/mojo/src/mojo/public/cpp/bindings/interface_request.h" |
| 22 | 21 |
| 23 namespace device { | 22 namespace device { |
| 24 namespace { | 23 namespace { |
| 25 | 24 |
| 26 class FakeSerialDeviceEnumerator : public SerialDeviceEnumerator { | 25 class FakeSerialDeviceEnumerator : public SerialDeviceEnumerator { |
| 27 mojo::Array<serial::DeviceInfoPtr> GetDevices() override { | 26 mojo::Array<serial::DeviceInfoPtr> GetDevices() override { |
| 28 mojo::Array<serial::DeviceInfoPtr> devices(1); | 27 mojo::Array<serial::DeviceInfoPtr> devices(1); |
| 29 devices[0] = serial::DeviceInfo::New(); | 28 devices[0] = serial::DeviceInfo::New(); |
| 30 devices[0]->path = "device"; | 29 devices[0]->path = "device"; |
| 31 return devices.Pass(); | 30 return devices.Pass(); |
| 32 } | 31 } |
| 33 }; | 32 }; |
| 34 | 33 |
| 35 } // namespace | 34 } // namespace |
| 36 | 35 |
| 37 class SerialConnectionTest : public testing::Test, public mojo::ErrorHandler { | 36 class SerialConnectionTest : public testing::Test { |
| 38 public: | 37 public: |
| 39 enum Event { | 38 enum Event { |
| 40 EVENT_NONE, | 39 EVENT_NONE, |
| 41 EVENT_GOT_INFO, | 40 EVENT_GOT_INFO, |
| 42 EVENT_SET_OPTIONS, | 41 EVENT_SET_OPTIONS, |
| 43 EVENT_GOT_CONTROL_SIGNALS, | 42 EVENT_GOT_CONTROL_SIGNALS, |
| 44 EVENT_SET_CONTROL_SIGNALS, | 43 EVENT_SET_CONTROL_SIGNALS, |
| 45 EVENT_FLUSHED, | 44 EVENT_FLUSHED, |
| 46 EVENT_DATA_AT_IO_HANDLER, | 45 EVENT_DATA_AT_IO_HANDLER, |
| 47 EVENT_DATA_SENT, | 46 EVENT_DATA_SENT, |
| (...skipping 17 matching lines...) Expand all Loading... |
| 65 void SetUp() override { | 64 void SetUp() override { |
| 66 message_loop_.reset(new base::MessageLoop); | 65 message_loop_.reset(new base::MessageLoop); |
| 67 mojo::InterfacePtr<serial::SerialService> service; | 66 mojo::InterfacePtr<serial::SerialService> service; |
| 68 new SerialServiceImpl( | 67 new SerialServiceImpl( |
| 69 new SerialConnectionFactory( | 68 new SerialConnectionFactory( |
| 70 base::Bind(&SerialConnectionTest::CreateIoHandler, | 69 base::Bind(&SerialConnectionTest::CreateIoHandler, |
| 71 base::Unretained(this)), | 70 base::Unretained(this)), |
| 72 base::ThreadTaskRunnerHandle::Get()), | 71 base::ThreadTaskRunnerHandle::Get()), |
| 73 scoped_ptr<SerialDeviceEnumerator>(new FakeSerialDeviceEnumerator), | 72 scoped_ptr<SerialDeviceEnumerator>(new FakeSerialDeviceEnumerator), |
| 74 mojo::GetProxy(&service)); | 73 mojo::GetProxy(&service)); |
| 75 service.set_error_handler(this); | 74 service.set_connection_error_handler(base::Bind( |
| 75 &SerialConnectionTest::OnConnectionError, base::Unretained(this))); |
| 76 mojo::InterfacePtr<serial::DataSink> sink; | 76 mojo::InterfacePtr<serial::DataSink> sink; |
| 77 mojo::InterfacePtr<serial::DataSource> source; | 77 mojo::InterfacePtr<serial::DataSource> source; |
| 78 mojo::InterfacePtr<serial::DataSourceClient> source_client; | 78 mojo::InterfacePtr<serial::DataSourceClient> source_client; |
| 79 mojo::InterfaceRequest<serial::DataSourceClient> source_client_request = | 79 mojo::InterfaceRequest<serial::DataSourceClient> source_client_request = |
| 80 mojo::GetProxy(&source_client); | 80 mojo::GetProxy(&source_client); |
| 81 service->Connect("device", serial::ConnectionOptions::New(), | 81 service->Connect("device", serial::ConnectionOptions::New(), |
| 82 mojo::GetProxy(&connection_), mojo::GetProxy(&sink), | 82 mojo::GetProxy(&connection_), mojo::GetProxy(&sink), |
| 83 mojo::GetProxy(&source), source_client.Pass()); | 83 mojo::GetProxy(&source), source_client.Pass()); |
| 84 sender_.reset(new DataSender(sink.Pass(), kBufferSize, | 84 sender_.reset(new DataSender(sink.Pass(), kBufferSize, |
| 85 serial::SEND_ERROR_DISCONNECTED)); | 85 serial::SEND_ERROR_DISCONNECTED)); |
| 86 receiver_ = | 86 receiver_ = |
| 87 new DataReceiver(source.Pass(), source_client_request.Pass(), | 87 new DataReceiver(source.Pass(), source_client_request.Pass(), |
| 88 kBufferSize, serial::RECEIVE_ERROR_DISCONNECTED); | 88 kBufferSize, serial::RECEIVE_ERROR_DISCONNECTED); |
| 89 connection_.set_error_handler(this); | 89 connection_.set_connection_error_handler(base::Bind( |
| 90 &SerialConnectionTest::OnConnectionError, base::Unretained(this))); |
| 90 connection_->GetInfo( | 91 connection_->GetInfo( |
| 91 base::Bind(&SerialConnectionTest::StoreInfo, base::Unretained(this))); | 92 base::Bind(&SerialConnectionTest::StoreInfo, base::Unretained(this))); |
| 92 WaitForEvent(EVENT_GOT_INFO); | 93 WaitForEvent(EVENT_GOT_INFO); |
| 93 ASSERT_TRUE(io_handler_.get()); | 94 ASSERT_TRUE(io_handler_.get()); |
| 94 } | 95 } |
| 95 | 96 |
| 96 void StoreInfo(serial::ConnectionInfoPtr options) { | 97 void StoreInfo(serial::ConnectionInfoPtr options) { |
| 97 info_ = options.Pass(); | 98 info_ = options.Pass(); |
| 98 EventReceived(EVENT_GOT_INFO); | 99 EventReceived(EVENT_GOT_INFO); |
| 99 } | 100 } |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 buffer->Done(buffer->GetSize()); | 163 buffer->Done(buffer->GetSize()); |
| 163 receive_error_ = serial::RECEIVE_ERROR_NONE; | 164 receive_error_ = serial::RECEIVE_ERROR_NONE; |
| 164 EventReceived(EVENT_DATA_RECEIVED); | 165 EventReceived(EVENT_DATA_RECEIVED); |
| 165 } | 166 } |
| 166 | 167 |
| 167 void OnReceiveError(int32_t error) { | 168 void OnReceiveError(int32_t error) { |
| 168 receive_error_ = static_cast<serial::ReceiveError>(error); | 169 receive_error_ = static_cast<serial::ReceiveError>(error); |
| 169 EventReceived(EVENT_RECEIVE_ERROR); | 170 EventReceived(EVENT_RECEIVE_ERROR); |
| 170 } | 171 } |
| 171 | 172 |
| 172 void OnConnectionError() override { | 173 void OnConnectionError() { |
| 173 EventReceived(EVENT_ERROR); | 174 EventReceived(EVENT_ERROR); |
| 174 FAIL() << "Connection error"; | 175 FAIL() << "Connection error"; |
| 175 } | 176 } |
| 176 | 177 |
| 177 mojo::Array<serial::DeviceInfoPtr> devices_; | 178 mojo::Array<serial::DeviceInfoPtr> devices_; |
| 178 serial::ConnectionInfoPtr info_; | 179 serial::ConnectionInfoPtr info_; |
| 179 serial::DeviceControlSignalsPtr signals_; | 180 serial::DeviceControlSignalsPtr signals_; |
| 180 bool connected_; | 181 bool connected_; |
| 181 bool success_; | 182 bool success_; |
| 182 int bytes_sent_; | 183 int bytes_sent_; |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 324 WaitForEvent(EVENT_DATA_SENT); | 325 WaitForEvent(EVENT_DATA_SENT); |
| 325 EXPECT_EQ(serial::SEND_ERROR_NONE, send_error_); | 326 EXPECT_EQ(serial::SEND_ERROR_NONE, send_error_); |
| 326 EXPECT_EQ(4, bytes_sent_); | 327 EXPECT_EQ(4, bytes_sent_); |
| 327 ASSERT_NO_FATAL_FAILURE(Receive()); | 328 ASSERT_NO_FATAL_FAILURE(Receive()); |
| 328 WaitForEvent(EVENT_DATA_RECEIVED); | 329 WaitForEvent(EVENT_DATA_RECEIVED); |
| 329 EXPECT_EQ("data", data_received_); | 330 EXPECT_EQ("data", data_received_); |
| 330 EXPECT_EQ(serial::RECEIVE_ERROR_NONE, receive_error_); | 331 EXPECT_EQ(serial::RECEIVE_ERROR_NONE, receive_error_); |
| 331 } | 332 } |
| 332 | 333 |
| 333 } // namespace device | 334 } // namespace device |
| OLD | NEW |