| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "chromeos/components/tether/connect_tethering_operation.h" | 5 #include "chromeos/components/tether/connect_tethering_operation.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "chromeos/components/tether/ble_constants.h" | 11 #include "chromeos/components/tether/ble_constants.h" |
| 12 #include "chromeos/components/tether/fake_ble_connection_manager.h" | 12 #include "chromeos/components/tether/fake_ble_connection_manager.h" |
| 13 #include "chromeos/components/tether/message_wrapper.h" | 13 #include "chromeos/components/tether/message_wrapper.h" |
| 14 #include "chromeos/components/tether/mock_host_scan_device_prioritizer.h" | 14 #include "chromeos/components/tether/mock_tether_host_response_recorder.h" |
| 15 #include "chromeos/components/tether/proto/tether.pb.h" | 15 #include "chromeos/components/tether/proto/tether.pb.h" |
| 16 #include "components/cryptauth/remote_device_test_util.h" | 16 #include "components/cryptauth/remote_device_test_util.h" |
| 17 #include "testing/gmock/include/gmock/gmock.h" | 17 #include "testing/gmock/include/gmock/gmock.h" |
| 18 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 19 | 19 |
| 20 using testing::_; | 20 using testing::_; |
| 21 using testing::StrictMock; | 21 using testing::StrictMock; |
| 22 | 22 |
| 23 namespace chromeos { | 23 namespace chromeos { |
| 24 | 24 |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 104 : connect_tethering_request_string_( | 104 : connect_tethering_request_string_( |
| 105 CreateConnectTetheringRequestString()), | 105 CreateConnectTetheringRequestString()), |
| 106 test_device_(cryptauth::GenerateTestRemoteDevices(1)[0]) { | 106 test_device_(cryptauth::GenerateTestRemoteDevices(1)[0]) { |
| 107 // These tests are written under the assumption that there are a maximum of | 107 // These tests are written under the assumption that there are a maximum of |
| 108 // 3 connection attempts; they need to be edited if this value changes. | 108 // 3 connection attempts; they need to be edited if this value changes. |
| 109 EXPECT_EQ(3u, MessageTransferOperation::kMaxConnectionAttemptsPerDevice); | 109 EXPECT_EQ(3u, MessageTransferOperation::kMaxConnectionAttemptsPerDevice); |
| 110 } | 110 } |
| 111 | 111 |
| 112 void SetUp() override { | 112 void SetUp() override { |
| 113 fake_ble_connection_manager_ = base::MakeUnique<FakeBleConnectionManager>(); | 113 fake_ble_connection_manager_ = base::MakeUnique<FakeBleConnectionManager>(); |
| 114 mock_host_scan_device_prioritizer_ = | 114 mock_tether_host_response_recorder_ = |
| 115 base::MakeUnique<StrictMock<MockHostScanDevicePrioritizer>>(); | 115 base::MakeUnique<StrictMock<MockTetherHostResponseRecorder>>(); |
| 116 test_observer_ = base::WrapUnique(new TestObserver()); | 116 test_observer_ = base::WrapUnique(new TestObserver()); |
| 117 | 117 |
| 118 operation_ = base::WrapUnique(new ConnectTetheringOperation( | 118 operation_ = base::WrapUnique(new ConnectTetheringOperation( |
| 119 test_device_, fake_ble_connection_manager_.get(), | 119 test_device_, fake_ble_connection_manager_.get(), |
| 120 mock_host_scan_device_prioritizer_.get())); | 120 mock_tether_host_response_recorder_.get())); |
| 121 operation_->AddObserver(test_observer_.get()); | 121 operation_->AddObserver(test_observer_.get()); |
| 122 operation_->Initialize(); | 122 operation_->Initialize(); |
| 123 } | 123 } |
| 124 | 124 |
| 125 void SimulateDeviceAuthenticationAndVerifyMessageSent() { | 125 void SimulateDeviceAuthenticationAndVerifyMessageSent() { |
| 126 operation_->OnDeviceAuthenticated(test_device_); | 126 operation_->OnDeviceAuthenticated(test_device_); |
| 127 | 127 |
| 128 // Verify that the message was sent successfully. | 128 // Verify that the message was sent successfully. |
| 129 std::vector<FakeBleConnectionManager::SentMessage>& sent_messages = | 129 std::vector<FakeBleConnectionManager::SentMessage>& sent_messages = |
| 130 fake_ble_connection_manager_->sent_messages(); | 130 fake_ble_connection_manager_->sent_messages(); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 } else { | 163 } else { |
| 164 EXPECT_TRUE(test_observer_->has_received_failure); | 164 EXPECT_TRUE(test_observer_->has_received_failure); |
| 165 EXPECT_EQ(expected_response_code, test_observer_->error_code); | 165 EXPECT_EQ(expected_response_code, test_observer_->error_code); |
| 166 } | 166 } |
| 167 } | 167 } |
| 168 | 168 |
| 169 const std::string connect_tethering_request_string_; | 169 const std::string connect_tethering_request_string_; |
| 170 const cryptauth::RemoteDevice test_device_; | 170 const cryptauth::RemoteDevice test_device_; |
| 171 | 171 |
| 172 std::unique_ptr<FakeBleConnectionManager> fake_ble_connection_manager_; | 172 std::unique_ptr<FakeBleConnectionManager> fake_ble_connection_manager_; |
| 173 std::unique_ptr<StrictMock<MockHostScanDevicePrioritizer>> | 173 std::unique_ptr<StrictMock<MockTetherHostResponseRecorder>> |
| 174 mock_host_scan_device_prioritizer_; | 174 mock_tether_host_response_recorder_; |
| 175 std::unique_ptr<TestObserver> test_observer_; | 175 std::unique_ptr<TestObserver> test_observer_; |
| 176 std::unique_ptr<ConnectTetheringOperation> operation_; | 176 std::unique_ptr<ConnectTetheringOperation> operation_; |
| 177 | 177 |
| 178 private: | 178 private: |
| 179 DISALLOW_COPY_AND_ASSIGN(ConnectTetheringOperationTest); | 179 DISALLOW_COPY_AND_ASSIGN(ConnectTetheringOperationTest); |
| 180 }; | 180 }; |
| 181 | 181 |
| 182 TEST_F(ConnectTetheringOperationTest, TestOperation_SuccessButInvalidResponse) { | 182 TEST_F(ConnectTetheringOperationTest, TestOperation_SuccessButInvalidResponse) { |
| 183 EXPECT_CALL(*mock_host_scan_device_prioritizer_, | 183 EXPECT_CALL(*mock_tether_host_response_recorder_, |
| 184 RecordSuccessfulConnectTetheringResponse(_)) | 184 RecordSuccessfulConnectTetheringResponse(_)) |
| 185 .Times(0); | 185 .Times(0); |
| 186 | 186 |
| 187 SimulateDeviceAuthenticationAndVerifyMessageSent(); | 187 SimulateDeviceAuthenticationAndVerifyMessageSent(); |
| 188 SimulateResponseReceivedAndVerifyObserverCallbackInvoked( | 188 SimulateResponseReceivedAndVerifyObserverCallbackInvoked( |
| 189 ConnectTetheringResponse_ResponseCode:: | 189 ConnectTetheringResponse_ResponseCode:: |
| 190 ConnectTetheringResponse_ResponseCode_SUCCESS, | 190 ConnectTetheringResponse_ResponseCode_SUCCESS, |
| 191 true /* use_proto_without_ssid_and_password */); | 191 true /* use_proto_without_ssid_and_password */); |
| 192 } | 192 } |
| 193 | 193 |
| 194 TEST_F(ConnectTetheringOperationTest, TestOperation_SuccessWithValidResponse) { | 194 TEST_F(ConnectTetheringOperationTest, TestOperation_SuccessWithValidResponse) { |
| 195 EXPECT_CALL(*mock_host_scan_device_prioritizer_, | 195 EXPECT_CALL(*mock_tether_host_response_recorder_, |
| 196 RecordSuccessfulConnectTetheringResponse(test_device_)); | 196 RecordSuccessfulConnectTetheringResponse(test_device_)); |
| 197 | 197 |
| 198 SimulateDeviceAuthenticationAndVerifyMessageSent(); | 198 SimulateDeviceAuthenticationAndVerifyMessageSent(); |
| 199 SimulateResponseReceivedAndVerifyObserverCallbackInvoked( | 199 SimulateResponseReceivedAndVerifyObserverCallbackInvoked( |
| 200 ConnectTetheringResponse_ResponseCode:: | 200 ConnectTetheringResponse_ResponseCode:: |
| 201 ConnectTetheringResponse_ResponseCode_SUCCESS, | 201 ConnectTetheringResponse_ResponseCode_SUCCESS, |
| 202 false /* use_proto_without_ssid_and_password */); | 202 false /* use_proto_without_ssid_and_password */); |
| 203 } | 203 } |
| 204 | 204 |
| 205 TEST_F(ConnectTetheringOperationTest, TestOperation_UnknownError) { | 205 TEST_F(ConnectTetheringOperationTest, TestOperation_UnknownError) { |
| 206 EXPECT_CALL(*mock_host_scan_device_prioritizer_, | 206 EXPECT_CALL(*mock_tether_host_response_recorder_, |
| 207 RecordSuccessfulConnectTetheringResponse(_)) | 207 RecordSuccessfulConnectTetheringResponse(_)) |
| 208 .Times(0); | 208 .Times(0); |
| 209 | 209 |
| 210 SimulateDeviceAuthenticationAndVerifyMessageSent(); | 210 SimulateDeviceAuthenticationAndVerifyMessageSent(); |
| 211 SimulateResponseReceivedAndVerifyObserverCallbackInvoked( | 211 SimulateResponseReceivedAndVerifyObserverCallbackInvoked( |
| 212 ConnectTetheringResponse_ResponseCode:: | 212 ConnectTetheringResponse_ResponseCode:: |
| 213 ConnectTetheringResponse_ResponseCode_UNKNOWN_ERROR, | 213 ConnectTetheringResponse_ResponseCode_UNKNOWN_ERROR, |
| 214 false /* use_proto_without_ssid_and_password */); | 214 false /* use_proto_without_ssid_and_password */); |
| 215 } | 215 } |
| 216 | 216 |
| 217 TEST_F(ConnectTetheringOperationTest, TestOperation_ProvisioningFailed) { | 217 TEST_F(ConnectTetheringOperationTest, TestOperation_ProvisioningFailed) { |
| 218 EXPECT_CALL(*mock_host_scan_device_prioritizer_, | 218 EXPECT_CALL(*mock_tether_host_response_recorder_, |
| 219 RecordSuccessfulConnectTetheringResponse(_)) | 219 RecordSuccessfulConnectTetheringResponse(_)) |
| 220 .Times(0); | 220 .Times(0); |
| 221 | 221 |
| 222 SimulateDeviceAuthenticationAndVerifyMessageSent(); | 222 SimulateDeviceAuthenticationAndVerifyMessageSent(); |
| 223 SimulateResponseReceivedAndVerifyObserverCallbackInvoked( | 223 SimulateResponseReceivedAndVerifyObserverCallbackInvoked( |
| 224 ConnectTetheringResponse_ResponseCode:: | 224 ConnectTetheringResponse_ResponseCode:: |
| 225 ConnectTetheringResponse_ResponseCode_PROVISIONING_FAILED, | 225 ConnectTetheringResponse_ResponseCode_PROVISIONING_FAILED, |
| 226 false /* use_proto_without_ssid_and_password */); | 226 false /* use_proto_without_ssid_and_password */); |
| 227 } | 227 } |
| 228 | 228 |
| 229 TEST_F(ConnectTetheringOperationTest, TestCannotConnect) { | 229 TEST_F(ConnectTetheringOperationTest, TestCannotConnect) { |
| 230 EXPECT_CALL(*mock_host_scan_device_prioritizer_, | 230 EXPECT_CALL(*mock_tether_host_response_recorder_, |
| 231 RecordSuccessfulConnectTetheringResponse(_)) | 231 RecordSuccessfulConnectTetheringResponse(_)) |
| 232 .Times(0); | 232 .Times(0); |
| 233 | 233 |
| 234 // Simulate the device failing to connect. | 234 // Simulate the device failing to connect. |
| 235 fake_ble_connection_manager_->SetDeviceStatus( | 235 fake_ble_connection_manager_->SetDeviceStatus( |
| 236 test_device_, cryptauth::SecureChannel::Status::CONNECTING); | 236 test_device_, cryptauth::SecureChannel::Status::CONNECTING); |
| 237 fake_ble_connection_manager_->SetDeviceStatus( | 237 fake_ble_connection_manager_->SetDeviceStatus( |
| 238 test_device_, cryptauth::SecureChannel::Status::DISCONNECTED); | 238 test_device_, cryptauth::SecureChannel::Status::DISCONNECTED); |
| 239 fake_ble_connection_manager_->SetDeviceStatus( | 239 fake_ble_connection_manager_->SetDeviceStatus( |
| 240 test_device_, cryptauth::SecureChannel::Status::CONNECTING); | 240 test_device_, cryptauth::SecureChannel::Status::CONNECTING); |
| 241 fake_ble_connection_manager_->SetDeviceStatus( | 241 fake_ble_connection_manager_->SetDeviceStatus( |
| 242 test_device_, cryptauth::SecureChannel::Status::DISCONNECTED); | 242 test_device_, cryptauth::SecureChannel::Status::DISCONNECTED); |
| 243 fake_ble_connection_manager_->SetDeviceStatus( | 243 fake_ble_connection_manager_->SetDeviceStatus( |
| 244 test_device_, cryptauth::SecureChannel::Status::CONNECTING); | 244 test_device_, cryptauth::SecureChannel::Status::CONNECTING); |
| 245 fake_ble_connection_manager_->SetDeviceStatus( | 245 fake_ble_connection_manager_->SetDeviceStatus( |
| 246 test_device_, cryptauth::SecureChannel::Status::DISCONNECTED); | 246 test_device_, cryptauth::SecureChannel::Status::DISCONNECTED); |
| 247 | 247 |
| 248 // The maximum number of connection failures has occurred. | 248 // The maximum number of connection failures has occurred. |
| 249 EXPECT_TRUE(test_observer_->has_received_failure); | 249 EXPECT_TRUE(test_observer_->has_received_failure); |
| 250 EXPECT_EQ(ConnectTetheringResponse_ResponseCode:: | 250 EXPECT_EQ(ConnectTetheringResponse_ResponseCode:: |
| 251 ConnectTetheringResponse_ResponseCode_UNKNOWN_ERROR, | 251 ConnectTetheringResponse_ResponseCode_UNKNOWN_ERROR, |
| 252 test_observer_->error_code); | 252 test_observer_->error_code); |
| 253 } | 253 } |
| 254 | 254 |
| 255 } // namespace tether | 255 } // namespace tether |
| 256 | 256 |
| 257 } // namespace cryptauth | 257 } // namespace cryptauth |
| OLD | NEW |