15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
89ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h"
91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/sys_info.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/util/get_session_name.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/chromeos_switches.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // OS_CHROMEOS
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncer {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GetSessionNameTest : public ::testing::Test {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetSessionNameAndQuit(const std::string& session_name) {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    session_name_ = session_name;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    message_loop_.Quit();
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
30b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  base::MessageLoop message_loop_;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string session_name_;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Call GetSessionNameSynchronouslyForTesting and make sure its return
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// value looks sane.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GetSessionNameTest, GetSessionNameSynchronously) {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string& session_name = GetSessionNameSynchronouslyForTesting();
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(session_name.empty());
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS)
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Call GetSessionNameSynchronouslyForTesting on ChromeOS where the board type
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// is "lumpy-signed-mp-v2keys" and make sure the return value is "Chromebook".
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(GetSessionNameTest, GetSessionNameSynchronouslyChromebook) {
461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  const char* kLsbRelease = "CHROMEOS_RELEASE_BOARD=lumpy-signed-mp-v2keys\n";
471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  base::SysInfo::SetChromeOSVersionInfoForTest(kLsbRelease, base::Time());
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::string& session_name = GetSessionNameSynchronouslyForTesting();
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("Chromebook", session_name);
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Call GetSessionNameSynchronouslyForTesting on ChromeOS where the board type
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// is "stumpy-signed-mp-v2keys" and make sure the return value is "Chromebox".
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(GetSessionNameTest, GetSessionNameSynchronouslyChromebox) {
551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  const char* kLsbRelease = "CHROMEOS_RELEASE_BOARD=stumpy-signed-mp-v2keys\n";
561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  base::SysInfo::SetChromeOSVersionInfoForTest(kLsbRelease, base::Time());
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::string& session_name = GetSessionNameSynchronouslyForTesting();
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("Chromebox", session_name);
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // OS_CHROMEOS
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Calls GetSessionName and runs the message loop until it comes back
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// with a session name.  Makes sure the returned session name is equal
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to the return value of GetSessionNameSynchronouslyForTesting().
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GetSessionNameTest, GetSessionName) {
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetSessionName(message_loop_.message_loop_proxy(),
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Bind(&GetSessionNameTest::SetSessionNameAndQuit,
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            base::Unretained(this)));
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  message_loop_.Run();
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(session_name_, GetSessionNameSynchronouslyForTesting());
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace syncer
77