| Index: chromeos/components/tether/keep_alive_scheduler_unittest.cc
|
| diff --git a/chromeos/components/tether/keep_alive_scheduler_unittest.cc b/chromeos/components/tether/keep_alive_scheduler_unittest.cc
|
| index 736c2f701e125fde737be52bb131c2add36b6d0e..90ed222250f3273c28e172e681ca5210897727af 100644
|
| --- a/chromeos/components/tether/keep_alive_scheduler_unittest.cc
|
| +++ b/chromeos/components/tether/keep_alive_scheduler_unittest.cc
|
| @@ -8,8 +8,11 @@
|
| #include <vector>
|
|
|
| #include "base/timer/mock_timer.h"
|
| +#include "chromeos/components/tether/device_id_tether_network_guid_map.h"
|
| #include "chromeos/components/tether/fake_active_host.h"
|
| #include "chromeos/components/tether/fake_ble_connection_manager.h"
|
| +#include "chromeos/components/tether/fake_host_scan_cache.h"
|
| +#include "chromeos/components/tether/proto_test_util.h"
|
| #include "components/cryptauth/remote_device_test_util.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| @@ -38,7 +41,10 @@ class FakeKeepAliveOperation : public KeepAliveOperation {
|
|
|
| ~FakeKeepAliveOperation() override { handler_->OnOperationDeleted(); }
|
|
|
| - void SendOperationFinishedEvent() { OnOperationFinished(); }
|
| + void SendOperationFinishedEvent(std::unique_ptr<DeviceStatus> device_status) {
|
| + device_status_ = std::move(device_status);
|
| + OnOperationFinished();
|
| + }
|
|
|
| cryptauth::RemoteDevice remote_device() { return remote_device_; }
|
|
|
| @@ -88,6 +94,9 @@ class KeepAliveSchedulerTest : public testing::Test {
|
| void SetUp() override {
|
| fake_active_host_ = base::MakeUnique<FakeActiveHost>();
|
| fake_ble_connection_manager_ = base::MakeUnique<FakeBleConnectionManager>();
|
| + fake_host_scan_cache_ = base::MakeUnique<FakeHostScanCache>();
|
| + device_id_tether_network_guid_map_ =
|
| + base::MakeUnique<DeviceIdTetherNetworkGuidMap>();
|
| mock_timer_ = new base::MockTimer(true /* retain_user_task */,
|
| true /* is_repeating */);
|
|
|
| @@ -98,6 +107,7 @@ class KeepAliveSchedulerTest : public testing::Test {
|
|
|
| scheduler_ = base::WrapUnique(new KeepAliveScheduler(
|
| fake_active_host_.get(), fake_ble_connection_manager_.get(),
|
| + fake_host_scan_cache_.get(), device_id_tether_network_guid_map_.get(),
|
| base::WrapUnique(mock_timer_)));
|
| }
|
|
|
| @@ -111,10 +121,37 @@ class KeepAliveSchedulerTest : public testing::Test {
|
| }
|
| }
|
|
|
| + void SendOperationFinishedEventFromLastCreatedOperation(
|
| + const std::string& cell_provider,
|
| + int battery_percentage,
|
| + int connection_strength) {
|
| + fake_operation_factory_->last_created()->SendOperationFinishedEvent(
|
| + base::MakeUnique<DeviceStatus>(CreateTestDeviceStatus(
|
| + cell_provider, battery_percentage, connection_strength)));
|
| + }
|
| +
|
| + void VerifyCacheUpdated(const cryptauth::RemoteDevice& remote_device,
|
| + const std::string& carrier,
|
| + int battery_percentage,
|
| + int signal_strength) {
|
| + const FakeHostScanCache::CacheEntry* entry =
|
| + fake_host_scan_cache_->GetCacheEntry(
|
| + device_id_tether_network_guid_map_->GetTetherNetworkGuidForDeviceId(
|
| + remote_device.GetDeviceId()));
|
| + ASSERT_TRUE(entry);
|
| + EXPECT_EQ(carrier, entry->carrier);
|
| + EXPECT_EQ(battery_percentage, entry->battery_percentage);
|
| + EXPECT_EQ(signal_strength, entry->signal_strength);
|
| + }
|
| +
|
| const std::vector<cryptauth::RemoteDevice> test_devices_;
|
|
|
| std::unique_ptr<FakeActiveHost> fake_active_host_;
|
| std::unique_ptr<FakeBleConnectionManager> fake_ble_connection_manager_;
|
| + std::unique_ptr<FakeHostScanCache> fake_host_scan_cache_;
|
| + // TODO(hansberry): Use a fake for this when a real mapping scheme is created.
|
| + std::unique_ptr<DeviceIdTetherNetworkGuidMap>
|
| + device_id_tether_network_guid_map_;
|
| base::MockTimer* mock_timer_;
|
|
|
| std::unique_ptr<FakeKeepAliveOperationFactory> fake_operation_factory_;
|
| @@ -148,12 +185,15 @@ TEST_F(KeepAliveSchedulerTest, TestSendTickle_OneActiveHost) {
|
| VerifyTimerRunning(true /* is_running */);
|
|
|
| // Ensure that once the operation is finished, it is deleted.
|
| - fake_operation_factory_->last_created()->SendOperationFinishedEvent();
|
| + SendOperationFinishedEventFromLastCreatedOperation(
|
| + "cellProvider", 50 /* battery_percentage */, 2 /* connection_strength */);
|
| EXPECT_EQ(1u, fake_operation_factory_->num_created());
|
| EXPECT_EQ(1u, fake_operation_factory_->num_deleted());
|
| VerifyTimerRunning(true /* is_running */);
|
| + VerifyCacheUpdated(test_devices_[0], "cellProvider",
|
| + 50 /* battery_percentage */, 50 /* signal_strength */);
|
|
|
| - // Fire the timer; this should result in another tickle being sent.
|
| + // Fire the timer; this should result in tickle #2 being sent.
|
| mock_timer_->Fire();
|
| EXPECT_EQ(2u, fake_operation_factory_->num_created());
|
| EXPECT_EQ(test_devices_[0],
|
| @@ -161,16 +201,37 @@ TEST_F(KeepAliveSchedulerTest, TestSendTickle_OneActiveHost) {
|
| EXPECT_EQ(1u, fake_operation_factory_->num_deleted());
|
| VerifyTimerRunning(true /* is_running */);
|
|
|
| - // Finish this operation.
|
| - fake_operation_factory_->last_created()->SendOperationFinishedEvent();
|
| + // Finish tickle operation #2.
|
| + SendOperationFinishedEventFromLastCreatedOperation(
|
| + "cellProvider", 40 /* battery_percentage */, 3 /* connection_strength */);
|
| EXPECT_EQ(2u, fake_operation_factory_->num_created());
|
| EXPECT_EQ(2u, fake_operation_factory_->num_deleted());
|
| VerifyTimerRunning(true /* is_running */);
|
| + VerifyCacheUpdated(test_devices_[0], "cellProvider",
|
| + 40 /* battery_percentage */, 75 /* signal_strength */);
|
| +
|
| + // Fire the timer; this should result in tickle #3 being sent.
|
| + mock_timer_->Fire();
|
| + EXPECT_EQ(3u, fake_operation_factory_->num_created());
|
| + EXPECT_EQ(test_devices_[0],
|
| + fake_operation_factory_->last_created()->remote_device());
|
| + EXPECT_EQ(2u, fake_operation_factory_->num_deleted());
|
| + VerifyTimerRunning(true /* is_running */);
|
| +
|
| + // Finish tickler operation #3. This time, simulate a failure to receive a
|
| + // DeviceStatus back.
|
| + fake_operation_factory_->last_created()->SendOperationFinishedEvent(nullptr);
|
| + EXPECT_EQ(3u, fake_operation_factory_->num_created());
|
| + EXPECT_EQ(3u, fake_operation_factory_->num_deleted());
|
| + VerifyTimerRunning(true /* is_running */);
|
| + // The same data returned by tickle #2 should be present.
|
| + VerifyCacheUpdated(test_devices_[0], "cellProvider",
|
| + 40 /* battery_percentage */, 75 /* signal_strength */);
|
|
|
| // Disconnect that device.
|
| fake_active_host_->SetActiveHostDisconnected();
|
| - EXPECT_EQ(2u, fake_operation_factory_->num_created());
|
| - EXPECT_EQ(2u, fake_operation_factory_->num_deleted());
|
| + EXPECT_EQ(3u, fake_operation_factory_->num_created());
|
| + EXPECT_EQ(3u, fake_operation_factory_->num_deleted());
|
| VerifyTimerRunning(false /* is_running */);
|
| }
|
|
|
| @@ -221,10 +282,13 @@ TEST_F(KeepAliveSchedulerTest, TestSendTickle_MultipleActiveHosts) {
|
| VerifyTimerRunning(true /* is_running */);
|
|
|
| // Ensure that once the second operation is finished, it is deleted.
|
| - fake_operation_factory_->last_created()->SendOperationFinishedEvent();
|
| + SendOperationFinishedEventFromLastCreatedOperation(
|
| + "cellProvider", 80 /* battery_percentage */, 4 /* connection_strength */);
|
| EXPECT_EQ(2u, fake_operation_factory_->num_created());
|
| EXPECT_EQ(2u, fake_operation_factory_->num_deleted());
|
| VerifyTimerRunning(true /* is_running */);
|
| + VerifyCacheUpdated(test_devices_[1], "cellProvider",
|
| + 80 /* battery_percentage */, 100 /* signal_strength */);
|
|
|
| // Disconnect that device.
|
| fake_active_host_->SetActiveHostDisconnected();
|
|
|