Home | History | Annotate | Download | only in signedin_devices
      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 <vector>
      8 
      9 #include "base/guid.h"
     10 #include "base/message_loop/message_loop.h"
     11 #include "chrome/browser/extensions/api/signedin_devices/signedin_devices_api.h"
     12 #include "chrome/browser/extensions/test_extension_prefs.h"
     13 #include "chrome/browser/sync/glue/device_info.h"
     14 #include "chrome/browser/sync/profile_sync_service_mock.h"
     15 #include "chrome/common/extensions/extension.h"
     16 #include "chrome/common/extensions/extension_manifest_constants.h"
     17 #include "testing/gmock/include/gmock/gmock.h"
     18 #include "testing/gtest/include/gtest/gtest.h"
     19 
     20 using extensions::Extension;
     21 using extensions::TestExtensionPrefs;
     22 using browser_sync::DeviceInfo;
     23 using testing::Return;
     24 
     25 namespace extensions {
     26 
     27 TEST(SignedinDevicesAPITest, GetSignedInDevices) {
     28   ProfileSyncServiceMock pss_mock;
     29   base::MessageLoop message_loop_;
     30   TestExtensionPrefs extension_prefs(
     31       message_loop_.message_loop_proxy().get());
     32 
     33   // Add a couple of devices and make sure we get back public ids for them.
     34   std::string extension_name = "test";
     35   scoped_refptr<Extension> extension_test =
     36       extension_prefs.AddExtension(extension_name);
     37 
     38   DeviceInfo device_info1(
     39       base::GenerateGUID(),
     40       "abc Device", "XYZ v1", "XYZ SyncAgent v1",
     41       sync_pb::SyncEnums_DeviceType_TYPE_LINUX);
     42 
     43   DeviceInfo device_info2(
     44       base::GenerateGUID(),
     45       "def Device", "XYZ v2", "XYZ SyncAgent v2",
     46       sync_pb::SyncEnums_DeviceType_TYPE_LINUX);
     47 
     48   std::vector<DeviceInfo*> devices;
     49   devices.push_back(&device_info1);
     50   devices.push_back(&device_info2);
     51 
     52   EXPECT_CALL(pss_mock, GetAllSignedInDevicesMock()).
     53               WillOnce(Return(&devices));
     54 
     55   ScopedVector<DeviceInfo> output1 = GetAllSignedInDevices(
     56       extension_test.get()->id(),
     57       &pss_mock,
     58       extension_prefs.prefs());
     59 
     60   std::string public_id1 = device_info1.public_id();
     61   std::string public_id2 = device_info2.public_id();
     62 
     63   EXPECT_FALSE(public_id1.empty());
     64   EXPECT_FALSE(public_id2.empty());
     65   EXPECT_NE(public_id1, public_id2);
     66 
     67   // Now clear output1 so its destructor will not destroy the pointers for
     68   // |device_info1| and |device_info2|.
     69   output1.weak_clear();
     70 
     71   // Add a third device and make sure the first 2 ids are retained and a new
     72   // id is generated for the third device.
     73   DeviceInfo device_info3(
     74       base::GenerateGUID(),
     75       "def Device", "jkl v2", "XYZ SyncAgent v2",
     76       sync_pb::SyncEnums_DeviceType_TYPE_LINUX);
     77 
     78   devices.push_back(&device_info3);
     79 
     80   EXPECT_CALL(pss_mock, GetAllSignedInDevicesMock()).
     81               WillOnce(Return(&devices));
     82 
     83   ScopedVector<DeviceInfo> output2 = GetAllSignedInDevices(
     84       extension_test.get()->id(),
     85       &pss_mock,
     86       extension_prefs.prefs());
     87 
     88   EXPECT_EQ(device_info1.public_id(), public_id1);
     89   EXPECT_EQ(device_info2.public_id(), public_id2);
     90 
     91   std::string public_id3 = device_info3.public_id();
     92   EXPECT_FALSE(public_id3.empty());
     93   EXPECT_NE(public_id3, public_id1);
     94   EXPECT_NE(public_id3, public_id2);
     95 
     96   // Now clear output2 so that its destructor does not destroy the
     97   // |DeviceInfo| pointers.
     98   output2.weak_clear();
     99 }
    100 
    101 }  // namespace extensions
    102