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