Index: core/core_unittest.cc |
diff --git a/core/core_unittest.cc b/core/core_unittest.cc |
deleted file mode 100644 |
index e107ea6ea9a88d2a4e2a078756496cc705c45759..0000000000000000000000000000000000000000 |
--- a/core/core_unittest.cc |
+++ /dev/null |
@@ -1,218 +0,0 @@ |
-// Copyright 2008-2010 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 "omaha/base/app_util.h" |
-#include "omaha/base/const_object_names.h" |
-#include "omaha/base/error.h" |
-#include "omaha/base/path.h" |
-#include "omaha/base/scoped_any.h" |
-#include "omaha/base/thread.h" |
-#include "omaha/base/time.h" |
-#include "omaha/base/utils.h" |
-#include "omaha/base/vistautil.h" |
-#include "omaha/common/config_manager.h" |
-#include "omaha/common/const_goopdate.h" |
-#include "omaha/common/goopdate_utils.h" |
-#include "omaha/common/scheduled_task_utils.h" |
-#include "omaha/core/core.h" |
-#include "omaha/setup/setup_service.h" |
-#include "omaha/testing/unit_test.h" |
- |
-namespace omaha { |
- |
-namespace { |
- |
-// Runs the core on a different thread. Since the core captures the thread id |
-// in its constructor, the core instance must be created on this thread, not |
-// on the main thread. |
-class CoreRunner : public Runnable { |
- public: |
- explicit CoreRunner(bool is_machine) : is_machine_(is_machine) {} |
- virtual ~CoreRunner() {} |
- |
- private: |
- virtual void Run() { |
- Core core; |
- core.Main(is_machine_, false); // Do not run the crash handler. |
- } |
- |
- bool is_machine_; |
- DISALLOW_EVIL_CONSTRUCTORS(CoreRunner); |
-}; |
- |
-} // namespace |
- |
-class CoreTest : public testing::Test { |
- public: |
- CoreTest() : is_machine_(false) {} |
- |
- virtual void SetUp() { |
- // The Core has it's own ATL module. ATL does not like having multiple ATL |
- // modules. This TestCase saves and restore the original ATL module to get |
- // around ATL's limitation. This is a hack. |
- original_atl_module_ = _pAtlModule; |
- _pAtlModule = NULL; |
- |
- ASSERT_HRESULT_SUCCEEDED(IsSystemProcess(&is_machine_)); |
- |
- ConfigManager::Instance()->SetLastCheckedTime(is_machine_, 10); |
- |
- NamedObjectAttributes attr; |
- GetNamedObjectAttributes(kShutdownEvent, is_machine_, &attr); |
- reset(shutdown_event_, ::CreateEvent(&attr.sa, true, false, attr.name)); |
- ASSERT_TRUE(shutdown_event_); |
- } |
- |
- virtual void TearDown() { |
- _pAtlModule = original_atl_module_; |
- } |
- |
- HRESULT SignalShutdownEvent() { |
- EXPECT_TRUE(valid(shutdown_event_)); |
- return ::SetEvent(get(shutdown_event_)) ? S_OK : HRESULTFromLastError(); |
- } |
- |
- HRESULT ResetShutdownEvent() { |
- EXPECT_TRUE(valid(shutdown_event_)); |
- return ::ResetEvent(get(shutdown_event_)) ? S_OK : HRESULTFromLastError(); |
- } |
- |
- protected: |
- bool is_machine_; |
- scoped_event shutdown_event_; |
- |
- CAtlModule* original_atl_module_; |
-}; |
- |
-// Tests the core shutdown mechanism. |
-TEST_F(CoreTest, Shutdown) { |
- // Signal existing core instances to shutdown, otherwise new instances |
- // can't start. |
- ASSERT_HRESULT_SUCCEEDED(SignalShutdownEvent()); |
- ::Sleep(0); |
- ASSERT_HRESULT_SUCCEEDED(ResetShutdownEvent()); |
- |
- // Start a thread to run the core, signal the core to exit, and wait a while |
- // for the thread to exit. Terminate the thread if it is still running. |
- Thread thread; |
- CoreRunner core_runner(is_machine_); |
- EXPECT_TRUE(thread.Start(&core_runner)); |
- |
- // Give the core a little time to run before signaling it to exit. |
- ::Sleep(100); |
- EXPECT_HRESULT_SUCCEEDED(SignalShutdownEvent()); |
- EXPECT_TRUE(thread.WaitTillExit(2000)); |
- if (thread.Running()) { |
- // If you see a crash here, it was likely caused by Application Verifier. |
- // TODO(omaha): Is there a better way to exit? Should we wait longer? |
- thread.Terminate(-1); |
- } |
- EXPECT_HRESULT_SUCCEEDED(ResetShutdownEvent()); |
-} |
- |
-class CoreUtilsTest : public testing::Test { |
- public: |
- CoreUtilsTest() : is_machine_(vista_util::IsUserAdmin()) {} |
- |
- virtual void SetUp() { |
- // The Core has it's own ATL module. ATL does not like having multiple ATL |
- // modules. This TestCase saves and restore the original ATL module to get |
- // around ATL's limitation. This is a hack. |
- original_atl_module_ = _pAtlModule; |
- _pAtlModule = NULL; |
- |
- // The Core must be created after the ATL module work around. |
- core_.reset(new Core); |
- core_->is_system_ = is_machine_; |
- } |
- |
- virtual void TearDown() { |
- _pAtlModule = original_atl_module_; |
- } |
- |
- bool AreScheduledTasksHealthy() { |
- return core_->AreScheduledTasksHealthy(); |
- } |
- |
- bool IsCheckingForUpdates() { |
- return core_->IsCheckingForUpdates(); |
- } |
- |
- static HRESULT DoInstallService(const TCHAR* service_cmd_line) { |
- return SetupUpdate3Service::DoInstallService(service_cmd_line); |
- } |
- |
- static HRESULT DeleteService() { |
- return SetupUpdate3Service::DeleteService(); |
- } |
- |
- scoped_ptr<Core> core_; |
- bool is_machine_; |
- |
- CAtlModule* original_atl_module_; |
-}; |
- |
-TEST_F(CoreUtilsTest, AreScheduledTasksHealthy) { |
- EXPECT_SUCCEEDED(scheduled_task_utils::UninstallGoopdateTasks(is_machine_)); |
- EXPECT_FALSE(AreScheduledTasksHealthy()); |
- |
- CString task_path = ConcatenatePath(app_util::GetCurrentModuleDirectory(), |
- _T("LongRunningSilent.exe")); |
- EXPECT_SUCCEEDED(scheduled_task_utils::InstallGoopdateTasks(task_path, |
- is_machine_)); |
- const uint32 now = Time64ToInt32(GetCurrent100NSTime()); |
- const int k12HourPeriodSec = 12 * 60 * 60; |
- const DWORD first_install_12 = now - k12HourPeriodSec; |
- EXPECT_SUCCEEDED(RegKey::SetValue( |
- ConfigManager::Instance()->registry_client_state_goopdate(is_machine_), |
- kRegValueInstallTimeSec, |
- first_install_12)); |
- EXPECT_TRUE(AreScheduledTasksHealthy()); |
- |
- EXPECT_SUCCEEDED(scheduled_task_utils::UninstallGoopdateTasks(is_machine_)); |
-} |
- |
-TEST_F(CoreUtilsTest, IsCheckingForUpdates) { |
- const uint32 now = Time64ToInt32(GetCurrent100NSTime()); |
- const int k12HourPeriodSec = 12 * 60 * 60; |
- const DWORD first_install_12_hours_back = now - k12HourPeriodSec; |
- EXPECT_SUCCEEDED(RegKey::SetValue( |
- ConfigManager::Instance()->registry_client_state_goopdate(is_machine_), |
- kRegValueInstallTimeSec, |
- first_install_12_hours_back)); |
- |
- ConfigManager::Instance()->SetLastCheckedTime(is_machine_, 10); |
- EXPECT_TRUE(IsCheckingForUpdates()); |
- |
- const int k48HourPeriodSec = 48 * 60 * 60; |
- const DWORD first_install_48_hours_back = now - k48HourPeriodSec; |
- EXPECT_SUCCEEDED(RegKey::SetValue( |
- ConfigManager::Instance()->registry_client_state_goopdate(is_machine_), |
- kRegValueInstallTimeSec, |
- first_install_48_hours_back)); |
- EXPECT_FALSE(IsCheckingForUpdates()); |
- |
- EXPECT_SUCCEEDED(goopdate_utils::UpdateLastChecked(is_machine_)); |
- EXPECT_TRUE(IsCheckingForUpdates()); |
- |
- const int k15DaysPeriodSec = 15 * 24 * 60 * 60; |
- const DWORD last_checked_15_days_back = now - k15DaysPeriodSec; |
- ConfigManager::Instance()->SetLastCheckedTime(is_machine_, |
- last_checked_15_days_back); |
- EXPECT_FALSE(IsCheckingForUpdates()); |
-} |
- |
-} // namespace omaha |