OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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.GetSyncedDevices().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_->GetSyncedDevices(); |
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_->GetSyncedDevices(), |
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_->GetSyncedDevices(), |
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 Loading... |
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_->GetSyncedDevices(), |
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 Loading... |
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_->GetSyncedDevices(), |
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_->GetSyncedDevices(); |
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_->GetSyncedDevices(), 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_->GetSyncedDevices().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_->GetSyncedDevices(), |
| 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_->GetSyncedDevices().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_->GetSyncedDevices(), 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_->GetSyncedDevices(), |
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_->GetSyncedDevices(), |
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 Loading... |
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_->GetSyncedDevices(), 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_->GetSyncedDevices(), |
| 891 pref_service_); |
| 892 |
| 893 // Only unlock keys. |
| 894 ExpectSyncedDevicesAreEqual( |
| 895 std::vector<cryptauth::ExternalDeviceInfo>(1, devices_in_response_[0]), |
| 896 device_manager_->GetUnlockKeys()); |
| 897 |
| 898 // Only tether hosts. |
| 899 ExpectSyncedDevicesAreEqual( |
| 900 std::vector<cryptauth::ExternalDeviceInfo>(1, devices_in_response_[0]), |
| 901 device_manager_->GetTetherHosts()); |
854 } | 902 } |
855 | 903 |
856 } // namespace cryptauth | 904 } // namespace cryptauth |
OLD | NEW |