Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(88)

Unified Diff: goopdate/installer_wrapper_unittest.cc

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « goopdate/installer_wrapper.cc ('k') | goopdate/job_observer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: goopdate/installer_wrapper_unittest.cc
diff --git a/goopdate/installer_wrapper_unittest.cc b/goopdate/installer_wrapper_unittest.cc
deleted file mode 100644
index 460c2a3149c685a91d170bcc85ea86cd86896f58..0000000000000000000000000000000000000000
--- a/goopdate/installer_wrapper_unittest.cc
+++ /dev/null
@@ -1,1894 +0,0 @@
-// Copyright 2007-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 <atlpath.h>
-#include <atlstr.h>
-#include "base/scoped_ptr.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/process.h"
-#include "omaha/base/reg_key.h"
-#include "omaha/base/scoped_ptr_address.h"
-#include "omaha/base/shell.h"
-#include "omaha/base/system.h"
-#include "omaha/base/timer.h"
-#include "omaha/base/utils.h"
-#include "omaha/base/vistautil.h"
-#include "omaha/common/app_registry_utils.h"
-#include "omaha/common/const_goopdate.h"
-#include "omaha/common/install_manifest.h"
-#include "omaha/goopdate/app_manager.h"
-#include "omaha/goopdate/installer_wrapper.h"
-#include "omaha/goopdate/model.h"
-#include "omaha/goopdate/resource_manager.h"
-#include "omaha/testing/unit_test.h"
-
-namespace omaha {
-
-namespace {
-
-const TCHAR kAppId[] = _T("{B18BC01B-E0BD-4BF0-A33E-1133055E5FDE}");
-const GUID kAppGuid = {0xB18BC01B, 0xE0BD, 0x4BF0,
- {0xA3, 0x3E, 0x11, 0x33, 0x05, 0x5E, 0x5F, 0xDE}};
-
-const TCHAR kFullAppClientsKeyPath[] =
- _T("HKCU\\Software\\") SHORT_COMPANY_NAME _T("\\")
- PRODUCT_NAME _T("\\Clients\\{B18BC01B-E0BD-4BF0-A33E-1133055E5FDE}");
-const TCHAR kFullAppClientStateKeyPath[] =
- _T("HKCU\\Software\\") SHORT_COMPANY_NAME _T("\\")
- PRODUCT_NAME _T("\\ClientState\\{B18BC01B-E0BD-4BF0-A33E-1133055E5FDE}");
-const TCHAR kFullFooAppClientKeyPath[] =
- _T("HKLM\\Software\\") SHORT_COMPANY_NAME _T("\\")
- PRODUCT_NAME _T("\\Clients\\{D6B08267-B440-4C85-9F79-E195E80D9937}");
-const TCHAR kFullFooAppClientStateKeyPath[] =
- _T("HKLM\\Software\\") SHORT_COMPANY_NAME _T("\\")
- PRODUCT_NAME _T("\\ClientState\\{D6B08267-B440-4C85-9F79-E195E80D9937}");
-
-const TCHAR kSetupFooV1RelativeLocation[] =
- _T("unittest_support\\test_foo_v1.0.101.0.msi");
-const TCHAR kFooGuid[] = _T("{D6B08267-B440-4C85-9F79-E195E80D9937}");
-const TCHAR kFooInstallerBarPropertyArg[] = _T("PROPBAR=7");
-const TCHAR kFooInstallerBarValueName[] = _T("propbar");
-
-// Values related to using cmd.exe as an "installer".
-const TCHAR kCmdExecutable[] = _T("cmd.exe");
-const TCHAR kExecuteCommandAndTerminateSwitch[] = _T("/c %s");
-const TCHAR kExecuteTwoCommandsFormat[] = _T("\"%s & %s\"");
-
-const TCHAR kMsiLogFormat[] = _T("%s.log");
-
-const TCHAR kMsiUninstallArguments[] = _T("/quiet /uninstall \"%s\"");
-const TCHAR kMsiCommand[] = _T("msiexec");
-
-const DWORD kInitialErrorValue = 5;
-const TCHAR kMeaninglessErrorString[] = _T("This is an error string.");
-
-// Some error strings are slightly different on Vista than XP because spaces
-// were removed. Therefore, the comparison must ignore that space.
-
-// The US English error string for ERROR_INSTALL_PACKAGE_OPEN_FAILED.
-const TCHAR kMsiPackageOpenFailedStringPartA[] =
- _T("This installation package could not be opened. ");
-const TCHAR kMsiPackageOpenFailedStringPartB[] =
- _T("Verify that the package exists and that you can access it, ")
- _T("or contact the application vendor to verify that this is a ")
- _T("valid Windows Installer package. ");
-
-// The US English error string for ERROR_INSTALL_ALREADY_RUNNING.
-const TCHAR kMsiBusyStringPartA[] =
- _T("Another installation is already in progress. ");
-const TCHAR kMsiBusyStringPartB[] =
- _T("Complete that installation before proceeding with this install. ");
-
-const TCHAR* const kError1603Text =
- _T("The installer encountered error 1603: Fatal error during ")
- _T("installation. ");
-
-const TCHAR kError1618MessagePrefix[] =
- _T("The installer encountered error 1618: ");
-const int kError1618MessagePrefixLength =
- arraysize(kError1618MessagePrefix) - 1;
-
-const TCHAR* const kError0x800B010FText =
- _T("The installer encountered error 0x800b010f: ")
- _T("The certificate's CN name does not match the passed value. ");
-
-const TCHAR* const kLaunchCmdLine =
- _T("\"C:\\Local\\Google\\Chrome\\Application\\chrome.exe\" -home");
-
-const TCHAR* const kLanguageEnglish = _T("en");
-
-const int kMsiAlreadyRunningRetryDelayBaseMs = 5000;
-const int kNumMsiTriesDefault = 4; // Up to 35 seconds.
-const int kNumMsiTriesOnBuildSystem = 7; // Up to 6.25 minutes.
-
-int GetNumMsiTries() {
- return IsBuildSystem() ? kNumMsiTriesOnBuildSystem : kNumMsiTriesDefault;
-}
-
-} // namespace
-
-extern const TCHAR kRegExecutable[] = _T("reg.exe");
-extern const TCHAR kSetInstallerResultTypeMsiErrorRegCmdArgs[] =
- _T("add HKCU\\Software\\") SHORT_COMPANY_NAME _T("\\") PRODUCT_NAME
- _T("\\UnitTest\\HKCU\\Software\\") SHORT_COMPANY_NAME _T("\\")
- PRODUCT_NAME _T("\\ClientState\\{B18BC01B-E0BD-4BF0-A33E-1133055E5FDE} ")
- _T("/v InstallerResult /t REG_DWORD /d 2");
-extern const TCHAR kMsiInstallerBusyExitCodeCmd[] = _T("exit 1618");
-
-extern const TCHAR kError1619MessagePrefix[] =
- _T("The installer encountered error 1619: ");
-extern const int kError1619MessagePrefixLength =
- arraysize(kError1619MessagePrefix) - 1;
-
-void VerifyStringIsMsiPackageOpenFailedString(const CString& str) {
- EXPECT_STREQ(kMsiPackageOpenFailedStringPartA,
- str.Left(arraysize(kMsiPackageOpenFailedStringPartA) - 1));
- EXPECT_STREQ(kMsiPackageOpenFailedStringPartB,
- str.Right(arraysize(kMsiPackageOpenFailedStringPartB) - 1));
-}
-
-void VerifyStringIsMsiBusyString(const CString& str) {
- EXPECT_STREQ(kMsiBusyStringPartA,
- str.Left(arraysize(kMsiBusyStringPartA) - 1));
- EXPECT_STREQ(kMsiBusyStringPartB,
- str.Right(arraysize(kMsiBusyStringPartB) - 1));
-}
-
-// Unit tests may run while other updaters are running on the build system.
-// Give the tests lots of time to run to avoid false negatives.
-void AdjustMsiTries(InstallerWrapper* installer_wrapper) {
- ASSERT1(installer_wrapper);
- installer_wrapper->set_num_tries_when_msi_busy(GetNumMsiTries());
-}
-
-// Waits for the uninstall to complete to avoid race conditions with other tests
-// that install the same MSI. It appears msiexec causes an an asynchronous
-// request that may be processed out of order.
-// Retries when ERROR_INSTALL_ALREADY_RUNNING is encountered.
-void UninstallTestMsi(const CString& installer_path) {
- CString uninstall_arguments;
- uninstall_arguments.Format(kMsiUninstallArguments, installer_path);
-
- const int max_tries = GetNumMsiTries();
- int retry_delay = kMsiAlreadyRunningRetryDelayBaseMs;
- int num_tries(0);
- uint32 exit_code = ERROR_INSTALL_ALREADY_RUNNING;
- for (num_tries = 0;
- exit_code == ERROR_INSTALL_ALREADY_RUNNING && num_tries < max_tries;
- ++num_tries) {
- if (0 < num_tries) {
- // Retrying - wait between attempts.
- ::Sleep(retry_delay);
- retry_delay *= 2; // Double the retry delay next time.
- }
-
- Process p(kMsiCommand, NULL);
- EXPECT_HRESULT_SUCCEEDED(p.Start(uninstall_arguments, NULL));
- EXPECT_TRUE(p.WaitUntilDead(10000));
-
- EXPECT_TRUE(p.GetExitCode(&exit_code));
- }
-
- EXPECT_EQ(0, exit_code);
-}
-
-class InstallerWrapperTest : public testing::Test {
- protected:
- explicit InstallerWrapperTest(bool is_machine)
- : is_machine_(is_machine),
- hive_override_key_name_(kRegistryHiveOverrideRoot) {
- }
-
- static void SetUpTestCase() {
- CString system_path;
- EXPECT_SUCCEEDED(Shell::GetSpecialFolder(CSIDL_SYSTEM,
- false,
- &system_path));
- EXPECT_FALSE(system_path.IsEmpty());
- cmd_exe_path_.Combine(system_path, kCmdExecutable);
- EXPECT_TRUE(File::Exists(cmd_exe_path_));
-
- CPath reg_path;
- reg_path.Combine(system_path, kRegExecutable);
- set_installer_result_type_msi_error_cmd_.Format(
- _T("%s %s"),
- reg_path, kSetInstallerResultTypeMsiErrorRegCmdArgs);
- }
-
- virtual void SetUp() {
- RegKey::DeleteKey(hive_override_key_name_, true);
- OverrideRegistryHivesWithExecutionPermissions(hive_override_key_name_);
-
- EXPECT_SUCCEEDED(AppManager::CreateInstance(is_machine_));
-
- im_.reset(new InstallerWrapper(is_machine_));
- EXPECT_SUCCEEDED(im_->Initialize());
-
- EXPECT_SUCCEEDED(ResourceManager::Create(
- is_machine_, app_util::GetCurrentModuleDirectory(), _T("en")));
- }
-
- virtual void TearDown() {
- AppManager::DeleteInstance();
-
- RestoreRegistryHives();
- ASSERT_SUCCEEDED(RegKey::DeleteKey(hive_override_key_name_, true));
- ResourceManager::Delete();
- }
-
- void SetupInstallerResultRegistry(const CString& app_guid,
- bool set_installer_result,
- DWORD installer_result,
- bool set_installer_error,
- DWORD installer_error,
- bool set_installer_extra_code1,
- DWORD installer_extra_code1,
- bool set_installer_result_uistring,
- const CString& installer_result_uistring,
- bool set_installer_launch_cmd_line,
- const CString& installer_launch_cmd_line) {
- CString app_client_state_key =
- app_registry_utils::GetAppClientStateKey(is_machine_, app_guid);
- RegKey::CreateKey(app_client_state_key);
- if (set_installer_result) {
- RegKey::SetValue(app_client_state_key,
- kRegValueInstallerResult,
- installer_result);
- }
-
- if (set_installer_error) {
- RegKey::SetValue(app_client_state_key,
- kRegValueInstallerError,
- installer_error);
- }
-
- if (set_installer_extra_code1) {
- RegKey::SetValue(app_client_state_key,
- kRegValueInstallerExtraCode1,
- installer_extra_code1);
- }
-
- if (set_installer_result_uistring) {
- RegKey::SetValue(app_client_state_key,
- kRegValueInstallerResultUIString,
- installer_result_uistring);
- }
-
- if (set_installer_launch_cmd_line) {
- RegKey::SetValue(app_client_state_key,
- kRegValueInstallerSuccessLaunchCmdLine,
- installer_launch_cmd_line);
- }
- }
-
- void VerifyLastRegistryValues(const CString& app_guid,
- bool expect_installer_result,
- DWORD expected_installer_result,
- bool expect_installer_error,
- DWORD expected_installer_error,
- bool expect_installer_extra_code1,
- DWORD expected_installer_extra_code1,
- bool expect_installer_result_uistring,
- const CString& expected_result_uistring,
- bool expect_installer_launch_cmd_line,
- const CString& expected_launch_cmd_line) {
- ASSERT_TRUE(expect_installer_result || !expected_installer_result);
- ASSERT_TRUE(expect_installer_error || !expected_installer_error);
- ASSERT_TRUE(expect_installer_extra_code1 ||
- !expected_installer_extra_code1);
- ASSERT_TRUE(expect_installer_result_uistring ||
- expected_result_uistring.IsEmpty());
- ASSERT_TRUE(expect_installer_launch_cmd_line ||
- expected_launch_cmd_line.IsEmpty());
-
- CString app_client_state_key =
- app_registry_utils::GetAppClientStateKey(is_machine_, app_guid);
- EXPECT_FALSE(RegKey::HasValue(app_client_state_key,
- kRegValueInstallerResult));
- EXPECT_FALSE(RegKey::HasValue(app_client_state_key,
- kRegValueInstallerError));
- EXPECT_FALSE(RegKey::HasValue(app_client_state_key,
- kRegValueInstallerExtraCode1));
- EXPECT_FALSE(RegKey::HasValue(app_client_state_key,
- kRegValueInstallerResultUIString));
-
- if (expect_installer_result) {
- EXPECT_TRUE(RegKey::HasValue(app_client_state_key,
- kRegValueLastInstallerResult));
- DWORD last_installer_result = 0;
- EXPECT_SUCCEEDED(RegKey::GetValue(app_client_state_key,
- kRegValueLastInstallerResult,
- &last_installer_result));
- EXPECT_EQ(expected_installer_result, last_installer_result);
- } else {
- EXPECT_FALSE(RegKey::HasValue(app_client_state_key,
- kRegValueLastInstallerResult));
- }
-
- if (expect_installer_error) {
- EXPECT_TRUE(RegKey::HasValue(app_client_state_key,
- kRegValueLastInstallerError));
- DWORD last_installer_error = 0;
- EXPECT_SUCCEEDED(RegKey::GetValue(app_client_state_key,
- kRegValueLastInstallerError,
- &last_installer_error));
- EXPECT_EQ(expected_installer_error, last_installer_error);
- } else {
- EXPECT_FALSE(RegKey::HasValue(app_client_state_key,
- kRegValueLastInstallerError));
- }
-
- if (expect_installer_extra_code1) {
- EXPECT_TRUE(RegKey::HasValue(app_client_state_key,
- kRegValueLastInstallerExtraCode1));
- DWORD last_installer_extracode1 = 0;
- EXPECT_SUCCEEDED(RegKey::GetValue(app_client_state_key,
- kRegValueLastInstallerExtraCode1,
- &last_installer_extracode1));
- EXPECT_EQ(expected_installer_extra_code1, last_installer_extracode1);
- } else {
- EXPECT_FALSE(RegKey::HasValue(app_client_state_key,
- kRegValueLastInstallerExtraCode1));
- }
-
- if (expect_installer_result_uistring) {
- EXPECT_TRUE(RegKey::HasValue(app_client_state_key,
- kRegValueLastInstallerResultUIString));
- CString last_installer_result_uistring;
- EXPECT_SUCCEEDED(RegKey::GetValue(app_client_state_key,
- kRegValueLastInstallerResultUIString,
- &last_installer_result_uistring));
- EXPECT_STREQ(expected_result_uistring,
- last_installer_result_uistring);
- } else {
- EXPECT_FALSE(RegKey::HasValue(app_client_state_key,
- kRegValueLastInstallerResultUIString));
- }
-
- if (expect_installer_launch_cmd_line) {
- EXPECT_TRUE(RegKey::HasValue(app_client_state_key,
- kRegValueLastInstallerSuccessLaunchCmdLine));
- CString last_installer_launch_cmd_line;
- EXPECT_SUCCEEDED(
- RegKey::GetValue(app_client_state_key,
- kRegValueLastInstallerSuccessLaunchCmdLine,
- &last_installer_launch_cmd_line));
- EXPECT_STREQ(expected_launch_cmd_line,
- last_installer_launch_cmd_line);
- } else {
- EXPECT_FALSE(RegKey::HasValue(
- app_client_state_key,
- kRegValueLastInstallerSuccessLaunchCmdLine));
- }
- }
-
- void VerifyNoLastRegistryValues(const CString& app_guid) {
- VerifyLastRegistryValues(app_guid,
- false, 0,
- false, 0,
- false, 0,
- false, _T(""),
- false, _T(""));
- }
-
- void CallGetInstallerResultHelper(const GUID& app_guid,
- int installer_type,
- uint32 exit_code,
- InstallerResultInfo* result_info) {
- ASSERT1(result_info);
-
- im_->GetInstallerResultHelper(
- app_guid,
- static_cast<InstallerWrapper::InstallerType>(installer_type),
- exit_code,
- kLanguageEnglish,
- result_info);
- }
-
- static const int kResultSuccess = AppManager::INSTALLER_RESULT_SUCCESS;
- static const int kResultFailedCustomError =
- AppManager::INSTALLER_RESULT_FAILED_CUSTOM_ERROR;
- static const int kResultFailedMsiError =
- AppManager::INSTALLER_RESULT_FAILED_MSI_ERROR;
- static const int kResultFailedSystemError =
- AppManager::INSTALLER_RESULT_FAILED_SYSTEM_ERROR;
- static const int kResultExitCode = AppManager::INSTALLER_RESULT_EXIT_CODE;
-
- static const int kMsiInstaller = InstallerWrapper::MSI_INSTALLER;
- static const int kOtherInstaller = InstallerWrapper::CUSTOM_INSTALLER;
-
- bool is_machine_;
- CString hive_override_key_name_;
- scoped_ptr<InstallerWrapper> im_;
-
- // Used as an argument to various functions.
- InstallerResultInfo result_info_;
-
- static CPath cmd_exe_path_;
- static CString set_installer_result_type_msi_error_cmd_;
-};
-
-CPath InstallerWrapperTest::cmd_exe_path_;
-CString InstallerWrapperTest::set_installer_result_type_msi_error_cmd_;
-
-class InstallerWrapperMachineTest : public InstallerWrapperTest {
- protected:
- InstallerWrapperMachineTest()
- : InstallerWrapperTest(true) {
- }
-};
-
-class InstallerWrapperUserTest : public InstallerWrapperTest {
- protected:
- InstallerWrapperUserTest()
- : InstallerWrapperTest(false) {
- }
-};
-
-class InstallerWrapperUserGetInstallerResultHelperTest
- : public InstallerWrapperUserTest {
- protected:
- InstallerWrapperUserGetInstallerResultHelperTest()
- : InstallerWrapperUserTest() {
- result_info_.text = kMeaninglessErrorString;
- }
-
- virtual void SetUp() {
- InstallerWrapperUserTest::SetUp();
- AppManager::Instance()->GetRegistryStableStateLock().Lock();
- }
-
- virtual void TearDown() {
- AppManager::Instance()->GetRegistryStableStateLock().Unlock();
- InstallerWrapperUserTest::TearDown();
- }
-
- // Shorter names used to make test calls fit on one line.
- static const int kMsi = kMsiInstaller;
- static const int kOther = kOtherInstaller;
-};
-
-//
-// Helper method tests
-//
-TEST(InstallerWrapperTest, GetMessageForSystemErrorCode) {
- VerifyStringIsMsiPackageOpenFailedString(
- GetMessageForSystemErrorCode(ERROR_INSTALL_PACKAGE_OPEN_FAILED));
-}
-
-// CheckApplicationRegistration does not read the registry. This is verified by
-// not setting any registry values before calling it.
-
-TEST_F(InstallerWrapperUserTest,
- CheckApplicationRegistration_EmptyRegisteredVersion) {
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_DID_NOT_WRITE_CLIENTS_KEY,
- im_->CheckApplicationRegistration(
- kAppGuid, _T(""), _T(""), _T(""), false));
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_DID_NOT_WRITE_CLIENTS_KEY,
- im_->CheckApplicationRegistration(
- kAppGuid, _T(""), _T(""), _T(""), true));
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_DID_NOT_WRITE_CLIENTS_KEY,
- im_->CheckApplicationRegistration(
- kAppGuid, _T(""), _T("1.2.3.4"), _T(""), false));
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_DID_NOT_WRITE_CLIENTS_KEY,
- im_->CheckApplicationRegistration(
- kAppGuid, _T(""), _T("1.2.3.4"), _T(""), true));
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_DID_NOT_WRITE_CLIENTS_KEY,
- im_->CheckApplicationRegistration(
- kAppGuid, _T(""), _T("1.2.3.4"), _T("1.2.3.3"), false));
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_DID_NOT_WRITE_CLIENTS_KEY,
- im_->CheckApplicationRegistration(
- kAppGuid, _T(""), _T("1.2.3.4"), _T("1.2.3.3"), true));
-}
-
-TEST_F(InstallerWrapperUserTest,
- CheckApplicationRegistration_NoExpectedOrPreviousVersion) {
- EXPECT_SUCCEEDED(im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T(""), _T(""), false));
- EXPECT_SUCCEEDED(im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T(""), _T(""), true));
-}
-
-TEST_F(InstallerWrapperUserTest,
- CheckApplicationRegistration_ExpectedMatch_NoPreviousVersion) {
- EXPECT_SUCCEEDED(im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T("0.9.6.4"), _T(""), false));
- EXPECT_SUCCEEDED(im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T("0.9.6.4"), _T(""), true));
-}
-
-TEST_F(InstallerWrapperUserTest,
- CheckApplicationRegistration_NoExpectedVersion_PreviousVersionOlder) {
- EXPECT_SUCCEEDED(im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T(""), _T("0.9.6.3"), false));
- EXPECT_SUCCEEDED(im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T(""), _T("0.9.6.3"), true));
-}
-
-TEST_F(InstallerWrapperUserTest,
- CheckApplicationRegistration_ExpectedMatch_PreviousVersionSame_UnchangedAllowed) { // NOLINT
- EXPECT_SUCCEEDED(
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T(""), _T("0.9.6.4"), false));
- EXPECT_SUCCEEDED(
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T("0.9.6.4"), _T("0.9.6.4"), false));
-}
-
-TEST_F(InstallerWrapperUserTest,
- CheckApplicationRegistration_ExpectedMatch_PreviousVersionSame_UnchangedNotAllowed) { // NOLINT
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_DID_NOT_CHANGE_VERSION,
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T(""), _T("0.9.6.4"), true));
-
- ExpectAsserts expect_asserts; // expected_version is expected to be greater.
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_DID_NOT_CHANGE_VERSION,
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T("0.9.6.4"), _T("0.9.6.4"), true));
-}
-
-TEST_F(InstallerWrapperUserTest,
- CheckApplicationRegistration_ExpectedMatch_PreviousVersionOlder) {
- EXPECT_SUCCEEDED(
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T("0.9.6.4"), _T("0.9.6.3"), false));
- EXPECT_SUCCEEDED(
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T("0.9.6.4"), _T("0.9.6.3"), true));
-}
-
-TEST_F(InstallerWrapperUserTest,
- CheckApplicationRegistration_ExpectedMatch_PreviousVersionNewer) {
- EXPECT_SUCCEEDED(
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T("0.9.6.4"), _T("0.9.6.5"), false));
- EXPECT_SUCCEEDED(
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T("0.9.6.4"), _T("0.9.6.5"), true));
-}
-
-// This is the over-install when a newer version is present case. This might
-// happen if a dev track version is installed and a stable track version is
-// installed. For installs, this is okay.
-TEST_F(InstallerWrapperUserTest,
- CheckApplicationRegistration_ExpectedMatch_RegisteredNewer_NoPreviousVersion_NewInstall) { // NOLINT
- EXPECT_SUCCEEDED(
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T("0.9.6.3"), _T(""), false));
-}
-
-TEST_F(InstallerWrapperUserTest,
- CheckApplicationRegistration_ExpectedMismatch_RegisteredNewer_NoPreviousVersion_Update) { // NOLINT
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_VERSION_MISMATCH,
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T("0.9.6.3"), _T(""), true));
-}
-
-// This is the over-install when a newer version is present case. This might
-// happen if a dev track version is installed and a stable track version is
-// installed. For installs, this is okay.
-TEST_F(InstallerWrapperUserTest,
- CheckApplicationRegistration_ExpectedMismatch_RegisteredNewer_PreviousVersionSame) { // NOLINT
- EXPECT_SUCCEEDED(
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T("0.9.6.3"), _T("0.9.6.4"), false));
- ExpectAsserts expect_asserts; // expected_version is expected to be greater.
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_DID_NOT_CHANGE_VERSION,
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T("0.9.6.3"), _T("0.9.6.4"), true));
-}
-
-TEST_F(InstallerWrapperUserTest,
- CheckApplicationRegistration_ExpectedMismatch_RegisteredNewer_PreviousVersionDifferent) { // NOLINT
- EXPECT_SUCCEEDED(
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T("0.9.6.3"), _T("0.9.6.3"), false));
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_VERSION_MISMATCH,
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T("0.9.6.3"), _T("0.9.6.3"), true));
-}
-
-TEST_F(InstallerWrapperUserTest,
- CheckApplicationRegistration_ExpectedMismatch_RegisteredOlder_NoPreviousVersion) { // NOLINT
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_VERSION_MISMATCH,
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.2"), _T("0.9.6.3"), _T(""), false));
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_VERSION_MISMATCH,
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.2"), _T("0.9.6.3"), _T(""), true));
-}
-
-TEST_F(InstallerWrapperUserTest,
- CheckApplicationRegistration_ExpectedMismatch_RegisteredOlder_PreviousVersionSame) { // NOLINT
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_VERSION_MISMATCH,
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.2"), _T("0.9.6.3"), _T("0.9.6.2"), false));
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_VERSION_MISMATCH,
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.2"), _T("0.9.6.3"), _T("0.9.6.2"), true));
-}
-
-TEST_F(InstallerWrapperUserTest,
- CheckApplicationRegistration_ExpectedMismatch_RegisteredOlder_PreviousVersionDifferent) { // NOLINT
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_VERSION_MISMATCH,
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.2"), _T("0.9.6.3"), _T("0.9.6.1"), false));
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_VERSION_MISMATCH,
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.2"), _T("0.9.6.3"), _T("0.9.6.1"), true));
-}
-
-TEST_F(InstallerWrapperUserTest,
- CheckApplicationRegistration_ExpectedMismatch_RegisteredNewer_PreviousVersionSame_UnrecognizedVersions) { // NOLINT
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_VERSION_MISMATCH,
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4.0"), _T("0.9.6.3"), _T("0.9.6.4.0"),
- false));
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_VERSION_MISMATCH,
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4.0"), _T("0.9.6.3"), _T("0.9.6.4.0"),
- true));
-
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_VERSION_MISMATCH,
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T("0.9.6.3.0"), _T("0.9.6.4"),
- false));
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_VERSION_MISMATCH,
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4"), _T("0.9.6.3.0"), _T("0.9.6.4"),
- true));
-
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_VERSION_MISMATCH,
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4.0"), _T("0.9.6.3.0"), _T("0.9.6.4.0"),
- false));
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_VERSION_MISMATCH,
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6.4.0"), _T("0.9.6.3.0"), _T("0.9.6.4.0"),
- true));
-
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_VERSION_MISMATCH,
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6"), _T("0.9.5"), _T("0.9.6"), false));
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_VERSION_MISMATCH,
- im_->CheckApplicationRegistration(
- kAppGuid, _T("0.9.6"), _T("0.9.5"), _T("0.9.6"), true));
-}
-
-//
-// Negative Tests
-//
-
-TEST_F(InstallerWrapperUserTest, InstallApp_InstallerWithoutFilenameExtension) {
- EXPECT_EQ(GOOPDATEINSTALL_E_FILENAME_INVALID,
- im_->InstallApp(NULL,
- kAppGuid,
- _T("c:\\temp\\foo"),
- _T(""), // Arguments.
- _T(""), // Installer data.
- kLanguageEnglish,
- &result_info_));
-
- EXPECT_EQ(INSTALLER_RESULT_UNKNOWN, result_info_.type);
- EXPECT_EQ(S_OK, result_info_.code);
- EXPECT_TRUE(result_info_.text.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-}
-
-TEST_F(InstallerWrapperUserTest,
- InstallApp_UnsupportedInstallerFilenameExtension) {
- EXPECT_EQ(GOOPDATEINSTALL_E_FILENAME_INVALID,
- im_->InstallApp(NULL,
- kAppGuid,
- _T("c:\\temp\\foo.bar"),
- _T(""), // Arguments.
- _T(""), // Installer data.
- kLanguageEnglish,
- &result_info_));
-
- EXPECT_EQ(INSTALLER_RESULT_UNKNOWN, result_info_.type);
- EXPECT_EQ(S_OK, result_info_.code);
- EXPECT_TRUE(result_info_.text.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-}
-
-TEST_F(InstallerWrapperUserTest, InstallApp_InstallerEmtpyFilename) {
- EXPECT_EQ(GOOPDATEINSTALL_E_FILENAME_INVALID,
- im_->InstallApp(NULL,
- kAppGuid,
- _T(""),
- _T(""), // Arguments.
- _T(""), // Installer data.
- kLanguageEnglish,
- &result_info_));
-
- EXPECT_EQ(INSTALLER_RESULT_UNKNOWN, result_info_.type);
- EXPECT_EQ(S_OK, result_info_.code);
- EXPECT_TRUE(result_info_.text.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-}
-
-TEST_F(InstallerWrapperUserTest, InstallApp_ExeFileDoesNotExist) {
- __mutexScope(AppManager::Instance()->GetRegistryStableStateLock());
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_FAILED_START,
- im_->InstallApp(NULL,
- kAppGuid,
- _T("c:\\temp\\foo.exe"),
- _T(""), // Arguments.
- _T(""), // Installer data.
- kLanguageEnglish,
- &result_info_));
-
- EXPECT_EQ(INSTALLER_RESULT_UNKNOWN, result_info_.type);
- EXPECT_EQ(S_OK, result_info_.code);
- EXPECT_TRUE(result_info_.text.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- EXPECT_FALSE(RegKey::HasKey(kFullAppClientsKeyPath));
- EXPECT_FALSE(RegKey::HasKey(kFullAppClientStateKeyPath));
-}
-
-//
-// EXE Installer Tests
-//
-
-// This test uses cmd.exe as an installer that leaves the payload
-// kPayloadFileName.
-TEST_F(InstallerWrapperUserTest, InstallApp_ExeInstallerWithArgumentsSucceeds) {
- const TCHAR kPayloadFileName[] = _T("exe_payload.txt");
- const TCHAR kCommandToExecute[] = _T("echo \"hi\" > %s");
-
- CString full_command_to_execute;
- full_command_to_execute.Format(kCommandToExecute, kPayloadFileName);
- CString arguments;
- arguments.Format(kExecuteCommandAndTerminateSwitch, full_command_to_execute);
-
- EXPECT_SUCCEEDED(File::Remove(kPayloadFileName));
- EXPECT_FALSE(File::Exists(kPayloadFileName));
-
- // Create the Clients key since this isn't an actual installer.
- EXPECT_SUCCEEDED(RegKey::CreateKey(kFullAppClientsKeyPath));
- EXPECT_TRUE(RegKey::HasKey(kFullAppClientsKeyPath));
- EXPECT_SUCCEEDED(RegKey::SetValue(kFullAppClientsKeyPath,
- kRegValueProductVersion,
- _T("0.10.69.5")));
-
- __mutexScope(AppManager::Instance()->GetRegistryStableStateLock());
- EXPECT_SUCCEEDED(im_->InstallApp(NULL,
- kAppGuid,
- cmd_exe_path_,
- arguments,
- _T(""), // Installer data.
- kLanguageEnglish,
- &result_info_));
-
- EXPECT_EQ(INSTALLER_RESULT_SUCCESS, result_info_.type);
- EXPECT_EQ(S_OK, result_info_.code);
- EXPECT_TRUE(result_info_.text.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- // EXPECT_SUCCEEDED(
- // im_->CheckApplicationRegistration(kAppGuid, _T("0.9.70.1"), false));
-
- EXPECT_TRUE(File::Exists(kPayloadFileName));
- EXPECT_SUCCEEDED(File::Remove(kPayloadFileName));
-}
-
-TEST_F(InstallerWrapperUserTest,
- InstallApp_ExeInstallerReturnsNonZeroExitCode) {
- const TCHAR kCommandToExecute[] = _T("exit 1");
-
- CString arguments;
- arguments.Format(kExecuteCommandAndTerminateSwitch, kCommandToExecute);
-
- // Create the Clients key since this isn't an actual installer.
- ASSERT_SUCCEEDED(RegKey::CreateKey(kFullAppClientsKeyPath));
- ASSERT_TRUE(RegKey::HasKey(kFullAppClientsKeyPath));
- ASSERT_SUCCEEDED(RegKey::SetValue(kFullAppClientsKeyPath,
- kRegValueProductVersion,
- _T("0.10.69.5")));
-
- __mutexScope(AppManager::Instance()->GetRegistryStableStateLock());
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_FAILED,
- im_->InstallApp(NULL,
- kAppGuid,
- cmd_exe_path_,
- arguments,
- _T(""), // Installer data.
- kLanguageEnglish,
- &result_info_));
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_OTHER, result_info_.type);
- EXPECT_EQ(1, result_info_.code);
- EXPECT_STREQ(_T("The installer encountered error 1."), result_info_.text);
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-}
-
-/* TODO(omaha): Figure out a way to perform this test.
- ClearInstallerResultApiValues clears the result values it sets.
- TODO(omaha): Add another test that reports an error in using registry API.
-// Also tests that the launch cmd is set.
-TEST_F(InstallerWrapperUserTest,
- InstallApp_ExeInstallerReturnsNonZeroExitCode_InstallerResultSuccess) {
- const TCHAR kCommandToExecute[] = _T("exit 1");
-
- CString arguments;
- arguments.Format(kExecuteCommandAndTerminateSwitch, kCommandToExecute);
-
- // Create the Clients key since this isn't an actual installer.
- ASSERT_SUCCEEDED(RegKey::CreateKey(kFullAppClientsKeyPath));
- ASSERT_TRUE(RegKey::HasKey(kFullAppClientsKeyPath));
- ASSERT_SUCCEEDED(RegKey::SetValue(kFullAppClientsKeyPath,
- kRegValueProductVersion,
- _T("0.10.69.5")));
- SetupInstallerResultRegistry(kAppId,
- true, kResultSuccess,
- false, 0,
- false, _T(""),
- true, kLaunchCmdLine);
-
- __mutexScope(AppManager::Instance()->GetRegistryStableStateLock());
- EXPECT_SUCCEEDED(im_->InstallApp(kAppGuid,
- cmd_exe_path_,
- arguments,
- _T(""), // Installer data.
- &result_info_));
-
- EXPECT_EQ(INSTALLER_RESULT_SUCCESS, result_info_.type);
- EXPECT_EQ(1, result_info_.code);
- EXPECT_TRUE(result_info_.text.IsEmpty());
- EXPECT_STREQ(kLaunchCmdLine, result_info_.post_install_launch_command_line);
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_LAUNCH_COMMAND,
- result_info_.post_install_action);
-
- EXPECT_SUCCEEDED(
- im_->CheckApplicationRegistration(kAppGuid, _T("0.9.70.1"), false));
-
- VerifyLastRegistryValues(kAppId,
- true, kResultSuccess,
- false, 0,
- false, _T(""),
- true, kLaunchCmdLine);
-}
-*/
-
-TEST_F(InstallerWrapperMachineTest, InstallApp_MsiInstallerSucceeds) {
- if (!vista_util::IsUserAdmin()) {
- std::wcout << _T("\tTest did not run because the user is not an admin.")
- << std::endl;
- return;
- }
- // We can't fake the registry keys because we are interacting with a real
- // installer.
- RestoreRegistryHives();
-
- AdjustMsiTries(im_.get());
-
- CString installer_full_path(
- ConcatenatePath(app_util::GetCurrentModuleDirectory(),
- kSetupFooV1RelativeLocation));
- ASSERT_TRUE(File::Exists(installer_full_path));
-
- CString installer_log_full_path;
- installer_log_full_path.Format(kMsiLogFormat, installer_full_path);
-
- ASSERT_SUCCEEDED(File::Remove(installer_log_full_path));
- ASSERT_FALSE(File::Exists(installer_log_full_path));
-
- RegKey::DeleteKey(kFullFooAppClientKeyPath);
- ASSERT_FALSE(RegKey::HasKey(kFullFooAppClientKeyPath));
- RegKey::DeleteKey(kFullFooAppClientStateKeyPath);
- ASSERT_FALSE(RegKey::HasKey(kFullFooAppClientStateKeyPath));
-
- __mutexScope(AppManager::Instance()->GetRegistryStableStateLock());
- EXPECT_SUCCEEDED(im_->InstallApp(NULL,
- StringToGuid(kFooGuid),
- installer_full_path,
- _T(""), // Arguments.
- _T(""), // Installer data.
- kLanguageEnglish,
- &result_info_));
-
- EXPECT_EQ(INSTALLER_RESULT_SUCCESS, result_info_.type);
- EXPECT_EQ(S_OK, result_info_.code);
- EXPECT_TRUE(result_info_.text.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- EXPECT_TRUE(File::Exists(installer_log_full_path));
-
- EXPECT_TRUE(RegKey::HasKey(kFullFooAppClientKeyPath));
- EXPECT_FALSE(RegKey::HasKey(kFullFooAppClientStateKeyPath));
- // Verify the installer did not write a value that is to be written only in
- // the presence of an MSI property that was not specified.
- EXPECT_FALSE(RegKey::HasValue(kFullFooAppClientKeyPath,
- kFooInstallerBarValueName));
- // EXPECT_SUCCEEDED(im_->CheckApplicationRegistration(
- // StringToGuid(kFooGuid), _T("0.9.70.1"), false));
-
- UninstallTestMsi(installer_full_path);
-
- EXPECT_FALSE(RegKey::HasKey(kFullFooAppClientKeyPath));
- EXPECT_SUCCEEDED(RegKey::DeleteKey(kFullFooAppClientKeyPath));
-}
-
-TEST_F(InstallerWrapperMachineTest,
- InstallApp_MsiInstallerWithArgumentSucceeds) {
- if (!vista_util::IsUserAdmin()) {
- std::wcout << _T("\tTest did not run because the user is not an admin.")
- << std::endl;
- return;
- }
-
- // We can't fake the registry keys because we are interacting with a real
- // installer.
- RestoreRegistryHives();
-
- AdjustMsiTries(im_.get());
-
- CString installer_full_path(
- ConcatenatePath(app_util::GetCurrentModuleDirectory(),
- kSetupFooV1RelativeLocation));
- ASSERT_TRUE(File::Exists(installer_full_path));
-
- CString installer_log_full_path;
- installer_log_full_path.Format(kMsiLogFormat, installer_full_path);
-
- ASSERT_SUCCEEDED(File::Remove(installer_log_full_path));
- ASSERT_FALSE(File::Exists(installer_log_full_path));
-
- RegKey::DeleteKey(kFullFooAppClientKeyPath);
- ASSERT_FALSE(RegKey::HasKey(kFullFooAppClientKeyPath));
- RegKey::DeleteKey(kFullFooAppClientStateKeyPath);
- ASSERT_FALSE(RegKey::HasKey(kFullFooAppClientStateKeyPath));
-
- __mutexScope(AppManager::Instance()->GetRegistryStableStateLock());
- EXPECT_SUCCEEDED(im_->InstallApp(NULL,
- StringToGuid(kFooGuid),
- installer_full_path,
- kFooInstallerBarPropertyArg,
- _T(""), // Installer data.
- kLanguageEnglish,
- &result_info_));
-
- EXPECT_EQ(INSTALLER_RESULT_SUCCESS, result_info_.type);
- EXPECT_EQ(S_OK, result_info_.code);
- EXPECT_TRUE(result_info_.text.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- EXPECT_TRUE(File::Exists(installer_log_full_path));
-
- EXPECT_TRUE(RegKey::HasKey(kFullFooAppClientKeyPath));
- EXPECT_FALSE(RegKey::HasKey(kFullFooAppClientStateKeyPath));
- EXPECT_TRUE(RegKey::HasValue(kFullFooAppClientKeyPath,
- kFooInstallerBarValueName));
- DWORD barprop_value = 0;
- EXPECT_SUCCEEDED(RegKey::GetValue(kFullFooAppClientKeyPath,
- kFooInstallerBarValueName,
- &barprop_value));
- EXPECT_EQ(7, barprop_value);
-
- // EXPECT_SUCCEEDED(im_->CheckApplicationRegistration(
- // StringToGuid(kFooGuid), _T("0.9.70.1"), false));
-
- UninstallTestMsi(installer_full_path);
-
- EXPECT_FALSE(RegKey::HasKey(kFullFooAppClientKeyPath));
- EXPECT_SUCCEEDED(RegKey::DeleteKey(kFullFooAppClientKeyPath));
-}
-
-// The use of kGoogleUpdateAppId is the key to this test.
-// Note that the version is not changed - this is the normal self-update case.
-TEST_F(InstallerWrapperUserTest, InstallApp_UpdateOmahaSucceeds) {
- CString arguments;
- arguments.Format(kExecuteCommandAndTerminateSwitch, _T(""));
-
- const CString kExistingVersion(_T("0.9.69.5"));
-
- // Because we don't actually run the Omaha installer, we need to make sure
- // its Clients key and pv value exist to avoid an error.
- ASSERT_SUCCEEDED(RegKey::CreateKey(USER_REG_CLIENTS_GOOPDATE));
- ASSERT_TRUE(RegKey::HasKey(USER_REG_CLIENTS_GOOPDATE));
- ASSERT_SUCCEEDED(RegKey::SetValue(USER_REG_CLIENTS_GOOPDATE,
- kRegValueProductVersion,
- kExistingVersion));
-
- __mutexScope(AppManager::Instance()->GetRegistryStableStateLock());
- EXPECT_SUCCEEDED(im_->InstallApp(NULL,
- kGoopdateGuid,
- cmd_exe_path_,
- arguments,
- _T(""), // Installer data.
- kLanguageEnglish,
- &result_info_));
-
- EXPECT_EQ(INSTALLER_RESULT_SUCCESS, result_info_.type);
- EXPECT_EQ(S_OK, result_info_.code);
- EXPECT_TRUE(result_info_.text.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- EXPECT_TRUE(RegKey::HasKey(USER_REG_CLIENTS_GOOPDATE));
- CString version;
- EXPECT_SUCCEEDED(RegKey::GetValue(USER_REG_CLIENTS_GOOPDATE,
- kRegValueProductVersion,
- &version));
- EXPECT_STREQ(kExistingVersion, version);
-
- // Do not call CheckApplicationRegistration for Omaha.
-}
-
-// The main purpose of this test is to ensure that self-updates don't fail if
-// Omaha's Clients key doesn't exist for some reason.
-TEST_F(InstallerWrapperUserTest,
- InstallApp_UpdateOmahaSucceedsWhenClientsKeyAbsent) {
- CString arguments;
- arguments.Format(kExecuteCommandAndTerminateSwitch, _T(""));
-
- const CString kExistingVersion(_T("0.9.69.5"));
-
- __mutexScope(AppManager::Instance()->GetRegistryStableStateLock());
- EXPECT_SUCCEEDED(im_->InstallApp(NULL,
- kGoopdateGuid,
- cmd_exe_path_,
- arguments,
- _T(""), // Installer data.
- kLanguageEnglish,
- &result_info_));
-
- EXPECT_EQ(INSTALLER_RESULT_SUCCESS, result_info_.type);
- EXPECT_EQ(S_OK, result_info_.code);
- EXPECT_TRUE(result_info_.text.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- EXPECT_FALSE(RegKey::HasKey(USER_REG_CLIENTS_GOOPDATE));
-
- // Do not call CheckApplicationRegistration for Omaha.
-}
-
-TEST_F(InstallerWrapperUserTest, InstallApp_InstallerDoesNotWriteClientsKey) {
- CString arguments;
- arguments.Format(kExecuteCommandAndTerminateSwitch, _T(""));
-
- __mutexScope(AppManager::Instance()->GetRegistryStableStateLock());
- EXPECT_SUCCEEDED(im_->InstallApp(NULL,
- kAppGuid,
- cmd_exe_path_,
- arguments,
- _T(""), // Installer data.
- kLanguageEnglish,
- &result_info_));
-
- EXPECT_FALSE(RegKey::HasKey(kFullAppClientsKeyPath));
- EXPECT_FALSE(RegKey::HasKey(kFullAppClientStateKeyPath));
-
- EXPECT_EQ(INSTALLER_RESULT_SUCCESS, result_info_.type);
- EXPECT_EQ(S_OK, result_info_.code);
- EXPECT_TRUE(result_info_.text.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- // EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_DID_NOT_WRITE_CLIENTS_KEY,
- // im_->CheckApplicationRegistration(kAppGuid, _T(""), true));
-}
-
-TEST_F(InstallerWrapperUserTest,
- InstallApp_InstallerFailureMsiFileDoesNotExist) {
- CPath msi_path(app_util::GetTempDir());
- msi_path.Append(_T("foo.msi"));
- const CString log_path = msi_path + _T(".log");
-
- AdjustMsiTries(im_.get());
-
- ASSERT_SUCCEEDED(File::Remove(log_path));
- ASSERT_FALSE(File::Exists(log_path));
-
- __mutexScope(AppManager::Instance()->GetRegistryStableStateLock());
- EXPECT_EQ(GOOPDATEINSTALL_E_INSTALLER_FAILED,
- im_->InstallApp(NULL,
- kAppGuid,
- msi_path,
- _T(""), // Arguments.
- _T(""), // Installer data.
- kLanguageEnglish,
- &result_info_));
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_MSI, result_info_.type);
- EXPECT_EQ(ERROR_INSTALL_PACKAGE_OPEN_FAILED, result_info_.code);
- EXPECT_STREQ(kError1619MessagePrefix,
- result_info_.text.Left(kError1619MessagePrefixLength));
- VerifyStringIsMsiPackageOpenFailedString(
- result_info_.text.Mid(kError1619MessagePrefixLength));
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- // msiexec creates an empty log file.
- EXPECT_TRUE(File::Exists(log_path));
- EXPECT_SUCCEEDED(File::Remove(log_path));
-
- EXPECT_FALSE(RegKey::HasKey(kFullAppClientsKeyPath));
- EXPECT_FALSE(RegKey::HasKey(kFullAppClientStateKeyPath));
-}
-
-// Simulates the MSI busy error by having an exe installer return the error
-// as its exit code and specifying MSI error using Installer Result API.
-// Assumes reg.exe is in the path.
-TEST_F(InstallerWrapperUserTest, InstallApp_MsiIsBusy_NoRetries) {
- CString commands;
- commands.Format(kExecuteTwoCommandsFormat,
- set_installer_result_type_msi_error_cmd_,
- kMsiInstallerBusyExitCodeCmd);
-
- CString arguments;
- arguments.Format(kExecuteCommandAndTerminateSwitch, commands);
-
- LowResTimer install_timer(true);
-
- __mutexScope(AppManager::Instance()->GetRegistryStableStateLock());
- EXPECT_EQ(GOOPDATEINSTALL_E_MSI_INSTALL_ALREADY_RUNNING,
- im_->InstallApp(NULL,
- kAppGuid,
- cmd_exe_path_,
- arguments,
- _T(""), // Installer data.
- kLanguageEnglish,
- &result_info_));
-
- EXPECT_GT(2, install_timer.GetSeconds()); // Check Omaha did not retry.
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_MSI, result_info_.type);
- EXPECT_EQ(ERROR_INSTALL_ALREADY_RUNNING, result_info_.code);
- EXPECT_STREQ(kError1618MessagePrefix,
- result_info_.text.Left(kError1618MessagePrefixLength));
- VerifyStringIsMsiBusyString(
- result_info_.text.Mid(kError1618MessagePrefixLength));
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-}
-
-// This test takes at least 5 seconds, so it is not run all the time.
-TEST_F(InstallerWrapperUserTest, InstallApp_MsiIsBusy_TwoTries) {
- if (!ShouldRunLargeTest()) {
- return;
- }
-
- CString commands;
- commands.Format(kExecuteTwoCommandsFormat,
- set_installer_result_type_msi_error_cmd_,
- kMsiInstallerBusyExitCodeCmd);
-
- CString arguments;
- arguments.Format(kExecuteCommandAndTerminateSwitch, commands);
-
- im_->set_num_tries_when_msi_busy(2);
-
- LowResTimer install_timer(true);
-
- __mutexScope(AppManager::Instance()->GetRegistryStableStateLock());
- EXPECT_EQ(GOOPDATEINSTALL_E_MSI_INSTALL_ALREADY_RUNNING,
- im_->InstallApp(NULL,
- kAppGuid,
- cmd_exe_path_,
- arguments,
- _T(""), // Installer data.
- kLanguageEnglish,
- &result_info_));
-
- EXPECT_LE(5, install_timer.GetSeconds()); // Check Omaha did retry.
- EXPECT_GT(10, install_timer.GetSeconds());
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_MSI, result_info_.type);
- EXPECT_EQ(ERROR_INSTALL_ALREADY_RUNNING, result_info_.code);
- EXPECT_STREQ(kError1618MessagePrefix,
- result_info_.text.Left(kError1618MessagePrefixLength));
- VerifyStringIsMsiBusyString(
- result_info_.text.Mid(kError1618MessagePrefixLength));
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-}
-
-// This test uses cmd.exe as an installer that leaves the payload files.
-TEST_F(InstallerWrapperUserTest, InstallApp_InstallMultipleApps) {
- const TCHAR kPayloadFileName1[] = _T("exe_payload1.txt");
- const TCHAR kPayloadFileName2[] = _T("exe_payload2.txt");
- const TCHAR kCommandToExecute[] = _T("echo \"hi\" > %s");
-
- CString full_command_to_execute;
- full_command_to_execute.Format(kCommandToExecute, kPayloadFileName1);
- CString arguments1;
- arguments1.Format(kExecuteCommandAndTerminateSwitch, full_command_to_execute);
-
- full_command_to_execute.Format(kCommandToExecute, kPayloadFileName2);
- CString arguments2;
- arguments2.Format(kExecuteCommandAndTerminateSwitch, full_command_to_execute);
-
- EXPECT_SUCCEEDED(File::Remove(kPayloadFileName1));
- EXPECT_FALSE(File::Exists(kPayloadFileName1));
- EXPECT_SUCCEEDED(File::Remove(kPayloadFileName2));
- EXPECT_FALSE(File::Exists(kPayloadFileName2));
-
- // Create the Clients key since this isn't an actual installer.
- EXPECT_SUCCEEDED(RegKey::CreateKey(kFullAppClientsKeyPath));
- EXPECT_TRUE(RegKey::HasKey(kFullAppClientsKeyPath));
- EXPECT_SUCCEEDED(RegKey::SetValue(kFullAppClientsKeyPath,
- kRegValueProductVersion,
- _T("0.10.69.5")));
-
- __mutexScope(AppManager::Instance()->GetRegistryStableStateLock());
-
- EXPECT_SUCCEEDED(im_->InstallApp(NULL,
- kAppGuid,
- cmd_exe_path_,
- arguments1,
- _T(""), // Installer data.
- kLanguageEnglish,
- &result_info_));
-
- EXPECT_EQ(INSTALLER_RESULT_SUCCESS, result_info_.type);
- EXPECT_EQ(S_OK, result_info_.code);
- EXPECT_TRUE(result_info_.text.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- // EXPECT_SUCCEEDED(
- // im_->CheckApplicationRegistration(kAppGuid, _T("0.9.70.1"), false));
-
- EXPECT_TRUE(File::Exists(kPayloadFileName1));
- EXPECT_SUCCEEDED(File::Remove(kPayloadFileName1));
-
- // Run the second installer.
-
- result_info_.type = INSTALLER_RESULT_UNKNOWN;
- result_info_.code = kInitialErrorValue;
-
- EXPECT_SUCCEEDED(im_->InstallApp(NULL,
- kAppGuid,
- cmd_exe_path_,
- arguments2,
- _T(""), // Installer data.
- kLanguageEnglish,
- &result_info_));
-
- EXPECT_EQ(INSTALLER_RESULT_SUCCESS, result_info_.type);
- EXPECT_EQ(S_OK, result_info_.code);
- EXPECT_TRUE(result_info_.text.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- // EXPECT_SUCCEEDED(
- // im_->CheckApplicationRegistration(kAppGuid, _T("0.9.70.1"), false));
-
- EXPECT_TRUE(File::Exists(kPayloadFileName2));
- EXPECT_SUCCEEDED(File::Remove(kPayloadFileName2));
-}
-
-//
-// GetInstallerResultHelper tests
-//
-
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_NoRegistry_MSI_ZeroExitCode) {
- CallGetInstallerResultHelper(kAppGuid, kMsi, 0, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_SUCCESS, result_info_.type);
- EXPECT_EQ(0, result_info_.code);
- EXPECT_TRUE(result_info_.text.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- VerifyNoLastRegistryValues(kAppId);
-}
-
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_NoRegistry_MSI_NonZeroExitCode) {
- CallGetInstallerResultHelper(kAppGuid, kMsi, 1603, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_MSI, result_info_.type);
- EXPECT_EQ(1603, result_info_.code);
- EXPECT_STREQ(kError1603Text, result_info_.text);
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- VerifyNoLastRegistryValues(kAppId);
-}
-
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_NoRegistry_EXE_ZeroExitCode) {
- CallGetInstallerResultHelper(kAppGuid, kOther, 0, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_SUCCESS, result_info_.type);
- EXPECT_EQ(0, result_info_.code);
- EXPECT_TRUE(result_info_.text.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- VerifyNoLastRegistryValues(kAppId);
-}
-
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_NoRegistry_EXE_NonZeroExitCode_SmallNumber) {
- CallGetInstallerResultHelper(kAppGuid, kOther, 8, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_OTHER, result_info_.type);
- EXPECT_EQ(8, result_info_.code);
- EXPECT_STREQ(_T("The installer encountered error 8."), result_info_.text);
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- VerifyNoLastRegistryValues(kAppId);
-}
-
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_NoRegistry_EXE_NonZeroExitCode_HRESULTFailure) {
- CallGetInstallerResultHelper(kAppGuid, kOther, 0x80004005, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_OTHER, result_info_.type);
- EXPECT_EQ(0x80004005, result_info_.code);
- EXPECT_STREQ(_T("The installer encountered error 0x80004005."),
- result_info_.text);
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- VerifyNoLastRegistryValues(kAppId);
-}
-
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_ExitCode_MSI) {
- SetupInstallerResultRegistry(kAppId,
- true, kResultExitCode,
- false, 0,
- false, 0,
- false, _T(""),
- false, _T(""));
-
- CallGetInstallerResultHelper(kAppGuid, kMsi, 1603, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_MSI, result_info_.type);
- EXPECT_EQ(1603, result_info_.code);
- EXPECT_STREQ(kError1603Text, result_info_.text);
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- VerifyLastRegistryValues(kAppId,
- true, kResultExitCode,
- false, 0,
- false, 0,
- false, _T(""),
- false, _T(""));
-}
-
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_NoRegistry_MSI_RebootRequired) {
- CallGetInstallerResultHelper(kAppGuid, kMsi, ERROR_SUCCESS_REBOOT_REQUIRED,
- &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_SUCCESS, result_info_.type);
- EXPECT_EQ(0, result_info_.code);
- EXPECT_TRUE(result_info_.text.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_REBOOT, result_info_.post_install_action);
-
- VerifyNoLastRegistryValues(kAppId);
-}
-
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_SystemError_EXE_RebootRequired) {
- SetupInstallerResultRegistry(kAppId,
- true, kResultFailedSystemError,
- true, ERROR_SUCCESS_REBOOT_REQUIRED,
- false, 0,
- false, _T(""),
- true, kLaunchCmdLine);
-
- CallGetInstallerResultHelper(kAppGuid, kOther, 1, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_SUCCESS, result_info_.type);
- EXPECT_EQ(0, result_info_.code);
- EXPECT_TRUE(result_info_.text.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_REBOOT, result_info_.post_install_action);
-
- VerifyLastRegistryValues(kAppId,
- true, kResultFailedSystemError,
- true, ERROR_SUCCESS_REBOOT_REQUIRED,
- false, 0,
- false, _T(""),
- true, kLaunchCmdLine);
-}
-
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_CustomError_ShouldNotReboot) {
- SetupInstallerResultRegistry(kAppId,
- true, kResultFailedCustomError,
- true, ERROR_SUCCESS_REBOOT_REQUIRED,
- false, 0,
- false, _T(""),
- false, _T(""));
-
- CallGetInstallerResultHelper(kAppGuid, kMsi, 0, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_OTHER, result_info_.type);
- EXPECT_EQ(ERROR_SUCCESS_REBOOT_REQUIRED, result_info_.code);
- EXPECT_STREQ(_T("The installer encountered error 3010."), result_info_.text);
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-}
-
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_Success_NoErrorCode) {
- SetupInstallerResultRegistry(kAppId,
- true, kResultSuccess,
- false, 0,
- false, 0,
- false, _T(""),
- false, _T(""));
-
- CallGetInstallerResultHelper(kAppGuid, kOther, 99, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_SUCCESS, result_info_.type);
- EXPECT_EQ(99, result_info_.code);
- EXPECT_TRUE(result_info_.text.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- VerifyLastRegistryValues(kAppId,
- true, kResultSuccess,
- false, 0,
- false, 0,
- false, _T(""),
- false, _T(""));
-}
-
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_Success_AllValues) {
- SetupInstallerResultRegistry(kAppId,
- true, kResultSuccess,
- true, 555,
- false, 0,
- true, _T("an ignored error"),
- true, kLaunchCmdLine);
-
- CallGetInstallerResultHelper(kAppGuid, kOther, 99, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_SUCCESS, result_info_.type);
- EXPECT_EQ(555, result_info_.code) <<
- _T("InstallerError overwrites exit code.");
- EXPECT_FALSE(result_info_.text.IsEmpty()) <<
- _T("UIString is ignored for Success.");
- EXPECT_STREQ(kLaunchCmdLine, result_info_.post_install_launch_command_line);
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_LAUNCH_COMMAND,
- result_info_.post_install_action);
-
- VerifyLastRegistryValues(kAppId,
- true, kResultSuccess,
- true, 555,
- false, 0,
- true, _T("an ignored error"),
- true, kLaunchCmdLine);
-}
-
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_LaunchCmdOnly_MSI_ZeroExitCode) {
- SetupInstallerResultRegistry(kAppId,
- false, 0,
- false, 0,
- false, 0,
- false, _T(""),
- true, kLaunchCmdLine);
-
- CallGetInstallerResultHelper(kAppGuid, kMsi, 0, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_SUCCESS, result_info_.type);
- EXPECT_EQ(0, result_info_.code);
- EXPECT_TRUE(result_info_.text.IsEmpty());
- EXPECT_STREQ(kLaunchCmdLine, result_info_.post_install_launch_command_line);
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_LAUNCH_COMMAND,
- result_info_.post_install_action);
-
- VerifyLastRegistryValues(kAppId,
- false, 0,
- false, 0,
- false, 0,
- false, _T(""),
- true, kLaunchCmdLine);
-}
-
-// Exit code is used when no error code is present. It's interpreted as a system
-// error even though the installer is not an MSI.
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_Failed_NoErrorCodeOrUiString) {
- SetupInstallerResultRegistry(kAppId,
- true, kResultFailedCustomError,
- false, 0,
- false, 0,
- false, _T(""),
- false, _T(""));
-
- CallGetInstallerResultHelper(kAppGuid, kOther, 8, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_OTHER, result_info_.type);
- EXPECT_EQ(8, result_info_.code);
- EXPECT_STREQ(_T("The installer encountered error 8."), result_info_.text);
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- VerifyLastRegistryValues(kAppId,
- true, kResultFailedCustomError,
- false, 0,
- false, 0,
- false, _T(""),
- false, _T(""));
-}
-
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_Failed_WithErrorCode) {
- SetupInstallerResultRegistry(kAppId,
- true, kResultFailedCustomError,
- true, 8,
- false, 0,
- false, _T(""),
- false, _T(""));
-
- CallGetInstallerResultHelper(kAppGuid, kOther, 1618, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_OTHER, result_info_.type);
- EXPECT_EQ(8, result_info_.code);
- EXPECT_STREQ(_T("The installer encountered error 8."), result_info_.text);
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- VerifyLastRegistryValues(kAppId,
- true, kResultFailedCustomError,
- true, 8,
- false, 0,
- false, _T(""),
- false, _T(""));
-}
-
-// This test shows that command line is read and
-// POST_INSTALL_ACTION_LAUNCH_COMMAND is set.
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_Failed_AllValues) {
- const DWORD kInstallerErrorValue = 8;
- const TCHAR* const kUiString = _T("a message from the installer");
-
- SetupInstallerResultRegistry(kAppId,
- true, kResultFailedCustomError,
- true, kInstallerErrorValue,
- false, 0,
- true, kUiString,
- true, kLaunchCmdLine);
-
- CallGetInstallerResultHelper(kAppGuid, kOther, 1618, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_OTHER, result_info_.type);
- EXPECT_EQ(kInstallerErrorValue, result_info_.code);
- EXPECT_STREQ(kUiString, result_info_.text);
- EXPECT_STREQ(kLaunchCmdLine, result_info_.post_install_launch_command_line);
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_LAUNCH_COMMAND,
- result_info_.post_install_action);
-
- VerifyLastRegistryValues(kAppId,
- true, kResultFailedCustomError,
- true, kInstallerErrorValue,
- false, 0,
- true, kUiString,
- true, kLaunchCmdLine);
-}
-
-// Exit code is used and interpreted as MSI error when no error code present.
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_FailedMsiError_NoErrorCode) {
- SetupInstallerResultRegistry(kAppId,
- true, kResultFailedMsiError,
- false, 0,
- false, 0,
- false, _T(""),
- false, _T(""));
-
- CallGetInstallerResultHelper(kAppGuid, kOther, 1603, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_MSI, result_info_.type);
- EXPECT_EQ(1603, result_info_.code);
- EXPECT_STREQ(kError1603Text, result_info_.text);
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- VerifyLastRegistryValues(kAppId,
- true, kResultFailedMsiError,
- false, 0,
- false, 0,
- false, _T(""),
- false, _T(""));
-}
-
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_FailedMsiError_WithErrorCode) {
- const DWORD kInstallerErrorValue = 1603;
-
- SetupInstallerResultRegistry(kAppId,
- true, kResultFailedMsiError,
- true, kInstallerErrorValue,
- false, 0,
- false, _T(""),
- false, _T(""));
-
- CallGetInstallerResultHelper(kAppGuid, kOther, 1618, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_MSI, result_info_.type);
- EXPECT_EQ(kInstallerErrorValue, result_info_.code);
- EXPECT_STREQ(kError1603Text, result_info_.text);
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- VerifyLastRegistryValues(kAppId,
- true, kResultFailedMsiError,
- true, kInstallerErrorValue,
- false, 0,
- false, _T(""),
- false, _T(""));
-}
-
-// This test shows that command line is read and
-// POST_INSTALL_ACTION_LAUNCH_COMMAND is set.
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_FailedMsiError_AllValues) {
- const DWORD kInstallerErrorValue = 1603;
-
- SetupInstallerResultRegistry(kAppId,
- true, kResultFailedMsiError,
- true, kInstallerErrorValue,
- false, 0,
- true, _T("an ignored error"),
- true, kLaunchCmdLine);
-
- CallGetInstallerResultHelper(kAppGuid, kOther, 1618, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_MSI, result_info_.type);
- EXPECT_EQ(kInstallerErrorValue, result_info_.code);
- EXPECT_STREQ(kError1603Text, result_info_.text) << _T("UIString is ignored.");
- EXPECT_STREQ(kLaunchCmdLine, result_info_.post_install_launch_command_line);
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_LAUNCH_COMMAND,
- result_info_.post_install_action);
-
- VerifyLastRegistryValues(kAppId,
- true, kResultFailedMsiError,
- true, kInstallerErrorValue,
- false, 0,
- true, _T("an ignored error"),
- true, kLaunchCmdLine);
-}
-
-// Exit code is used and interpreted as system error when no error code present.
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_FailedSystemError_NoErrorCode) {
- SetupInstallerResultRegistry(kAppId,
- true, kResultFailedSystemError,
- false, 0,
- false, 0,
- false, _T(""),
- false, _T(""));
-
- CallGetInstallerResultHelper(kAppGuid, kOther, 1603, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_SYSTEM, result_info_.type);
- EXPECT_EQ(1603, result_info_.code);
- EXPECT_STREQ(kError1603Text, result_info_.text);
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- VerifyLastRegistryValues(kAppId,
- true, kResultFailedSystemError,
- false, 0,
- false, 0,
- false, _T(""),
- false, _T(""));
-}
-
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_FailedSystemError_WithErrorCode) {
- const DWORD kInstallerErrorValue = 1603;
-
- SetupInstallerResultRegistry(kAppId,
- true, kResultFailedSystemError,
- true, kInstallerErrorValue,
- false, 0,
- false, _T(""),
- false, _T(""));
-
- CallGetInstallerResultHelper(kAppGuid, kOther, 1618, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_SYSTEM, result_info_.type);
- EXPECT_EQ(kInstallerErrorValue, result_info_.code);
- EXPECT_STREQ(kError1603Text, result_info_.text);
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- VerifyLastRegistryValues(kAppId,
- true, kResultFailedSystemError,
- true, kInstallerErrorValue,
- false, 0,
- false, _T(""),
- false, _T(""));
-}
-
-// INSTALLER_RESULT_FAILED_SYSTEM_ERROR supports values beyond the basic
-// "System Error Codes" and their HRESULT equivalents.
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_FailedSystemError_WithHRESULTSystemError) {
- const DWORD kInstallerErrorValue = 0x800B010F;
-
- SetupInstallerResultRegistry(kAppId,
- true, kResultFailedSystemError,
- true, kInstallerErrorValue,
- false, 0,
- false, _T(""),
- false, _T(""));
-
- CallGetInstallerResultHelper(kAppGuid, kOther, 1618, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_SYSTEM, result_info_.type);
- EXPECT_EQ(kInstallerErrorValue, result_info_.code);
- EXPECT_STREQ(kError0x800B010FText, result_info_.text);
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- VerifyLastRegistryValues(kAppId,
- true, kResultFailedSystemError,
- true, kInstallerErrorValue,
- false, 0,
- false, _T(""),
- false, _T(""));
-}
-
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_FailedSystemError_WithUnrecognizedError) {
- const DWORD kInstallerErrorValue = 0x80040200;
-
- SetupInstallerResultRegistry(kAppId,
- true, kResultFailedSystemError,
- true, kInstallerErrorValue,
- false, 0,
- false, _T(""),
- false, _T(""));
-
- CallGetInstallerResultHelper(kAppGuid, kOther, 1618, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_SYSTEM, result_info_.type);
- EXPECT_EQ(kInstallerErrorValue, result_info_.code);
- EXPECT_STREQ(_T("The installer encountered error 0x80040200."),
- result_info_.text);
- EXPECT_TRUE(result_info_.post_install_launch_command_line.IsEmpty());
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_DEFAULT, result_info_.post_install_action);
-
- VerifyLastRegistryValues(kAppId,
- true, kResultFailedSystemError,
- true, kInstallerErrorValue,
- false, 0,
- false, _T(""),
- false, _T(""));
-}
-
-// This test shows that command line is read and
-// POST_INSTALL_ACTION_LAUNCH_COMMAND is set.
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_FailedSystemError_AllValues) {
- const DWORD kInstallerErrorValue = 1603;
-
- SetupInstallerResultRegistry(kAppId,
- true, kResultFailedSystemError,
- true, kInstallerErrorValue,
- false, 0,
- true, _T("an ignored error"),
- true, kLaunchCmdLine);
-
- CallGetInstallerResultHelper(kAppGuid, kOther, 1618, &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_SYSTEM, result_info_.type);
- EXPECT_EQ(kInstallerErrorValue, result_info_.code);
- EXPECT_STREQ(kError1603Text, result_info_.text) << _T("UIString is ignored.");
- EXPECT_STREQ(kLaunchCmdLine, result_info_.post_install_launch_command_line);
- EXPECT_TRUE(result_info_.post_install_url.IsEmpty());
- EXPECT_EQ(POST_INSTALL_ACTION_LAUNCH_COMMAND,
- result_info_.post_install_action);
-
- VerifyLastRegistryValues(kAppId,
- true, kResultFailedSystemError,
- true, kInstallerErrorValue,
- false, 0,
- true, _T("an ignored error"),
- true, kLaunchCmdLine);
-}
-
-TEST_F(InstallerWrapperUserGetInstallerResultHelperTest,
- GetInstallerResultHelper_ExtraCode1) {
- const DWORD kInstallerErrorValue = 10;
- const DWORD kInstallerExtraCode1 = 0xabcd;
-
- SetupInstallerResultRegistry(kAppId,
- true, kResultFailedCustomError,
- true, kInstallerErrorValue,
- true, kInstallerExtraCode1,
- false, _T(""),
- false, _T(""));
-
- CallGetInstallerResultHelper(kAppGuid,
- kOther,
- kInstallerErrorValue,
- &result_info_);
-
- EXPECT_EQ(INSTALLER_RESULT_ERROR_OTHER, result_info_.type);
- EXPECT_EQ(kInstallerErrorValue, result_info_.code);
- EXPECT_EQ(kInstallerExtraCode1, result_info_.extra_code1);
-
- VerifyLastRegistryValues(kAppId,
- true, kResultFailedCustomError,
- true, kInstallerErrorValue,
- true, kInstallerExtraCode1,
- false, _T(""),
- false, _T(""));
-}
-
-// TODO(omaha): Add a machine test.
-
-} // namespace omaha
« no previous file with comments | « goopdate/installer_wrapper.cc ('k') | goopdate/job_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698