1// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include <string> 6 7#include "base/guid.h" 8#include "base/memory/scoped_ptr.h" 9#include "base/memory/scoped_vector.h" 10#include "base/values.h" 11#include "chrome/browser/extensions/api/signed_in_devices/id_mapping_helper.h" 12#include "components/sync_driver/device_info.h" 13#include "testing/gmock/include/gmock/gmock.h" 14#include "testing/gtest/include/gtest/gtest.h" 15 16using sync_driver::DeviceInfo; 17 18namespace extensions { 19bool VerifyDictionary( 20 const std::string& path, 21 const std::string& expected_value, 22 const base::DictionaryValue& dictionary) { 23 std::string out; 24 if (dictionary.GetString(path, &out)) { 25 return (out == expected_value); 26 } 27 28 return false; 29} 30 31TEST(IdMappingHelperTest, SetIdsForDevices) { 32 ScopedVector<DeviceInfo> devices; 33 34 devices.push_back(new DeviceInfo(base::GenerateGUID(), 35 "abc Device", 36 "XYZ v1", 37 "XYZ SyncAgent v1", 38 sync_pb::SyncEnums_DeviceType_TYPE_LINUX, 39 "device_id1")); 40 41 devices.push_back(new DeviceInfo(base::GenerateGUID(), 42 "def Device", 43 "XYZ v1", 44 "XYZ SyncAgent v1", 45 sync_pb::SyncEnums_DeviceType_TYPE_LINUX, 46 "device_id2")); 47 48 base::DictionaryValue dictionary; 49 50 CreateMappingForUnmappedDevices(&(devices.get()), &dictionary); 51 52 std::string public_id1 = devices[0]->public_id(); 53 std::string public_id2 = devices[1]->public_id(); 54 55 EXPECT_FALSE(public_id1.empty()); 56 EXPECT_FALSE(public_id2.empty()); 57 58 EXPECT_NE(public_id1, public_id2); 59 60 // Now add a third device. 61 devices.push_back(new DeviceInfo(base::GenerateGUID(), 62 "ghi Device", 63 "XYZ v1", 64 "XYZ SyncAgent v1", 65 sync_pb::SyncEnums_DeviceType_TYPE_LINUX, 66 "device_id3")); 67 68 CreateMappingForUnmappedDevices(&(devices.get()), &dictionary); 69 70 // Now make sure the existing ids are not changed. 71 EXPECT_EQ(public_id1, devices[0]->public_id()); 72 EXPECT_EQ(public_id2, devices[1]->public_id()); 73 74 // Now make sure the id for third device is non empty and different. 75 std::string public_id3 = devices[2]->public_id(); 76 EXPECT_FALSE(public_id3.empty()); 77 EXPECT_NE(public_id3, public_id1); 78 EXPECT_NE(public_id3, public_id2); 79 80 // Verify the dictionary. 81 EXPECT_TRUE(VerifyDictionary(public_id1, devices[0]->guid(), dictionary)); 82 EXPECT_TRUE(VerifyDictionary(public_id2, devices[1]->guid(), dictionary)); 83 EXPECT_TRUE(VerifyDictionary(public_id3, devices[2]->guid(), dictionary)); 84 85 EXPECT_EQ(dictionary.size(), 3U); 86} 87} // namespace extensions 88