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

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

Issue 2945643002: [CrOS Tether] Sort Tether network lists. (Closed)
Patch Set: Cleanup - now ready for review. 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
OLDNEW
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_scan_device_prioritizer.h" 5 #include "chromeos/components/tether/host_scan_device_prioritizer.h"
6 6
7 #include <memory>
8
9 #include "base/test/scoped_task_environment.h"
10 #include "chromeos/components/tether/device_id_tether_network_guid_map.h"
7 #include "chromeos/components/tether/tether_host_response_recorder.h" 11 #include "chromeos/components/tether/tether_host_response_recorder.h"
12 #include "chromeos/dbus/dbus_thread_manager.h"
13 #include "chromeos/network/network_state.h"
14 #include "chromeos/network/network_state_handler.h"
15 #include "chromeos/network/network_state_test.h"
8 #include "components/cryptauth/remote_device_test_util.h" 16 #include "components/cryptauth/remote_device_test_util.h"
9 #include "components/prefs/testing_pref_service.h" 17 #include "components/prefs/testing_pref_service.h"
10 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
11 19
12 namespace chromeos { 20 namespace chromeos {
13 21
14 namespace tether { 22 namespace tether {
15 23
16 class HostScanDevicePrioritizerTest : public testing::Test { 24 class HostScanDevicePrioritizerTest : public NetworkStateTest {
17 protected: 25 protected:
18 HostScanDevicePrioritizerTest() 26 HostScanDevicePrioritizerTest()
19 : test_devices_(cryptauth::GenerateTestRemoteDevices(10)) {} 27 : test_devices_(cryptauth::GenerateTestRemoteDevices(10)) {}
20 28
21 void SetUp() override { 29 void SetUp() override {
30 DBusThreadManager::Initialize();
31 NetworkStateTest::SetUp();
32
33 network_state_handler()->SetTetherTechnologyState(
34 NetworkStateHandler::TechnologyState::TECHNOLOGY_ENABLED);
35
22 pref_service_ = base::MakeUnique<TestingPrefServiceSimple>(); 36 pref_service_ = base::MakeUnique<TestingPrefServiceSimple>();
23 TetherHostResponseRecorder::RegisterPrefs(pref_service_->registry()); 37 TetherHostResponseRecorder::RegisterPrefs(pref_service_->registry());
24 38
25 recorder_ = 39 recorder_ =
26 base::MakeUnique<TetherHostResponseRecorder>(pref_service_.get()); 40 base::MakeUnique<TetherHostResponseRecorder>(pref_service_.get());
41 device_id_tether_network_guid_map_ =
42 base::MakeUnique<DeviceIdTetherNetworkGuidMap>();
27 43
28 prioritizer_ = base::MakeUnique<HostScanDevicePrioritizer>(recorder_.get()); 44 prioritizer_ = base::MakeUnique<HostScanDevicePrioritizer>(
45 network_state_handler(), recorder_.get(),
46 device_id_tether_network_guid_map_.get());
29 } 47 }
30 48
49 void TearDown() override {
50 prioritizer_.reset();
51 ShutdownNetworkState();
52 NetworkStateTest::TearDown();
53 DBusThreadManager::Shutdown();
54 }
55
56 void VerifyNetworksInExpectedOrder(
57 std::vector<cryptauth::RemoteDevice> expected) {
58 NetworkStateHandler::NetworkStateList network_list;
59
60 network_state_handler()->GetVisibleNetworkListByType(
61 NetworkTypePattern::Tether(), &network_list);
62 EXPECT_EQ(expected.size(), network_list.size());
63
64 for (size_t i = 0; i < expected.size(); i++) {
65 std::string expected_guid =
66 device_id_tether_network_guid_map_->GetTetherNetworkGuidForDeviceId(
67 expected[i].GetDeviceId());
68 EXPECT_EQ(expected_guid, network_list[i]->guid());
69 }
70 }
71
72 void AddNetworkStateForDevice(const cryptauth::RemoteDevice& remote_device) {
73 std::string guid =
74 device_id_tether_network_guid_map_->GetTetherNetworkGuidForDeviceId(
75 remote_device.GetDeviceId());
76 network_state_handler()->AddTetherNetworkState(
77 guid, "name", "carrier", 100 /* battery_percentage */,
78 100 /* signal_strength */, false /* has_connected_to_host */);
79 }
80
81 const base::test::ScopedTaskEnvironment scoped_task_environment_;
31 const std::vector<cryptauth::RemoteDevice> test_devices_; 82 const std::vector<cryptauth::RemoteDevice> test_devices_;
32 83
33 std::unique_ptr<TestingPrefServiceSimple> pref_service_; 84 std::unique_ptr<TestingPrefServiceSimple> pref_service_;
34 std::unique_ptr<TetherHostResponseRecorder> recorder_; 85 std::unique_ptr<TetherHostResponseRecorder> recorder_;
86 // TODO(hansberry): Use a fake for this when a real mapping scheme is created.
87 std::unique_ptr<DeviceIdTetherNetworkGuidMap>
88 device_id_tether_network_guid_map_;
35 89
36 std::unique_ptr<HostScanDevicePrioritizer> prioritizer_; 90 std::unique_ptr<HostScanDevicePrioritizer> prioritizer_;
37 91
38 private: 92 private:
39 DISALLOW_COPY_AND_ASSIGN(HostScanDevicePrioritizerTest); 93 DISALLOW_COPY_AND_ASSIGN(HostScanDevicePrioritizerTest);
40 }; 94 };
41 95
42 TEST_F(HostScanDevicePrioritizerTest, TestOnlyTetherAvailabilityResponses) { 96 TEST_F(HostScanDevicePrioritizerTest,
97 TestOnlyTetherAvailabilityResponses_RemoteDevices) {
43 // Receive TetherAvailabilityResponses from devices 0-4. 98 // Receive TetherAvailabilityResponses from devices 0-4.
44 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[0]); 99 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[0]);
45 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[1]); 100 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[1]);
46 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[2]); 101 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[2]);
47 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[3]); 102 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[3]);
48 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[4]); 103 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[4]);
49 104
50 // Do not receive a ConnectTetheringResponse. 105 // Do not receive a ConnectTetheringResponse.
51 106
52 std::vector<cryptauth::RemoteDevice> test_vector = 107 std::vector<cryptauth::RemoteDevice> test_vector =
53 std::vector<cryptauth::RemoteDevice>{test_devices_[6], test_devices_[5], 108 std::vector<cryptauth::RemoteDevice>{test_devices_[6], test_devices_[5],
54 test_devices_[4], test_devices_[3], 109 test_devices_[4], test_devices_[3],
55 test_devices_[2], test_devices_[1], 110 test_devices_[2], test_devices_[1],
56 test_devices_[0]}; 111 test_devices_[0]};
57 112
58 prioritizer_->SortByHostScanOrder(&test_vector); 113 prioritizer_->SortByHostScanOrder(&test_vector);
59 EXPECT_EQ((std::vector<cryptauth::RemoteDevice>{ 114 EXPECT_EQ((std::vector<cryptauth::RemoteDevice>{
60 test_devices_[4], test_devices_[3], test_devices_[2], 115 test_devices_[4], test_devices_[3], test_devices_[2],
61 test_devices_[1], test_devices_[0], test_devices_[6], 116 test_devices_[1], test_devices_[0], test_devices_[6],
62 test_devices_[5]}), 117 test_devices_[5]}),
63 test_vector); 118 test_vector);
64 } 119 }
65 120
66 TEST_F(HostScanDevicePrioritizerTest, TestBothTypesOfResponses) { 121 TEST_F(HostScanDevicePrioritizerTest,
122 TestOnlyTetherAvailabilityResponses_NetworkStates) {
67 // Receive TetherAvailabilityResponses from devices 0-4. 123 // Receive TetherAvailabilityResponses from devices 0-4.
68 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[0]); 124 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[0]);
69 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[1]); 125 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[1]);
126 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[2]);
127 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[3]);
128 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[4]);
129
130 // Do not receive a ConnectTetheringResponse.
131
132 AddNetworkStateForDevice(test_devices_[6]);
133 AddNetworkStateForDevice(test_devices_[5]);
134 AddNetworkStateForDevice(test_devices_[4]);
135 AddNetworkStateForDevice(test_devices_[3]);
136 AddNetworkStateForDevice(test_devices_[2]);
137 AddNetworkStateForDevice(test_devices_[1]);
138 AddNetworkStateForDevice(test_devices_[0]);
139
140 VerifyNetworksInExpectedOrder((std::vector<cryptauth::RemoteDevice>{
141 test_devices_[4], test_devices_[3], test_devices_[2], test_devices_[1],
142 test_devices_[0], test_devices_[6], test_devices_[5]}));
143 }
144
145 TEST_F(HostScanDevicePrioritizerTest, TestBothTypesOfResponses_RemoteDevices) {
146 // Receive TetherAvailabilityResponses from devices 0-4.
147 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[0]);
148 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[1]);
70 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[2]); 149 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[2]);
71 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[3]); 150 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[3]);
72 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[4]); 151 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[4]);
73 152
74 // Receive ConnectTetheringResponse from device 0. 153 // Receive ConnectTetheringResponse from device 0.
75 recorder_->RecordSuccessfulConnectTetheringResponse(test_devices_[0]); 154 recorder_->RecordSuccessfulConnectTetheringResponse(test_devices_[0]);
76 155
77 std::vector<cryptauth::RemoteDevice> test_vector = 156 std::vector<cryptauth::RemoteDevice> test_vector =
78 std::vector<cryptauth::RemoteDevice>{test_devices_[6], test_devices_[5], 157 std::vector<cryptauth::RemoteDevice>{test_devices_[6], test_devices_[5],
79 test_devices_[4], test_devices_[3], 158 test_devices_[4], test_devices_[3],
80 test_devices_[2], test_devices_[1], 159 test_devices_[2], test_devices_[1],
81 test_devices_[0]}; 160 test_devices_[0]};
82 161
83 prioritizer_->SortByHostScanOrder(&test_vector); 162 prioritizer_->SortByHostScanOrder(&test_vector);
84 EXPECT_EQ((std::vector<cryptauth::RemoteDevice>{ 163 EXPECT_EQ((std::vector<cryptauth::RemoteDevice>{
85 test_devices_[0], test_devices_[4], test_devices_[3], 164 test_devices_[0], test_devices_[4], test_devices_[3],
86 test_devices_[2], test_devices_[1], test_devices_[6], 165 test_devices_[2], test_devices_[1], test_devices_[6],
87 test_devices_[5]}), 166 test_devices_[5]}),
88 test_vector); 167 test_vector);
89 } 168 }
90 169
91 TEST_F(HostScanDevicePrioritizerTest, TestBothTypesOfResponses_DifferentOrder) { 170 TEST_F(HostScanDevicePrioritizerTest, TestBothTypesOfResponses_NetworkStates) {
171 // Receive TetherAvailabilityResponses from devices 0-4.
172 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[0]);
173 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[1]);
174 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[2]);
175 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[3]);
176 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[4]);
177
178 // Receive ConnectTetheringResponse from device 0.
179 recorder_->RecordSuccessfulConnectTetheringResponse(test_devices_[0]);
180
181 AddNetworkStateForDevice(test_devices_[6]);
182 AddNetworkStateForDevice(test_devices_[5]);
183 AddNetworkStateForDevice(test_devices_[4]);
184 AddNetworkStateForDevice(test_devices_[3]);
185 AddNetworkStateForDevice(test_devices_[2]);
186 AddNetworkStateForDevice(test_devices_[1]);
187 AddNetworkStateForDevice(test_devices_[0]);
188
189 VerifyNetworksInExpectedOrder((std::vector<cryptauth::RemoteDevice>{
190 test_devices_[0], test_devices_[4], test_devices_[3], test_devices_[2],
191 test_devices_[1], test_devices_[6], test_devices_[5]}));
192 }
193
194 TEST_F(HostScanDevicePrioritizerTest,
195 TestBothTypesOfResponses_DifferentOrder_RemoteDevices) {
92 // Receive different order. 196 // Receive different order.
93 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[0]); 197 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[0]);
94 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[2]); 198 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[2]);
95 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[1]); 199 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[1]);
96 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[4]); 200 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[4]);
97 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[3]); 201 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[3]);
98 202
99 // Receive ConnectTetheringResponse from device 1. 203 // Receive ConnectTetheringResponse from device 1.
100 recorder_->RecordSuccessfulConnectTetheringResponse(test_devices_[1]); 204 recorder_->RecordSuccessfulConnectTetheringResponse(test_devices_[1]);
101 205
102 std::vector<cryptauth::RemoteDevice> test_vector = 206 std::vector<cryptauth::RemoteDevice> test_vector =
103 std::vector<cryptauth::RemoteDevice>{test_devices_[9], test_devices_[8], 207 std::vector<cryptauth::RemoteDevice>{test_devices_[9], test_devices_[8],
104 test_devices_[7], test_devices_[6], 208 test_devices_[7], test_devices_[6],
105 test_devices_[5], test_devices_[4], 209 test_devices_[5], test_devices_[4],
106 test_devices_[3], test_devices_[2], 210 test_devices_[3], test_devices_[2],
107 test_devices_[1], test_devices_[0]}; 211 test_devices_[1], test_devices_[0]};
108 212
109 prioritizer_->SortByHostScanOrder(&test_vector); 213 prioritizer_->SortByHostScanOrder(&test_vector);
110 EXPECT_EQ((std::vector<cryptauth::RemoteDevice>{ 214 EXPECT_EQ((std::vector<cryptauth::RemoteDevice>{
111 test_devices_[1], test_devices_[3], test_devices_[4], 215 test_devices_[1], test_devices_[3], test_devices_[4],
112 test_devices_[2], test_devices_[0], test_devices_[9], 216 test_devices_[2], test_devices_[0], test_devices_[9],
113 test_devices_[8], test_devices_[7], test_devices_[6], 217 test_devices_[8], test_devices_[7], test_devices_[6],
114 test_devices_[5]}), 218 test_devices_[5]}),
115 test_vector); 219 test_vector);
116 } 220 }
117 221
222 TEST_F(HostScanDevicePrioritizerTest,
223 TestBothTypesOfResponses_DifferentOrder_NetworkStates) {
224 // Receive different order.
225 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[0]);
226 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[2]);
227 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[1]);
228 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[4]);
229 recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[3]);
230
231 // Receive ConnectTetheringResponse from device 1.
232 recorder_->RecordSuccessfulConnectTetheringResponse(test_devices_[1]);
233
234 AddNetworkStateForDevice(test_devices_[9]);
235 AddNetworkStateForDevice(test_devices_[8]);
236 AddNetworkStateForDevice(test_devices_[7]);
237 AddNetworkStateForDevice(test_devices_[6]);
238 AddNetworkStateForDevice(test_devices_[5]);
239 AddNetworkStateForDevice(test_devices_[4]);
240 AddNetworkStateForDevice(test_devices_[3]);
241 AddNetworkStateForDevice(test_devices_[2]);
242 AddNetworkStateForDevice(test_devices_[1]);
243 AddNetworkStateForDevice(test_devices_[0]);
244
245 VerifyNetworksInExpectedOrder((std::vector<cryptauth::RemoteDevice>{
246 test_devices_[1], test_devices_[3], test_devices_[4], test_devices_[2],
247 test_devices_[0], test_devices_[9], test_devices_[8], test_devices_[7],
248 test_devices_[6], test_devices_[5]}));
249 }
250
118 } // namespace tether 251 } // namespace tether
119 252
120 } // namespace cryptauth 253 } // namespace cryptauth
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698