| Index: common/scheduled_task_utils_unittest.cc
|
| diff --git a/common/scheduled_task_utils_unittest.cc b/common/scheduled_task_utils_unittest.cc
|
| deleted file mode 100644
|
| index 8c921ed89e20dc2af6684f6c2256692e299bd48c..0000000000000000000000000000000000000000
|
| --- a/common/scheduled_task_utils_unittest.cc
|
| +++ /dev/null
|
| @@ -1,304 +0,0 @@
|
| -// Copyright 2007-2009 Google Inc.
|
| -//
|
| -// Licensed under the Apache License, Version 2.0 (the "License");
|
| -// you may not use this file except in compliance with the License.
|
| -// You may obtain a copy of the License at
|
| -//
|
| -// http://www.apache.org/licenses/LICENSE-2.0
|
| -//
|
| -// Unless required by applicable law or agreed to in writing, software
|
| -// distributed under the License is distributed on an "AS IS" BASIS,
|
| -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| -// See the License for the specific language governing permissions and
|
| -// limitations under the License.
|
| -// ========================================================================
|
| -
|
| -#include <windows.h>
|
| -#include <atlstr.h>
|
| -#include <mstask.h>
|
| -#include "omaha/base/app_util.h"
|
| -#include "omaha/base/error.h"
|
| -#include "omaha/base/file.h"
|
| -#include "omaha/base/path.h"
|
| -#include "omaha/base/scoped_ptr_cotask.h"
|
| -#include "omaha/base/user_info.h"
|
| -#include "omaha/base/vistautil.h"
|
| -#include "omaha/common/const_goopdate.h"
|
| -#include "omaha/common/scheduled_task_utils.h"
|
| -#include "omaha/common/scheduled_task_utils_internal.h"
|
| -#include "omaha/testing/unit_test.h"
|
| -
|
| -namespace omaha {
|
| -
|
| -namespace {
|
| -
|
| -const int kMaxWaitForProcessMs = 120000;
|
| -
|
| -const TCHAR kLongRunningProcessesRelativePath[] =
|
| - _T("unittest_support\\does_not_shutdown\\GoogleUpdate.exe");
|
| -
|
| -CString GetLongRunningProcessPath() {
|
| - const CString module_dir(app_util::GetCurrentModuleDirectory());
|
| - return ConcatenatePath(module_dir, kLongRunningProcessesRelativePath);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -namespace scheduled_task_utils {
|
| -
|
| -using internal::GetCurrentTaskNameCore;
|
| -using internal::GetCurrentTaskNameUA;
|
| -using internal::GetScheduledTaskStatus;
|
| -using internal::HasScheduledTaskEverRun;
|
| -using internal::StartScheduledTask;
|
| -using internal::StopScheduledTask;
|
| -using internal::WaitForTaskStatus;
|
| -
|
| -namespace v2 = internal::v2;
|
| -
|
| -using vista_util::IsUserAdmin;
|
| -
|
| -namespace internal {
|
| -
|
| -void StopScheduledTaskAndVerifyReadyState(const CString& task_name) {
|
| - // For some reason, StopScheduleTask may not successfully stop the task
|
| - // even it returns S_OK. So try to stop multiple times.
|
| - for (int i = 0; i < 3; ++i) {
|
| - EXPECT_SUCCEEDED(StopScheduledTask(task_name));
|
| -
|
| - if (SCHED_S_TASK_READY == WaitForTaskStatus(task_name,
|
| - SCHED_S_TASK_READY,
|
| - kMsPerSec)) {
|
| - break;
|
| - }
|
| - }
|
| - EXPECT_EQ(SCHED_S_TASK_READY, GetScheduledTaskStatus(task_name));
|
| -}
|
| -
|
| -TEST(ScheduledTaskUtilsTest, ScheduledTasks) {
|
| - const TCHAR kSchedTestTaskName[] = _T("TestScheduledTask");
|
| - const TCHAR kScheduledTaskExecutable[] = _T("netstat.exe");
|
| - const TCHAR kScheduledTaskParameters[] = _T("20");
|
| - const TCHAR kSchedTestTaskComment[] = _T("Google Test Task");
|
| -
|
| - const CString task_path = ConcatenatePath(app_util::GetSystemDir(),
|
| - kScheduledTaskExecutable);
|
| - // Install/uninstall.
|
| - EXPECT_SUCCEEDED(InstallScheduledTask(kSchedTestTaskName,
|
| - task_path,
|
| - _T(""),
|
| - kSchedTestTaskComment,
|
| - IsUserAdmin(),
|
| - IsUserAdmin(),
|
| - true,
|
| - true));
|
| - EXPECT_SUCCEEDED(UninstallScheduledTask(kSchedTestTaskName));
|
| -
|
| - // Calling InstallScheduledTask twice should succeed.
|
| - for (int i = 0; i < 2; ++i) {
|
| - EXPECT_SUCCEEDED(InstallScheduledTask(kSchedTestTaskName,
|
| - task_path,
|
| - _T(""),
|
| - kSchedTestTaskComment,
|
| - IsUserAdmin(),
|
| - IsUserAdmin(),
|
| - true,
|
| - true));
|
| - }
|
| -
|
| - // "Upgrade" to a new version, which now has parameters.
|
| - EXPECT_SUCCEEDED(InstallScheduledTask(kSchedTestTaskName,
|
| - task_path,
|
| - kScheduledTaskParameters,
|
| - kSchedTestTaskComment,
|
| - IsUserAdmin(),
|
| - IsUserAdmin(),
|
| - true,
|
| - true));
|
| -
|
| - EXPECT_FALSE(HasScheduledTaskEverRun(kSchedTestTaskName));
|
| -
|
| - // Start and stop.
|
| - EXPECT_EQ(SCHED_S_TASK_HAS_NOT_RUN,
|
| - GetScheduledTaskStatus(kSchedTestTaskName));
|
| - EXPECT_SUCCEEDED(StartScheduledTask(kSchedTestTaskName));
|
| - EXPECT_EQ(SCHED_S_TASK_RUNNING,
|
| - WaitForTaskStatus(kSchedTestTaskName,
|
| - SCHED_S_TASK_RUNNING,
|
| - kMaxWaitForProcessMs));
|
| -
|
| - EXPECT_TRUE(HasScheduledTaskEverRun(kSchedTestTaskName));
|
| -
|
| - StopScheduledTaskAndVerifyReadyState(kSchedTestTaskName);
|
| -
|
| - // Finally, uninstall.
|
| - EXPECT_SUCCEEDED(UninstallScheduledTask(kSchedTestTaskName));
|
| -}
|
| -
|
| -TEST(ScheduledTaskUtilsTest, ScheduledTasksV2) {
|
| - if (!v2::IsTaskScheduler2APIAvailable()) {
|
| - std::wcout << _T("\tTest did not run because this OS does not support the ")
|
| - _T("Task Scheduler 2.0 API.") << std::endl;
|
| - return;
|
| - }
|
| -
|
| - const TCHAR kSchedTestTaskName[] = _T("TestScheduledTaskV2");
|
| - const TCHAR kScheduledTaskExecutable[] = _T("netstat.exe");
|
| - const TCHAR kScheduledTaskParameters[] = _T("20");
|
| - const TCHAR kSchedTestTaskComment[] = _T("Google Test Task V2");
|
| -
|
| - const CString task_path = ConcatenatePath(app_util::GetSystemDir(),
|
| - kScheduledTaskExecutable);
|
| - EXPECT_SUCCEEDED(InstallScheduledTask(kSchedTestTaskName,
|
| - task_path,
|
| - _T(""),
|
| - kSchedTestTaskComment,
|
| - IsUserAdmin(),
|
| - IsUserAdmin(),
|
| - true,
|
| - true));
|
| -
|
| - // Start and stop.
|
| - EXPECT_FALSE(v2::IsScheduledTaskRunning(kSchedTestTaskName));
|
| - EXPECT_SUCCEEDED(v2::StartScheduledTask(kSchedTestTaskName));
|
| - EXPECT_TRUE(v2::IsScheduledTaskRunning(kSchedTestTaskName));
|
| -
|
| - EXPECT_SUCCEEDED(v2::StopScheduledTask(kSchedTestTaskName));
|
| - EXPECT_FALSE(v2::IsScheduledTaskRunning(kSchedTestTaskName));
|
| -
|
| - // Finally, uninstall.
|
| - EXPECT_SUCCEEDED(UninstallScheduledTask(kSchedTestTaskName));
|
| -}
|
| -
|
| -} // namespace internal
|
| -
|
| -
|
| -TEST(ScheduledTaskUtilsTest, GoopdateTasks) {
|
| - const CString task_name = GetCurrentTaskNameCore(IsUserAdmin());
|
| - const CString task_path = GetLongRunningProcessPath();
|
| -
|
| - // Install/uninstall.
|
| - EXPECT_SUCCEEDED(InstallGoopdateTasks(task_path, IsUserAdmin()));
|
| - EXPECT_SUCCEEDED(UninstallGoopdateTasks(IsUserAdmin()));
|
| -
|
| - EXPECT_SUCCEEDED(InstallGoopdateTasks(task_path, IsUserAdmin()));
|
| - EXPECT_FALSE(HasScheduledTaskEverRun(task_name));
|
| -
|
| - // Start and stop.
|
| - EXPECT_EQ(SCHED_S_TASK_HAS_NOT_RUN, GetScheduledTaskStatus(task_name));
|
| - EXPECT_SUCCEEDED(StartGoopdateTaskCore(IsUserAdmin()));
|
| -
|
| - EXPECT_EQ(SCHED_S_TASK_RUNNING,
|
| - WaitForTaskStatus(task_name,
|
| - SCHED_S_TASK_RUNNING,
|
| - kMaxWaitForProcessMs));
|
| -
|
| - EXPECT_TRUE(HasScheduledTaskEverRun(task_name));
|
| -
|
| - internal::StopScheduledTaskAndVerifyReadyState(task_name);
|
| -
|
| - // Finally, uninstall.
|
| - EXPECT_SUCCEEDED(UninstallGoopdateTasks(IsUserAdmin()));
|
| -}
|
| -
|
| -TEST(ScheduledTaskUtilsTest, GoopdateTaskInUseOverinstall) {
|
| - const CString task_path = GetLongRunningProcessPath();
|
| - EXPECT_SUCCEEDED(InstallGoopdateTasks(task_path, IsUserAdmin()));
|
| -
|
| - CString original_task_name(GetCurrentTaskNameCore(IsUserAdmin()));
|
| -
|
| - // Open the file underlying the current task in exclusive mode, so that
|
| - // InstallGoopdateTasks() is forced to create a new task.
|
| - CComPtr<ITaskScheduler> scheduler;
|
| - EXPECT_SUCCEEDED(scheduler.CoCreateInstance(CLSID_CTaskScheduler,
|
| - NULL,
|
| - CLSCTX_INPROC_SERVER));
|
| - CComPtr<ITask> task;
|
| - EXPECT_SUCCEEDED(scheduler->Activate(original_task_name,
|
| - __uuidof(ITask),
|
| - reinterpret_cast<IUnknown**>(&task)));
|
| - CComQIPtr<IPersistFile> persist(task);
|
| - EXPECT_TRUE(persist);
|
| - scoped_ptr_cotask<OLECHAR> job_file;
|
| - EXPECT_SUCCEEDED(persist->GetCurFile(address(job_file)));
|
| - persist.Release();
|
| -
|
| - File file;
|
| - EXPECT_SUCCEEDED(file.OpenShareMode(job_file.get(), false, false, 0));
|
| -
|
| - EXPECT_SUCCEEDED(InstallGoopdateTasks(task_path, IsUserAdmin()));
|
| - CString new_task_name(GetCurrentTaskNameCore(IsUserAdmin()));
|
| - EXPECT_STRNE(original_task_name, new_task_name);
|
| -
|
| - // Cleanup.
|
| - file.Close();
|
| - EXPECT_SUCCEEDED(UninstallGoopdateTasks(IsUserAdmin()));
|
| -}
|
| -
|
| -TEST(ScheduledTaskUtilsTest, GetExitCodeGoopdateTaskUA) {
|
| - const CString task_name = GetCurrentTaskNameUA(IsUserAdmin());
|
| - const CString task_path = ConcatenatePath(
|
| - app_util::GetCurrentModuleDirectory(),
|
| - _T("unittest_support\\SaveArguments.exe"));
|
| -
|
| - EXPECT_SUCCEEDED(InstallGoopdateTasks(task_path, IsUserAdmin()));
|
| - EXPECT_EQ(SCHED_S_TASK_HAS_NOT_RUN,
|
| - GetExitCodeGoopdateTaskUA(IsUserAdmin()));
|
| - EXPECT_FALSE(HasScheduledTaskEverRun(task_name));
|
| -
|
| - // Start the task and wait for it to run and become ready again. The task
|
| - // runs a program that returns right away. Sometimes the task does not run
|
| - // for unknown reason. Attempting to run the task multiple times does not
|
| - // work. This remains a flaky test.
|
| - EXPECT_SUCCEEDED(StartScheduledTask(task_name));
|
| - EXPECT_EQ(SCHED_S_TASK_READY,
|
| - WaitForTaskStatus(task_name,
|
| - SCHED_S_TASK_READY,
|
| - kMaxWaitForProcessMs));
|
| - EXPECT_TRUE(HasScheduledTaskEverRun(task_name));
|
| - EXPECT_EQ(S_OK, GetExitCodeGoopdateTaskUA(IsUserAdmin()));
|
| -
|
| - EXPECT_SUCCEEDED(File::Remove(
|
| - ConcatenatePath(app_util::GetCurrentModuleDirectory(),
|
| - _T("unittest_support\\saved_arguments.txt"))));
|
| - EXPECT_SUCCEEDED(UninstallGoopdateTasks(IsUserAdmin()));
|
| -}
|
| -
|
| -TEST(ScheduledTaskUtilsTest, GetDefaultGoopdateTaskName_Core_Machine) {
|
| - CString expected_task_name(kScheduledTaskNameMachinePrefix);
|
| - expected_task_name += kScheduledTaskNameCoreSuffix;
|
| - EXPECT_STREQ(expected_task_name,
|
| - GetDefaultGoopdateTaskName(true, COMMANDLINE_MODE_CORE));
|
| -}
|
| -
|
| -TEST(ScheduledTaskUtilsTest, GetDefaultGoopdateTaskName_Core_User) {
|
| - CString expected_task_name_user = kScheduledTaskNameUserPrefix;
|
| - CString user_sid;
|
| - EXPECT_SUCCEEDED(user_info::GetProcessUser(NULL, NULL, &user_sid));
|
| - expected_task_name_user += user_sid;
|
| - expected_task_name_user += kScheduledTaskNameCoreSuffix;
|
| - EXPECT_STREQ(expected_task_name_user,
|
| - GetDefaultGoopdateTaskName(false, COMMANDLINE_MODE_CORE));
|
| -}
|
| -
|
| -TEST(ScheduledTaskUtilsTest, GetDefaultGoopdateTaskName_UA_Machine) {
|
| - CString expected_task_name(kScheduledTaskNameMachinePrefix);
|
| - expected_task_name += kScheduledTaskNameUASuffix;
|
| - EXPECT_STREQ(expected_task_name,
|
| - GetDefaultGoopdateTaskName(true, COMMANDLINE_MODE_UA));
|
| -}
|
| -
|
| -TEST(ScheduledTaskUtilsTest, GetDefaultGoopdateTaskName_UA_User) {
|
| - CString expected_task_name_user = kScheduledTaskNameUserPrefix;
|
| - CString user_sid;
|
| - EXPECT_SUCCEEDED(user_info::GetProcessUser(NULL, NULL, &user_sid));
|
| - expected_task_name_user += user_sid;
|
| - expected_task_name_user += kScheduledTaskNameUASuffix;
|
| - EXPECT_STREQ(expected_task_name_user,
|
| - GetDefaultGoopdateTaskName(false, COMMANDLINE_MODE_UA));
|
| -}
|
| -
|
| -} // namespace scheduled_task_utils
|
| -
|
| -} // namespace omaha
|
| -
|
|
|