1// Copyright 2014 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 "base/bind.h"
6#include "base/message_loop/message_loop.h"
7#include "base/run_loop.h"
8#include "chrome/browser/sync/glue/local_device_info_provider_impl.h"
9#include "chrome/common/chrome_version_info.h"
10#include "sync/util/get_session_name.h"
11#include "testing/gtest/include/gtest/gtest.h"
12
13using sync_driver::DeviceInfo;
14using sync_driver::LocalDeviceInfoProvider;
15
16namespace browser_sync {
17
18const char kLocalDeviceGuid[] = "foo";
19const char kSigninScopedDeviceId[] = "device_id";
20
21class LocalDeviceInfoProviderTest : public testing::Test {
22 public:
23  LocalDeviceInfoProviderTest()
24    : called_back_(false) {}
25  virtual ~LocalDeviceInfoProviderTest() {}
26
27  virtual void SetUp() OVERRIDE {
28    provider_.reset(new LocalDeviceInfoProviderImpl());
29  }
30
31  virtual void TearDown() OVERRIDE {
32    provider_.reset();
33    called_back_ = false;
34  }
35
36 protected:
37  void InitializeProvider() {
38    // Start initialization.
39    provider_->Initialize(kLocalDeviceGuid, kSigninScopedDeviceId);
40
41    // Subscribe to the notification and wait until the callback
42    // is called. The callback will quit the loop.
43    base::RunLoop run_loop;
44    scoped_ptr<LocalDeviceInfoProvider::Subscription> subscription(
45        provider_->RegisterOnInitializedCallback(
46            base::Bind(&LocalDeviceInfoProviderTest::QuitLoopOnInitialized,
47                       base::Unretained(this), &run_loop)));
48    run_loop.Run();
49  }
50
51  void QuitLoopOnInitialized(base::RunLoop* loop) {
52    called_back_ = true;
53    loop->Quit();
54  }
55
56  scoped_ptr<LocalDeviceInfoProviderImpl> provider_;
57
58  bool called_back_;
59
60 private:
61  base::MessageLoop message_loop_;
62};
63
64TEST_F(LocalDeviceInfoProviderTest, OnInitializedCallback) {
65  ASSERT_FALSE(called_back_);
66
67  InitializeProvider();
68  EXPECT_TRUE(called_back_);
69}
70
71TEST_F(LocalDeviceInfoProviderTest, GetLocalDeviceInfo) {
72  ASSERT_EQ(NULL, provider_->GetLocalDeviceInfo());
73
74  InitializeProvider();
75
76  const DeviceInfo* local_device_info = provider_->GetLocalDeviceInfo();
77  EXPECT_TRUE(!!local_device_info);
78  EXPECT_EQ(std::string(kLocalDeviceGuid), local_device_info->guid());
79  EXPECT_EQ(std::string(kSigninScopedDeviceId),
80            local_device_info->signin_scoped_device_id());
81  EXPECT_EQ(syncer::GetSessionNameSynchronouslyForTesting(),
82            local_device_info->client_name());
83
84  chrome::VersionInfo version_info;
85  EXPECT_EQ(browser_sync::LocalDeviceInfoProviderImpl::MakeUserAgentForSyncApi(
86                version_info),
87            local_device_info->sync_user_agent());
88}
89
90TEST_F(LocalDeviceInfoProviderTest, GetLocalSyncCacheGUID) {
91  ASSERT_EQ(std::string(), provider_->GetLocalSyncCacheGUID());
92
93  InitializeProvider();
94
95  EXPECT_EQ(std::string(kLocalDeviceGuid), provider_->GetLocalSyncCacheGUID());
96}
97
98}  // namespace browser_sync
99