| 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.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 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_->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 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_->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 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_->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 |
| OLD | NEW |