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