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

Side by Side Diff: components/cryptauth/cryptauth_device_manager_unittest.cc

Issue 2561683002: Update CryptAuthDeviceManager to store all synced devices instead of only unlock keys. (Closed)
Patch Set: hansberry@ comment. Created 4 years 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "components/cryptauth/cryptauth_device_manager.h" 5 #include "components/cryptauth/cryptauth_device_manager.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
(...skipping 30 matching lines...) Expand all
41 41
42 // The timestamp of a last successful sync in seconds. 42 // The timestamp of a last successful sync in seconds.
43 const double kLastSyncTimeSeconds = kInitialTimeNowSeconds - (60 * 60 * 5); 43 const double kLastSyncTimeSeconds = kInitialTimeNowSeconds - (60 * 60 * 5);
44 44
45 // Unlock key fields originally stored in the user prefs. 45 // Unlock key fields originally stored in the user prefs.
46 const char kStoredPublicKey[] = "AAPL"; 46 const char kStoredPublicKey[] = "AAPL";
47 const char kStoredDeviceName[] = "iPhone 6"; 47 const char kStoredDeviceName[] = "iPhone 6";
48 const char kStoredBluetoothAddress[] = "12:34:56:78:90:AB"; 48 const char kStoredBluetoothAddress[] = "12:34:56:78:90:AB";
49 const bool kStoredUnlockKey = true; 49 const bool kStoredUnlockKey = true;
50 const bool kStoredUnlockable = false; 50 const bool kStoredUnlockable = false;
51 const bool kStoredMobileHotspotSupported = true;
51 52
52 // ExternalDeviceInfo fields for the synced unlock key. 53 // ExternalDeviceInfo fields for the synced unlock key.
53 const char kPublicKey1[] = "GOOG"; 54 const char kPublicKey1[] = "GOOG";
54 const char kDeviceName1[] = "Nexus 5"; 55 const char kDeviceName1[] = "Nexus 5";
55 const char kBluetoothAddress1[] = "aa:bb:cc:ee:dd:ff"; 56 const char kBluetoothAddress1[] = "aa:bb:cc:ee:dd:ff";
57 const bool kUnlockKey1 = true;
58 const bool kUnlockable1 = false;
59 const bool kMobileHotspotSupported1 = true;
56 const char kBeaconSeed1Data[] = "beaconSeed1Data"; 60 const char kBeaconSeed1Data[] = "beaconSeed1Data";
57 const int64_t kBeaconSeed1StartTime = 123456; 61 const int64_t kBeaconSeed1StartTime = 123456;
58 const int64_t kBeaconSeed1EndTime = 123457; 62 const int64_t kBeaconSeed1EndTime = 123457;
59 const char kBeaconSeed2Data[] = "beaconSeed2Data"; 63 const char kBeaconSeed2Data[] = "beaconSeed2Data";
60 const int64_t kBeaconSeed2StartTime = 234567; 64 const int64_t kBeaconSeed2StartTime = 234567;
61 const int64_t kBeaconSeed2EndTime = 234568; 65 const int64_t kBeaconSeed2EndTime = 234568;
62 66
63 // ExternalDeviceInfo fields for a non-synced unlockable device. 67 // ExternalDeviceInfo fields for a non-synced unlockable device.
64 const char kPublicKey2[] = "MSFT"; 68 const char kPublicKey2[] = "MSFT";
65 const char kDeviceName2[] = "Surface Pro 3"; 69 const char kDeviceName2[] = "Surface Pro 3";
70 const bool kUnlockKey2 = false;
71 const bool kUnlockable2 = true;
72 const bool kMobileHotspotSupported2 = false;
66 const char kBeaconSeed3Data[] = "beaconSeed3Data"; 73 const char kBeaconSeed3Data[] = "beaconSeed3Data";
67 const int64_t kBeaconSeed3StartTime = 123456; 74 const int64_t kBeaconSeed3StartTime = 123456;
68 const int64_t kBeaconSeed3EndTime = 123457; 75 const int64_t kBeaconSeed3EndTime = 123457;
69 const char kBeaconSeed4Data[] = "beaconSeed4Data"; 76 const char kBeaconSeed4Data[] = "beaconSeed4Data";
70 const int64_t kBeaconSeed4StartTime = 234567; 77 const int64_t kBeaconSeed4StartTime = 234567;
71 const int64_t kBeaconSeed4EndTime = 234568; 78 const int64_t kBeaconSeed4EndTime = 234568;
72 79
73 // Validates that |unlock_keys| and the corresponding preferences stored by 80 // Validates that |devices| is equal to |expected_devices|.
74 // |pref_service| are equal to |expected_unlock_keys|. 81 void ExpectSyncedDevicesAreEqual(
75 void ExpectUnlockKeysAndPrefAreEqual( 82 const std::vector<cryptauth::ExternalDeviceInfo>& expected_devices,
76 const std::vector<cryptauth::ExternalDeviceInfo>& expected_unlock_keys, 83 const std::vector<cryptauth::ExternalDeviceInfo>& devices) {
77 const std::vector<cryptauth::ExternalDeviceInfo>& unlock_keys, 84 ASSERT_EQ(expected_devices.size(), devices.size());
78 const PrefService& pref_service) { 85 for (size_t i = 0; i < devices.size(); ++i) {
79 ASSERT_EQ(expected_unlock_keys.size(), unlock_keys.size());
80 for (size_t i = 0; i < unlock_keys.size(); ++i) {
81 SCOPED_TRACE( 86 SCOPED_TRACE(
82 base::StringPrintf("Compare protos at index=%d", static_cast<int>(i))); 87 base::StringPrintf("Compare protos at index=%d", static_cast<int>(i)));
83 const auto& expected_unlock_key = expected_unlock_keys[i]; 88 const auto& expected_device = expected_devices[i];
84 const auto& unlock_key = unlock_keys.at(i); 89 const auto& device = devices.at(i);
85 EXPECT_TRUE(expected_unlock_key.has_public_key()); 90 EXPECT_TRUE(expected_device.has_public_key());
86 EXPECT_TRUE(unlock_key.has_public_key()); 91 EXPECT_TRUE(device.has_public_key());
87 EXPECT_EQ(expected_unlock_key.public_key(), 92 EXPECT_EQ(expected_device.public_key(),
88 unlock_key.public_key()); 93 device.public_key());
89 94
90 EXPECT_EQ(expected_unlock_key.has_friendly_device_name(), 95 EXPECT_EQ(expected_device.has_friendly_device_name(),
91 unlock_key.has_friendly_device_name()); 96 device.has_friendly_device_name());
92 EXPECT_EQ(expected_unlock_key.friendly_device_name(), 97 EXPECT_EQ(expected_device.friendly_device_name(),
93 unlock_key.friendly_device_name()); 98 device.friendly_device_name());
94 99
95 EXPECT_EQ(expected_unlock_key.has_bluetooth_address(), 100 EXPECT_EQ(expected_device.has_bluetooth_address(),
96 unlock_key.has_bluetooth_address()); 101 device.has_bluetooth_address());
97 EXPECT_EQ(expected_unlock_key.bluetooth_address(), 102 EXPECT_EQ(expected_device.bluetooth_address(),
98 unlock_key.bluetooth_address()); 103 device.bluetooth_address());
99 104
100 EXPECT_EQ(expected_unlock_key.has_unlock_key(), 105 EXPECT_EQ(expected_device.has_unlock_key(),
101 unlock_key.has_unlock_key()); 106 device.has_unlock_key());
102 EXPECT_EQ(expected_unlock_key.unlock_key(), 107 EXPECT_EQ(expected_device.unlock_key(),
103 unlock_key.unlock_key()); 108 device.unlock_key());
104 109
105 EXPECT_EQ(expected_unlock_key.has_unlockable(), 110 EXPECT_EQ(expected_device.has_unlockable(),
106 unlock_key.has_unlockable()); 111 device.has_unlockable());
107 EXPECT_EQ(expected_unlock_key.unlockable(), 112 EXPECT_EQ(expected_device.unlockable(),
108 unlock_key.unlockable()); 113 device.unlockable());
109 114
110 EXPECT_EQ(expected_unlock_key.has_last_update_time_millis(), 115 EXPECT_EQ(expected_device.has_last_update_time_millis(),
111 unlock_key.has_last_update_time_millis()); 116 device.has_last_update_time_millis());
112 EXPECT_EQ(expected_unlock_key.last_update_time_millis(), 117 EXPECT_EQ(expected_device.last_update_time_millis(),
113 unlock_key.last_update_time_millis()); 118 device.last_update_time_millis());
114 119
115 EXPECT_EQ(expected_unlock_key.has_mobile_hotspot_supported(), 120 EXPECT_EQ(expected_device.has_mobile_hotspot_supported(),
116 unlock_key.has_mobile_hotspot_supported()); 121 device.has_mobile_hotspot_supported());
117 EXPECT_EQ(expected_unlock_key.mobile_hotspot_supported(), 122 EXPECT_EQ(expected_device.mobile_hotspot_supported(),
118 unlock_key.mobile_hotspot_supported()); 123 device.mobile_hotspot_supported());
119 124
120 EXPECT_EQ(expected_unlock_key.has_device_type(), 125 EXPECT_EQ(expected_device.has_device_type(),
121 unlock_key.has_device_type()); 126 device.has_device_type());
122 EXPECT_EQ(expected_unlock_key.device_type(), 127 EXPECT_EQ(expected_device.device_type(),
123 unlock_key.device_type()); 128 device.device_type());
124 129
125 ASSERT_EQ(expected_unlock_key.beacon_seeds_size(), 130 ASSERT_EQ(expected_device.beacon_seeds_size(),
126 unlock_key.beacon_seeds_size()); 131 device.beacon_seeds_size());
127 for (int i = 0; i < expected_unlock_key.beacon_seeds_size(); i++) { 132 for (int i = 0; i < expected_device.beacon_seeds_size(); i++) {
128 const cryptauth::BeaconSeed expected_seed = 133 const cryptauth::BeaconSeed expected_seed =
129 expected_unlock_key.beacon_seeds(i); 134 expected_device.beacon_seeds(i);
130 const cryptauth::BeaconSeed seed = unlock_key.beacon_seeds(i); 135 const cryptauth::BeaconSeed seed = device.beacon_seeds(i);
131 EXPECT_TRUE(expected_seed.has_data()); 136 EXPECT_TRUE(expected_seed.has_data());
132 EXPECT_TRUE(seed.has_data()); 137 EXPECT_TRUE(seed.has_data());
133 EXPECT_EQ(expected_seed.data(), seed.data()); 138 EXPECT_EQ(expected_seed.data(), seed.data());
134 139
135 EXPECT_TRUE(expected_seed.has_start_time_millis()); 140 EXPECT_TRUE(expected_seed.has_start_time_millis());
136 EXPECT_TRUE(seed.has_start_time_millis()); 141 EXPECT_TRUE(seed.has_start_time_millis());
137 EXPECT_EQ(expected_seed.start_time_millis(), seed.start_time_millis()); 142 EXPECT_EQ(expected_seed.start_time_millis(), seed.start_time_millis());
138 143
139 EXPECT_TRUE(expected_seed.has_end_time_millis()); 144 EXPECT_TRUE(expected_seed.has_end_time_millis());
140 EXPECT_TRUE(seed.has_end_time_millis()); 145 EXPECT_TRUE(seed.has_end_time_millis());
141 EXPECT_EQ(expected_seed.end_time_millis(), seed.end_time_millis()); 146 EXPECT_EQ(expected_seed.end_time_millis(), seed.end_time_millis());
142 } 147 }
143 } 148 }
149 }
144 150
145 const base::ListValue* unlock_keys_pref = 151 // Validates that |devices| and the corresponding preferences stored by
152 // |pref_service| are equal to |expected_devices|.
153 void ExpectSyncedDevicesAndPrefAreEqual(
154 const std::vector<cryptauth::ExternalDeviceInfo>& expected_devices,
155 const std::vector<cryptauth::ExternalDeviceInfo>& devices,
156 const PrefService& pref_service) {
157 ExpectSyncedDevicesAreEqual(expected_devices, devices);
158
159 const base::ListValue* synced_devices_pref =
146 pref_service.GetList(prefs::kCryptAuthDeviceSyncUnlockKeys); 160 pref_service.GetList(prefs::kCryptAuthDeviceSyncUnlockKeys);
147 ASSERT_EQ(expected_unlock_keys.size(), unlock_keys_pref->GetSize()); 161 ASSERT_EQ(expected_devices.size(), synced_devices_pref->GetSize());
148 for (size_t i = 0; i < unlock_keys_pref->GetSize(); ++i) { 162 for (size_t i = 0; i < synced_devices_pref->GetSize(); ++i) {
149 SCOPED_TRACE(base::StringPrintf("Compare pref dictionary at index=%d", 163 SCOPED_TRACE(base::StringPrintf("Compare pref dictionary at index=%d",
150 static_cast<int>(i))); 164 static_cast<int>(i)));
151 const base::DictionaryValue* unlock_key_dictionary; 165 const base::DictionaryValue* device_dictionary;
152 EXPECT_TRUE(unlock_keys_pref->GetDictionary(i, &unlock_key_dictionary)); 166 EXPECT_TRUE(synced_devices_pref->GetDictionary(i, &device_dictionary));
153 167
154 const auto& expected_unlock_key = expected_unlock_keys[i]; 168 const auto& expected_device = expected_devices[i];
155 169
156 std::string public_key_b64, public_key; 170 std::string public_key_b64, public_key;
157 EXPECT_TRUE( 171 EXPECT_TRUE(
158 unlock_key_dictionary->GetString("public_key", &public_key_b64)); 172 device_dictionary->GetString("public_key", &public_key_b64));
159 EXPECT_TRUE(base::Base64UrlDecode( 173 EXPECT_TRUE(base::Base64UrlDecode(
160 public_key_b64, base::Base64UrlDecodePolicy::REQUIRE_PADDING, 174 public_key_b64, base::Base64UrlDecodePolicy::REQUIRE_PADDING,
161 &public_key)); 175 &public_key));
162 EXPECT_TRUE(expected_unlock_key.has_public_key()); 176 EXPECT_TRUE(expected_device.has_public_key());
163 EXPECT_EQ(expected_unlock_key.public_key(), public_key); 177 EXPECT_EQ(expected_device.public_key(), public_key);
164 178
165 std::string device_name_b64, device_name; 179 std::string device_name_b64, device_name;
166 if (unlock_key_dictionary->GetString("device_name", &device_name_b64)) { 180 if (device_dictionary->GetString("device_name", &device_name_b64)) {
167 EXPECT_TRUE(base::Base64UrlDecode( 181 EXPECT_TRUE(base::Base64UrlDecode(
168 device_name_b64, base::Base64UrlDecodePolicy::REQUIRE_PADDING, 182 device_name_b64, base::Base64UrlDecodePolicy::REQUIRE_PADDING,
169 &device_name)); 183 &device_name));
170 EXPECT_TRUE(expected_unlock_key.has_friendly_device_name()); 184 EXPECT_TRUE(expected_device.has_friendly_device_name());
171 EXPECT_EQ(expected_unlock_key.friendly_device_name(), device_name); 185 EXPECT_EQ(expected_device.friendly_device_name(), device_name);
172 } else { 186 } else {
173 EXPECT_FALSE(expected_unlock_key.has_friendly_device_name()); 187 EXPECT_FALSE(expected_device.has_friendly_device_name());
174 } 188 }
175 189
176 std::string bluetooth_address_b64, bluetooth_address; 190 std::string bluetooth_address_b64, bluetooth_address;
177 if (unlock_key_dictionary->GetString("bluetooth_address", 191 if (device_dictionary->GetString("bluetooth_address",
178 &bluetooth_address_b64)) { 192 &bluetooth_address_b64)) {
179 EXPECT_TRUE(base::Base64UrlDecode( 193 EXPECT_TRUE(base::Base64UrlDecode(
180 bluetooth_address_b64, base::Base64UrlDecodePolicy::REQUIRE_PADDING, 194 bluetooth_address_b64, base::Base64UrlDecodePolicy::REQUIRE_PADDING,
181 &bluetooth_address)); 195 &bluetooth_address));
182 EXPECT_TRUE(expected_unlock_key.has_bluetooth_address()); 196 EXPECT_TRUE(expected_device.has_bluetooth_address());
183 EXPECT_EQ(expected_unlock_key.bluetooth_address(), bluetooth_address); 197 EXPECT_EQ(expected_device.bluetooth_address(), bluetooth_address);
184 } else { 198 } else {
185 EXPECT_FALSE(expected_unlock_key.has_bluetooth_address()); 199 EXPECT_FALSE(expected_device.has_bluetooth_address());
186 } 200 }
187 201
188 bool unlock_key; 202 bool unlock_key;
189 if (unlock_key_dictionary->GetBoolean("unlock_key", &unlock_key)) { 203 if (device_dictionary->GetBoolean("unlock_key", &unlock_key)) {
190 EXPECT_TRUE(expected_unlock_key.has_unlock_key()); 204 EXPECT_TRUE(expected_device.has_unlock_key());
191 EXPECT_EQ(expected_unlock_key.unlock_key(), unlock_key); 205 EXPECT_EQ(expected_device.unlock_key(), unlock_key);
192 } else { 206 } else {
193 EXPECT_FALSE(expected_unlock_key.has_unlock_key()); 207 EXPECT_FALSE(expected_device.has_unlock_key());
194 } 208 }
195 209
196 bool unlockable; 210 bool unlockable;
197 if (unlock_key_dictionary->GetBoolean("unlockable", &unlockable)) { 211 if (device_dictionary->GetBoolean("unlockable", &unlockable)) {
198 EXPECT_TRUE(expected_unlock_key.has_unlockable()); 212 EXPECT_TRUE(expected_device.has_unlockable());
199 EXPECT_EQ(expected_unlock_key.unlockable(), unlockable); 213 EXPECT_EQ(expected_device.unlockable(), unlockable);
200 } else { 214 } else {
201 EXPECT_FALSE(expected_unlock_key.has_unlockable()); 215 EXPECT_FALSE(expected_device.has_unlockable());
202 } 216 }
203 217
204 std::string last_update_time_millis_str; 218 std::string last_update_time_millis_str;
205 if (unlock_key_dictionary->GetString("last_update_time_millis", 219 if (device_dictionary->GetString("last_update_time_millis",
206 &last_update_time_millis_str)) { 220 &last_update_time_millis_str)) {
207 int64_t last_update_time_millis; 221 int64_t last_update_time_millis;
208 EXPECT_TRUE(base::StringToInt64(last_update_time_millis_str, 222 EXPECT_TRUE(base::StringToInt64(last_update_time_millis_str,
209 &last_update_time_millis)); 223 &last_update_time_millis));
210 EXPECT_TRUE(expected_unlock_key.has_last_update_time_millis()); 224 EXPECT_TRUE(expected_device.has_last_update_time_millis());
211 EXPECT_EQ(expected_unlock_key.last_update_time_millis(), 225 EXPECT_EQ(expected_device.last_update_time_millis(),
212 last_update_time_millis); 226 last_update_time_millis);
213 } else { 227 } else {
214 EXPECT_FALSE(expected_unlock_key.has_last_update_time_millis()); 228 EXPECT_FALSE(expected_device.has_last_update_time_millis());
215 } 229 }
216 230
217 bool mobile_hotspot_supported; 231 bool mobile_hotspot_supported;
218 if (unlock_key_dictionary->GetBoolean("mobile_hotspot_supported", 232 if (device_dictionary->GetBoolean("mobile_hotspot_supported",
219 &mobile_hotspot_supported)) { 233 &mobile_hotspot_supported)) {
220 EXPECT_TRUE(expected_unlock_key.has_mobile_hotspot_supported()); 234 EXPECT_TRUE(expected_device.has_mobile_hotspot_supported());
221 EXPECT_EQ(expected_unlock_key.mobile_hotspot_supported(), 235 EXPECT_EQ(expected_device.mobile_hotspot_supported(),
222 mobile_hotspot_supported); 236 mobile_hotspot_supported);
223 } else { 237 } else {
224 EXPECT_FALSE(expected_unlock_key.has_mobile_hotspot_supported()); 238 EXPECT_FALSE(expected_device.has_mobile_hotspot_supported());
225 } 239 }
226 240
227 int device_type; 241 int device_type;
228 if (unlock_key_dictionary->GetInteger("device_type", 242 if (device_dictionary->GetInteger("device_type",
229 &device_type)) { 243 &device_type)) {
230 EXPECT_TRUE(expected_unlock_key.has_device_type()); 244 EXPECT_TRUE(expected_device.has_device_type());
231 EXPECT_EQ(expected_unlock_key.device_type(), 245 EXPECT_EQ(expected_device.device_type(),
232 device_type); 246 device_type);
233 } else { 247 } else {
234 EXPECT_FALSE(expected_unlock_key.has_device_type()); 248 EXPECT_FALSE(expected_device.has_device_type());
235 } 249 }
236 250
237 const base::ListValue* beacon_seeds_from_prefs; 251 const base::ListValue* beacon_seeds_from_prefs;
238 if (unlock_key_dictionary->GetList("beacon_seeds", 252 if (device_dictionary->GetList("beacon_seeds",
239 &beacon_seeds_from_prefs)) { 253 &beacon_seeds_from_prefs)) {
240 ASSERT_EQ( 254 ASSERT_EQ(
241 (size_t) expected_unlock_key.beacon_seeds_size(), 255 (size_t) expected_device.beacon_seeds_size(),
242 beacon_seeds_from_prefs->GetSize()); 256 beacon_seeds_from_prefs->GetSize());
243 for (size_t i = 0; i < beacon_seeds_from_prefs->GetSize(); i++) { 257 for (size_t i = 0; i < beacon_seeds_from_prefs->GetSize(); i++) {
244 const base::DictionaryValue* seed; 258 const base::DictionaryValue* seed;
245 ASSERT_TRUE(beacon_seeds_from_prefs->GetDictionary(i, &seed)); 259 ASSERT_TRUE(beacon_seeds_from_prefs->GetDictionary(i, &seed));
246 260
247 std::string data, start_ms, end_ms; 261 std::string data, start_ms, end_ms;
248 EXPECT_TRUE(seed->GetString("beacon_seed_data", &data)); 262 EXPECT_TRUE(seed->GetString("beacon_seed_data", &data));
249 EXPECT_TRUE(seed->GetString("beacon_seed_start_ms", &start_ms)); 263 EXPECT_TRUE(seed->GetString("beacon_seed_start_ms", &start_ms));
250 EXPECT_TRUE(seed->GetString("beacon_seed_end_ms", &end_ms)); 264 EXPECT_TRUE(seed->GetString("beacon_seed_end_ms", &end_ms));
251 265
252 const cryptauth::BeaconSeed& expected_seed = 266 const cryptauth::BeaconSeed& expected_seed =
253 expected_unlock_key.beacon_seeds((int) i); 267 expected_device.beacon_seeds((int) i);
254 EXPECT_TRUE(expected_seed.has_data()); 268 EXPECT_TRUE(expected_seed.has_data());
255 EXPECT_EQ(expected_seed.data(), data); 269 EXPECT_EQ(expected_seed.data(), data);
256 270
257 EXPECT_TRUE(expected_seed.has_start_time_millis()); 271 EXPECT_TRUE(expected_seed.has_start_time_millis());
258 EXPECT_EQ(expected_seed.start_time_millis(), std::stol(start_ms)); 272 EXPECT_EQ(expected_seed.start_time_millis(), std::stol(start_ms));
259 273
260 EXPECT_TRUE(expected_seed.has_end_time_millis()); 274 EXPECT_TRUE(expected_seed.has_end_time_millis());
261 EXPECT_EQ(expected_seed.end_time_millis(), std::stol(end_ms)); 275 EXPECT_EQ(expected_seed.end_time_millis(), std::stol(end_ms));
262 } 276 }
263 } else { 277 } else {
264 EXPECT_FALSE(expected_unlock_key.beacon_seeds_size()); 278 EXPECT_FALSE(expected_device.beacon_seeds_size());
265 } 279 }
266 } 280 }
267 } 281 }
268 282
269 // Harness for testing CryptAuthDeviceManager. 283 // Harness for testing CryptAuthDeviceManager.
270 class TestCryptAuthDeviceManager : public CryptAuthDeviceManager { 284 class TestCryptAuthDeviceManager : public CryptAuthDeviceManager {
271 public: 285 public:
272 TestCryptAuthDeviceManager( 286 TestCryptAuthDeviceManager(
273 std::unique_ptr<base::Clock> clock, 287 std::unique_ptr<base::Clock> clock,
274 std::unique_ptr<CryptAuthClientFactory> client_factory, 288 std::unique_ptr<CryptAuthClientFactory> client_factory,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 : public testing::Test, 326 : public testing::Test,
313 public CryptAuthDeviceManager::Observer, 327 public CryptAuthDeviceManager::Observer,
314 public MockCryptAuthClientFactory::Observer { 328 public MockCryptAuthClientFactory::Observer {
315 protected: 329 protected:
316 CryptAuthDeviceManagerTest() 330 CryptAuthDeviceManagerTest()
317 : clock_(new base::SimpleTestClock()), 331 : clock_(new base::SimpleTestClock()),
318 client_factory_(new MockCryptAuthClientFactory( 332 client_factory_(new MockCryptAuthClientFactory(
319 MockCryptAuthClientFactory::MockType::MAKE_STRICT_MOCKS)), 333 MockCryptAuthClientFactory::MockType::MAKE_STRICT_MOCKS)),
320 gcm_manager_("existing gcm registration id") { 334 gcm_manager_("existing gcm registration id") {
321 client_factory_->AddObserver(this); 335 client_factory_->AddObserver(this);
336
337 cryptauth::ExternalDeviceInfo unlock_key;
338 unlock_key.set_public_key(kPublicKey1);
339 unlock_key.set_friendly_device_name(kDeviceName1);
340 unlock_key.set_bluetooth_address(kBluetoothAddress1);
341 unlock_key.set_unlock_key(kUnlockKey1);
342 unlock_key.set_unlockable(kUnlockable1);
343 unlock_key.set_mobile_hotspot_supported(kMobileHotspotSupported1);
344 cryptauth::BeaconSeed* seed1 = unlock_key.add_beacon_seeds();
345 seed1->set_data(kBeaconSeed1Data);
346 seed1->set_start_time_millis(kBeaconSeed1StartTime);
347 seed1->set_end_time_millis(kBeaconSeed1EndTime);
348 cryptauth::BeaconSeed* seed2 = unlock_key.add_beacon_seeds();
349 seed2->set_data(kBeaconSeed2Data);
350 seed2->set_start_time_millis(kBeaconSeed2StartTime);
351 seed2->set_end_time_millis(kBeaconSeed2EndTime);
352 devices_in_response_.push_back(unlock_key);
353
354 cryptauth::ExternalDeviceInfo unlockable_device;
355 unlockable_device.set_public_key(kPublicKey2);
356 unlockable_device.set_friendly_device_name(kDeviceName2);
357 unlockable_device.set_unlock_key(kUnlockKey2);
358 unlockable_device.set_unlockable(kUnlockable2);
359 unlockable_device.set_mobile_hotspot_supported(kMobileHotspotSupported2);
360 cryptauth::BeaconSeed* seed3 = unlockable_device.add_beacon_seeds();
361 seed3->set_data(kBeaconSeed3Data);
362 seed3->set_start_time_millis(kBeaconSeed3StartTime);
363 seed3->set_end_time_millis(kBeaconSeed3EndTime);
364 cryptauth::BeaconSeed* seed4 = unlockable_device.add_beacon_seeds();
365 seed4->set_data(kBeaconSeed4Data);
366 seed4->set_start_time_millis(kBeaconSeed4StartTime);
367 seed4->set_end_time_millis(kBeaconSeed4EndTime);
368 devices_in_response_.push_back(unlockable_device);
322 } 369 }
323 370
324 ~CryptAuthDeviceManagerTest() { 371 ~CryptAuthDeviceManagerTest() {
325 client_factory_->RemoveObserver(this); 372 client_factory_->RemoveObserver(this);
326 } 373 }
327 374
328 // testing::Test: 375 // testing::Test:
329 void SetUp() override { 376 void SetUp() override {
330 clock_->SetNow(base::Time::FromDoubleT(kInitialTimeNowSeconds)); 377 clock_->SetNow(base::Time::FromDoubleT(kInitialTimeNowSeconds));
331 378
332 CryptAuthDeviceManager::RegisterPrefs(pref_service_.registry()); 379 CryptAuthDeviceManager::RegisterPrefs(pref_service_.registry());
333 pref_service_.SetUserPref( 380 pref_service_.SetUserPref(
334 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure, 381 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure,
335 new base::FundamentalValue(false)); 382 new base::FundamentalValue(false));
336 pref_service_.SetUserPref(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds, 383 pref_service_.SetUserPref(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds,
337 new base::FundamentalValue(kLastSyncTimeSeconds)); 384 new base::FundamentalValue(kLastSyncTimeSeconds));
338 pref_service_.SetUserPref( 385 pref_service_.SetUserPref(
339 prefs::kCryptAuthDeviceSyncReason, 386 prefs::kCryptAuthDeviceSyncReason,
340 new base::FundamentalValue(cryptauth::INVOCATION_REASON_UNKNOWN)); 387 new base::FundamentalValue(cryptauth::INVOCATION_REASON_UNKNOWN));
341 388
342 std::unique_ptr<base::DictionaryValue> unlock_key_dictionary( 389 std::unique_ptr<base::DictionaryValue> device_dictionary(
343 new base::DictionaryValue()); 390 new base::DictionaryValue());
344 391
345 std::string public_key_b64, device_name_b64, bluetooth_address_b64; 392 std::string public_key_b64, device_name_b64, bluetooth_address_b64;
346 base::Base64UrlEncode(kStoredPublicKey, 393 base::Base64UrlEncode(kStoredPublicKey,
347 base::Base64UrlEncodePolicy::INCLUDE_PADDING, 394 base::Base64UrlEncodePolicy::INCLUDE_PADDING,
348 &public_key_b64); 395 &public_key_b64);
349 base::Base64UrlEncode(kStoredDeviceName, 396 base::Base64UrlEncode(kStoredDeviceName,
350 base::Base64UrlEncodePolicy::INCLUDE_PADDING, 397 base::Base64UrlEncodePolicy::INCLUDE_PADDING,
351 &device_name_b64); 398 &device_name_b64);
352 base::Base64UrlEncode(kStoredBluetoothAddress, 399 base::Base64UrlEncode(kStoredBluetoothAddress,
353 base::Base64UrlEncodePolicy::INCLUDE_PADDING, 400 base::Base64UrlEncodePolicy::INCLUDE_PADDING,
354 &bluetooth_address_b64); 401 &bluetooth_address_b64);
355 402
356 unlock_key_dictionary->SetString("public_key", public_key_b64); 403 device_dictionary->SetString("public_key", public_key_b64);
357 unlock_key_dictionary->SetString("device_name", device_name_b64); 404 device_dictionary->SetString("device_name", device_name_b64);
358 unlock_key_dictionary->SetString("bluetooth_address", 405 device_dictionary->SetString("bluetooth_address",
359 bluetooth_address_b64); 406 bluetooth_address_b64);
360 unlock_key_dictionary->SetBoolean("unlock_key", kStoredUnlockKey); 407 device_dictionary->SetBoolean("unlock_key", kStoredUnlockKey);
361 unlock_key_dictionary->SetBoolean("unlockable", kStoredUnlockable); 408 device_dictionary->SetBoolean("unlockable", kStoredUnlockable);
362 unlock_key_dictionary->Set("beacon_seeds", 409 device_dictionary->Set("beacon_seeds",
363 base::WrapUnique(new base::ListValue())); 410 base::WrapUnique(new base::ListValue()));
411 device_dictionary->SetBoolean("mobile_hotspot_supported",
412 kStoredMobileHotspotSupported);
364 { 413 {
365 ListPrefUpdate update(&pref_service_, 414 ListPrefUpdate update(&pref_service_,
366 prefs::kCryptAuthDeviceSyncUnlockKeys); 415 prefs::kCryptAuthDeviceSyncUnlockKeys);
367 update.Get()->Append(std::move(unlock_key_dictionary)); 416 update.Get()->Append(std::move(device_dictionary));
368 } 417 }
369 418
370 device_manager_.reset(new TestCryptAuthDeviceManager( 419 device_manager_.reset(new TestCryptAuthDeviceManager(
371 base::WrapUnique(clock_), base::WrapUnique(client_factory_), 420 base::WrapUnique(clock_), base::WrapUnique(client_factory_),
372 &gcm_manager_, &pref_service_)); 421 &gcm_manager_, &pref_service_));
373 device_manager_->AddObserver(this); 422 device_manager_->AddObserver(this);
374 423
375 cryptauth::ExternalDeviceInfo unlock_key; 424 get_my_devices_response_.add_devices()->CopyFrom(devices_in_response_[0]);
376 unlock_key.set_public_key(kPublicKey1); 425 get_my_devices_response_.add_devices()->CopyFrom(devices_in_response_[1]);
377 unlock_key.set_friendly_device_name(kDeviceName1);
378 unlock_key.set_bluetooth_address(kBluetoothAddress1);
379 unlock_key.set_unlock_key(true);
380 unlock_key.set_unlockable(false);
381 cryptauth::BeaconSeed* seed1 = unlock_key.add_beacon_seeds();
382 seed1->set_data(kBeaconSeed1Data);
383 seed1->set_start_time_millis(kBeaconSeed1StartTime);
384 seed1->set_end_time_millis(kBeaconSeed1EndTime);
385 cryptauth::BeaconSeed* seed2 = unlock_key.add_beacon_seeds();
386 seed2->set_data(kBeaconSeed2Data);
387 seed2->set_start_time_millis(kBeaconSeed2StartTime);
388 seed2->set_end_time_millis(kBeaconSeed2EndTime);
389
390 cryptauth::ExternalDeviceInfo unlockable_device;
391 unlockable_device.set_public_key(kPublicKey2);
392 unlockable_device.set_friendly_device_name(kDeviceName2);
393 unlockable_device.set_unlock_key(false);
394 unlockable_device.set_unlockable(true);
395 cryptauth::BeaconSeed* seed3 = unlockable_device.add_beacon_seeds();
396 seed3->set_data(kBeaconSeed3Data);
397 seed3->set_start_time_millis(kBeaconSeed3StartTime);
398 seed3->set_end_time_millis(kBeaconSeed3EndTime);
399 cryptauth::BeaconSeed* seed4 = unlockable_device.add_beacon_seeds();
400 seed4->set_data(kBeaconSeed4Data);
401 seed4->set_start_time_millis(kBeaconSeed4StartTime);
402 seed4->set_end_time_millis(kBeaconSeed4EndTime);
403
404 get_my_devices_response_.add_devices()->CopyFrom(unlock_key);
405 get_my_devices_response_.add_devices()->CopyFrom(unlockable_device);
406 426
407 ON_CALL(*sync_scheduler(), GetStrategy()) 427 ON_CALL(*sync_scheduler(), GetStrategy())
408 .WillByDefault(Return(SyncScheduler::Strategy::PERIODIC_REFRESH)); 428 .WillByDefault(Return(SyncScheduler::Strategy::PERIODIC_REFRESH));
409 } 429 }
410 430
411 void TearDown() override { device_manager_->RemoveObserver(this); } 431 void TearDown() override { device_manager_->RemoveObserver(this); }
412 432
413 // CryptAuthDeviceManager::Observer: 433 // CryptAuthDeviceManager::Observer:
414 void OnSyncStarted() override { OnSyncStartedProxy(); } 434 void OnSyncStarted() override { OnSyncStartedProxy(); }
415 435
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 483
464 // Owned by |device_manager_|. 484 // Owned by |device_manager_|.
465 MockCryptAuthClientFactory* client_factory_; 485 MockCryptAuthClientFactory* client_factory_;
466 486
467 TestingPrefServiceSimple pref_service_; 487 TestingPrefServiceSimple pref_service_;
468 488
469 FakeCryptAuthGCMManager gcm_manager_; 489 FakeCryptAuthGCMManager gcm_manager_;
470 490
471 std::unique_ptr<TestCryptAuthDeviceManager> device_manager_; 491 std::unique_ptr<TestCryptAuthDeviceManager> device_manager_;
472 492
493 std::vector<cryptauth::ExternalDeviceInfo> devices_in_response_;
494
473 cryptauth::GetMyDevicesResponse get_my_devices_response_; 495 cryptauth::GetMyDevicesResponse get_my_devices_response_;
474 496
475 cryptauth::GetMyDevicesRequest get_my_devices_request_; 497 cryptauth::GetMyDevicesRequest get_my_devices_request_;
476 498
477 CryptAuthClient::GetMyDevicesCallback success_callback_; 499 CryptAuthClient::GetMyDevicesCallback success_callback_;
478 500
479 CryptAuthClient::ErrorCallback error_callback_; 501 CryptAuthClient::ErrorCallback error_callback_;
480 502
481 DISALLOW_COPY_AND_ASSIGN(CryptAuthDeviceManagerTest); 503 DISALLOW_COPY_AND_ASSIGN(CryptAuthDeviceManagerTest);
482 }; 504 };
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 std::move(clock), 552 std::move(clock),
531 base::MakeUnique<MockCryptAuthClientFactory>( 553 base::MakeUnique<MockCryptAuthClientFactory>(
532 MockCryptAuthClientFactory::MockType::MAKE_STRICT_MOCKS), 554 MockCryptAuthClientFactory::MockType::MAKE_STRICT_MOCKS),
533 &gcm_manager_, &pref_service); 555 &gcm_manager_, &pref_service);
534 556
535 EXPECT_CALL( 557 EXPECT_CALL(
536 *(device_manager.GetSyncScheduler()), 558 *(device_manager.GetSyncScheduler()),
537 Start(elapsed_time, SyncScheduler::Strategy::AGGRESSIVE_RECOVERY)); 559 Start(elapsed_time, SyncScheduler::Strategy::AGGRESSIVE_RECOVERY));
538 device_manager.Start(); 560 device_manager.Start();
539 EXPECT_TRUE(device_manager.GetLastSyncTime().is_null()); 561 EXPECT_TRUE(device_manager.GetLastSyncTime().is_null());
540 EXPECT_EQ(0u, device_manager.unlock_keys().size()); 562 EXPECT_EQ(0u, device_manager.synced_devices().size());
541 } 563 }
542 564
543 TEST_F(CryptAuthDeviceManagerTest, InitWithExistingPrefs) { 565 TEST_F(CryptAuthDeviceManagerTest, InitWithExistingPrefs) {
544 EXPECT_CALL( 566 EXPECT_CALL(
545 *sync_scheduler(), 567 *sync_scheduler(),
546 Start(clock_->Now() - base::Time::FromDoubleT(kLastSyncTimeSeconds), 568 Start(clock_->Now() - base::Time::FromDoubleT(kLastSyncTimeSeconds),
547 SyncScheduler::Strategy::PERIODIC_REFRESH)); 569 SyncScheduler::Strategy::PERIODIC_REFRESH));
548 570
549 device_manager_->Start(); 571 device_manager_->Start();
550 EXPECT_EQ(base::Time::FromDoubleT(kLastSyncTimeSeconds), 572 EXPECT_EQ(base::Time::FromDoubleT(kLastSyncTimeSeconds),
551 device_manager_->GetLastSyncTime()); 573 device_manager_->GetLastSyncTime());
552 574
553 auto unlock_keys = device_manager_->unlock_keys(); 575 auto synced_devices = device_manager_->synced_devices();
554 ASSERT_EQ(1u, unlock_keys.size()); 576 ASSERT_EQ(1u, synced_devices.size());
555 EXPECT_EQ(kStoredPublicKey, unlock_keys[0].public_key()); 577 EXPECT_EQ(kStoredPublicKey, synced_devices[0].public_key());
556 EXPECT_EQ(kStoredDeviceName, unlock_keys[0].friendly_device_name()); 578 EXPECT_EQ(kStoredDeviceName, synced_devices[0].friendly_device_name());
557 EXPECT_EQ(kStoredBluetoothAddress, unlock_keys[0].bluetooth_address()); 579 EXPECT_EQ(kStoredBluetoothAddress, synced_devices[0].bluetooth_address());
558 EXPECT_TRUE(unlock_keys[0].unlock_key()); 580 EXPECT_EQ(kStoredUnlockKey, synced_devices[0].unlock_key());
581 EXPECT_EQ(kStoredUnlockable, synced_devices[0].unlockable());
559 } 582 }
560 583
561 TEST_F(CryptAuthDeviceManagerTest, SyncSucceedsForFirstTime) { 584 TEST_F(CryptAuthDeviceManagerTest, SyncSucceedsForFirstTime) {
562 pref_service_.ClearPref(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds); 585 pref_service_.ClearPref(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds);
563 device_manager_->Start(); 586 device_manager_->Start();
564 587
565 FireSchedulerForSync(cryptauth::INVOCATION_REASON_INITIALIZATION); 588 FireSchedulerForSync(cryptauth::INVOCATION_REASON_INITIALIZATION);
566 ASSERT_FALSE(success_callback_.is_null()); 589 ASSERT_FALSE(success_callback_.is_null());
567 590
568 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds)); 591 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds));
569 EXPECT_CALL(*this, OnSyncFinishedProxy( 592 EXPECT_CALL(*this, OnSyncFinishedProxy(
570 CryptAuthDeviceManager::SyncResult::SUCCESS, 593 CryptAuthDeviceManager::SyncResult::SUCCESS,
571 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); 594 CryptAuthDeviceManager::DeviceChangeResult::CHANGED));
572 595
573 success_callback_.Run(get_my_devices_response_); 596 success_callback_.Run(get_my_devices_response_);
574 EXPECT_EQ(clock_->Now(), device_manager_->GetLastSyncTime()); 597 EXPECT_EQ(clock_->Now(), device_manager_->GetLastSyncTime());
575 598
576 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( 599 ExpectSyncedDevicesAndPrefAreEqual(devices_in_response_,
577 1, get_my_devices_response_.devices(0)), 600 device_manager_->synced_devices(),
578 device_manager_->unlock_keys(), 601 pref_service_);
579 pref_service_);
580 } 602 }
581 603
582 TEST_F(CryptAuthDeviceManagerTest, ForceSync) { 604 TEST_F(CryptAuthDeviceManagerTest, ForceSync) {
583 device_manager_->Start(); 605 device_manager_->Start();
584 606
585 EXPECT_CALL(*sync_scheduler(), ForceSync()); 607 EXPECT_CALL(*sync_scheduler(), ForceSync());
586 device_manager_->ForceSyncNow(cryptauth::INVOCATION_REASON_MANUAL); 608 device_manager_->ForceSyncNow(cryptauth::INVOCATION_REASON_MANUAL);
587 609
588 FireSchedulerForSync(cryptauth::INVOCATION_REASON_MANUAL); 610 FireSchedulerForSync(cryptauth::INVOCATION_REASON_MANUAL);
589 611
590 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds)); 612 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds));
591 EXPECT_CALL(*this, OnSyncFinishedProxy( 613 EXPECT_CALL(*this, OnSyncFinishedProxy(
592 CryptAuthDeviceManager::SyncResult::SUCCESS, 614 CryptAuthDeviceManager::SyncResult::SUCCESS,
593 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); 615 CryptAuthDeviceManager::DeviceChangeResult::CHANGED));
594 success_callback_.Run(get_my_devices_response_); 616 success_callback_.Run(get_my_devices_response_);
595 EXPECT_EQ(clock_->Now(), device_manager_->GetLastSyncTime()); 617 EXPECT_EQ(clock_->Now(), device_manager_->GetLastSyncTime());
596 618
597 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( 619 ExpectSyncedDevicesAndPrefAreEqual(devices_in_response_,
598 1, get_my_devices_response_.devices(0)), 620 device_manager_->synced_devices(),
599 device_manager_->unlock_keys(), 621 pref_service_);
600 pref_service_);
601 } 622 }
602 623
603 TEST_F(CryptAuthDeviceManagerTest, ForceSyncFailsThenSucceeds) { 624 TEST_F(CryptAuthDeviceManagerTest, ForceSyncFailsThenSucceeds) {
604 device_manager_->Start(); 625 device_manager_->Start();
605 EXPECT_FALSE(pref_service_.GetBoolean( 626 EXPECT_FALSE(pref_service_.GetBoolean(
606 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure)); 627 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure));
607 base::Time old_sync_time = device_manager_->GetLastSyncTime(); 628 base::Time old_sync_time = device_manager_->GetLastSyncTime();
608 629
609 // The first force sync fails. 630 // The first force sync fails.
610 EXPECT_CALL(*sync_scheduler(), ForceSync()); 631 EXPECT_CALL(*sync_scheduler(), ForceSync());
(...skipping 15 matching lines...) Expand all
626 ON_CALL(*sync_scheduler(), GetStrategy()) 647 ON_CALL(*sync_scheduler(), GetStrategy())
627 .WillByDefault(Return(SyncScheduler::Strategy::AGGRESSIVE_RECOVERY)); 648 .WillByDefault(Return(SyncScheduler::Strategy::AGGRESSIVE_RECOVERY));
628 FireSchedulerForSync(cryptauth::INVOCATION_REASON_MANUAL); 649 FireSchedulerForSync(cryptauth::INVOCATION_REASON_MANUAL);
629 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds + 30)); 650 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds + 30));
630 EXPECT_CALL(*this, OnSyncFinishedProxy( 651 EXPECT_CALL(*this, OnSyncFinishedProxy(
631 CryptAuthDeviceManager::SyncResult::SUCCESS, 652 CryptAuthDeviceManager::SyncResult::SUCCESS,
632 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); 653 CryptAuthDeviceManager::DeviceChangeResult::CHANGED));
633 success_callback_.Run(get_my_devices_response_); 654 success_callback_.Run(get_my_devices_response_);
634 EXPECT_EQ(clock_->Now(), device_manager_->GetLastSyncTime()); 655 EXPECT_EQ(clock_->Now(), device_manager_->GetLastSyncTime());
635 656
636 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( 657 ExpectSyncedDevicesAndPrefAreEqual(devices_in_response_,
637 1, get_my_devices_response_.devices(0)), 658 device_manager_->synced_devices(),
638 device_manager_->unlock_keys(), 659 pref_service_);
639 pref_service_);
640 660
641 EXPECT_FLOAT_EQ( 661 EXPECT_FLOAT_EQ(
642 clock_->Now().ToDoubleT(), 662 clock_->Now().ToDoubleT(),
643 pref_service_.GetDouble(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds)); 663 pref_service_.GetDouble(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds));
644 EXPECT_EQ(static_cast<int>(cryptauth::INVOCATION_REASON_UNKNOWN), 664 EXPECT_EQ(static_cast<int>(cryptauth::INVOCATION_REASON_UNKNOWN),
645 pref_service_.GetInteger(prefs::kCryptAuthDeviceSyncReason)); 665 pref_service_.GetInteger(prefs::kCryptAuthDeviceSyncReason));
646 EXPECT_FALSE(pref_service_.GetBoolean( 666 EXPECT_FALSE(pref_service_.GetBoolean(
647 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure)); 667 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure));
648 } 668 }
649 669
(...skipping 17 matching lines...) Expand all
667 ON_CALL(*sync_scheduler(), GetStrategy()) 687 ON_CALL(*sync_scheduler(), GetStrategy())
668 .WillByDefault(Return(SyncScheduler::Strategy::AGGRESSIVE_RECOVERY)); 688 .WillByDefault(Return(SyncScheduler::Strategy::AGGRESSIVE_RECOVERY));
669 FireSchedulerForSync(cryptauth::INVOCATION_REASON_FAILURE_RECOVERY); 689 FireSchedulerForSync(cryptauth::INVOCATION_REASON_FAILURE_RECOVERY);
670 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds + 30)); 690 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds + 30));
671 EXPECT_CALL(*this, OnSyncFinishedProxy( 691 EXPECT_CALL(*this, OnSyncFinishedProxy(
672 CryptAuthDeviceManager::SyncResult::SUCCESS, 692 CryptAuthDeviceManager::SyncResult::SUCCESS,
673 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); 693 CryptAuthDeviceManager::DeviceChangeResult::CHANGED));
674 success_callback_.Run(get_my_devices_response_); 694 success_callback_.Run(get_my_devices_response_);
675 EXPECT_EQ(clock_->Now(), device_manager_->GetLastSyncTime()); 695 EXPECT_EQ(clock_->Now(), device_manager_->GetLastSyncTime());
676 696
677 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( 697 ExpectSyncedDevicesAndPrefAreEqual(devices_in_response_,
678 1, get_my_devices_response_.devices(0)), 698 device_manager_->synced_devices(),
679 device_manager_->unlock_keys(), 699 pref_service_);
680 pref_service_);
681 700
682 EXPECT_FLOAT_EQ( 701 EXPECT_FLOAT_EQ(
683 clock_->Now().ToDoubleT(), 702 clock_->Now().ToDoubleT(),
684 pref_service_.GetDouble(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds)); 703 pref_service_.GetDouble(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds));
685 EXPECT_FALSE(pref_service_.GetBoolean( 704 EXPECT_FALSE(pref_service_.GetBoolean(
686 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure)); 705 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure));
687 } 706 }
688 707
689 TEST_F(CryptAuthDeviceManagerTest, SyncSameDevice) { 708 TEST_F(CryptAuthDeviceManagerTest, SyncSameDevice) {
690 device_manager_->Start(); 709 device_manager_->Start();
691 auto original_unlock_keys = device_manager_->unlock_keys(); 710 auto original_devices = device_manager_->synced_devices();
692 711
693 // Sync new devices. 712 // Sync new devices.
694 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC); 713 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC);
695 ASSERT_FALSE(success_callback_.is_null()); 714 ASSERT_FALSE(success_callback_.is_null());
696 EXPECT_CALL(*this, 715 EXPECT_CALL(*this,
697 OnSyncFinishedProxy( 716 OnSyncFinishedProxy(
698 CryptAuthDeviceManager::SyncResult::SUCCESS, 717 CryptAuthDeviceManager::SyncResult::SUCCESS,
699 CryptAuthDeviceManager::DeviceChangeResult::UNCHANGED)); 718 CryptAuthDeviceManager::DeviceChangeResult::UNCHANGED));
700 719
701 // Sync the same device. 720 // Sync the same device.
702 cryptauth::ExternalDeviceInfo synced_unlock_key; 721 cryptauth::ExternalDeviceInfo synced_device;
703 synced_unlock_key.set_public_key(kStoredPublicKey); 722 synced_device.set_public_key(kStoredPublicKey);
704 synced_unlock_key.set_friendly_device_name(kStoredDeviceName); 723 synced_device.set_friendly_device_name(kStoredDeviceName);
705 synced_unlock_key.set_bluetooth_address(kStoredBluetoothAddress); 724 synced_device.set_bluetooth_address(kStoredBluetoothAddress);
706 synced_unlock_key.set_unlock_key(kStoredUnlockKey); 725 synced_device.set_unlock_key(kStoredUnlockKey);
707 synced_unlock_key.set_unlockable(kStoredUnlockable); 726 synced_device.set_unlockable(kStoredUnlockable);
727 synced_device.set_mobile_hotspot_supported(kStoredMobileHotspotSupported);
708 cryptauth::GetMyDevicesResponse get_my_devices_response; 728 cryptauth::GetMyDevicesResponse get_my_devices_response;
709 get_my_devices_response.add_devices()->CopyFrom(synced_unlock_key); 729 get_my_devices_response.add_devices()->CopyFrom(synced_device);
710 success_callback_.Run(get_my_devices_response); 730 success_callback_.Run(get_my_devices_response);
711 731
712 // Check that unlock keys are still the same after sync. 732 // Check that devices are still the same after sync.
713 ExpectUnlockKeysAndPrefAreEqual( 733 ExpectSyncedDevicesAndPrefAreEqual(
714 original_unlock_keys, device_manager_->unlock_keys(), pref_service_); 734 original_devices, device_manager_->synced_devices(), pref_service_);
715 } 735 }
716 736
717 TEST_F(CryptAuthDeviceManagerTest, SyncEmptyDeviceList) { 737 TEST_F(CryptAuthDeviceManagerTest, SyncEmptyDeviceList) {
718 cryptauth::GetMyDevicesResponse empty_response; 738 cryptauth::GetMyDevicesResponse empty_response;
719 739
720 device_manager_->Start(); 740 device_manager_->Start();
721 EXPECT_EQ(1u, device_manager_->unlock_keys().size()); 741 EXPECT_EQ(1u, device_manager_->synced_devices().size());
722 742
723 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC); 743 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC);
724 ASSERT_FALSE(success_callback_.is_null()); 744 ASSERT_FALSE(success_callback_.is_null());
725 EXPECT_CALL(*this, OnSyncFinishedProxy( 745 EXPECT_CALL(*this, OnSyncFinishedProxy(
726 CryptAuthDeviceManager::SyncResult::SUCCESS, 746 CryptAuthDeviceManager::SyncResult::SUCCESS,
727 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); 747 CryptAuthDeviceManager::DeviceChangeResult::CHANGED));
728 success_callback_.Run(empty_response); 748 success_callback_.Run(empty_response);
729 749
730 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>(), 750 ExpectSyncedDevicesAndPrefAreEqual(
731 device_manager_->unlock_keys(), 751 std::vector<cryptauth::ExternalDeviceInfo>(),
732 pref_service_); 752 device_manager_->synced_devices(),
753 pref_service_);
733 } 754 }
734 755
735 TEST_F(CryptAuthDeviceManagerTest, SyncTwoUnlockKeys) { 756 TEST_F(CryptAuthDeviceManagerTest, SyncThreeDevices) {
736 cryptauth::GetMyDevicesResponse response(get_my_devices_response_); 757 cryptauth::GetMyDevicesResponse response(get_my_devices_response_);
737 cryptauth::ExternalDeviceInfo unlock_key2; 758 cryptauth::ExternalDeviceInfo synced_device2;
738 unlock_key2.set_public_key("new public key"); 759 synced_device2.set_public_key("new public key");
739 unlock_key2.set_friendly_device_name("new device name"); 760 synced_device2.set_friendly_device_name("new device name");
740 unlock_key2.set_bluetooth_address("aa:bb:cc:dd:ee:ff"); 761 synced_device2.set_bluetooth_address("aa:bb:cc:dd:ee:ff");
741 unlock_key2.set_unlock_key(true); 762 synced_device2.set_unlock_key(true);
742 response.add_devices()->CopyFrom(unlock_key2); 763 response.add_devices()->CopyFrom(synced_device2);
743 764
744 std::vector<cryptauth::ExternalDeviceInfo> expected_unlock_keys; 765 std::vector<cryptauth::ExternalDeviceInfo> expected_devices;
745 expected_unlock_keys.push_back(get_my_devices_response_.devices(0)); 766 expected_devices.push_back(devices_in_response_[0]);
746 expected_unlock_keys.push_back(unlock_key2); 767 expected_devices.push_back(devices_in_response_[1]);
768 expected_devices.push_back(synced_device2);
747 769
748 device_manager_->Start(); 770 device_manager_->Start();
749 EXPECT_EQ(1u, device_manager_->unlock_keys().size()); 771 EXPECT_EQ(1u, device_manager_->synced_devices().size());
750 EXPECT_EQ(1u, pref_service_.GetList(prefs::kCryptAuthDeviceSyncUnlockKeys) 772 EXPECT_EQ(1u, pref_service_.GetList(prefs::kCryptAuthDeviceSyncUnlockKeys)
751 ->GetSize()); 773 ->GetSize());
752 774
753 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC); 775 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC);
754 ASSERT_FALSE(success_callback_.is_null()); 776 ASSERT_FALSE(success_callback_.is_null());
755 EXPECT_CALL(*this, OnSyncFinishedProxy( 777 EXPECT_CALL(*this, OnSyncFinishedProxy(
756 CryptAuthDeviceManager::SyncResult::SUCCESS, 778 CryptAuthDeviceManager::SyncResult::SUCCESS,
757 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); 779 CryptAuthDeviceManager::DeviceChangeResult::CHANGED));
758 success_callback_.Run(response); 780 success_callback_.Run(response);
759 781
760 ExpectUnlockKeysAndPrefAreEqual( 782 ExpectSyncedDevicesAndPrefAreEqual(
761 expected_unlock_keys, device_manager_->unlock_keys(), pref_service_); 783 expected_devices, device_manager_->synced_devices(), pref_service_);
762 } 784 }
763 785
764 TEST_F(CryptAuthDeviceManagerTest, SyncOnGCMPushMessage) { 786 TEST_F(CryptAuthDeviceManagerTest, SyncOnGCMPushMessage) {
765 device_manager_->Start(); 787 device_manager_->Start();
766 788
767 EXPECT_CALL(*sync_scheduler(), ForceSync()); 789 EXPECT_CALL(*sync_scheduler(), ForceSync());
768 gcm_manager_.PushResyncMessage(); 790 gcm_manager_.PushResyncMessage();
769 791
770 FireSchedulerForSync(cryptauth::INVOCATION_REASON_SERVER_INITIATED); 792 FireSchedulerForSync(cryptauth::INVOCATION_REASON_SERVER_INITIATED);
771 793
772 EXPECT_CALL(*this, OnSyncFinishedProxy( 794 EXPECT_CALL(*this, OnSyncFinishedProxy(
773 CryptAuthDeviceManager::SyncResult::SUCCESS, 795 CryptAuthDeviceManager::SyncResult::SUCCESS,
774 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); 796 CryptAuthDeviceManager::DeviceChangeResult::CHANGED));
775 success_callback_.Run(get_my_devices_response_); 797 success_callback_.Run(get_my_devices_response_);
776 798
777 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( 799 ExpectSyncedDevicesAndPrefAreEqual(devices_in_response_,
778 1, get_my_devices_response_.devices(0)), 800 device_manager_->synced_devices(),
779 device_manager_->unlock_keys(), 801 pref_service_);
780 pref_service_);
781 } 802 }
782 803
783 TEST_F(CryptAuthDeviceManagerTest, SyncDeviceWithNoContents) { 804 TEST_F(CryptAuthDeviceManagerTest, SyncDeviceWithNoContents) {
784 device_manager_->Start(); 805 device_manager_->Start();
785 806
786 EXPECT_CALL(*sync_scheduler(), ForceSync()); 807 EXPECT_CALL(*sync_scheduler(), ForceSync());
787 gcm_manager_.PushResyncMessage(); 808 gcm_manager_.PushResyncMessage();
788 809
789 FireSchedulerForSync(cryptauth::INVOCATION_REASON_SERVER_INITIATED); 810 FireSchedulerForSync(cryptauth::INVOCATION_REASON_SERVER_INITIATED);
790 811
791 EXPECT_CALL(*this, OnSyncFinishedProxy( 812 EXPECT_CALL(*this, OnSyncFinishedProxy(
792 CryptAuthDeviceManager::SyncResult::SUCCESS, 813 CryptAuthDeviceManager::SyncResult::SUCCESS,
793 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); 814 CryptAuthDeviceManager::DeviceChangeResult::CHANGED));
794 success_callback_.Run(get_my_devices_response_); 815 success_callback_.Run(get_my_devices_response_);
795 816
796 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( 817 ExpectSyncedDevicesAndPrefAreEqual(devices_in_response_,
797 1, get_my_devices_response_.devices(0)), 818 device_manager_->synced_devices(),
798 device_manager_->unlock_keys(), 819 pref_service_);
799 pref_service_);
800 } 820 }
801 821
802 TEST_F(CryptAuthDeviceManagerTest, SyncFullyDetailedExternalDeviceInfos) { 822 TEST_F(CryptAuthDeviceManagerTest, SyncFullyDetailedExternalDeviceInfos) {
803 cryptauth::GetMyDevicesResponse response; 823 cryptauth::GetMyDevicesResponse response;
804 824
805 // First, use a device with only a public key (a public key is the only 825 // First, use a device with only a public key (a public key is the only
806 // required field). This ensures devices work properly when they do not have 826 // required field). This ensures devices work properly when they do not have
807 // all fields filled out. 827 // all fields filled out.
808 cryptauth::ExternalDeviceInfo device_with_only_public_key; 828 cryptauth::ExternalDeviceInfo device_with_only_public_key;
809 device_with_only_public_key.set_public_key("publicKey1"); 829 device_with_only_public_key.set_public_key("publicKey1");
(...skipping 20 matching lines...) Expand all
830 seed1.set_start_time_millis(kBeaconSeed1StartTime); 850 seed1.set_start_time_millis(kBeaconSeed1StartTime);
831 seed1.set_end_time_millis(kBeaconSeed1EndTime); 851 seed1.set_end_time_millis(kBeaconSeed1EndTime);
832 device_with_all_fields.add_beacon_seeds()->CopyFrom(seed1); 852 device_with_all_fields.add_beacon_seeds()->CopyFrom(seed1);
833 cryptauth::BeaconSeed seed2; 853 cryptauth::BeaconSeed seed2;
834 seed2.set_data(kBeaconSeed2Data); 854 seed2.set_data(kBeaconSeed2Data);
835 seed2.set_start_time_millis(kBeaconSeed2StartTime); 855 seed2.set_start_time_millis(kBeaconSeed2StartTime);
836 seed2.set_end_time_millis(kBeaconSeed2EndTime); 856 seed2.set_end_time_millis(kBeaconSeed2EndTime);
837 device_with_all_fields.add_beacon_seeds()->CopyFrom(seed2); 857 device_with_all_fields.add_beacon_seeds()->CopyFrom(seed2);
838 response.add_devices()->CopyFrom(device_with_all_fields); 858 response.add_devices()->CopyFrom(device_with_all_fields);
839 859
840 std::vector<cryptauth::ExternalDeviceInfo> expected_unlock_keys; 860 std::vector<cryptauth::ExternalDeviceInfo> expected_devices;
841 expected_unlock_keys.push_back(device_with_only_public_key); 861 expected_devices.push_back(device_with_only_public_key);
842 expected_unlock_keys.push_back(device_with_all_fields); 862 expected_devices.push_back(device_with_all_fields);
843 863
844 device_manager_->Start(); 864 device_manager_->Start();
845 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC); 865 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC);
846 ASSERT_FALSE(success_callback_.is_null()); 866 ASSERT_FALSE(success_callback_.is_null());
847 EXPECT_CALL(*this, OnSyncFinishedProxy( 867 EXPECT_CALL(*this, OnSyncFinishedProxy(
848 CryptAuthDeviceManager::SyncResult::SUCCESS, 868 CryptAuthDeviceManager::SyncResult::SUCCESS,
849 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); 869 CryptAuthDeviceManager::DeviceChangeResult::CHANGED));
850 success_callback_.Run(response); 870 success_callback_.Run(response);
851 871
852 ExpectUnlockKeysAndPrefAreEqual( 872 ExpectSyncedDevicesAndPrefAreEqual(
853 expected_unlock_keys, device_manager_->unlock_keys(), pref_service_); 873 expected_devices, device_manager_->synced_devices(), pref_service_);
874 }
875
876 TEST_F(CryptAuthDeviceManagerTest, SubsetsOfSyncedDevices) {
877 device_manager_->Start();
878
879 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC);
880 ASSERT_FALSE(success_callback_.is_null());
881 EXPECT_CALL(*this,
882 OnSyncFinishedProxy(
883 CryptAuthDeviceManager::SyncResult::SUCCESS,
884 CryptAuthDeviceManager::DeviceChangeResult::CHANGED));
885 success_callback_.Run(get_my_devices_response_);
886
887 // All synced devices.
888 ExpectSyncedDevicesAndPrefAreEqual(
889 devices_in_response_,
890 device_manager_->synced_devices(),
891 pref_service_);
892
893 // Only unlock keys.
894 ExpectSyncedDevicesAreEqual(
895 std::vector<cryptauth::ExternalDeviceInfo>(1, devices_in_response_[0]),
896 device_manager_->unlock_keys());
897
898 // Only tether hosts.
899 ExpectSyncedDevicesAreEqual(
900 std::vector<cryptauth::ExternalDeviceInfo>(1, devices_in_response_[0]),
901 device_manager_->tether_hosts());
854 } 902 }
855 903
856 } // namespace cryptauth 904 } // namespace cryptauth
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698