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