| 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/host_scanner_operation.h" | 5 #include "chromeos/components/tether/host_scanner_operation.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "chromeos/components/tether/ble_constants.h" | 12 #include "chromeos/components/tether/ble_constants.h" |
| 13 #include "chromeos/components/tether/fake_ble_connection_manager.h" | 13 #include "chromeos/components/tether/fake_ble_connection_manager.h" |
| 14 #include "chromeos/components/tether/message_wrapper.h" | 14 #include "chromeos/components/tether/message_wrapper.h" |
| 15 #include "chromeos/components/tether/mock_host_scan_device_prioritizer.h" | 15 #include "chromeos/components/tether/mock_host_scan_device_prioritizer.h" |
| 16 #include "chromeos/components/tether/mock_tether_host_response_recorder.h" |
| 16 #include "chromeos/components/tether/proto/tether.pb.h" | 17 #include "chromeos/components/tether/proto/tether.pb.h" |
| 17 #include "components/cryptauth/remote_device_test_util.h" | 18 #include "components/cryptauth/remote_device_test_util.h" |
| 18 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
| 19 | 20 |
| 20 using testing::_; | 21 using testing::_; |
| 21 using testing::StrictMock; | 22 using testing::StrictMock; |
| 22 | 23 |
| 23 namespace chromeos { | 24 namespace chromeos { |
| 24 | 25 |
| 25 namespace tether { | 26 namespace tether { |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 test_devices_(cryptauth::GenerateTestRemoteDevices(5)) { | 111 test_devices_(cryptauth::GenerateTestRemoteDevices(5)) { |
| 111 // These tests are written under the assumption that there are a maximum of | 112 // These tests are written under the assumption that there are a maximum of |
| 112 // 3 connection attempts; they need to be edited if this value changes. | 113 // 3 connection attempts; they need to be edited if this value changes. |
| 113 EXPECT_EQ(3u, MessageTransferOperation::kMaxConnectionAttemptsPerDevice); | 114 EXPECT_EQ(3u, MessageTransferOperation::kMaxConnectionAttemptsPerDevice); |
| 114 } | 115 } |
| 115 | 116 |
| 116 void SetUp() override { | 117 void SetUp() override { |
| 117 fake_ble_connection_manager_ = base::MakeUnique<FakeBleConnectionManager>(); | 118 fake_ble_connection_manager_ = base::MakeUnique<FakeBleConnectionManager>(); |
| 118 test_host_scan_device_prioritizer_ = | 119 test_host_scan_device_prioritizer_ = |
| 119 base::MakeUnique<StrictMock<TestHostScanDevicePrioritizer>>(); | 120 base::MakeUnique<StrictMock<TestHostScanDevicePrioritizer>>(); |
| 121 mock_tether_host_response_recorder_ = |
| 122 base::MakeUnique<StrictMock<MockTetherHostResponseRecorder>>(); |
| 120 test_observer_ = base::WrapUnique(new TestObserver()); | 123 test_observer_ = base::WrapUnique(new TestObserver()); |
| 121 } | 124 } |
| 122 | 125 |
| 123 void ConstructOperation( | 126 void ConstructOperation( |
| 124 const std::vector<cryptauth::RemoteDevice>& remote_devices) { | 127 const std::vector<cryptauth::RemoteDevice>& remote_devices) { |
| 125 operation_ = base::WrapUnique(new HostScannerOperation( | 128 operation_ = base::WrapUnique(new HostScannerOperation( |
| 126 remote_devices, fake_ble_connection_manager_.get(), | 129 remote_devices, fake_ble_connection_manager_.get(), |
| 127 test_host_scan_device_prioritizer_.get())); | 130 test_host_scan_device_prioritizer_.get(), |
| 131 mock_tether_host_response_recorder_.get())); |
| 128 operation_->AddObserver(test_observer_.get()); | 132 operation_->AddObserver(test_observer_.get()); |
| 129 | 133 |
| 130 // Verify that the devices have been correctly prioritized. | 134 // Verify that the devices have been correctly prioritized. |
| 131 test_host_scan_device_prioritizer_->VerifyHasBeenPrioritized( | 135 test_host_scan_device_prioritizer_->VerifyHasBeenPrioritized( |
| 132 remote_devices, operation_->remote_devices()); | 136 remote_devices, operation_->remote_devices()); |
| 133 | 137 |
| 134 EXPECT_FALSE(test_observer_->has_received_update); | 138 EXPECT_FALSE(test_observer_->has_received_update); |
| 135 operation_->Initialize(); | 139 operation_->Initialize(); |
| 136 EXPECT_TRUE(test_observer_->has_received_update); | 140 EXPECT_TRUE(test_observer_->has_received_update); |
| 137 EXPECT_TRUE(test_observer_->scanned_devices_so_far.empty()); | 141 EXPECT_TRUE(test_observer_->scanned_devices_so_far.empty()); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 SimulateResponseReceivedAndVerifyObserverCallbackInvoked( | 207 SimulateResponseReceivedAndVerifyObserverCallbackInvoked( |
| 204 test_devices_[0], response_code, std::string(kDefaultCarrier), true); | 208 test_devices_[0], response_code, std::string(kDefaultCarrier), true); |
| 205 } | 209 } |
| 206 | 210 |
| 207 const std::string tether_availability_request_string_; | 211 const std::string tether_availability_request_string_; |
| 208 const std::vector<cryptauth::RemoteDevice> test_devices_; | 212 const std::vector<cryptauth::RemoteDevice> test_devices_; |
| 209 | 213 |
| 210 std::unique_ptr<FakeBleConnectionManager> fake_ble_connection_manager_; | 214 std::unique_ptr<FakeBleConnectionManager> fake_ble_connection_manager_; |
| 211 std::unique_ptr<StrictMock<TestHostScanDevicePrioritizer>> | 215 std::unique_ptr<StrictMock<TestHostScanDevicePrioritizer>> |
| 212 test_host_scan_device_prioritizer_; | 216 test_host_scan_device_prioritizer_; |
| 217 std::unique_ptr<StrictMock<MockTetherHostResponseRecorder>> |
| 218 mock_tether_host_response_recorder_; |
| 213 std::unique_ptr<TestObserver> test_observer_; | 219 std::unique_ptr<TestObserver> test_observer_; |
| 214 std::unique_ptr<HostScannerOperation> operation_; | 220 std::unique_ptr<HostScannerOperation> operation_; |
| 215 | 221 |
| 216 private: | 222 private: |
| 217 DISALLOW_COPY_AND_ASSIGN(HostScannerOperationTest); | 223 DISALLOW_COPY_AND_ASSIGN(HostScannerOperationTest); |
| 218 }; | 224 }; |
| 219 | 225 |
| 220 TEST_F(HostScannerOperationTest, TestDevicesArePrioritizedDuringConstruction) { | 226 TEST_F(HostScannerOperationTest, TestDevicesArePrioritizedDuringConstruction) { |
| 221 // Verification of device order prioritization occurs in ConstructOperation(). | 227 // Verification of device order prioritization occurs in ConstructOperation(). |
| 222 ConstructOperation(test_devices_); | 228 ConstructOperation(test_devices_); |
| 223 } | 229 } |
| 224 | 230 |
| 225 TEST_F(HostScannerOperationTest, TestOperation_OneDevice_UnknownError) { | 231 TEST_F(HostScannerOperationTest, TestOperation_OneDevice_UnknownError) { |
| 226 EXPECT_CALL(*test_host_scan_device_prioritizer_, | 232 EXPECT_CALL(*mock_tether_host_response_recorder_, |
| 227 RecordSuccessfulTetherAvailabilityResponse(_)) | 233 RecordSuccessfulTetherAvailabilityResponse(_)) |
| 228 .Times(0); | 234 .Times(0); |
| 229 | 235 |
| 230 TestOperationWithOneDevice( | 236 TestOperationWithOneDevice( |
| 231 TetherAvailabilityResponse_ResponseCode :: | 237 TetherAvailabilityResponse_ResponseCode :: |
| 232 TetherAvailabilityResponse_ResponseCode_UNKNOWN_ERROR); | 238 TetherAvailabilityResponse_ResponseCode_UNKNOWN_ERROR); |
| 233 } | 239 } |
| 234 | 240 |
| 235 TEST_F(HostScannerOperationTest, TestOperation_OneDevice_TetherAvailable) { | 241 TEST_F(HostScannerOperationTest, TestOperation_OneDevice_TetherAvailable) { |
| 236 EXPECT_CALL(*test_host_scan_device_prioritizer_, | 242 EXPECT_CALL(*mock_tether_host_response_recorder_, |
| 237 RecordSuccessfulTetherAvailabilityResponse(test_devices_[0])); | 243 RecordSuccessfulTetherAvailabilityResponse(test_devices_[0])); |
| 238 | 244 |
| 239 TestOperationWithOneDevice( | 245 TestOperationWithOneDevice( |
| 240 TetherAvailabilityResponse_ResponseCode :: | 246 TetherAvailabilityResponse_ResponseCode :: |
| 241 TetherAvailabilityResponse_ResponseCode_TETHER_AVAILABLE); | 247 TetherAvailabilityResponse_ResponseCode_TETHER_AVAILABLE); |
| 242 } | 248 } |
| 243 | 249 |
| 244 TEST_F(HostScannerOperationTest, TestOperation_OneDevice_SetupNeeded) { | 250 TEST_F(HostScannerOperationTest, TestOperation_OneDevice_SetupNeeded) { |
| 245 EXPECT_CALL(*test_host_scan_device_prioritizer_, | 251 EXPECT_CALL(*mock_tether_host_response_recorder_, |
| 246 RecordSuccessfulTetherAvailabilityResponse(test_devices_[0])); | 252 RecordSuccessfulTetherAvailabilityResponse(test_devices_[0])); |
| 247 | 253 |
| 248 TestOperationWithOneDevice( | 254 TestOperationWithOneDevice( |
| 249 TetherAvailabilityResponse_ResponseCode :: | 255 TetherAvailabilityResponse_ResponseCode :: |
| 250 TetherAvailabilityResponse_ResponseCode_SETUP_NEEDED); | 256 TetherAvailabilityResponse_ResponseCode_SETUP_NEEDED); |
| 251 } | 257 } |
| 252 | 258 |
| 253 TEST_F(HostScannerOperationTest, TestOperation_OneDevice_NoReception) { | 259 TEST_F(HostScannerOperationTest, TestOperation_OneDevice_NoReception) { |
| 254 EXPECT_CALL(*test_host_scan_device_prioritizer_, | 260 EXPECT_CALL(*mock_tether_host_response_recorder_, |
| 255 RecordSuccessfulTetherAvailabilityResponse(_)) | 261 RecordSuccessfulTetherAvailabilityResponse(_)) |
| 256 .Times(0); | 262 .Times(0); |
| 257 | 263 |
| 258 TestOperationWithOneDevice( | 264 TestOperationWithOneDevice( |
| 259 TetherAvailabilityResponse_ResponseCode :: | 265 TetherAvailabilityResponse_ResponseCode :: |
| 260 TetherAvailabilityResponse_ResponseCode_NO_RECEPTION); | 266 TetherAvailabilityResponse_ResponseCode_NO_RECEPTION); |
| 261 } | 267 } |
| 262 | 268 |
| 263 TEST_F(HostScannerOperationTest, TestOperation_OneDevice_NoSimCard) { | 269 TEST_F(HostScannerOperationTest, TestOperation_OneDevice_NoSimCard) { |
| 264 EXPECT_CALL(*test_host_scan_device_prioritizer_, | 270 EXPECT_CALL(*mock_tether_host_response_recorder_, |
| 265 RecordSuccessfulTetherAvailabilityResponse(_)) | 271 RecordSuccessfulTetherAvailabilityResponse(_)) |
| 266 .Times(0); | 272 .Times(0); |
| 267 | 273 |
| 268 TestOperationWithOneDevice( | 274 TestOperationWithOneDevice( |
| 269 TetherAvailabilityResponse_ResponseCode :: | 275 TetherAvailabilityResponse_ResponseCode :: |
| 270 TetherAvailabilityResponse_ResponseCode_NO_SIM_CARD); | 276 TetherAvailabilityResponse_ResponseCode_NO_SIM_CARD); |
| 271 } | 277 } |
| 272 | 278 |
| 273 TEST_F(HostScannerOperationTest, | 279 TEST_F(HostScannerOperationTest, |
| 274 TestOperation_OneDevice_NotificationsDisabled) { | 280 TestOperation_OneDevice_NotificationsDisabled) { |
| 275 EXPECT_CALL(*test_host_scan_device_prioritizer_, | 281 EXPECT_CALL(*mock_tether_host_response_recorder_, |
| 276 RecordSuccessfulTetherAvailabilityResponse(_)) | 282 RecordSuccessfulTetherAvailabilityResponse(_)) |
| 277 .Times(0); | 283 .Times(0); |
| 278 | 284 |
| 279 TestOperationWithOneDevice( | 285 TestOperationWithOneDevice( |
| 280 TetherAvailabilityResponse_ResponseCode :: | 286 TetherAvailabilityResponse_ResponseCode :: |
| 281 TetherAvailabilityResponse_ResponseCode_NOTIFICATIONS_DISABLED); | 287 TetherAvailabilityResponse_ResponseCode_NOTIFICATIONS_DISABLED); |
| 282 } | 288 } |
| 283 | 289 |
| 284 TEST_F(HostScannerOperationTest, TestMultipleDevices) { | 290 TEST_F(HostScannerOperationTest, TestMultipleDevices) { |
| 285 EXPECT_CALL(*test_host_scan_device_prioritizer_, | 291 EXPECT_CALL(*mock_tether_host_response_recorder_, |
| 286 RecordSuccessfulTetherAvailabilityResponse(test_devices_[0])); | 292 RecordSuccessfulTetherAvailabilityResponse(test_devices_[0])); |
| 287 EXPECT_CALL(*test_host_scan_device_prioritizer_, | 293 EXPECT_CALL(*mock_tether_host_response_recorder_, |
| 288 RecordSuccessfulTetherAvailabilityResponse(test_devices_[1])) | 294 RecordSuccessfulTetherAvailabilityResponse(test_devices_[1])) |
| 289 .Times(0); | 295 .Times(0); |
| 290 EXPECT_CALL(*test_host_scan_device_prioritizer_, | 296 EXPECT_CALL(*mock_tether_host_response_recorder_, |
| 291 RecordSuccessfulTetherAvailabilityResponse(test_devices_[2])); | 297 RecordSuccessfulTetherAvailabilityResponse(test_devices_[2])); |
| 292 EXPECT_CALL(*test_host_scan_device_prioritizer_, | 298 EXPECT_CALL(*mock_tether_host_response_recorder_, |
| 293 RecordSuccessfulTetherAvailabilityResponse(test_devices_[3])) | 299 RecordSuccessfulTetherAvailabilityResponse(test_devices_[3])) |
| 294 .Times(0); | 300 .Times(0); |
| 295 EXPECT_CALL(*test_host_scan_device_prioritizer_, | 301 EXPECT_CALL(*mock_tether_host_response_recorder_, |
| 296 RecordSuccessfulTetherAvailabilityResponse(test_devices_[4])) | 302 RecordSuccessfulTetherAvailabilityResponse(test_devices_[4])) |
| 297 .Times(0); | 303 .Times(0); |
| 298 | 304 |
| 299 ConstructOperation(test_devices_); | 305 ConstructOperation(test_devices_); |
| 300 | 306 |
| 301 // Simulate devices 0 and 2 authenticating successfully. Use different carrier | 307 // Simulate devices 0 and 2 authenticating successfully. Use different carrier |
| 302 // names to ensure that the DeviceStatus is being stored correctly. | 308 // names to ensure that the DeviceStatus is being stored correctly. |
| 303 SimulateDeviceAuthenticationAndVerifyMessageSent(test_devices_[0], 1u); | 309 SimulateDeviceAuthenticationAndVerifyMessageSent(test_devices_[0], 1u); |
| 304 SimulateResponseReceivedAndVerifyObserverCallbackInvoked( | 310 SimulateResponseReceivedAndVerifyObserverCallbackInvoked( |
| 305 test_devices_[0], | 311 test_devices_[0], |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 362 "noService", true /* expected_to_be_last_scan_result */); | 368 "noService", true /* expected_to_be_last_scan_result */); |
| 363 | 369 |
| 364 // The scan should be over, and still no new scan results should have come in. | 370 // The scan should be over, and still no new scan results should have come in. |
| 365 EXPECT_TRUE(test_observer_->has_final_scan_result_been_sent); | 371 EXPECT_TRUE(test_observer_->has_final_scan_result_been_sent); |
| 366 EXPECT_EQ(2u, test_observer_->scanned_devices_so_far.size()); | 372 EXPECT_EQ(2u, test_observer_->scanned_devices_so_far.size()); |
| 367 } | 373 } |
| 368 | 374 |
| 369 } // namespace tether | 375 } // namespace tether |
| 370 | 376 |
| 371 } // namespace cryptauth | 377 } // namespace cryptauth |
| OLD | NEW |