1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng// Use of this source code is governed by a BSD-style license that can be
3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng// found in the LICENSE file.
4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <string>
6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "base/bind.h"
8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "base/message_loop/message_loop.h"
9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "base/sys_info.h"
10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "sync/util/get_session_name.h"
11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "testing/gtest/include/gtest/gtest.h"
12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#if defined(OS_CHROMEOS)
14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "base/command_line.h"
15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include "chromeos/chromeos_switches.h"
16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#endif  // OS_CHROMEOS
17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengnamespace syncer {
19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengnamespace {
21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengclass GetSessionNameTest : public ::testing::Test {
23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng public:
24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  void SetSessionNameAndQuit(const std::string& session_name) {
25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    session_name_ = session_name;
26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng    message_loop_.Quit();
27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  }
28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng protected:
30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  base::MessageLoop message_loop_;
31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  std::string session_name_;
32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng// Call GetSessionNameSynchronouslyForTesting and make sure its return
35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng// value looks sane.
36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengTEST_F(GetSessionNameTest, GetSessionNameSynchronously) {
37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  const std::string& session_name = GetSessionNameSynchronouslyForTesting();
38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  EXPECT_FALSE(session_name.empty());
39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#if defined(OS_CHROMEOS)
42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
43e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng// Call GetSessionNameSynchronouslyForTesting on ChromeOS where the board type
44e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng// is "lumpy-signed-mp-v2keys" and make sure the return value is "Chromebook".
45e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengTEST_F(GetSessionNameTest, GetSessionNameSynchronouslyChromebook) {
46e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  const char* kLsbRelease = "CHROMEOS_RELEASE_BOARD=lumpy-signed-mp-v2keys\n";
47e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  base::SysInfo::SetChromeOSVersionInfoForTest(kLsbRelease, base::Time());
48e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  const std::string& session_name = GetSessionNameSynchronouslyForTesting();
49e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  EXPECT_EQ("Chromebook", session_name);
50e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
51e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
52e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng// Call GetSessionNameSynchronouslyForTesting on ChromeOS where the board type
53e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng// is "stumpy-signed-mp-v2keys" and make sure the return value is "Chromebox".
54e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengTEST_F(GetSessionNameTest, GetSessionNameSynchronouslyChromebox) {
55e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  const char* kLsbRelease = "CHROMEOS_RELEASE_BOARD=stumpy-signed-mp-v2keys\n";
56e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  base::SysInfo::SetChromeOSVersionInfoForTest(kLsbRelease, base::Time());
57e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  const std::string& session_name = GetSessionNameSynchronouslyForTesting();
58e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  EXPECT_EQ("Chromebox", session_name);
59e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
60e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
61e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#endif  // OS_CHROMEOS
62e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
63e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng// Calls GetSessionName and runs the message loop until it comes back
64e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng// with a session name.  Makes sure the returned session name is equal
65e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng// to the return value of GetSessionNameSynchronouslyForTesting().
66e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengTEST_F(GetSessionNameTest, GetSessionName) {
67e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  GetSessionName(message_loop_.message_loop_proxy(),
68e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng                 base::Bind(&GetSessionNameTest::SetSessionNameAndQuit,
69e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng                            base::Unretained(this)));
70e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  message_loop_.Run();
71e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng  EXPECT_EQ(session_name_, GetSessionNameSynchronouslyForTesting());
72e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
73e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
74e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}  // namespace
75e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
76e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}  // namespace syncer
77e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng