Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(24)

Side by Side Diff: chromeos/components/tether/keep_alive_scheduler_unittest.cc

Issue 2918863002: [CrOS Tether] Update the KeepAliveTickle code to receive DeviceStatus updates. (Closed)
Patch Set: hansberry@ comments. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chromeos/components/tether/keep_alive_scheduler.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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/keep_alive_scheduler.h" 5 #include "chromeos/components/tether/keep_alive_scheduler.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/timer/mock_timer.h" 10 #include "base/timer/mock_timer.h"
11 #include "chromeos/components/tether/device_id_tether_network_guid_map.h"
11 #include "chromeos/components/tether/fake_active_host.h" 12 #include "chromeos/components/tether/fake_active_host.h"
12 #include "chromeos/components/tether/fake_ble_connection_manager.h" 13 #include "chromeos/components/tether/fake_ble_connection_manager.h"
14 #include "chromeos/components/tether/fake_host_scan_cache.h"
15 #include "chromeos/components/tether/proto_test_util.h"
13 #include "components/cryptauth/remote_device_test_util.h" 16 #include "components/cryptauth/remote_device_test_util.h"
14 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
15 18
16 namespace chromeos { 19 namespace chromeos {
17 20
18 namespace tether { 21 namespace tether {
19 22
20 namespace { 23 namespace {
21 24
22 const char kTetherNetworkGuid[] = "tetherNetworkGuid"; 25 const char kTetherNetworkGuid[] = "tetherNetworkGuid";
23 const char kWifiNetworkGuid[] = "wifiNetworkGuid"; 26 const char kWifiNetworkGuid[] = "wifiNetworkGuid";
24 27
25 class OperationDeletedHandler { 28 class OperationDeletedHandler {
26 public: 29 public:
27 virtual void OnOperationDeleted() = 0; 30 virtual void OnOperationDeleted() = 0;
28 }; 31 };
29 32
30 class FakeKeepAliveOperation : public KeepAliveOperation { 33 class FakeKeepAliveOperation : public KeepAliveOperation {
31 public: 34 public:
32 FakeKeepAliveOperation(const cryptauth::RemoteDevice& device_to_connect, 35 FakeKeepAliveOperation(const cryptauth::RemoteDevice& device_to_connect,
33 BleConnectionManager* connection_manager, 36 BleConnectionManager* connection_manager,
34 OperationDeletedHandler* handler) 37 OperationDeletedHandler* handler)
35 : KeepAliveOperation(device_to_connect, connection_manager), 38 : KeepAliveOperation(device_to_connect, connection_manager),
36 handler_(handler), 39 handler_(handler),
37 remote_device_(device_to_connect) {} 40 remote_device_(device_to_connect) {}
38 41
39 ~FakeKeepAliveOperation() override { handler_->OnOperationDeleted(); } 42 ~FakeKeepAliveOperation() override { handler_->OnOperationDeleted(); }
40 43
41 void SendOperationFinishedEvent() { OnOperationFinished(); } 44 void SendOperationFinishedEvent(std::unique_ptr<DeviceStatus> device_status) {
45 device_status_ = std::move(device_status);
46 OnOperationFinished();
47 }
42 48
43 cryptauth::RemoteDevice remote_device() { return remote_device_; } 49 cryptauth::RemoteDevice remote_device() { return remote_device_; }
44 50
45 private: 51 private:
46 OperationDeletedHandler* handler_; 52 OperationDeletedHandler* handler_;
47 const cryptauth::RemoteDevice remote_device_; 53 const cryptauth::RemoteDevice remote_device_;
48 }; 54 };
49 55
50 class FakeKeepAliveOperationFactory : public KeepAliveOperation::Factory, 56 class FakeKeepAliveOperationFactory : public KeepAliveOperation::Factory,
51 public OperationDeletedHandler { 57 public OperationDeletedHandler {
(...skipping 29 matching lines...) Expand all
81 } // namespace 87 } // namespace
82 88
83 class KeepAliveSchedulerTest : public testing::Test { 89 class KeepAliveSchedulerTest : public testing::Test {
84 protected: 90 protected:
85 KeepAliveSchedulerTest() 91 KeepAliveSchedulerTest()
86 : test_devices_(cryptauth::GenerateTestRemoteDevices(2)) {} 92 : test_devices_(cryptauth::GenerateTestRemoteDevices(2)) {}
87 93
88 void SetUp() override { 94 void SetUp() override {
89 fake_active_host_ = base::MakeUnique<FakeActiveHost>(); 95 fake_active_host_ = base::MakeUnique<FakeActiveHost>();
90 fake_ble_connection_manager_ = base::MakeUnique<FakeBleConnectionManager>(); 96 fake_ble_connection_manager_ = base::MakeUnique<FakeBleConnectionManager>();
97 fake_host_scan_cache_ = base::MakeUnique<FakeHostScanCache>();
98 device_id_tether_network_guid_map_ =
99 base::MakeUnique<DeviceIdTetherNetworkGuidMap>();
91 mock_timer_ = new base::MockTimer(true /* retain_user_task */, 100 mock_timer_ = new base::MockTimer(true /* retain_user_task */,
92 true /* is_repeating */); 101 true /* is_repeating */);
93 102
94 fake_operation_factory_ = 103 fake_operation_factory_ =
95 base::WrapUnique(new FakeKeepAliveOperationFactory()); 104 base::WrapUnique(new FakeKeepAliveOperationFactory());
96 KeepAliveOperation::Factory::SetInstanceForTesting( 105 KeepAliveOperation::Factory::SetInstanceForTesting(
97 fake_operation_factory_.get()); 106 fake_operation_factory_.get());
98 107
99 scheduler_ = base::WrapUnique(new KeepAliveScheduler( 108 scheduler_ = base::WrapUnique(new KeepAliveScheduler(
100 fake_active_host_.get(), fake_ble_connection_manager_.get(), 109 fake_active_host_.get(), fake_ble_connection_manager_.get(),
110 fake_host_scan_cache_.get(), device_id_tether_network_guid_map_.get(),
101 base::WrapUnique(mock_timer_))); 111 base::WrapUnique(mock_timer_)));
102 } 112 }
103 113
104 void VerifyTimerRunning(bool is_running) { 114 void VerifyTimerRunning(bool is_running) {
105 EXPECT_EQ(is_running, mock_timer_->IsRunning()); 115 EXPECT_EQ(is_running, mock_timer_->IsRunning());
106 116
107 if (is_running) { 117 if (is_running) {
108 EXPECT_EQ(base::TimeDelta::FromMinutes( 118 EXPECT_EQ(base::TimeDelta::FromMinutes(
109 KeepAliveScheduler::kKeepAliveIntervalMinutes), 119 KeepAliveScheduler::kKeepAliveIntervalMinutes),
110 mock_timer_->GetCurrentDelay()); 120 mock_timer_->GetCurrentDelay());
111 } 121 }
112 } 122 }
113 123
124 void SendOperationFinishedEventFromLastCreatedOperation(
125 const std::string& cell_provider,
126 int battery_percentage,
127 int connection_strength) {
128 fake_operation_factory_->last_created()->SendOperationFinishedEvent(
129 base::MakeUnique<DeviceStatus>(CreateTestDeviceStatus(
130 cell_provider, battery_percentage, connection_strength)));
131 }
132
133 void VerifyCacheUpdated(const cryptauth::RemoteDevice& remote_device,
134 const std::string& carrier,
135 int battery_percentage,
136 int signal_strength) {
137 const FakeHostScanCache::CacheEntry* entry =
138 fake_host_scan_cache_->GetCacheEntry(
139 device_id_tether_network_guid_map_->GetTetherNetworkGuidForDeviceId(
140 remote_device.GetDeviceId()));
141 ASSERT_TRUE(entry);
142 EXPECT_EQ(carrier, entry->carrier);
143 EXPECT_EQ(battery_percentage, entry->battery_percentage);
144 EXPECT_EQ(signal_strength, entry->signal_strength);
145 }
146
114 const std::vector<cryptauth::RemoteDevice> test_devices_; 147 const std::vector<cryptauth::RemoteDevice> test_devices_;
115 148
116 std::unique_ptr<FakeActiveHost> fake_active_host_; 149 std::unique_ptr<FakeActiveHost> fake_active_host_;
117 std::unique_ptr<FakeBleConnectionManager> fake_ble_connection_manager_; 150 std::unique_ptr<FakeBleConnectionManager> fake_ble_connection_manager_;
151 std::unique_ptr<FakeHostScanCache> fake_host_scan_cache_;
152 // TODO(hansberry): Use a fake for this when a real mapping scheme is created.
153 std::unique_ptr<DeviceIdTetherNetworkGuidMap>
154 device_id_tether_network_guid_map_;
118 base::MockTimer* mock_timer_; 155 base::MockTimer* mock_timer_;
119 156
120 std::unique_ptr<FakeKeepAliveOperationFactory> fake_operation_factory_; 157 std::unique_ptr<FakeKeepAliveOperationFactory> fake_operation_factory_;
121 158
122 std::unique_ptr<KeepAliveScheduler> scheduler_; 159 std::unique_ptr<KeepAliveScheduler> scheduler_;
123 160
124 private: 161 private:
125 DISALLOW_COPY_AND_ASSIGN(KeepAliveSchedulerTest); 162 DISALLOW_COPY_AND_ASSIGN(KeepAliveSchedulerTest);
126 }; 163 };
127 164
(...skipping 13 matching lines...) Expand all
141 fake_active_host_->SetActiveHostConnected(test_devices_[0].GetDeviceId(), 178 fake_active_host_->SetActiveHostConnected(test_devices_[0].GetDeviceId(),
142 std::string(kTetherNetworkGuid), 179 std::string(kTetherNetworkGuid),
143 std::string(kWifiNetworkGuid)); 180 std::string(kWifiNetworkGuid));
144 EXPECT_EQ(1u, fake_operation_factory_->num_created()); 181 EXPECT_EQ(1u, fake_operation_factory_->num_created());
145 EXPECT_EQ(test_devices_[0], 182 EXPECT_EQ(test_devices_[0],
146 fake_operation_factory_->last_created()->remote_device()); 183 fake_operation_factory_->last_created()->remote_device());
147 EXPECT_FALSE(fake_operation_factory_->num_deleted()); 184 EXPECT_FALSE(fake_operation_factory_->num_deleted());
148 VerifyTimerRunning(true /* is_running */); 185 VerifyTimerRunning(true /* is_running */);
149 186
150 // Ensure that once the operation is finished, it is deleted. 187 // Ensure that once the operation is finished, it is deleted.
151 fake_operation_factory_->last_created()->SendOperationFinishedEvent(); 188 SendOperationFinishedEventFromLastCreatedOperation(
189 "cellProvider", 50 /* battery_percentage */, 2 /* connection_strength */);
152 EXPECT_EQ(1u, fake_operation_factory_->num_created()); 190 EXPECT_EQ(1u, fake_operation_factory_->num_created());
153 EXPECT_EQ(1u, fake_operation_factory_->num_deleted()); 191 EXPECT_EQ(1u, fake_operation_factory_->num_deleted());
154 VerifyTimerRunning(true /* is_running */); 192 VerifyTimerRunning(true /* is_running */);
193 VerifyCacheUpdated(test_devices_[0], "cellProvider",
194 50 /* battery_percentage */, 50 /* signal_strength */);
155 195
156 // Fire the timer; this should result in another tickle being sent. 196 // Fire the timer; this should result in tickle #2 being sent.
157 mock_timer_->Fire(); 197 mock_timer_->Fire();
158 EXPECT_EQ(2u, fake_operation_factory_->num_created()); 198 EXPECT_EQ(2u, fake_operation_factory_->num_created());
159 EXPECT_EQ(test_devices_[0], 199 EXPECT_EQ(test_devices_[0],
160 fake_operation_factory_->last_created()->remote_device()); 200 fake_operation_factory_->last_created()->remote_device());
161 EXPECT_EQ(1u, fake_operation_factory_->num_deleted()); 201 EXPECT_EQ(1u, fake_operation_factory_->num_deleted());
162 VerifyTimerRunning(true /* is_running */); 202 VerifyTimerRunning(true /* is_running */);
163 203
164 // Finish this operation. 204 // Finish tickle operation #2.
165 fake_operation_factory_->last_created()->SendOperationFinishedEvent(); 205 SendOperationFinishedEventFromLastCreatedOperation(
206 "cellProvider", 40 /* battery_percentage */, 3 /* connection_strength */);
166 EXPECT_EQ(2u, fake_operation_factory_->num_created()); 207 EXPECT_EQ(2u, fake_operation_factory_->num_created());
167 EXPECT_EQ(2u, fake_operation_factory_->num_deleted()); 208 EXPECT_EQ(2u, fake_operation_factory_->num_deleted());
168 VerifyTimerRunning(true /* is_running */); 209 VerifyTimerRunning(true /* is_running */);
210 VerifyCacheUpdated(test_devices_[0], "cellProvider",
211 40 /* battery_percentage */, 75 /* signal_strength */);
212
213 // Fire the timer; this should result in tickle #3 being sent.
214 mock_timer_->Fire();
215 EXPECT_EQ(3u, fake_operation_factory_->num_created());
216 EXPECT_EQ(test_devices_[0],
217 fake_operation_factory_->last_created()->remote_device());
218 EXPECT_EQ(2u, fake_operation_factory_->num_deleted());
219 VerifyTimerRunning(true /* is_running */);
220
221 // Finish tickler operation #3. This time, simulate a failure to receive a
222 // DeviceStatus back.
223 fake_operation_factory_->last_created()->SendOperationFinishedEvent(nullptr);
224 EXPECT_EQ(3u, fake_operation_factory_->num_created());
225 EXPECT_EQ(3u, fake_operation_factory_->num_deleted());
226 VerifyTimerRunning(true /* is_running */);
227 // The same data returned by tickle #2 should be present.
228 VerifyCacheUpdated(test_devices_[0], "cellProvider",
229 40 /* battery_percentage */, 75 /* signal_strength */);
169 230
170 // Disconnect that device. 231 // Disconnect that device.
171 fake_active_host_->SetActiveHostDisconnected(); 232 fake_active_host_->SetActiveHostDisconnected();
172 EXPECT_EQ(2u, fake_operation_factory_->num_created()); 233 EXPECT_EQ(3u, fake_operation_factory_->num_created());
173 EXPECT_EQ(2u, fake_operation_factory_->num_deleted()); 234 EXPECT_EQ(3u, fake_operation_factory_->num_deleted());
174 VerifyTimerRunning(false /* is_running */); 235 VerifyTimerRunning(false /* is_running */);
175 } 236 }
176 237
177 TEST_F(KeepAliveSchedulerTest, TestSendTickle_MultipleActiveHosts) { 238 TEST_F(KeepAliveSchedulerTest, TestSendTickle_MultipleActiveHosts) {
178 EXPECT_FALSE(fake_operation_factory_->num_created()); 239 EXPECT_FALSE(fake_operation_factory_->num_created());
179 EXPECT_FALSE(fake_operation_factory_->num_deleted()); 240 EXPECT_FALSE(fake_operation_factory_->num_deleted());
180 VerifyTimerRunning(false /* is_running */); 241 VerifyTimerRunning(false /* is_running */);
181 242
182 // Start connecting to a device. No operation should be started. 243 // Start connecting to a device. No operation should be started.
183 fake_active_host_->SetActiveHostConnecting(test_devices_[0].GetDeviceId(), 244 fake_active_host_->SetActiveHostConnecting(test_devices_[0].GetDeviceId(),
(...skipping 30 matching lines...) Expand all
214 fake_active_host_->SetActiveHostConnected(test_devices_[1].GetDeviceId(), 275 fake_active_host_->SetActiveHostConnected(test_devices_[1].GetDeviceId(),
215 std::string(kTetherNetworkGuid), 276 std::string(kTetherNetworkGuid),
216 std::string(kWifiNetworkGuid)); 277 std::string(kWifiNetworkGuid));
217 EXPECT_EQ(2u, fake_operation_factory_->num_created()); 278 EXPECT_EQ(2u, fake_operation_factory_->num_created());
218 EXPECT_EQ(test_devices_[1], 279 EXPECT_EQ(test_devices_[1],
219 fake_operation_factory_->last_created()->remote_device()); 280 fake_operation_factory_->last_created()->remote_device());
220 EXPECT_EQ(1u, fake_operation_factory_->num_deleted()); 281 EXPECT_EQ(1u, fake_operation_factory_->num_deleted());
221 VerifyTimerRunning(true /* is_running */); 282 VerifyTimerRunning(true /* is_running */);
222 283
223 // Ensure that once the second operation is finished, it is deleted. 284 // Ensure that once the second operation is finished, it is deleted.
224 fake_operation_factory_->last_created()->SendOperationFinishedEvent(); 285 SendOperationFinishedEventFromLastCreatedOperation(
286 "cellProvider", 80 /* battery_percentage */, 4 /* connection_strength */);
225 EXPECT_EQ(2u, fake_operation_factory_->num_created()); 287 EXPECT_EQ(2u, fake_operation_factory_->num_created());
226 EXPECT_EQ(2u, fake_operation_factory_->num_deleted()); 288 EXPECT_EQ(2u, fake_operation_factory_->num_deleted());
227 VerifyTimerRunning(true /* is_running */); 289 VerifyTimerRunning(true /* is_running */);
290 VerifyCacheUpdated(test_devices_[1], "cellProvider",
291 80 /* battery_percentage */, 100 /* signal_strength */);
228 292
229 // Disconnect that device. 293 // Disconnect that device.
230 fake_active_host_->SetActiveHostDisconnected(); 294 fake_active_host_->SetActiveHostDisconnected();
231 EXPECT_EQ(2u, fake_operation_factory_->num_created()); 295 EXPECT_EQ(2u, fake_operation_factory_->num_created());
232 EXPECT_EQ(2u, fake_operation_factory_->num_deleted()); 296 EXPECT_EQ(2u, fake_operation_factory_->num_deleted());
233 VerifyTimerRunning(false /* is_running */); 297 VerifyTimerRunning(false /* is_running */);
234 } 298 }
235 299
236 } // namespace tether 300 } // namespace tether
237 301
238 } // namespace cryptauth 302 } // namespace cryptauth
OLDNEW
« no previous file with comments | « chromeos/components/tether/keep_alive_scheduler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698