blob: ea6414ea897fcea5dfb9de71ebdb0e8665480a91 [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/base_paths.h"
#include "base/command_line.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/path_service.h"
#include "base/process/launch.h"
#include "base/process/process.h"
#include "base/test/test_timeouts.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "chrome/updater/util/util.h"
#include "testing/gtest/include/gtest/gtest.h"
#if BUILDFLAG(IS_MAC)
#include "chrome/updater/util/mac_util.h"
#endif // BUILDFLAG(IS_MAC)
#if BUILDFLAG(IS_WIN)
#include <shlobj.h>
#include "base/win/access_token.h"
#include "base/win/windows_types.h"
#endif
namespace updater {
// Tests the updater process returns 0 when run with --test argument.
TEST(UpdaterTest, UpdaterExitCode) {
base::FilePath out_dir;
ASSERT_TRUE(base::PathService::Get(base::DIR_EXE, &out_dir));
const base::FilePath updater =
out_dir.Append(updater::GetExecutableRelativePath());
base::LaunchOptions options;
#if BUILDFLAG(IS_WIN)
options.start_hidden = true;
#endif // BUILDFLAG(IS_WIN)
base::CommandLine command_line(updater);
command_line.AppendSwitch("test");
auto process = base::LaunchProcess(command_line, options);
ASSERT_TRUE(process.IsValid());
int exit_code = -1;
EXPECT_TRUE(process.WaitForExitWithTimeout(TestTimeouts::action_timeout(),
&exit_code));
EXPECT_EQ(0, exit_code);
}
#if BUILDFLAG(IS_WIN)
// Checks that the unit test has the SE_DEBUG_NAME privilege when the process is
// running as Administrator.
TEST(UpdaterTest, UpdaterTestDebugPrivilege) {
if (!::IsUserAnAdmin()) {
return;
}
LUID luid = {0};
ASSERT_TRUE(::LookupPrivilegeValue(nullptr, SE_DEBUG_NAME, &luid));
CHROME_LUID chrome_luid = {0};
chrome_luid.LowPart = luid.LowPart;
chrome_luid.HighPart = luid.HighPart;
const base::win::AccessToken::Privilege priv(chrome_luid,
SE_PRIVILEGE_ENABLED);
EXPECT_EQ(priv.GetName(), SE_DEBUG_NAME);
EXPECT_EQ(priv.GetAttributes(), DWORD{SE_PRIVILEGE_ENABLED});
EXPECT_TRUE(priv.IsEnabled());
}
#endif // IS_WIN
} // namespace updater