| // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/extensions/api/signed_in_devices/id_mapping_helper.h" |
| |
| #include <memory> |
| #include <string> |
| |
| #include "base/guid.h" |
| #include "base/memory/ptr_util.h" |
| #include "base/values.h" |
| #include "components/sync/device_info/device_info.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| using sync_driver::DeviceInfo; |
| |
| namespace extensions { |
| bool VerifyDictionary( |
| const std::string& path, |
| const std::string& expected_value, |
| const base::DictionaryValue& dictionary) { |
| std::string out; |
| if (dictionary.GetString(path, &out)) { |
| return (out == expected_value); |
| } |
| |
| return false; |
| } |
| |
| TEST(IdMappingHelperTest, SetIdsForDevices) { |
| std::vector<std::unique_ptr<DeviceInfo>> devices; |
| |
| devices.push_back(base::MakeUnique<DeviceInfo>( |
| base::GenerateGUID(), "abc Device", "XYZ v1", "XYZ SyncAgent v1", |
| sync_pb::SyncEnums_DeviceType_TYPE_LINUX, "device_id1")); |
| |
| devices.push_back(base::MakeUnique<DeviceInfo>( |
| base::GenerateGUID(), "def Device", "XYZ v1", "XYZ SyncAgent v1", |
| sync_pb::SyncEnums_DeviceType_TYPE_LINUX, "device_id2")); |
| |
| base::DictionaryValue dictionary; |
| |
| CreateMappingForUnmappedDevices(devices, &dictionary); |
| |
| std::string public_id1 = devices[0]->public_id(); |
| std::string public_id2 = devices[1]->public_id(); |
| |
| EXPECT_FALSE(public_id1.empty()); |
| EXPECT_FALSE(public_id2.empty()); |
| |
| EXPECT_NE(public_id1, public_id2); |
| |
| // Now add a third device. |
| devices.push_back(base::MakeUnique<DeviceInfo>( |
| base::GenerateGUID(), "ghi Device", "XYZ v1", "XYZ SyncAgent v1", |
| sync_pb::SyncEnums_DeviceType_TYPE_LINUX, "device_id3")); |
| |
| CreateMappingForUnmappedDevices(devices, &dictionary); |
| |
| // Now make sure the existing ids are not changed. |
| EXPECT_EQ(public_id1, devices[0]->public_id()); |
| EXPECT_EQ(public_id2, devices[1]->public_id()); |
| |
| // Now make sure the id for third device is non empty and different. |
| std::string public_id3 = devices[2]->public_id(); |
| EXPECT_FALSE(public_id3.empty()); |
| EXPECT_NE(public_id3, public_id1); |
| EXPECT_NE(public_id3, public_id2); |
| |
| // Verify the dictionary. |
| EXPECT_TRUE(VerifyDictionary(public_id1, devices[0]->guid(), dictionary)); |
| EXPECT_TRUE(VerifyDictionary(public_id2, devices[1]->guid(), dictionary)); |
| EXPECT_TRUE(VerifyDictionary(public_id3, devices[2]->guid(), dictionary)); |
| |
| EXPECT_EQ(dictionary.size(), 3U); |
| } |
| } // namespace extensions |