blob: 7c29056dc6017d58032f80046d8685a5df4958af [file] [log] [blame]
// 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 <windows.h>
#include <atlpath.h>
#include <atlsecurity.h>
#include <atlstr.h>
#include <map>
#include <vector>
#include "omaha/common/app_util.h"
#include "omaha/common/browser_utils.h"
#include "omaha/common/const_utils.h"
#include "omaha/common/error.h"
#include "omaha/common/file.h"
#include "omaha/common/path.h"
#include "omaha/common/reg_key.h"
#include "omaha/common/scoped_ptr_cotask.h"
#include "omaha/common/string.h"
#include "omaha/common/time.h"
#include "omaha/common/user_info.h"
#include "omaha/common/utils.h"
#include "omaha/common/vistautil.h"
#include "omaha/common/vista_utils.h"
#include "omaha/goopdate/command_line.h"
#include "omaha/goopdate/config_manager.h"
#include "omaha/goopdate/const_goopdate.h"
#include "omaha/goopdate/extra_args_parser.h"
#include "omaha/goopdate/goopdate_utils.h"
#include "omaha/goopdate/goopdate_utils-internal.h"
#include "omaha/testing/resource.h"
#include "omaha/testing/unit_test.h"
namespace omaha {
namespace {
#define DUMMY_CLSID _T("{6FC94136-0D4C-450e-99C2-BCDA72A9C8F0}")
const TCHAR* hkcr_key_name = _T("HKCR\\CLSID\\") DUMMY_CLSID;
const TCHAR* hklm_key_name = _T("HKLM\\Software\\Classes\\CLSID\\")
DUMMY_CLSID;
const TCHAR* hkcu_key_name = _T("HKCU\\Software\\Classes\\CLSID\\")
DUMMY_CLSID;
#define APP_GUID _T("{B7BAF788-9D64-49c3-AFDC-B336AB12F332}")
const TCHAR* const kAppGuid = APP_GUID;
const TCHAR* const kAppMachineClientStatePath =
_T("HKLM\\Software\\Google\\Update\\ClientState\\") APP_GUID;
const TCHAR* const kAppUserClientStatePath =
_T("HKCU\\Software\\Google\\Update\\ClientState\\") APP_GUID;
const TCHAR* const kAppMachineClientStateMediumPath =
_T("HKLM\\Software\\Google\\Update\\ClientStateMedium\\") APP_GUID;
// This should never exist. This contant is only used to verify it is not used.
const TCHAR* const kAppUserClientStateMediumPath =
_T("HKCU\\Software\\Google\\Update\\ClientStateMedium\\") APP_GUID;
// Constants used in the scheduled task tests.
const int kMaxWaitForProcessMs = 60000;
const int kWaitForProcessIntervalMs = 100;
const int kMaxWaitForProcessIterations =
kMaxWaitForProcessMs / kWaitForProcessIntervalMs;
// Verifies that one of the expected OS strings was found in the url.
// Returns the position along with the length of the OS string.
int VerifyOSInUrl(const CString& url, int* length) {
ASSERT1(length);
*length = 0;
// The strings are in descending version order to avoid breaking on a
// substring of the version we are looking for.
const TCHAR* kExpectedOsStrings[] = {_T("6.0&sp=Service%20Pack%201"),
_T("6.0&sp="),
_T("5.2&sp=Service%20Pack%202"),
_T("5.2&sp=Service%20Pack%201"),
_T("5.1&sp=Service%20Pack%203"),
_T("5.1&sp=Service%20Pack%202"),
};
bool found = false;
int this_pos = 0;
for (int i = 0; i < arraysize(kExpectedOsStrings); ++i) {
this_pos = url.Find(kExpectedOsStrings[i]);
if (-1 != this_pos) {
found = true;
*length = _tcslen(kExpectedOsStrings[i]);
break;
}
}
EXPECT_TRUE(found);
return this_pos;
}
} // namespace
namespace goopdate_utils {
namespace internal {
TEST(GoopdateUtilsTest, ScheduledTasks) {
const TCHAR kSchedTestTaskName[] = _T("TestScheduledTask");
const TCHAR kScheduledTaskExecutable[] = _T("netstat.exe");
const TCHAR kScheduledTaskParameters[] = _T("20");
const TCHAR kSchedTestTaskComment[] = _T("Google Test Task");
CString task_path = ConcatenatePath(app_util::GetSystemDir(),
kScheduledTaskExecutable);
// Install/uninstall.
EXPECT_SUCCEEDED(InstallScheduledTask(kSchedTestTaskName,
task_path,
_T(""),
kSchedTestTaskComment,
vista_util::IsUserAdmin(),
vista_util::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,
vista_util::IsUserAdmin(),
vista_util::IsUserAdmin(),
true,
true));
}
// "Upgrade" to a new version, which now has parameters.
EXPECT_SUCCEEDED(InstallScheduledTask(kSchedTestTaskName,
task_path,
kScheduledTaskParameters,
kSchedTestTaskComment,
vista_util::IsUserAdmin(),
vista_util::IsUserAdmin(),
true,
true));
// Start and stop.
EXPECT_SUCCEEDED(StartScheduledTask(kSchedTestTaskName));
HRESULT hr = SCHED_S_TASK_HAS_NOT_RUN;
int tries = 0;
for (tries = 0;
tries < kMaxWaitForProcessIterations && SCHED_S_TASK_RUNNING != hr;
++tries) {
EXPECT_EQ(SCHED_S_TASK_HAS_NOT_RUN, hr); // For debugging test failures.
::Sleep(kWaitForProcessIntervalMs);
hr = GetScheduledTaskStatus(kSchedTestTaskName);
}
EXPECT_EQ(SCHED_S_TASK_RUNNING, hr);
EXPECT_LT(tries, kMaxWaitForProcessIterations) << _T("Loops exhausted.");
std::wcout << _T("\tLine ") << __LINE__ << _T(": Iterations=") << tries
<< std::endl;
// Without a wait in between the start and stop, stop failed intermittently.
::Sleep(500);
EXPECT_SUCCEEDED(StopScheduledTask(kSchedTestTaskName));
hr = SCHED_S_TASK_RUNNING;
for (tries = 0;
tries < kMaxWaitForProcessIterations && SCHED_S_TASK_RUNNING == hr;
++tries) {
::Sleep(kWaitForProcessIntervalMs);
hr = GetScheduledTaskStatus(kSchedTestTaskName);
}
EXPECT_NE(SCHED_S_TASK_RUNNING, hr);
EXPECT_LT(tries, kMaxWaitForProcessIterations) << _T("Loops exhausted.");
std::wcout << _T("\tLine ") << __LINE__ << _T(": Iterations=") << tries
<< std::endl;
EXPECT_EQ(SCHED_S_TASK_READY, hr);
// Finally, uninstall.
EXPECT_SUCCEEDED(UninstallScheduledTask(kSchedTestTaskName));
}
} // namespace internal
static void Cleanup() {
ASSERT_SUCCEEDED(goopdate_utils::RemoveRedirectHKCR());
RegKey::DeleteKey(hkcr_key_name, true);
RegKey::DeleteKey(hklm_key_name, true);
RegKey::DeleteKey(hkcu_key_name, true);
}
static void TestGetBrowserToRestart(BrowserType stamped,
bool found1,
bool killed1,
BrowserType def_browser,
bool found2,
bool killed2,
BrowserType expected) {
TerminateBrowserResult res(found1, killed1);
TerminateBrowserResult def(found2, killed2);
BrowserType type = BROWSER_UNKNOWN;
if (expected == BROWSER_UNKNOWN) {
EXPECT_FALSE(goopdate_utils::GetBrowserToRestart(stamped,
def_browser,
res,
def,
&type))
<< _T("stamped: ") << stamped << _T(" ") << found1 << _T(" ") << killed1
<< _T(" default: ") << def_browser << _T(" ") << found2 << _T(" ")
<< killed2;
} else {
EXPECT_TRUE(goopdate_utils::GetBrowserToRestart(stamped,
def_browser,
res,
def,
&type))
<< _T("stamped: ") << stamped << _T(" ") << found1 << _T(" ") << killed1
<< _T(" default: ") << def_browser << _T(" ") << found2 << _T(" ")
<< killed2;
}
EXPECT_EQ(expected, type)
<< _T("stamped: ") << stamped << _T(" ") << found1 << _T(" ") << killed1
<< _T(" default: ") << def_browser << _T(" ") << found2 << _T(" ")
<< killed2;
}
TEST(GoopdateUtilsTest, GetAppClientsKey) {
const TCHAR kAppGuid[] = _T("{F998D7E0-0CD3-434e-96B9-B8D3A295C3FB}");
EXPECT_STREQ(_T("HKCU\\Software\\Google\\Update\\Clients\\")
_T("{F998D7E0-0CD3-434e-96B9-B8D3A295C3FB}"),
goopdate_utils::GetAppClientsKey(false, kAppGuid));
EXPECT_STREQ(_T("HKLM\\Software\\Google\\Update\\Clients\\")
_T("{F998D7E0-0CD3-434e-96B9-B8D3A295C3FB}"),
goopdate_utils::GetAppClientsKey(true, kAppGuid));
}
TEST(GoopdateUtilsTest, GetAppClientStateKey) {
const TCHAR kAppGuid[] = _T("{F998D7E0-0CD3-434e-96B9-B8D3A295C3FB}");
EXPECT_STREQ(_T("HKCU\\Software\\Google\\Update\\ClientState\\")
_T("{F998D7E0-0CD3-434e-96B9-B8D3A295C3FB}"),
goopdate_utils::GetAppClientStateKey(false, kAppGuid));
EXPECT_STREQ(_T("HKLM\\Software\\Google\\Update\\ClientState\\")
_T("{F998D7E0-0CD3-434e-96B9-B8D3A295C3FB}"),
goopdate_utils::GetAppClientStateKey(true, kAppGuid));
}
// This is an invalid case and causes an assert. Always returns HKLM path.
TEST(GoopdateUtilsTest, GetAppClientStateMediumKey_User) {
const TCHAR kAppGuid[] = _T("{F998D7E0-0CD3-434e-96B9-B8D3A295C3FB}");
ExpectAsserts expect_asserts;
EXPECT_STREQ(_T("HKLM\\Software\\Google\\Update\\ClientStateMedium\\")
_T("{F998D7E0-0CD3-434e-96B9-B8D3A295C3FB}"),
goopdate_utils::GetAppClientStateMediumKey(false, kAppGuid));
}
TEST(GoopdateUtilsTest, GetAppClientStateMediumKey_Machine) {
const TCHAR kAppGuid[] = _T("{F998D7E0-0CD3-434e-96B9-B8D3A295C3FB}");
EXPECT_STREQ(_T("HKLM\\Software\\Google\\Update\\ClientStateMedium\\")
_T("{F998D7E0-0CD3-434e-96B9-B8D3A295C3FB}"),
goopdate_utils::GetAppClientStateMediumKey(true, kAppGuid));
}
// This is an invalid case and causes an assert.
TEST(GoopdateUtilsTest, GetAppClientStateMediumKey_UserAndMachineAreSame) {
const TCHAR kAppGuid[] = _T("{F998D7E0-0CD3-434e-96B9-B8D3A295C3FB}");
ExpectAsserts expect_asserts;
EXPECT_STREQ(goopdate_utils::GetAppClientStateMediumKey(true, kAppGuid),
goopdate_utils::GetAppClientStateMediumKey(false, kAppGuid));
}
TEST(GoopdateUtilsTest, TerminateAllBrowsers_BrowserUnknown) {
TerminateBrowserResult browser_res;
TerminateBrowserResult default_res;
ExpectAsserts expect_asserts;
EXPECT_EQ(E_INVALIDARG, goopdate_utils::TerminateAllBrowsers(BROWSER_UNKNOWN,
&browser_res,
&default_res));
}
TEST(GoopdateUtilsTest, TerminateAllBrowsers_BrowserDefault) {
TerminateBrowserResult browser_res;
TerminateBrowserResult default_res;
ExpectAsserts expect_asserts;
EXPECT_EQ(E_INVALIDARG, goopdate_utils::TerminateAllBrowsers(BROWSER_DEFAULT,
&browser_res,
&default_res));
}
TEST(GoopdateUtilsTest, TerminateAllBrowsers_BrowserMax) {
TerminateBrowserResult browser_res;
TerminateBrowserResult default_res;
ExpectAsserts expect_asserts;
EXPECT_EQ(E_INVALIDARG, goopdate_utils::TerminateAllBrowsers(BROWSER_MAX,
&browser_res,
&default_res));
}
// TerminateAllBrowsers is not tested with valid browser values because the
// tests would terminate developers' browsers.
TEST(GoopdateUtilsTest, GetBrowserToRestart_StampedUnknown) {
ExpectAsserts expect_asserts;
TestGetBrowserToRestart(BROWSER_UNKNOWN, false, false,
BROWSER_IE, false, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_UNKNOWN, true, false,
BROWSER_IE, false, false,
BROWSER_IE);
}
TEST(GoopdateUtilsTest, GetBrowserToRestart_DefaultUnknown) {
TestGetBrowserToRestart(BROWSER_IE, false, false,
BROWSER_UNKNOWN, false, false,
BROWSER_UNKNOWN);
}
TEST(GoopdateUtilsTest, GetBrowserToRestart_StampedAndDefaultUnknown) {
ExpectAsserts expect_asserts;
TestGetBrowserToRestart(BROWSER_UNKNOWN, false, false,
BROWSER_UNKNOWN, false, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_UNKNOWN, true, false,
BROWSER_UNKNOWN, false, false,
BROWSER_UNKNOWN);
}
TEST(GoopdateUtilsTest, GetBrowserToRestart_StampedDefault) {
ExpectAsserts expect_asserts;
TestGetBrowserToRestart(BROWSER_DEFAULT, false, false,
BROWSER_IE, false, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_DEFAULT, true, false,
BROWSER_IE, false, false,
BROWSER_IE);
}
TEST(GoopdateUtilsTest, GetBrowserToRestart_DefaultDefault) {
ExpectAsserts expect_asserts;
TestGetBrowserToRestart(BROWSER_IE, false, false,
BROWSER_DEFAULT, false, false,
BROWSER_UNKNOWN);
}
TEST(GoopdateUtilsTest, GetBrowserToRestart_StampedAndDefaultDefault) {
ExpectAsserts expect_asserts;
TestGetBrowserToRestart(BROWSER_DEFAULT, false, false,
BROWSER_DEFAULT, false, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_DEFAULT, true, false,
BROWSER_DEFAULT, false, false,
BROWSER_UNKNOWN);
}
TEST(GoopdateUtilsTest, GetBrowserToRestart_StampedMax) {
ExpectAsserts expect_asserts;
TestGetBrowserToRestart(BROWSER_MAX, false, false,
BROWSER_IE, false, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_MAX, true, false,
BROWSER_IE, false, false,
BROWSER_IE);
}
TEST(GoopdateUtilsTest, GetBrowserToRestart_DefaultMax) {
ExpectAsserts expect_asserts;
TestGetBrowserToRestart(BROWSER_IE, false, false,
BROWSER_MAX, false, false,
BROWSER_UNKNOWN);
}
TEST(GoopdateUtilsTest, GetBrowserToRestart_StampedAndDefaultMax) {
ExpectAsserts expect_asserts;
TestGetBrowserToRestart(BROWSER_MAX, false, false,
BROWSER_MAX, false, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_MAX, true, false,
BROWSER_MAX, false, false,
BROWSER_UNKNOWN);
}
TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeIE_DefaultIE) {
TestGetBrowserToRestart(BROWSER_IE, false, false,
BROWSER_IE, false, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, false, false,
BROWSER_IE, false, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, false, false,
BROWSER_IE, true, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, false, false,
BROWSER_IE, true, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, false, true,
BROWSER_IE, false, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, false, true,
BROWSER_IE, false, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, false, true,
BROWSER_IE, true, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, false, true,
BROWSER_IE, true, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, false,
BROWSER_IE, false, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, false,
BROWSER_IE, false, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, false,
BROWSER_IE, true, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, false,
BROWSER_IE, true, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, true,
BROWSER_IE, false, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, true,
BROWSER_IE, false, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, true,
BROWSER_IE, true, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, true,
BROWSER_IE, true, true,
BROWSER_IE);
}
TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeIE_DefaultFirefox) {
TestGetBrowserToRestart(BROWSER_IE, false, false,
BROWSER_FIREFOX, false, false,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_IE, false, false,
BROWSER_FIREFOX, false, true,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_IE, false, false,
BROWSER_FIREFOX, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_IE, false, false,
BROWSER_FIREFOX, true, true,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_IE, false, true,
BROWSER_FIREFOX, false, false,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_IE, false, true,
BROWSER_FIREFOX, false, true,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_IE, false, true,
BROWSER_FIREFOX, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_IE, false, true,
BROWSER_FIREFOX, true, true,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_IE, true, false,
BROWSER_FIREFOX, false, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, false,
BROWSER_FIREFOX, false, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, false,
BROWSER_FIREFOX, true, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, false,
BROWSER_FIREFOX, true, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, true,
BROWSER_FIREFOX, false, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, true,
BROWSER_FIREFOX, false, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, true,
BROWSER_FIREFOX, true, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, true,
BROWSER_FIREFOX, true, true,
BROWSER_IE);
}
TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeIE_DefaultChrome) {
TestGetBrowserToRestart(BROWSER_IE, false, false,
BROWSER_CHROME, false, false,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_IE, false, false,
BROWSER_CHROME, false, true,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_IE, false, false,
BROWSER_CHROME, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_IE, false, false,
BROWSER_CHROME, true, true,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_IE, false, true,
BROWSER_CHROME, false, false,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_IE, false, true,
BROWSER_CHROME, false, true,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_IE, false, true,
BROWSER_CHROME, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_IE, false, true,
BROWSER_CHROME, true, true,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_IE, true, false,
BROWSER_CHROME, false, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, false,
BROWSER_CHROME, false, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, false,
BROWSER_CHROME, true, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, false,
BROWSER_CHROME, true, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, true,
BROWSER_CHROME, false, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, true,
BROWSER_CHROME, false, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, true,
BROWSER_CHROME, true, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, true,
BROWSER_CHROME, true, true,
BROWSER_IE);
}
TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeIE_DefaultUnknown) {
TestGetBrowserToRestart(BROWSER_IE, false, false,
BROWSER_UNKNOWN, false, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_IE, false, false,
BROWSER_UNKNOWN, false, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_IE, false, false,
BROWSER_UNKNOWN, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_IE, false, false,
BROWSER_UNKNOWN, true, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_IE, false, true,
BROWSER_UNKNOWN, false, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_IE, false, true,
BROWSER_UNKNOWN, false, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_IE, false, true,
BROWSER_UNKNOWN, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_IE, false, true,
BROWSER_UNKNOWN, true, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_IE, true, false,
BROWSER_UNKNOWN, false, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, false,
BROWSER_UNKNOWN, false, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, false,
BROWSER_UNKNOWN, true, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, false,
BROWSER_UNKNOWN, true, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, true,
BROWSER_UNKNOWN, false, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, true,
BROWSER_UNKNOWN, false, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, true,
BROWSER_UNKNOWN, true, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_IE, true, true,
BROWSER_UNKNOWN, true, true,
BROWSER_IE);
}
TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeFirefox_DefaultIE) {
TestGetBrowserToRestart(BROWSER_FIREFOX, false, false,
BROWSER_IE, false, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, false,
BROWSER_IE, false, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, false,
BROWSER_IE, true, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, false,
BROWSER_IE, true, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, true,
BROWSER_IE, false, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, true,
BROWSER_IE, false, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, true,
BROWSER_IE, true, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, true,
BROWSER_IE, true, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, false,
BROWSER_IE, false, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, false,
BROWSER_IE, false, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, false,
BROWSER_IE, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, false,
BROWSER_IE, true, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, true,
BROWSER_IE, false, false,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, true,
BROWSER_IE, false, true,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, true,
BROWSER_IE, true, false,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, true,
BROWSER_IE, true, true,
BROWSER_FIREFOX);
}
TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeFirefox_DefaultFirefox) {
TestGetBrowserToRestart(BROWSER_FIREFOX, false, false,
BROWSER_FIREFOX, false, false,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, false,
BROWSER_FIREFOX, false, true,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, false,
BROWSER_FIREFOX, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, false,
BROWSER_FIREFOX, true, true,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, true,
BROWSER_FIREFOX, false, false,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, true,
BROWSER_FIREFOX, false, true,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, true,
BROWSER_FIREFOX, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, true,
BROWSER_FIREFOX, true, true,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, false,
BROWSER_FIREFOX, false, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, false,
BROWSER_FIREFOX, false, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, false,
BROWSER_FIREFOX, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, false,
BROWSER_FIREFOX, true, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, true,
BROWSER_FIREFOX, false, false,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, true,
BROWSER_FIREFOX, false, true,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, true,
BROWSER_FIREFOX, true, false,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, true,
BROWSER_FIREFOX, true, true,
BROWSER_FIREFOX);
}
TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeFirefox_DefaultChrome) {
TestGetBrowserToRestart(BROWSER_FIREFOX, false, false,
BROWSER_CHROME, false, false,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, false,
BROWSER_CHROME, false, true,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, false,
BROWSER_CHROME, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, false,
BROWSER_CHROME, true, true,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, true,
BROWSER_CHROME, false, false,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, true,
BROWSER_CHROME, false, true,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, true,
BROWSER_CHROME, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, true,
BROWSER_CHROME, true, true,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, false,
BROWSER_CHROME, false, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, false,
BROWSER_CHROME, false, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, false,
BROWSER_CHROME, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, false,
BROWSER_CHROME, true, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, true,
BROWSER_CHROME, false, false,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, true,
BROWSER_CHROME, false, true,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, true,
BROWSER_CHROME, true, false,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, true,
BROWSER_CHROME, true, true,
BROWSER_FIREFOX);
}
TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeFirefox_DefaultUnknown) {
TestGetBrowserToRestart(BROWSER_FIREFOX, false, false,
BROWSER_UNKNOWN, false, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, false,
BROWSER_UNKNOWN, false, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, false,
BROWSER_UNKNOWN, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, false,
BROWSER_UNKNOWN, true, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, true,
BROWSER_UNKNOWN, false, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, true,
BROWSER_UNKNOWN, false, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, true,
BROWSER_UNKNOWN, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, false, true,
BROWSER_UNKNOWN, true, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, false,
BROWSER_UNKNOWN, false, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, false,
BROWSER_UNKNOWN, false, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, false,
BROWSER_UNKNOWN, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, false,
BROWSER_UNKNOWN, true, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, true,
BROWSER_UNKNOWN, false, false,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, true,
BROWSER_UNKNOWN, false, true,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, true,
BROWSER_UNKNOWN, true, false,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_FIREFOX, true, true,
BROWSER_UNKNOWN, true, true,
BROWSER_FIREFOX);
}
TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeChrome_DefaultIE) {
TestGetBrowserToRestart(BROWSER_CHROME, false, false,
BROWSER_IE, false, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_CHROME, false, false,
BROWSER_IE, false, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_CHROME, false, false,
BROWSER_IE, true, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_CHROME, false, false,
BROWSER_IE, true, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_CHROME, false, true,
BROWSER_IE, false, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_CHROME, false, true,
BROWSER_IE, false, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_CHROME, false, true,
BROWSER_IE, true, false,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_CHROME, false, true,
BROWSER_IE, true, true,
BROWSER_IE);
TestGetBrowserToRestart(BROWSER_CHROME, true, false,
BROWSER_IE, false, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, true, false,
BROWSER_IE, false, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, true, false,
BROWSER_IE, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, true, false,
BROWSER_IE, true, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, true, true,
BROWSER_IE, false, false,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_CHROME, true, true,
BROWSER_IE, false, true,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_CHROME, true, true,
BROWSER_IE, true, false,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_CHROME, true, true,
BROWSER_IE, true, true,
BROWSER_CHROME);
}
TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeChrome_DefaultFirefox) {
TestGetBrowserToRestart(BROWSER_CHROME, false, false,
BROWSER_FIREFOX, false, false,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_CHROME, false, false,
BROWSER_FIREFOX, false, true,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_CHROME, false, false,
BROWSER_FIREFOX, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, false, false,
BROWSER_FIREFOX, true, true,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_CHROME, false, true,
BROWSER_FIREFOX, false, false,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_CHROME, false, true,
BROWSER_FIREFOX, false, true,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_CHROME, false, true,
BROWSER_FIREFOX, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, false, true,
BROWSER_FIREFOX, true, true,
BROWSER_FIREFOX);
TestGetBrowserToRestart(BROWSER_CHROME, true, false,
BROWSER_FIREFOX, false, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, true, false,
BROWSER_FIREFOX, false, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, true, false,
BROWSER_FIREFOX, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, true, false,
BROWSER_FIREFOX, true, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, true, true,
BROWSER_FIREFOX, false, false,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_CHROME, true, true,
BROWSER_FIREFOX, false, true,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_CHROME, true, true,
BROWSER_FIREFOX, true, false,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_CHROME, true, true,
BROWSER_FIREFOX, true, true,
BROWSER_CHROME);
}
TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeChrome_DefaultChrome) {
TestGetBrowserToRestart(BROWSER_CHROME, false, false,
BROWSER_CHROME, false, false,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_CHROME, false, false,
BROWSER_CHROME, false, true,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_CHROME, false, false,
BROWSER_CHROME, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, false, false,
BROWSER_CHROME, true, true,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_CHROME, false, true,
BROWSER_CHROME, false, false,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_CHROME, false, true,
BROWSER_CHROME, false, true,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_CHROME, false, true,
BROWSER_CHROME, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, false, true,
BROWSER_CHROME, true, true,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_CHROME, true, false,
BROWSER_CHROME, false, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, true, false,
BROWSER_CHROME, false, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, true, false,
BROWSER_CHROME, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, true, false,
BROWSER_CHROME, true, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, true, true,
BROWSER_CHROME, false, false,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_CHROME, true, true,
BROWSER_CHROME, false, true,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_CHROME, true, true,
BROWSER_CHROME, true, false,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_CHROME, true, true,
BROWSER_CHROME, true, true,
BROWSER_CHROME);
}
TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeChrome_DefaultUnknown) {
TestGetBrowserToRestart(BROWSER_CHROME, false, false,
BROWSER_UNKNOWN, false, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, false, false,
BROWSER_UNKNOWN, false, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, false, false,
BROWSER_UNKNOWN, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, false, false,
BROWSER_UNKNOWN, true, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, false, true,
BROWSER_UNKNOWN, false, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, false, true,
BROWSER_UNKNOWN, false, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, false, true,
BROWSER_UNKNOWN, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, false, true,
BROWSER_UNKNOWN, true, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, true, false,
BROWSER_UNKNOWN, false, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, true, false,
BROWSER_UNKNOWN, false, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, true, false,
BROWSER_UNKNOWN, true, false,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, true, false,
BROWSER_UNKNOWN, true, true,
BROWSER_UNKNOWN);
TestGetBrowserToRestart(BROWSER_CHROME, true, true,
BROWSER_UNKNOWN, false, false,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_CHROME, true, true,
BROWSER_UNKNOWN, false, true,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_CHROME, true, true,
BROWSER_UNKNOWN, true, false,
BROWSER_CHROME);
TestGetBrowserToRestart(BROWSER_CHROME, true, true,
BROWSER_UNKNOWN, true, true,
BROWSER_CHROME);
}
TEST(GoopdateUtilsTest, ConvertStringToBrowserType) {
BrowserType type = BROWSER_UNKNOWN;
ASSERT_SUCCEEDED(goopdate_utils::ConvertStringToBrowserType(_T("0"), &type));
ASSERT_EQ(BROWSER_UNKNOWN, type);
ASSERT_SUCCEEDED(goopdate_utils::ConvertStringToBrowserType(_T("1"), &type));
ASSERT_EQ(BROWSER_DEFAULT, type);
ASSERT_SUCCEEDED(goopdate_utils::ConvertStringToBrowserType(_T("2"), &type));
ASSERT_EQ(BROWSER_IE, type);
ASSERT_SUCCEEDED(goopdate_utils::ConvertStringToBrowserType(_T("3"), &type));
ASSERT_EQ(BROWSER_FIREFOX, type);
ASSERT_SUCCEEDED(goopdate_utils::ConvertStringToBrowserType(_T("4"), &type));
ASSERT_EQ(BROWSER_CHROME, type);
ASSERT_FAILED(goopdate_utils::ConvertStringToBrowserType(_T("5"), &type));
ASSERT_FAILED(goopdate_utils::ConvertStringToBrowserType(_T("asdf"), &type));
ASSERT_FAILED(goopdate_utils::ConvertStringToBrowserType(_T("234"), &type));
ASSERT_FAILED(goopdate_utils::ConvertStringToBrowserType(_T("-1"), &type));
}
TEST(GoopdateUtilsTest, RedirectHKCRTest) {
RegKey key;
Cleanup();
if (vista_util::IsUserAdmin()) {
// Only run this part of the test for Admins, because non-admins cannot
// write to HKLM.
// Without redirection, a HKCR write should write HKLM\Software\Classes,
// assuming that the key does not already exist in HKCU.
ASSERT_SUCCEEDED(key.Create(hkcr_key_name));
ASSERT_TRUE(RegKey::HasKey(hklm_key_name));
ASSERT_FALSE(RegKey::HasKey(hkcu_key_name));
Cleanup();
ASSERT_SUCCEEDED(goopdate_utils::RedirectHKCR(true));
// With HKLM redirection, a HKCR write should write HKLM\Software\Classes.
ASSERT_SUCCEEDED(key.Create(hkcr_key_name));
ASSERT_TRUE(RegKey::HasKey(hklm_key_name));
ASSERT_FALSE(RegKey::HasKey(hkcu_key_name));
Cleanup();
} else {
std::wcout << _T("\tPart of this test did not run because the user ")
_T("is not an admin.") << std::endl;
}
ASSERT_SUCCEEDED(goopdate_utils::RedirectHKCR(false));
// With HKCU redirection, a HKCR write should write HKCU\Software\Classes.
ASSERT_SUCCEEDED(key.Create(hkcr_key_name));
ASSERT_FALSE(RegKey::HasKey(hklm_key_name));
ASSERT_TRUE(RegKey::HasKey(hkcu_key_name));
ASSERT_SUCCEEDED(goopdate_utils::RemoveRedirectHKCR());
if (vista_util::IsUserAdmin()) {
// Without redirection, the following HKCR writes should write
// HKCU\Software\Classes.
// This is because the key already exists in HKCU from the writes above.
ASSERT_SUCCEEDED(key.Create(hkcr_key_name));
ASSERT_FALSE(RegKey::HasKey(hklm_key_name));
ASSERT_TRUE(RegKey::HasKey(hkcu_key_name));
} else {
std::wcout << _T("\tPart of this test did not run because the user ")
_T("is not an admin.") << std::endl;
}
Cleanup();
}
TEST(GoopdateUtilsTest, GetImpersonationTokenNotInteractivePid0) {
HANDLE token = NULL;
ASSERT_SUCCEEDED(goopdate_utils::GetImpersonationToken(false, 0, &token));
ASSERT_TRUE(token != NULL);
ASSERT_TRUE(::CloseHandle(token));
token = NULL;
}
TEST(GoopdateUtilsTest, GetImpersonationTokenNotInteractiveRealPid) {
HANDLE token = NULL;
DWORD pid = ::GetCurrentProcessId();
ASSERT_SUCCEEDED(goopdate_utils::GetImpersonationToken(false, pid, &token));
ASSERT_TRUE(token != NULL);
ASSERT_TRUE(::CloseHandle(token));
token = NULL;
}
TEST(GoopdateUtilsTest, GetImpersonationTokenInteractiveValidPid) {
HANDLE token = NULL;
DWORD pid = ::GetCurrentProcessId();
ASSERT_SUCCEEDED(goopdate_utils::GetImpersonationToken(true, pid, &token));
ASSERT_TRUE(token != NULL);
ASSERT_TRUE(::CloseHandle(token));
}
TEST(GoopdateUtilsTest, GetImpersonationTokenInteractiveInvalidPid) {
HANDLE token = NULL;
ASSERT_EQ(E_INVALIDARG,
goopdate_utils::GetImpersonationToken(true, 0, &token));
ASSERT_TRUE(token == NULL);
}
TEST(GoopdateUtilsTest, ImpersonateUser) {
DWORD pid = ::GetCurrentProcessId();
if (vista_util::IsUserAdmin()) {
ASSERT_SUCCEEDED(goopdate_utils::ImpersonateUser(false, 0));
ASSERT_SUCCEEDED(goopdate_utils::UndoImpersonation(true));
ASSERT_SUCCEEDED(goopdate_utils::ImpersonateUser(false, pid));
ASSERT_SUCCEEDED(goopdate_utils::UndoImpersonation(true));
ASSERT_SUCCEEDED(goopdate_utils::ImpersonateUser(true, pid));
ASSERT_SUCCEEDED(goopdate_utils::UndoImpersonation(true));
ASSERT_EQ(E_INVALIDARG, goopdate_utils::ImpersonateUser(true, 0));
} else {
std::wcout << _T("\tThis test did not run because the user ")
_T("is not an admin.") << std::endl;
}
}
TEST(GoopdateUtilsTest, GoopdateTasks) {
CString task_path = ConcatenatePath(
app_util::GetCurrentModuleDirectory(),
_T("unittest_support\\does_not_shutdown\\GoogleUpdate.exe"));
// Install/uninstall.
EXPECT_SUCCEEDED(InstallGoopdateTasks(task_path,
vista_util::IsUserAdmin()));
EXPECT_SUCCEEDED(UninstallGoopdateTasks(vista_util::IsUserAdmin()));
// Calling InstallGoopdateTask twice should succeed.
for (int i = 0; i < 2; ++i) {
EXPECT_SUCCEEDED(InstallGoopdateTasks(task_path,
vista_util::IsUserAdmin()));
}
// Start and stop.
EXPECT_SUCCEEDED(StartGoopdateTaskCore(vista_util::IsUserAdmin()));
HRESULT hr = SCHED_S_TASK_HAS_NOT_RUN;
int tries = 0;
for (tries = 0;
tries < kMaxWaitForProcessIterations && SCHED_S_TASK_RUNNING != hr;
++tries) {
EXPECT_EQ(SCHED_S_TASK_HAS_NOT_RUN, hr); // For debugging test failures.
::Sleep(kWaitForProcessIntervalMs);
hr = internal::GetScheduledTaskStatus(
ConfigManager::GetCurrentTaskNameCore(vista_util::IsUserAdmin()));
}
EXPECT_EQ(SCHED_S_TASK_RUNNING, hr);
EXPECT_LT(tries, kMaxWaitForProcessIterations) << _T("Loops exhausted.");
std::wcout << _T("\tLine ") << __LINE__ << _T(": Iterations=") << tries
<< std::endl;
// Without a wait in between the start and stop, stop failed intermittently.
::Sleep(500);
EXPECT_SUCCEEDED(internal::StopScheduledTask(
ConfigManager::GetCurrentTaskNameCore(vista_util::IsUserAdmin())));
hr = SCHED_S_TASK_RUNNING;
for (tries = 0;
tries < kMaxWaitForProcessIterations && SCHED_S_TASK_RUNNING == hr;
++tries) {
::Sleep(kWaitForProcessIntervalMs);
hr = internal::GetScheduledTaskStatus(
ConfigManager::GetCurrentTaskNameCore(vista_util::IsUserAdmin()));
}
EXPECT_NE(SCHED_S_TASK_RUNNING, hr);
EXPECT_LT(tries, kMaxWaitForProcessIterations) << _T("Loops exhausted.");
std::wcout << _T("\tLine ") << __LINE__ << _T(": Iterations=") << tries
<< std::endl;
EXPECT_EQ(SCHED_S_TASK_READY, hr);
// Finally, uninstall.
EXPECT_SUCCEEDED(UninstallGoopdateTasks(vista_util::IsUserAdmin()));
}
TEST(GoopdateUtilsTest, GoopdateTaskInUseOverinstall) {
CString task_path = ConcatenatePath(app_util::GetCurrentModuleDirectory(),
_T("LongRunningSilent.exe"));
EXPECT_SUCCEEDED(InstallGoopdateTasks(task_path,
vista_util::IsUserAdmin()));
CString original_task_name(
ConfigManager::GetCurrentTaskNameCore(vista_util::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,
vista_util::IsUserAdmin()));
CString new_task_name(
ConfigManager::GetCurrentTaskNameCore(vista_util::IsUserAdmin()));
EXPECT_STRNE(original_task_name, new_task_name);
// Cleanup.
file.Close();
EXPECT_SUCCEEDED(UninstallGoopdateTasks(vista_util::IsUserAdmin()));
}
TEST(GoopdateUtilsTest, GetExitCodeGoopdateTaskUA) {
CString task_path = ConcatenatePath(
app_util::GetCurrentModuleDirectory(),
_T("unittest_support\\SaveArguments.exe"));
EXPECT_SUCCEEDED(InstallGoopdateTasks(task_path,
vista_util::IsUserAdmin()));
EXPECT_EQ(SCHED_S_TASK_HAS_NOT_RUN,
GetExitCodeGoopdateTaskUA(vista_util::IsUserAdmin()));
EXPECT_SUCCEEDED(internal::StartScheduledTask(
ConfigManager::GetCurrentTaskNameUA(vista_util::IsUserAdmin())));
// Because SaveArguments.exe is not a long-lived process, the task could have
// run and finished at any point.
HRESULT hr = SCHED_S_TASK_HAS_NOT_RUN;
int tries = 0;
for (tries = 0;
tries < kMaxWaitForProcessIterations && SCHED_S_TASK_HAS_NOT_RUN == hr;
++tries) {
::Sleep(kWaitForProcessIntervalMs);
hr = internal::GetScheduledTaskStatus(
ConfigManager::GetCurrentTaskNameUA(vista_util::IsUserAdmin()));
}
EXPECT_NE(SCHED_S_TASK_HAS_NOT_RUN, hr);
EXPECT_LT(tries, kMaxWaitForProcessIterations) << _T("Loops exhausted.");
std::wcout << _T("\tLine ") << __LINE__ << _T(": Iterations=") << tries
<< std::endl;
EXPECT_TRUE(SCHED_S_TASK_RUNNING == hr || SCHED_S_TASK_READY == hr);
hr = SCHED_S_TASK_RUNNING;
for (tries = 0;
tries < kMaxWaitForProcessIterations && SCHED_S_TASK_RUNNING == hr;
++tries) {
::Sleep(kWaitForProcessIntervalMs);
hr = internal::GetScheduledTaskStatus(
ConfigManager::GetCurrentTaskNameUA(vista_util::IsUserAdmin()));
}
EXPECT_NE(SCHED_S_TASK_RUNNING, hr);
EXPECT_LT(tries, kMaxWaitForProcessIterations) << _T("Loops exhausted.");
std::wcout << _T("\tLine ") << __LINE__ << _T(": Iterations=") << tries
<< std::endl;
EXPECT_EQ(SCHED_S_TASK_READY, hr);
EXPECT_EQ(S_OK, GetExitCodeGoopdateTaskUA(vista_util::IsUserAdmin()));
EXPECT_SUCCEEDED(File::Remove(
ConcatenatePath(app_util::GetCurrentModuleDirectory(),
_T("unittest_support\\saved_arguments.txt"))));
EXPECT_SUCCEEDED(UninstallGoopdateTasks(vista_util::IsUserAdmin()));
}
TEST(GoopdateUtilsTest, GetOSInfo) {
const TCHAR kXpOSVersion[] = _T("5.1");
const TCHAR k2003OSVersion[] = _T("5.2");
const TCHAR kVistaOSVersion[] = _T("6.0");
const TCHAR kNoSp[] = _T("");
const TCHAR kSp1[] = _T("Service Pack 1");
const TCHAR kSp2[] = _T("Service Pack 2");
const TCHAR kSp3[] = _T("Service Pack 3");
CString os_version;
CString service_pack;
EXPECT_SUCCEEDED(goopdate_utils::GetOSInfo(&os_version, &service_pack));
EXPECT_TRUE((kXpOSVersion == os_version && kSp2 == service_pack) ||
(kXpOSVersion == os_version && kSp3 == service_pack) ||
(k2003OSVersion == os_version && kSp1 == service_pack) ||
(k2003OSVersion == os_version && kSp2 == service_pack) ||
(kVistaOSVersion == os_version && kNoSp == service_pack) ||
(kVistaOSVersion == os_version && kSp1 == service_pack));
}
class GoopdateUtilsRegistryProtectedTest : public testing::Test {
protected:
GoopdateUtilsRegistryProtectedTest()
: hive_override_key_name_(kRegistryHiveOverrideRoot) {
}
CString hive_override_key_name_;
virtual void SetUp() {
RegKey::DeleteKey(hive_override_key_name_, true);
OverrideRegistryHives(hive_override_key_name_);
}
virtual void TearDown() {
RestoreRegistryHives();
ASSERT_SUCCEEDED(RegKey::DeleteKey(hive_override_key_name_, true));
}
};
// Some methods used by goopdate_utils rely on registry entries that are
// overridden in the registry, so we need to write it.
class GoopdateUtilsRegistryProtectedWithMachineFolderPathsTest
: public GoopdateUtilsRegistryProtectedTest {
protected:
virtual void SetUp() {
const TCHAR kWindowsCurrentVersionKeyPath[] =
_T("HKLM\\Software\\Microsoft\\Windows\\CurrentVersion");
const TCHAR kProgramFilesDirValueName[] = _T("ProgramFilesDir");
const TCHAR kProgramFilesPath[] = _T("C:\\Program Files");
GoopdateUtilsRegistryProtectedTest::SetUp();
ASSERT_SUCCEEDED(RegKey::SetValue(kWindowsCurrentVersionKeyPath,
kProgramFilesDirValueName,
kProgramFilesPath));
}
};
// Some methods used by goopdate_utils rely on registry entries that are
// overridden in the registry, so we need to write it.
class GoopdateUtilsRegistryProtectedWithUserFolderPathsTest
: public GoopdateUtilsRegistryProtectedTest {
protected:
virtual void SetUp() {
const TCHAR kUserShellKeyPath[] =
_T("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\")
_T("User Shell Folders");
const TCHAR kLocalAppDataValueDirName[] = _T("Local AppData");
const TCHAR kLocalAppDataPath[] =
_T("%USERPROFILE%\\Local Settings\\Application Data");
GoopdateUtilsRegistryProtectedTest::SetUp();
ASSERT_SUCCEEDED(RegKey::SetValueExpandSZ(kUserShellKeyPath,
kLocalAppDataValueDirName,
kLocalAppDataPath));
}
};
// pv should be ignored.
TEST_F(GoopdateUtilsRegistryProtectedWithMachineFolderPathsTest,
BuildGoogleUpdateExePath_MachineVersionFound) {
ASSERT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_CLIENTS_GOOPDATE,
_T("pv"),
_T("1.2.3.4")));
CString path = goopdate_utils::BuildGoogleUpdateExePath(true);
CString program_files_path;
EXPECT_SUCCEEDED(GetFolderPath(CSIDL_PROGRAM_FILES, &program_files_path));
EXPECT_STREQ(program_files_path + _T("\\Google\\Update\\GoogleUpdate.exe"),
path);
}
TEST_F(GoopdateUtilsRegistryProtectedWithMachineFolderPathsTest,
BuildGoogleUpdateExePath_MachineVersionNotFound) {
// Test when the key doesn't exist.
CString path = goopdate_utils::BuildGoogleUpdateExePath(true);
CString program_files_path;
EXPECT_SUCCEEDED(GetFolderPath(CSIDL_PROGRAM_FILES, &program_files_path));
EXPECT_STREQ(program_files_path + _T("\\Google\\Update\\GoogleUpdate.exe"),
path);
// Test when the key exists but the value doesn't.
ASSERT_SUCCEEDED(RegKey::CreateKey(MACHINE_REG_CLIENTS_GOOPDATE));
path = goopdate_utils::BuildGoogleUpdateExePath(true);
EXPECT_STREQ(program_files_path + _T("\\Google\\Update\\GoogleUpdate.exe"),
path);
}
// pv should be ignored.
TEST_F(GoopdateUtilsRegistryProtectedWithUserFolderPathsTest,
BuildGoogleUpdateExePath_UserVersionFound) {
ASSERT_SUCCEEDED(RegKey::SetValue(USER_REG_CLIENTS_GOOPDATE,
_T("pv"),
_T("1.2.3.4")));
CString path = goopdate_utils::BuildGoogleUpdateExePath(false);
CString user_appdata;
EXPECT_SUCCEEDED(GetFolderPath(CSIDL_LOCAL_APPDATA, &user_appdata));
CString expected_path;
expected_path.Format(_T("%s\\Google\\Update\\GoogleUpdate.exe"),
user_appdata);
EXPECT_STREQ(expected_path, path);
}
TEST_F(GoopdateUtilsRegistryProtectedWithUserFolderPathsTest,
BuildGoogleUpdateExePath_UserVersionNotFound) {
CString user_appdata;
EXPECT_SUCCEEDED(GetFolderPath(CSIDL_LOCAL_APPDATA, &user_appdata));
CString expected_path;
expected_path.Format(_T("%s\\Google\\Update\\GoogleUpdate.exe"),
user_appdata);
// Test when the key doesn't exist.
CString path = goopdate_utils::BuildGoogleUpdateExePath(false);
EXPECT_STREQ(expected_path, path);
// Test when the key exists but the value doesn't.
ASSERT_SUCCEEDED(RegKey::CreateKey(USER_REG_CLIENTS_GOOPDATE));
path = goopdate_utils::BuildGoogleUpdateExePath(false);
EXPECT_STREQ(expected_path, path);
}
// The version is no longer used by StartGoogleUpdateWithArgs, so the return
// value depends on whether program_files\Google\Update\GoogleUpdate.exe exists.
TEST_F(GoopdateUtilsRegistryProtectedWithMachineFolderPathsTest,
StartGoogleUpdateWithArgs_MachineVersionVersionDoesNotExist) {
ASSERT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_CLIENTS_GOOPDATE,
_T("pv"),
_T("1.2.3.4")));
const TCHAR* kArgs = _T("/foo");
HRESULT hr = goopdate_utils::StartGoogleUpdateWithArgs(true, kArgs, NULL);
EXPECT_TRUE(S_OK == hr || HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) == hr);
}
// The version is no longer used by StartGoogleUpdateWithArgs, so the return
// value depends on whether <user_folder>\Google\Update\GoogleUpdate.exe exists.
// Also tests NULL args parameter
TEST_F(GoopdateUtilsRegistryProtectedWithUserFolderPathsTest,
StartGoogleUpdateWithArgs_UserVersionVersionDoesNotExist) {
ASSERT_SUCCEEDED(RegKey::SetValue(USER_REG_CLIENTS_GOOPDATE,
_T("pv"),
_T("1.2.3.4")));
HRESULT hr = goopdate_utils::StartGoogleUpdateWithArgs(false, NULL, NULL);
EXPECT_TRUE(S_OK == hr || HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) == hr);
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_NotExplicit_NoKey) {
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, false));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_NotExplicit_ClientStateExists) {
EXPECT_SUCCEEDED(RegKey::CreateKey(kAppMachineClientStatePath));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, false));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_NotExplicit_ClientStateOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, false));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_NotExplicit_ClientStateNegativeOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(-1)));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, false));
EXPECT_EQ(-1, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_NotExplicit_ClientStateZero_MediumNotExist) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_FALSE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, false));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_NotExplicit_ClientStateZero_MediumExists) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::CreateKey(kAppMachineClientStateMediumPath));
EXPECT_FALSE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, false));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_NotExplicit_ClientStateZero_MediumOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, false));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_NotExplicit_ClientStateZero_MediumNegativeOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(-1)));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, false));
EXPECT_EQ(-1, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(-1, GetDwordValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted")));
}
// Also tests that user values are not used.
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_NotExplicit_ClientStateZero_MediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_FALSE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, false));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted")));
EXPECT_EQ(1, GetDwordValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(1, GetDwordValue(kAppUserClientStateMediumPath,
_T("eulaaccepted")));
}
// ClientStateMedium does not override ClientState.
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_NotExplicit_ClientStateOne_MediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, false));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted")));
}
// Implicitly accepted because of the absence of eualaccepted=0.
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_NotExplicit_ClientStateNotExist_MediumOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, false));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted")));
}
// Implicitly accepted because of the absence of eualaccepted=0.
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_NotExplicit_ClientStateNotExist_MediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, false));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_Explicit_NoKey) {
EXPECT_FALSE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, true));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_Explicit_ClientStateExists) {
EXPECT_SUCCEEDED(RegKey::CreateKey(kAppMachineClientStatePath));
EXPECT_FALSE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, true));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_Explicit_ClientStateOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, true));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_Explicit_ClientStateNegativeOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(-1)));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, true));
EXPECT_EQ(-1, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_Explicit_ClientStateZero_MediumNotExist) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_FALSE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, true));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_Explicit_ClientStateZero_MediumExists) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::CreateKey(kAppMachineClientStateMediumPath));
EXPECT_FALSE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, true));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_Explicit_ClientStateZero_MediumOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, true));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_Explicit_ClientStateZero_MediumNegativeOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(-1)));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, true));
EXPECT_EQ(-1, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(-1, GetDwordValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted")));
}
// Also tests that user values are not used.
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_Explicit_ClientStateZero_MediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_FALSE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, true));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted")));
EXPECT_EQ(1, GetDwordValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(1, GetDwordValue(kAppUserClientStateMediumPath,
_T("eulaaccepted")));
}
// ClientStateMedium does not override ClientState.
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_Explicit_ClientStateOne_MediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, true));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_Explicit_ClientStateNotExist_MediumOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, true));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_Machine_Explicit_ClientStateNotExist_MediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_FALSE(goopdate_utils::IsAppEulaAccepted(true, kAppGuid, true));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted")));
}
// ClientStateMedium is not supported for user apps.
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_User_NotExplicit_NoKey) {
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(false, kAppGuid, false));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_User_NotExplicit_ClientStateExists) {
EXPECT_SUCCEEDED(RegKey::CreateKey(kAppUserClientStatePath));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(false, kAppGuid, false));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_User_NotExplicit_ClientStateOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(false, kAppGuid, false));
EXPECT_EQ(1, GetDwordValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_User_NotExplicit_ClientStateNegativeOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(-1)));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(false, kAppGuid, false));
EXPECT_EQ(-1, GetDwordValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_User_NotExplicit_ClientStateZero_MediumNotExist) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_FALSE(goopdate_utils::IsAppEulaAccepted(false, kAppGuid, false));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_User_NotExplicit_ClientStateZero_MediumExists) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::CreateKey(kAppUserClientStateMediumPath));
EXPECT_FALSE(goopdate_utils::IsAppEulaAccepted(false, kAppGuid, false));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_User_NotExplicit_ClientStateZero_MediumOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_FALSE(goopdate_utils::IsAppEulaAccepted(false, kAppGuid, false));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(1, GetDwordValue(kAppUserClientStateMediumPath,
_T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_User_NotExplicit_ClientStateZero_MediumNegativeOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(-1)));
EXPECT_FALSE(goopdate_utils::IsAppEulaAccepted(false, kAppGuid, false));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(-1, GetDwordValue(kAppUserClientStateMediumPath,
_T("eulaaccepted")));
}
// Also tests that machine values are not used.
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_User_NotExplicit_ClientStateZero_MediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_FALSE(goopdate_utils::IsAppEulaAccepted(false, kAppGuid, false));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStateMediumPath,
_T("eulaaccepted")));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted")));
}
// ClientStateMedium is not used.
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_User_NotExplicit_ClientStateOne_MediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(false, kAppGuid, false));
EXPECT_EQ(1, GetDwordValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStateMediumPath,
_T("eulaaccepted")));
}
// Implicitly accepted because of the absence of eualaccepted=0.
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_User_NotExplicit_ClientStateNotExist_MediumOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(false, kAppGuid, false));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(1, GetDwordValue(kAppUserClientStateMediumPath,
_T("eulaaccepted")));
}
// Implicitly accepted because of the absence of eualaccepted=0.
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_User_NotExplicit_ClientStateNotExist_MediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(false, kAppGuid, false));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStateMediumPath,
_T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_User_Explicit_NoKey) {
EXPECT_FALSE(goopdate_utils::IsAppEulaAccepted(false, kAppGuid, true));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_User_Explicit_ClientStateExists) {
EXPECT_SUCCEEDED(RegKey::CreateKey(kAppUserClientStatePath));
EXPECT_FALSE(goopdate_utils::IsAppEulaAccepted(false, kAppGuid, true));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_User_Explicit_ClientStateOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_TRUE(goopdate_utils::IsAppEulaAccepted(false, kAppGuid, true));
EXPECT_EQ(1, GetDwordValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_User_Explicit_ClientStateNotExist_MediumOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_FALSE(goopdate_utils::IsAppEulaAccepted(false, kAppGuid, true));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(1, GetDwordValue(kAppUserClientStateMediumPath,
_T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
IsAppEulaAccepted_User_Explicit_ClientStateNotExist_MediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_FALSE(goopdate_utils::IsAppEulaAccepted(false, kAppGuid, true));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStateMediumPath,
_T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppEulaNotAccepted_Machine_NoKey) {
EXPECT_SUCCEEDED(goopdate_utils::SetAppEulaNotAccepted(true, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppEulaNotAccepted_Machine_ClientStateExists) {
EXPECT_SUCCEEDED(RegKey::CreateKey(kAppMachineClientStatePath));
EXPECT_SUCCEEDED(goopdate_utils::SetAppEulaNotAccepted(true, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppEulaNotAccepted_Machine_ClientStateOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(goopdate_utils::SetAppEulaNotAccepted(true, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppEulaNotAccepted_Machine_ClientStateZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(goopdate_utils::SetAppEulaNotAccepted(true, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppEulaNotAccepted_Machine_ClientStateZero_ClientStateMediumOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(goopdate_utils::SetAppEulaNotAccepted(true, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted")));
}
// Also tests that user values are not affected.
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppEulaNotAccepted_Machine_ClientStateZero_ClientStateMediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(goopdate_utils::SetAppEulaNotAccepted(true, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted")));
EXPECT_EQ(1, GetDwordValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(1, GetDwordValue(kAppUserClientStateMediumPath,
_T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppEulaNotAccepted_User_NoKey) {
EXPECT_SUCCEEDED(goopdate_utils::SetAppEulaNotAccepted(false, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppEulaNotAccepted_User_ClientStateExists) {
EXPECT_SUCCEEDED(RegKey::CreateKey(kAppUserClientStatePath));
EXPECT_SUCCEEDED(goopdate_utils::SetAppEulaNotAccepted(false, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppEulaNotAccepted_User_ClientStateOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(goopdate_utils::SetAppEulaNotAccepted(false, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppEulaNotAccepted_User_ClientStateZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(goopdate_utils::SetAppEulaNotAccepted(false, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppEulaNotAccepted_User_ClientStateZero_ClientStateMediumOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(goopdate_utils::SetAppEulaNotAccepted(false, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(1, GetDwordValue(kAppUserClientStateMediumPath,
_T("eulaaccepted")));
}
// Also tests that machine values are not affected.
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppEulaNotAccepted_User_ClientStateZero_ClientStateMediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(goopdate_utils::SetAppEulaNotAccepted(false, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStateMediumPath,
_T("eulaaccepted")));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
ClearAppEulaNotAccepted_Machine_NoKey) {
EXPECT_SUCCEEDED(goopdate_utils::ClearAppEulaNotAccepted(true, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
ClearAppEulaNotAccepted_Machine_ClientStateExists) {
EXPECT_SUCCEEDED(RegKey::CreateKey(kAppMachineClientStatePath));
EXPECT_SUCCEEDED(goopdate_utils::ClearAppEulaNotAccepted(true, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
ClearAppEulaNotAccepted_Machine_ClientStateOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(goopdate_utils::ClearAppEulaNotAccepted(true, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
ClearAppEulaNotAccepted_Machine_ClientStateZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(goopdate_utils::ClearAppEulaNotAccepted(true, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
ClearAppEulaNotAccepted_Machine_ClientStateZero_ClientStateMediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(goopdate_utils::ClearAppEulaNotAccepted(true, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
}
// Also tests that user values are not affected.
TEST_F(GoopdateUtilsRegistryProtectedTest,
ClearAppEulaNotAccepted_Machine_ClientStateNone_ClientStateMediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(goopdate_utils::ClearAppEulaNotAccepted(true, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("eulaaccepted")));
EXPECT_EQ(0,
GetDwordValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(0,
GetDwordValue(kAppUserClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
ClearAppEulaNotAccepted_User_NoKey) {
EXPECT_SUCCEEDED(goopdate_utils::ClearAppEulaNotAccepted(false, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
ClearAppEulaNotAccepted_User_ClientStateExists) {
EXPECT_SUCCEEDED(RegKey::CreateKey(kAppUserClientStatePath));
EXPECT_SUCCEEDED(goopdate_utils::ClearAppEulaNotAccepted(false, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
ClearAppEulaNotAccepted_User_ClientStateOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(goopdate_utils::ClearAppEulaNotAccepted(false, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
ClearAppEulaNotAccepted_User_ClientStateZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(goopdate_utils::ClearAppEulaNotAccepted(false, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
ClearAppEulaNotAccepted_User_ClientStateZero_ClientStateMediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(goopdate_utils::ClearAppEulaNotAccepted(false, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(0,
GetDwordValue(kAppUserClientStateMediumPath, _T("eulaaccepted")));
}
// Also tests that machine values are not affected.
TEST_F(GoopdateUtilsRegistryProtectedTest,
ClearAppEulaNotAccepted_User_ClientStateNone_ClientStateMediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(goopdate_utils::ClearAppEulaNotAccepted(false, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(0,
GetDwordValue(kAppUserClientStateMediumPath, _T("eulaaccepted")));
EXPECT_EQ(0,
GetDwordValue(kAppMachineClientStatePath, _T("eulaaccepted")));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStateMediumPath,
_T("eulaaccepted")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_Machine_NoKey) {
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(true, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStatePath, _T("usagestats")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_Machine_ClientStateExists) {
EXPECT_SUCCEEDED(RegKey::CreateKey(kAppMachineClientStatePath));
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(true, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStatePath, _T("usagestats")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_Machine_ClientStateOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("usagestats"),
static_cast<DWORD>(1)));
EXPECT_TRUE(goopdate_utils::AreAppUsageStatsEnabled(true, kAppGuid));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStatePath, _T("usagestats")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_Machine_ClientStateNegativeOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("usagestats"),
static_cast<DWORD>(-1)));
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(true, kAppGuid));
EXPECT_EQ(-1, GetDwordValue(kAppMachineClientStatePath, _T("usagestats")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_Machine_ClientStateZero_MediumNotExist) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("usagestats"),
static_cast<DWORD>(0)));
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(true, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStatePath, _T("usagestats")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_Machine_ClientStateZero_MediumExists) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("usagestats"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::CreateKey(kAppMachineClientStateMediumPath));
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(true, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStatePath, _T("usagestats")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("usagestats")));
}
// ClientStateMedium overrides ClientState.
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_Machine_ClientStateZero_MediumOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("usagestats"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(1)));
EXPECT_TRUE(goopdate_utils::AreAppUsageStatsEnabled(true, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStatePath, _T("usagestats")));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStateMediumPath,
_T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_Machine_ClientStateZero_MediumNegativeOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("usagestats"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(-1)));
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(true, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStatePath, _T("usagestats")));
EXPECT_EQ(-1, GetDwordValue(kAppMachineClientStateMediumPath,
_T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_Machine_ClientStateZero_MediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("usagestats"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(0)));
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(true, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStatePath, _T("usagestats")));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStateMediumPath,
_T("usagestats")));
}
// ClientStateMedium overrides ClientState.
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_Machine_ClientStateOne_MediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("usagestats"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(0)));
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(true, kAppGuid));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStatePath, _T("usagestats")));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStateMediumPath,
_T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_Machine_ClientStateNotExist_MediumOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(1)));
EXPECT_TRUE(goopdate_utils::AreAppUsageStatsEnabled(true, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStatePath, _T("usagestats")));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStateMediumPath,
_T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_Machine_ClientStateNotExist_MediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(0)));
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(true, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStatePath, _T("usagestats")));
EXPECT_EQ(0, GetDwordValue(kAppMachineClientStateMediumPath,
_T("usagestats")));
}
// User does not affect machine.
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_Machine_UserOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("usagestats"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(1)));
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(true, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStatePath, _T("usagestats")));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("usagestats")));
EXPECT_EQ(1, GetDwordValue(kAppUserClientStatePath, _T("usagestats")));
EXPECT_EQ(1, GetDwordValue(kAppUserClientStateMediumPath,
_T("usagestats")));
}
// ClientStateMedium is not supported for user apps.
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_User_NoKey) {
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(false, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStatePath, _T("usagestats")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_User_ClientStateExists) {
EXPECT_SUCCEEDED(RegKey::CreateKey(kAppUserClientStatePath));
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(false, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStatePath, _T("usagestats")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_User_ClientStateOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("usagestats"),
static_cast<DWORD>(1)));
EXPECT_TRUE(goopdate_utils::AreAppUsageStatsEnabled(false, kAppGuid));
EXPECT_EQ(1, GetDwordValue(kAppUserClientStatePath, _T("usagestats")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_User_ClientStateNegativeOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("usagestats"),
static_cast<DWORD>(-1)));
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(false, kAppGuid));
EXPECT_EQ(-1, GetDwordValue(kAppUserClientStatePath, _T("usagestats")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_User_ClientStateZero_MediumNotExist) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("usagestats"),
static_cast<DWORD>(0)));
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(false, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStatePath, _T("usagestats")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_User_ClientStateZero_MediumExists) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("usagestats"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::CreateKey(kAppUserClientStateMediumPath));
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(false, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStatePath, _T("usagestats")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("usagestats")));
}
// ClientStateMedium is not used.
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_User_ClientStateZero_MediumOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("usagestats"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(1)));
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(false, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStatePath, _T("usagestats")));
EXPECT_EQ(1, GetDwordValue(kAppUserClientStateMediumPath,
_T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_User_ClientStateZero_MediumNegativeOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("usagestats"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(-1)));
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(false, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStatePath, _T("usagestats")));
EXPECT_EQ(-1, GetDwordValue(kAppUserClientStateMediumPath,
_T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_User_ClientStateZero_MediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("usagestats"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(0)));
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(false, kAppGuid));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStatePath, _T("usagestats")));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStateMediumPath,
_T("usagestats")));
}
// ClientStateMedium is not used.
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_User_ClientStateOne_MediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
_T("usagestats"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(0)));
EXPECT_TRUE(goopdate_utils::AreAppUsageStatsEnabled(false, kAppGuid));
EXPECT_EQ(1, GetDwordValue(kAppUserClientStatePath, _T("usagestats")));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStateMediumPath,
_T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_User_ClientStateNotExist_MediumOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(1)));
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(false, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStatePath, _T("usagestats")));
EXPECT_EQ(1, GetDwordValue(kAppUserClientStateMediumPath,
_T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_User_ClientStateNotExist_MediumZero) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(0)));
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(false, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStatePath, _T("usagestats")));
EXPECT_EQ(0, GetDwordValue(kAppUserClientStateMediumPath,
_T("usagestats")));
}
// Machine does not affect user.
TEST_F(GoopdateUtilsRegistryProtectedTest,
AreAppUsageStatsEnabled_User_MachineOne) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
_T("usagestats"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(1)));
EXPECT_FALSE(goopdate_utils::AreAppUsageStatsEnabled(false, kAppGuid));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStatePath, _T("usagestats")));
EXPECT_FALSE(
RegKey::HasValue(kAppUserClientStateMediumPath, _T("usagestats")));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStatePath, _T("usagestats")));
EXPECT_EQ(1, GetDwordValue(kAppMachineClientStateMediumPath,
_T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetUsageStatsEnable_VerifyLegacyLocationNotSet) {
EXPECT_SUCCEEDED(
goopdate_utils::SetUsageStatsEnable(true, kAppGuid, TRISTATE_TRUE));
ASSERT_TRUE(RegKey::HasKey(MACHINE_REG_UPDATE));
ASSERT_FALSE(RegKey::HasValue(MACHINE_REG_UPDATE,
kLegacyRegValueCollectUsageStats));
ASSERT_FALSE(RegKey::HasValue(MACHINE_REG_UPDATE, _T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest, SetUsageStatsEnable_Machine_Off) {
EXPECT_SUCCEEDED(
goopdate_utils::SetUsageStatsEnable(true, kAppGuid, TRISTATE_FALSE));
ASSERT_TRUE(RegKey::HasKey(kAppMachineClientStatePath));
ASSERT_TRUE(RegKey::HasValue(kAppMachineClientStatePath,
_T("usagestats")));
ASSERT_FALSE(RegKey::HasKey(kAppUserClientStatePath));
DWORD enable_value = 1;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
_T("usagestats"),
&enable_value));
EXPECT_EQ(0, enable_value);
}
TEST_F(GoopdateUtilsRegistryProtectedTest, SetUsageStatsEnable_User_Off) {
EXPECT_SUCCEEDED(
goopdate_utils::SetUsageStatsEnable(false, kAppGuid, TRISTATE_FALSE));
ASSERT_TRUE(RegKey::HasKey(kAppUserClientStatePath));
ASSERT_TRUE(RegKey::HasValue(kAppUserClientStatePath,
_T("usagestats")));
ASSERT_FALSE(RegKey::HasKey(kAppMachineClientStatePath));
DWORD enable_value = 1;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppUserClientStatePath,
_T("usagestats"),
&enable_value));
EXPECT_EQ(0, enable_value);
}
TEST_F(GoopdateUtilsRegistryProtectedTest, SetUsageStatsEnable_Machine_On) {
EXPECT_SUCCEEDED(
goopdate_utils::SetUsageStatsEnable(true, kAppGuid, TRISTATE_TRUE));
ASSERT_TRUE(RegKey::HasKey(kAppMachineClientStatePath));
ASSERT_TRUE(RegKey::HasValue(kAppMachineClientStatePath,
_T("usagestats")));
ASSERT_FALSE(RegKey::HasKey(kAppUserClientStatePath));
DWORD enable_value = 0;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
_T("usagestats"),
&enable_value));
EXPECT_EQ(1, enable_value);
}
TEST_F(GoopdateUtilsRegistryProtectedTest, SetUsageStatsEnable_User_On) {
EXPECT_SUCCEEDED(
goopdate_utils::SetUsageStatsEnable(false, kAppGuid, TRISTATE_TRUE));
ASSERT_TRUE(RegKey::HasKey(kAppUserClientStatePath));
ASSERT_TRUE(RegKey::HasValue(kAppUserClientStatePath,
_T("usagestats")));
ASSERT_FALSE(RegKey::HasKey(kAppMachineClientStatePath));
DWORD enable_value = 0;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppUserClientStatePath,
_T("usagestats"),
&enable_value));
EXPECT_EQ(1, enable_value);
}
TEST_F(GoopdateUtilsRegistryProtectedTest, SetUsageStatsEnable_Machine_None) {
EXPECT_SUCCEEDED(
goopdate_utils::SetUsageStatsEnable(true, kAppGuid, TRISTATE_NONE));
ASSERT_FALSE(RegKey::HasKey(MACHINE_REG_UPDATE));
ASSERT_FALSE(RegKey::HasKey(USER_REG_UPDATE));
EXPECT_SUCCEEDED(
goopdate_utils::SetUsageStatsEnable(false, kAppGuid, TRISTATE_NONE));
ASSERT_FALSE(RegKey::HasKey(USER_REG_UPDATE));
ASSERT_FALSE(RegKey::HasKey(MACHINE_REG_UPDATE));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetUsageStatsEnable_Machine_Overwrite) {
EXPECT_SUCCEEDED(
goopdate_utils::SetUsageStatsEnable(true, kAppGuid, TRISTATE_FALSE));
ASSERT_TRUE(RegKey::HasKey(kAppMachineClientStatePath));
ASSERT_TRUE(RegKey::HasValue(kAppMachineClientStatePath,
_T("usagestats")));
ASSERT_FALSE(RegKey::HasKey(kAppUserClientStatePath));
DWORD enable_value = 1;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
_T("usagestats"),
&enable_value));
EXPECT_EQ(0, enable_value);
EXPECT_SUCCEEDED(
goopdate_utils::SetUsageStatsEnable(true, kAppGuid, TRISTATE_TRUE));
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
_T("usagestats"),
&enable_value));
EXPECT_EQ(1, enable_value);
EXPECT_SUCCEEDED(
goopdate_utils::SetUsageStatsEnable(true, kAppGuid, TRISTATE_FALSE));
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
_T("usagestats"),
&enable_value));
EXPECT_EQ(0, enable_value);
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetUsageStatsEnable_Machine_NoneDoesNotOverwrite) {
EXPECT_SUCCEEDED(
goopdate_utils::SetUsageStatsEnable(true, kAppGuid, TRISTATE_FALSE));
ASSERT_TRUE(RegKey::HasKey(kAppMachineClientStatePath));
ASSERT_TRUE(RegKey::HasValue(kAppMachineClientStatePath,
_T("usagestats")));
ASSERT_FALSE(RegKey::HasKey(kAppUserClientStatePath));
DWORD enable_value = 1;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
_T("usagestats"),
&enable_value));
EXPECT_EQ(0, enable_value);
EXPECT_SUCCEEDED(
goopdate_utils::SetUsageStatsEnable(true, kAppGuid, TRISTATE_NONE));
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
_T("usagestats"),
&enable_value));
EXPECT_EQ(0, enable_value);
EXPECT_SUCCEEDED(
goopdate_utils::SetUsageStatsEnable(true, kAppGuid, TRISTATE_TRUE));
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
_T("usagestats"),
&enable_value));
EXPECT_EQ(1, enable_value);
EXPECT_SUCCEEDED(
goopdate_utils::SetUsageStatsEnable(true, kAppGuid, TRISTATE_NONE));
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
_T("usagestats"),
&enable_value));
EXPECT_EQ(1, enable_value);
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetUsageStatsEnable_Machine_ClientStateMediumCleared) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(
goopdate_utils::SetUsageStatsEnable(true, kAppGuid, TRISTATE_TRUE));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("usagestats")));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(
goopdate_utils::SetUsageStatsEnable(true, kAppGuid, TRISTATE_FALSE));
EXPECT_FALSE(
RegKey::HasValue(kAppMachineClientStateMediumPath, _T("usagestats")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetUsageStatsEnable_Machine_NoneDoesNotClearClientStateMedium) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(
goopdate_utils::SetUsageStatsEnable(true, kAppGuid, TRISTATE_NONE));
DWORD enable_value = 0;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStateMediumPath,
_T("usagestats"),
&enable_value));
EXPECT_EQ(1, enable_value);
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetUsageStatsEnable_User_ClientStateMediumNotCleared) {
// User and machine values should not be cleared.
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(0)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(0)));
// True does not clear them.
EXPECT_SUCCEEDED(
goopdate_utils::SetUsageStatsEnable(false, kAppGuid, TRISTATE_TRUE));
DWORD enable_value = 1;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppUserClientStateMediumPath,
_T("usagestats"),
&enable_value));
EXPECT_EQ(0, enable_value);
enable_value = 1;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStateMediumPath,
_T("usagestats"),
&enable_value));
EXPECT_EQ(0, enable_value);
// False does not clear them.
EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStateMediumPath,
_T("usagestats"),
static_cast<DWORD>(1)));
EXPECT_SUCCEEDED(
goopdate_utils::SetUsageStatsEnable(false, kAppGuid, TRISTATE_FALSE));
enable_value = 0;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppUserClientStateMediumPath,
_T("usagestats"),
&enable_value));
EXPECT_EQ(1, enable_value);
enable_value = 0;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStateMediumPath,
_T("usagestats"),
&enable_value));
EXPECT_EQ(1, enable_value);
}
TEST_F(GoopdateUtilsRegistryProtectedTest, ConvertLegacyUsageStats_NotPresent) {
EXPECT_SUCCEEDED(goopdate_utils::ConvertLegacyUsageStats(true));
ASSERT_FALSE(RegKey::HasKey(MACHINE_REG_CLIENT_STATE));
}
TEST_F(GoopdateUtilsRegistryProtectedTest, ConvertLegacyUsageStats_Present) {
DWORD val = 1;
EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE,
kLegacyRegValueCollectUsageStats,
val));
EXPECT_SUCCEEDED(goopdate_utils::ConvertLegacyUsageStats(true));
ASSERT_TRUE(RegKey::HasKey(MACHINE_REG_CLIENT_STATE_GOOPDATE));
ASSERT_TRUE(RegKey::HasValue(MACHINE_REG_CLIENT_STATE_GOOPDATE,
_T("usagestats")));
DWORD enable_value = 0;
EXPECT_SUCCEEDED(RegKey::GetValue(MACHINE_REG_CLIENT_STATE_GOOPDATE,
_T("usagestats"),
&enable_value));
EXPECT_EQ(1, enable_value);
ASSERT_FALSE(RegKey::HasValue(MACHINE_REG_UPDATE,
kLegacyRegValueCollectUsageStats));
}
TEST_F(GoopdateUtilsRegistryProtectedTest, GetClientsStringValueFromRegistry) {
CString value;
// Test IsMachine = true
const TCHAR* dummy_machine_clients_key = MACHINE_REG_CLIENTS DUMMY_CLSID;
ASSERT_FALSE(RegKey::HasKey(dummy_machine_clients_key));
EXPECT_FAILED(goopdate_utils::GetClientsStringValueFromRegistry(
true, DUMMY_CLSID, _T("name"), &value));
ASSERT_SUCCEEDED(RegKey::DeleteKey(dummy_machine_clients_key));
ASSERT_SUCCEEDED(RegKey::SetValue(dummy_machine_clients_key,
_T("name"),
_T("dummy")));
EXPECT_SUCCEEDED(goopdate_utils::GetClientsStringValueFromRegistry(
true, DUMMY_CLSID, _T("name"), &value));
EXPECT_EQ(_T("dummy"), value);
// Test IsMachine = false
const TCHAR* dummy_user_clients_key = USER_REG_CLIENTS DUMMY_CLSID;
ASSERT_FALSE(RegKey::HasKey(dummy_user_clients_key));
EXPECT_FAILED(goopdate_utils::GetClientsStringValueFromRegistry(
false, DUMMY_CLSID, _T("name"), &value));
ASSERT_SUCCEEDED(RegKey::SetValue(dummy_user_clients_key,
_T("name"),
_T("dummy2")));
EXPECT_SUCCEEDED(goopdate_utils::GetClientsStringValueFromRegistry(
false, DUMMY_CLSID, _T("name"), &value));
EXPECT_EQ(_T("dummy2"), value);
}
TEST_F(GoopdateUtilsRegistryProtectedTest, GetVerFromRegistry) {
CString version;
// Test IsMachine = true
const TCHAR* dummy_machine_clients_key = MACHINE_REG_CLIENTS DUMMY_CLSID;
ASSERT_FALSE(RegKey::HasKey(dummy_machine_clients_key));
EXPECT_FAILED(goopdate_utils::GetVerFromRegistry(true,
DUMMY_CLSID,
&version));
ASSERT_SUCCEEDED(RegKey::DeleteKey(dummy_machine_clients_key));
ASSERT_SUCCEEDED(RegKey::SetValue(dummy_machine_clients_key,
_T("pv"),
_T("1.0.101.0")));
EXPECT_SUCCEEDED(goopdate_utils::GetVerFromRegistry(true,
DUMMY_CLSID,
&version));
EXPECT_EQ(_T("1.0.101.0"), version);
// Test IsMachine = false
const TCHAR* dummy_user_clients_key = USER_REG_CLIENTS DUMMY_CLSID;
ASSERT_FALSE(RegKey::HasKey(dummy_user_clients_key));
EXPECT_FAILED(goopdate_utils::GetVerFromRegistry(false,
DUMMY_CLSID,
&version));
ASSERT_SUCCEEDED(RegKey::SetValue(dummy_user_clients_key,
_T("pv"),
_T("1.0.102.0")));
EXPECT_SUCCEEDED(goopdate_utils::GetVerFromRegistry(false,
DUMMY_CLSID,
&version));
EXPECT_EQ(_T("1.0.102.0"), version);
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
BuildHttpGetString_MachineNoTestSource) {
CString expected_str_before_os(
_T("http://www.google.com/hello.py?code=123&")
_T("hl=en&errorcode=0x0000000a&extracode1=0x00000016&extracode2=0&")
_T("app=%7BB7BAF788-9D64-49c3-AFDC-B336AB12F332%7D&")
_T("guver=1.0.51.0&ismachine=1&os="));
CString expected_str_after_os(
_T("&iid=%7B0F973A20-C484-462B-952C-5D9A459E3326%7D") // Upper case 'B'.
_T("&brand=GoOG&source=click"));
bool expected_test_source = false;
#if defined(DEBUG) || !OFFICIAL_BUILD
// TestSource is always set for these builds. It may be set for opt official
// builds but this is not guaranteed.
expected_str_after_os.Append(_T("&testsource="));
expected_test_source = true;
#endif
CString url_req;
EXPECT_SUCCEEDED(goopdate_utils::BuildHttpGetString(
_T("http://www.google.com/hello.py?code=123&"),
10,
22,
0,
APP_GUID,
_T("1.0.51.0"),
true,
_T("en"),
StringToGuid(_T("{0F973A20-C484-462b-952C-5D9A459E3326}")),
_T("GoOG"),
_T("click"),
&url_req));
EXPECT_EQ(-1, url_req.FindOneOf(_T("{}")));
EXPECT_LE(expected_str_before_os.GetLength(), url_req.GetLength());
EXPECT_EQ(0, url_req.Find(expected_str_before_os)) <<
_T("Expected: ") << expected_str_before_os.GetString() << std::endl <<
_T("At beginning of: ") << url_req.GetString();
int os_fragment_len = 0;
EXPECT_EQ(expected_str_before_os.GetLength(),
VerifyOSInUrl(url_req, &os_fragment_len)) <<
_T("Expected OS string not found in: ") << url_req.GetString();
EXPECT_EQ(expected_str_before_os.GetLength() + os_fragment_len,
url_req.Find(expected_str_after_os)) <<
_T("Expected: ") << expected_str_after_os.GetString() << std::endl <<
_T("At end of: ") << url_req.GetString();
if (expected_test_source) {
CString expected_testsource_str =
ConfigManager::Instance()->GetTestSource();
int expected_testsource_start = expected_str_before_os.GetLength() +
os_fragment_len +
expected_str_after_os.GetLength();
EXPECT_EQ(expected_testsource_start, url_req.Find(expected_testsource_str));
EXPECT_EQ(expected_testsource_start + expected_testsource_str.GetLength(),
url_req.GetLength());
} else {
EXPECT_EQ(expected_str_before_os.GetLength() +
os_fragment_len +
expected_str_after_os.GetLength(),
url_req.GetLength());
EXPECT_EQ(-1, url_req.Find(_T("testsource")));
}
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
BuildHttpGetString_UserWithTestSource) {
#define APP_GUID _T("{B7BAF788-9D64-49c3-AFDC-B336AB12F332}")
ASSERT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE_DEV,
kRegValueTestSource,
_T("dev")));
const CString expected_str_before_os(
_T("http://www.google.com/hello.py?")
_T("hl=de&errorcode=0xffffffff&extracode1=0x00000000&extracode2=99&")
_T("app=%7BB7BAF788-9D64-49c3-AFDC-B336AB12F332%7D&")
_T("guver=foo%20bar&ismachine=0&os="));
const CString expected_str_after_os(
_T("&iid=%7B0F973A20-C484-462B-952C-5D9A459E3326%7D") // Upper case 'B'.
_T("&brand=GGLE&source=clack")
_T("&testsource="));
CString url_req;
EXPECT_SUCCEEDED(goopdate_utils::BuildHttpGetString(
_T("http://www.google.com/hello.py?"),
0xffffffff,
0,
99,
APP_GUID,
_T("foo bar"),
false,
_T("de"),
StringToGuid(_T("{0F973A20-C484-462b-952C-5D9A459E3326}")),
_T("GGLE"),
_T("clack"),
&url_req));
EXPECT_LE(expected_str_before_os.GetLength(), url_req.GetLength());
EXPECT_EQ(0, url_req.Find(expected_str_before_os));
int os_fragment_len = 0;
EXPECT_EQ(expected_str_before_os.GetLength(),
VerifyOSInUrl(url_req, &os_fragment_len)) <<
_T("Expected: ") << expected_str_before_os.GetString() << std::endl <<
_T("At beginning of: ") << url_req.GetString();
EXPECT_EQ(expected_str_before_os.GetLength() + os_fragment_len,
url_req.Find(expected_str_after_os)) <<
_T("Expected OS string not found in: ") << url_req.GetString();
const CString expected_testsource_str = _T("dev");
int expected_testsource_start = expected_str_before_os.GetLength() +
os_fragment_len +
expected_str_after_os.GetLength();
EXPECT_EQ(expected_testsource_start, url_req.Find(expected_testsource_str));
EXPECT_EQ(expected_testsource_start + expected_testsource_str.GetLength(),
url_req.GetLength());
}
// MID and UID automatically get generated when they are read, so it is not
// possible for them to be empty. IID and brand code is emtpy if not present.
TEST_F(GoopdateUtilsRegistryProtectedTest,
BuildHttpGetString_NoMidUidIidBrandCode) {
const CString expected_str_before_os(
_T("http://www.google.com/hello.py?")
_T("hl=en&errorcode=0xffffffff&extracode1=0x00000000&extracode2=99&")
_T("app=%7BB7BAF788-9D64-49c3-AFDC-B336AB12F332%7D&")
_T("guver=foo%20bar&ismachine=1&os="));
const CString expected_str_after_uid(
_T("&mid=&uid=&iid=&brand=&source=cluck"));
CString url_req;
EXPECT_SUCCEEDED(goopdate_utils::BuildHttpGetString(
_T("http://www.google.com/hello.py?"),
0xffffffff,
0,
99,
_T("{B7BAF788-9D64-49c3-AFDC-B336AB12F332}"),
_T("foo bar"),
true,
_T("en"),
GUID_NULL,
_T(""),
_T("cluck"),
&url_req));
EXPECT_EQ(0, url_req.Find(expected_str_before_os)) <<
_T("Expected: ") << expected_str_before_os.GetString() << std::endl <<
_T("At beginning of: ") << url_req.GetString();
EXPECT_GT(0, url_req.Find(expected_str_after_uid));
CString expected_test_src;
#if defined(DEBUG) || !OFFICIAL_BUILD
expected_test_src = _T("&testsource=auto");
#endif
const CString expected_iid_str(_T("&iid=&brand=&source=cluck"));
EXPECT_EQ(url_req.GetLength() -
expected_iid_str.GetLength() -
expected_test_src.GetLength(),
url_req.Find(expected_iid_str));
}
TEST_F(GoopdateUtilsRegistryProtectedTest, GetNumClients) {
size_t num_clients(0);
// Fails when no "Clients" key.
EXPECT_HRESULT_FAILED(GetNumClients(true, &num_clients));
EXPECT_HRESULT_FAILED(GetNumClients(false, &num_clients));
// Tests no subkeys.
const TCHAR* keys_to_create[] = { MACHINE_REG_CLIENTS, USER_REG_CLIENTS };
EXPECT_HRESULT_SUCCEEDED(RegKey::CreateKeys(keys_to_create,
arraysize(keys_to_create)));
EXPECT_HRESULT_SUCCEEDED(GetNumClients(true, &num_clients));
EXPECT_EQ(0, num_clients);
EXPECT_HRESULT_SUCCEEDED(GetNumClients(false, &num_clients));
EXPECT_EQ(0, num_clients);
// Subkeys should be counted. Values should not be counted.
RegKey machine_key;
EXPECT_HRESULT_SUCCEEDED(machine_key.Open(HKEY_LOCAL_MACHINE,
GOOPDATE_REG_RELATIVE_CLIENTS));
EXPECT_HRESULT_SUCCEEDED(machine_key.SetValue(_T("name"), _T("value")));
EXPECT_HRESULT_SUCCEEDED(GetNumClients(true, &num_clients));
EXPECT_EQ(0, num_clients);
const TCHAR* app_id = _T("{AA5523E3-40C0-4b85-B074-4BBA09559CCD}");
EXPECT_HRESULT_SUCCEEDED(machine_key.Create(machine_key.Key(), app_id));
EXPECT_HRESULT_SUCCEEDED(GetNumClients(true, &num_clients));
EXPECT_EQ(1, num_clients);
// Tests user scenario.
RegKey user_key;
EXPECT_HRESULT_SUCCEEDED(user_key.Open(HKEY_CURRENT_USER,
GOOPDATE_REG_RELATIVE_CLIENTS));
EXPECT_HRESULT_SUCCEEDED(user_key.SetValue(_T("name"), _T("value")));
EXPECT_HRESULT_SUCCEEDED(GetNumClients(false, &num_clients));
EXPECT_EQ(0, num_clients);
EXPECT_HRESULT_SUCCEEDED(user_key.Create(user_key.Key(), app_id));
EXPECT_HRESULT_SUCCEEDED(GetNumClients(false, &num_clients));
EXPECT_EQ(1, num_clients);
}
TEST(GoopdateUtilsTest, BuildInstallDirectory_Machine) {
const CPath dir = goopdate_utils::BuildInstallDirectory(true, _T("1.2.3.0"));
CString program_files_path;
EXPECT_SUCCEEDED(GetFolderPath(CSIDL_PROGRAM_FILES, &program_files_path));
EXPECT_STREQ(program_files_path + _T("\\Google\\Update\\1.2.3.0"), dir);
}
TEST(GoopdateUtilsTest, BuildInstallDirectory_User) {
CPath expected_path(GetGoogleUpdateUserPath());
expected_path.Append(_T("4.5.6.7"));
EXPECT_STREQ(expected_path,
goopdate_utils::BuildInstallDirectory(false, _T("4.5.6.7")));
}
TEST(GoopdateUtilsTest, ConvertBrowserTypeToString) {
for (int i = 0; i < BROWSER_MAX; ++i) {
CString str_type = goopdate_utils::ConvertBrowserTypeToString(
static_cast<BrowserType>(i));
BrowserType type = BROWSER_UNKNOWN;
ASSERT_HRESULT_SUCCEEDED(
goopdate_utils::ConvertStringToBrowserType(str_type, &type));
ASSERT_EQ(static_cast<int>(type), i);
}
}
void CompareArgsAndUpdateResponseData(const UpdateResponseData& response_data,
const CString& app_name,
const CommandLineExtraArgs& args) {
ASSERT_STREQ(GuidToString(response_data.guid()),
GuidToString(args.apps[0].app_guid));
ASSERT_STREQ(app_name, args.apps[0].app_name);
ASSERT_EQ(response_data.needs_admin() == NEEDS_ADMIN_YES ? true : false,
args.apps[0].needs_admin);
ASSERT_STREQ(response_data.ap(), args.apps[0].ap);
ASSERT_STREQ(response_data.tt_token(), args.apps[0].tt_token);
ASSERT_EQ(GuidToString(response_data.installation_id()),
GuidToString(args.installation_id));
ASSERT_TRUE(args.brand_code.IsEmpty());
ASSERT_TRUE(args.client_id.IsEmpty());
ASSERT_TRUE(args.referral_id.IsEmpty());
ASSERT_EQ(response_data.browser_type(), args.browser_type);
ASSERT_EQ(TRISTATE_NONE, args.usage_stats_enable);
}
TEST(GoopdateUtilsTest, ConvertResponseDataToExtraArgsRequired) {
// These unit tests create an update response and then call the test method,
// to create the command line. Next the command line is parsed using the
// command line class and the results are validated.
UpdateResponseData input;
input.set_guid(StringToGuid(_T("{8B59B82E-5543-4807-8590-84BF484AE2F6}")));
CString unicode_name;
ASSERT_TRUE(unicode_name.LoadString(IDS_ESCAPE_TEST));
CString encoded_name;
ASSERT_HRESULT_SUCCEEDED(WideStringToUtf8UrlEncodedString(unicode_name,
&encoded_name));
input.set_app_name(encoded_name);
input.set_needs_admin(NEEDS_ADMIN_YES);
CString extra_args;
ASSERT_HRESULT_SUCCEEDED(
goopdate_utils::ConvertResponseDataToExtraArgs(input, &extra_args));
CommandLineExtraArgs args;
ExtraArgsParser parser;
ASSERT_HRESULT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
CompareArgsAndUpdateResponseData(input, unicode_name, args);
}
TEST(GoopdateUtilsTest, ConvertResponseDataToExtraArgsAll) {
UpdateResponseData input;
input.set_guid(StringToGuid(_T("{8B59B82E-5543-4807-8590-84BF484AE2F6}")));
CString unicode_name;
ASSERT_TRUE(unicode_name.LoadString(IDS_ESCAPE_TEST));
CString encoded_name;
ASSERT_HRESULT_SUCCEEDED(WideStringToUtf8UrlEncodedString(unicode_name,
&encoded_name));
input.set_app_name(encoded_name);
input.set_needs_admin(NEEDS_ADMIN_YES);
input.set_installation_id(
StringToGuid(_T("{E314A405-FCC5-4ed1-BFA4-CBC22F1873BF}")));
input.set_ap(_T("Test_ap"));
input.set_tt_token(_T("Test_tt_token"));
input.set_browser_type(BROWSER_IE);
CString extra_args;
ASSERT_HRESULT_SUCCEEDED(
goopdate_utils::ConvertResponseDataToExtraArgs(input, &extra_args));
CommandLineExtraArgs args;
ExtraArgsParser parser;
ASSERT_HRESULT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
CompareArgsAndUpdateResponseData(input, unicode_name, args);
}
TEST(GoopdateUtilsTest, UniqueEventInEnvironment_User) {
const TCHAR* kEnvVarName = _T("SOME_ENV_VAR_FOR_TEST");
scoped_event created_event;
scoped_event opened_event;
ASSERT_HRESULT_SUCCEEDED(goopdate_utils::CreateUniqueEventInEnvironment(
kEnvVarName,
false,
address(created_event)));
ASSERT_TRUE(created_event);
EXPECT_EQ(WAIT_TIMEOUT, ::WaitForSingleObject(get(created_event), 0));
TCHAR event_name[MAX_PATH] = {0};
EXPECT_TRUE(
::GetEnvironmentVariable(kEnvVarName, event_name, arraysize(event_name)));
ASSERT_HRESULT_SUCCEEDED(goopdate_utils::OpenUniqueEventFromEnvironment(
kEnvVarName,
false,
address(opened_event)));
ASSERT_TRUE(opened_event);
EXPECT_TRUE(::SetEvent(get(opened_event)));
EXPECT_EQ(WAIT_OBJECT_0, ::WaitForSingleObject(get(created_event), 0));
EXPECT_TRUE(::SetEnvironmentVariable(kEnvVarName, NULL));
}
TEST(GoopdateUtilsTest, UniqueEventInEnvironment_Machine) {
const TCHAR* kEnvVarName = _T("OTHER_ENV_VAR_FOR_TEST");
scoped_event created_event;
scoped_event opened_event;
TCHAR event_name[MAX_PATH] = {0};
if (!vista_util::IsUserAdmin()) {
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_INVALID_OWNER),
goopdate_utils::CreateUniqueEventInEnvironment(
kEnvVarName,
true,
address(created_event)));
EXPECT_FALSE(created_event);
EXPECT_FALSE(::GetEnvironmentVariable(kEnvVarName,
event_name,
arraysize(event_name)));
return;
}
ASSERT_HRESULT_SUCCEEDED(goopdate_utils::CreateUniqueEventInEnvironment(
kEnvVarName,
true,
address(created_event)));
ASSERT_TRUE(created_event);
EXPECT_EQ(WAIT_TIMEOUT, ::WaitForSingleObject(get(created_event), 0));
EXPECT_TRUE(
::GetEnvironmentVariable(kEnvVarName, event_name, arraysize(event_name)));
ASSERT_HRESULT_SUCCEEDED(goopdate_utils::OpenUniqueEventFromEnvironment(
kEnvVarName,
true,
address(opened_event)));
ASSERT_TRUE(opened_event);
EXPECT_TRUE(::SetEvent(get(opened_event)));
EXPECT_EQ(WAIT_OBJECT_0, ::WaitForSingleObject(get(created_event), 0));
EXPECT_TRUE(::SetEnvironmentVariable(kEnvVarName, NULL));
}
TEST(GoopdateUtilsTest, UniqueEventInEnvironment_UserMachineMismatch) {
const TCHAR* kEnvVarName = _T("ENV_VAR_FOR_MIXED_TEST");
scoped_event created_event;
scoped_event opened_event;
ASSERT_HRESULT_SUCCEEDED(goopdate_utils::CreateUniqueEventInEnvironment(
kEnvVarName,
false,
address(created_event)));
ASSERT_TRUE(created_event);
EXPECT_EQ(WAIT_TIMEOUT, ::WaitForSingleObject(get(created_event), 0));
TCHAR event_name[MAX_PATH] = {0};
EXPECT_TRUE(
::GetEnvironmentVariable(kEnvVarName, event_name, arraysize(event_name)));
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
goopdate_utils::OpenUniqueEventFromEnvironment(
kEnvVarName,
true,
address(opened_event)));
EXPECT_TRUE(::SetEnvironmentVariable(kEnvVarName, NULL));
}
TEST(GoopdateUtilsTest, OpenUniqueEventFromEnvironment_EnvVarDoesNotExist) {
const TCHAR* kEnvVarName = _T("ANOTHER_ENV_VAR_FOR_TEST");
scoped_event opened_event;
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_ENVVAR_NOT_FOUND),
goopdate_utils::OpenUniqueEventFromEnvironment(
kEnvVarName,
false,
address(opened_event)));
}
TEST(GoopdateUtilsTest, OpenUniqueEventFromEnvironment_EventDoesNotExist) {
const TCHAR* kEnvVarName = _T("YET_ANOTHER_ENV_VAR_FOR_TEST");
EXPECT_TRUE(::SetEnvironmentVariable(kEnvVarName, _T("foo")));
scoped_event opened_event;
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
goopdate_utils::OpenUniqueEventFromEnvironment(
kEnvVarName,
false,
address(opened_event)));
EXPECT_TRUE(::SetEnvironmentVariable(kEnvVarName, NULL));
}
CString GetTempFile() {
TCHAR temp_path[MAX_PATH] = {0};
TCHAR temp_file[MAX_PATH] = {0};
EXPECT_LT(::GetTempPath(arraysize(temp_path), temp_path),
arraysize(temp_path));
EXPECT_NE(0, ::GetTempFileName(temp_path, _T("ut_"), 0, temp_file));
return CString(temp_file);
}
typedef std::map<CString, CString> StringMap;
typedef StringMap::const_iterator StringMapIter;
TEST(GoopdateUtilsTest, ReadNameValuePairsFromFileTest_MissingFile) {
CString temp_file = GetTempFile();
::DeleteFile(temp_file);
ASSERT_FALSE(File::Exists(temp_file));
StringMap pairs_read;
ASSERT_FAILED(goopdate_utils::ReadNameValuePairsFromFile(temp_file,
_T("my_group"),
&pairs_read));
ASSERT_EQ(0, pairs_read.size());
}
TEST(GoopdateUtilsTest, ReadNameValuePairsFromFileTest_ReadEmpty) {
CString temp_file = GetTempFile();
File file_write;
EXPECT_SUCCEEDED(file_write.Open(temp_file, true, false));
file_write.Close();
StringMap pairs_read;
ASSERT_SUCCEEDED(goopdate_utils::ReadNameValuePairsFromFile(temp_file,
_T("my_group"),
&pairs_read));
ASSERT_EQ(0, pairs_read.size());
}
void ValidateStringMapEquality(const StringMap& expected,
const StringMap& actual) {
ASSERT_EQ(expected.size(), actual.size());
StringMapIter it_expected = expected.begin();
for (; it_expected != expected.end(); ++it_expected) {
StringMapIter it_actual = actual.find(it_expected->first);
ASSERT_TRUE(it_actual != actual.end());
ASSERT_STREQ(it_expected->second, it_actual->second);
}
}
TEST(GoopdateUtilsTest, ReadNameValuePairsFromFileTest_ReadOnePair) {
CString group = _T("my_group");
StringMap pairs_write;
pairs_write[_T("some_name")] = _T("some_value");
CString temp_file = GetTempFile();
ASSERT_SUCCEEDED(goopdate_utils::WriteNameValuePairsToFile(temp_file,
group,
pairs_write));
ASSERT_TRUE(File::Exists(temp_file));
StringMap pairs_read;
ASSERT_SUCCEEDED(goopdate_utils::ReadNameValuePairsFromFile(temp_file,
group,
&pairs_read));
ValidateStringMapEquality(pairs_write, pairs_read);
}
TEST(GoopdateUtilsTest, ReadNameValuePairsFromFileTest_ReadManyPairs) {
CString group = _T("my_group");
StringMap pairs_write;
const int kCountPairs = 10;
for (int i = 1; i <= kCountPairs; ++i) {
CString name;
name.Format(_T("name%d"), i);
CString value;
value.Format(_T("value%d"), i);
pairs_write[name] = value;
}
CString temp_file = GetTempFile();
ASSERT_SUCCEEDED(goopdate_utils::WriteNameValuePairsToFile(temp_file,
group,
pairs_write));
ASSERT_TRUE(File::Exists(temp_file));
StringMap pairs_read;
ASSERT_SUCCEEDED(goopdate_utils::ReadNameValuePairsFromFile(temp_file,
group,
&pairs_read));
ValidateStringMapEquality(pairs_write, pairs_read);
}
// This test verifies that InstallTime is created afresh for Omaha if it does
// not exist, and even if the brand code is already set.
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetGoogleUpdateBranding_BrandAlreadyExistsAllEmpty) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
_T("EFGH")));
EXPECT_SUCCEEDED(
goopdate_utils::SetGoogleUpdateBranding(kAppMachineClientStatePath,
_T(""),
_T("")));
const uint32 now = Time64ToInt32(GetCurrent100NSTime());
CString value;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
&value));
EXPECT_STREQ(_T("EFGH"), value);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueClientId,
&value));
DWORD install_time = 0;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
&install_time));
EXPECT_GE(now, install_time);
EXPECT_GE(static_cast<uint32>(200), now - install_time);
}
// This test verifies that InstallTime remains unchanged for Omaha if it already
// exists and the brand code is already set.
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetGoogleUpdateBranding_AllAlreadyExistAllEmpty) {
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
_T("EFGH")));
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueClientId,
_T("existing_partner")));
const DWORD kInstallTime = 1234567890;
EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
kInstallTime));
EXPECT_SUCCEEDED(
goopdate_utils::SetGoogleUpdateBranding(kAppMachineClientStatePath,
_T(""),
_T("")));
CString value;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
&value));
EXPECT_STREQ(_T("EFGH"), value);
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueClientId,
&value));
EXPECT_STREQ(_T("existing_partner"), value);
EXPECT_EQ(kInstallTime,
GetDwordValue(kAppMachineClientStatePath, kRegValueInstallTimeSec));
}
TEST_F(GoopdateUtilsRegistryProtectedTest, SetAppBranding_KeyDoesNotExist) {
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
goopdate_utils::SetAppBranding(kAppMachineClientStatePath,
_T("ABCD"),
_T("some_partner"),
_T("referrer")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest, SetAppBranding_AllEmpty) {
ASSERT_SUCCEEDED(RegKey::CreateKey(kAppMachineClientStatePath));
EXPECT_SUCCEEDED(goopdate_utils::SetAppBranding(kAppMachineClientStatePath,
_T(""),
_T(""),
_T("")));
const uint32 now = Time64ToInt32(GetCurrent100NSTime());
CString value;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
&value));
EXPECT_STREQ(_T("GGLS"), value);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueClientId,
&value));
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueReferralId,
&value));
DWORD install_time = 0;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
&install_time));
EXPECT_GE(now, install_time);
EXPECT_GE(static_cast<uint32>(200), now - install_time);
}
TEST_F(GoopdateUtilsRegistryProtectedTest, SetAppBranding_BrandCodeOnly) {
ASSERT_SUCCEEDED(RegKey::CreateKey(kAppMachineClientStatePath));
EXPECT_SUCCEEDED(goopdate_utils::SetAppBranding(kAppMachineClientStatePath,
_T("ABCD"),
_T(""),
_T("")));
const uint32 now = Time64ToInt32(GetCurrent100NSTime());
CString value;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
&value));
EXPECT_STREQ(_T("ABCD"), value);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueClientId,
&value));
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueReferralId,
&value));
DWORD install_time = 0;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
&install_time));
EXPECT_GE(now, install_time);
EXPECT_GE(static_cast<uint32>(200), now - install_time);
}
TEST_F(GoopdateUtilsRegistryProtectedTest, SetAppBranding_BrandCodeTooLong) {
EXPECT_EQ(E_INVALIDARG, goopdate_utils::SetAppBranding(
kAppMachineClientStatePath,
_T("CHMGon.href)}"),
_T(""),
_T("")));
}
TEST_F(GoopdateUtilsRegistryProtectedTest, SetAppBranding_ClientIdOnly) {
ASSERT_SUCCEEDED(RegKey::CreateKey(kAppMachineClientStatePath));
EXPECT_SUCCEEDED(goopdate_utils::SetAppBranding(kAppMachineClientStatePath,
_T(""),
_T("some_partner"),
_T("")));
const uint32 now = Time64ToInt32(GetCurrent100NSTime());
CString value;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
&value));
EXPECT_STREQ(_T("GGLS"), value);
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueClientId,
&value));
EXPECT_STREQ(_T("some_partner"), value);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueReferralId,
&value));
DWORD install_time = 0;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
&install_time));
EXPECT_GE(now, install_time);
EXPECT_GE(static_cast<uint32>(200), now - install_time);
}
TEST_F(GoopdateUtilsRegistryProtectedTest, SetAppBranding_AllValid) {
ASSERT_SUCCEEDED(RegKey::CreateKey(kAppMachineClientStatePath));
EXPECT_SUCCEEDED(goopdate_utils::SetAppBranding(kAppMachineClientStatePath,
_T("ABCD"),
_T("some_partner"),
_T("referrer")));
const uint32 now = Time64ToInt32(GetCurrent100NSTime());
CString value;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
&value));
EXPECT_STREQ(_T("ABCD"), value);
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueClientId,
&value));
EXPECT_STREQ(_T("some_partner"), value);
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueReferralId,
&value));
EXPECT_STREQ(_T("referrer"), value);
DWORD install_time(0);
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
&install_time));
EXPECT_GE(now, install_time);
EXPECT_GE(static_cast<uint32>(200), now - install_time);
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppBranding_BrandAlreadyExistsAllEmpty) {
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
_T("EFGH")));
EXPECT_SUCCEEDED(goopdate_utils::SetAppBranding(kAppMachineClientStatePath,
_T(""),
_T(""),
_T("")));
CString value;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
&value));
EXPECT_STREQ(_T("EFGH"), value);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueClientId,
&value));
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueReferralId,
&value));
DWORD dword_value(0);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
&dword_value));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppBranding_BrandAlreadyExistsBrandCodeOnly) {
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
_T("EFGH")));
EXPECT_SUCCEEDED(goopdate_utils::SetAppBranding(kAppMachineClientStatePath,
_T("ABCD"),
_T(""),
_T("")));
CString value;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
&value));
EXPECT_STREQ(_T("EFGH"), value);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueClientId,
&value));
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueReferralId,
&value));
DWORD dword_value(0);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
&dword_value));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppBranding_ExistingBrandTooLong) {
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
_T("CHMG4CUTNt")));
EXPECT_SUCCEEDED(goopdate_utils::SetAppBranding(kAppMachineClientStatePath,
_T("ABCD"),
_T(""),
_T("")));
CString value;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
&value));
EXPECT_STREQ(_T("CHMG"), value);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueClientId,
&value));
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueReferralId,
&value));
DWORD dword_value(0);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
&dword_value));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppBranding_BrandAlreadyExistsCliendIdOnly) {
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
_T("EFGH")));
EXPECT_SUCCEEDED(goopdate_utils::SetAppBranding(kAppMachineClientStatePath,
_T(""),
_T("some_partner"),
_T("")));
CString value;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
&value));
EXPECT_STREQ(_T("EFGH"), value);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueClientId,
&value));
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueReferralId,
&value));
DWORD dword_value(0);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
&dword_value));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppBranding_BrandAlreadyExistsBothValid) {
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
_T("EFGH")));
EXPECT_SUCCEEDED(goopdate_utils::SetAppBranding(kAppMachineClientStatePath,
_T("ABCD"),
_T("some_partner"),
_T("")));
CString value;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
&value));
EXPECT_STREQ(_T("EFGH"), value);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueClientId,
&value));
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueReferralId,
&value));
DWORD dword_value(0);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
&dword_value));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppBranding_ClientIdAlreadyExistsAllEmtpy) {
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueClientId,
_T("existing_partner")));
EXPECT_SUCCEEDED(goopdate_utils::SetAppBranding(kAppMachineClientStatePath,
_T(""),
_T(""),
_T("")));
const uint32 now = Time64ToInt32(GetCurrent100NSTime());
CString value;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
&value));
EXPECT_STREQ(_T("GGLS"), value);
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueClientId,
&value));
EXPECT_STREQ(_T("existing_partner"), value);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueReferralId,
&value));
DWORD install_time = 0;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
&install_time));
EXPECT_GE(now, install_time);
EXPECT_GE(static_cast<uint32>(200), now - install_time);
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppBranding_ClientIdAlreadyExistsBrandCodeOnly) {
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueClientId,
_T("existing_partner")));
EXPECT_SUCCEEDED(goopdate_utils::SetAppBranding(kAppMachineClientStatePath,
_T("ABCE"),
_T(""),
_T("")));
const uint32 now = Time64ToInt32(GetCurrent100NSTime());
CString value;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
&value));
EXPECT_STREQ(_T("ABCE"), value);
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueClientId,
&value));
EXPECT_STREQ(_T("existing_partner"), value);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueReferralId,
&value));
DWORD install_time = 0;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
&install_time));
EXPECT_GE(now, install_time);
EXPECT_GE(static_cast<uint32>(200), now - install_time);
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppBranding_ClientIdAlreadyExistsCliendIdOnly) {
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueClientId,
_T("existing_partner")));
EXPECT_SUCCEEDED(goopdate_utils::SetAppBranding(kAppMachineClientStatePath,
_T(""),
_T("some_partner"),
_T("")));
const uint32 now = Time64ToInt32(GetCurrent100NSTime());
CString value;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
&value));
EXPECT_STREQ(_T("GGLS"), value);
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueClientId,
&value));
EXPECT_STREQ(_T("some_partner"), value);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueReferralId,
&value));
DWORD install_time = 0;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
&install_time));
EXPECT_GE(now, install_time);
EXPECT_GE(static_cast<uint32>(200), now - install_time);
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppBranding_ClientIdAlreadyExistsBothValid) {
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueClientId,
_T("existing_partner")));
EXPECT_SUCCEEDED(goopdate_utils::SetAppBranding(kAppMachineClientStatePath,
_T("ABCD"),
_T("some_partner"),
_T("")));
const uint32 now = Time64ToInt32(GetCurrent100NSTime());
CString value;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
&value));
EXPECT_STREQ(_T("ABCD"), value);
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueClientId,
&value));
EXPECT_STREQ(_T("some_partner"), value);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueReferralId,
&value));
DWORD install_time = 0;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
&install_time));
EXPECT_GE(now, install_time);
EXPECT_GE(static_cast<uint32>(200), now - install_time);
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppBranding_AllAlreadyExistAllEmpty) {
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
_T("EFGH")));
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueClientId,
_T("existing_partner")));
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueReferralId,
__T("existingreferrerid")));
const DWORD kInstallTime = 1234567890;
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
kInstallTime));
EXPECT_SUCCEEDED(goopdate_utils::SetAppBranding(kAppMachineClientStatePath,
_T(""),
_T(""),
_T("")));
CString value;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
&value));
EXPECT_STREQ(_T("EFGH"), value);
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueClientId,
&value));
EXPECT_STREQ(_T("existing_partner"), value);
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueReferralId,
&value));
EXPECT_STREQ(__T("existingreferrerid"), value);
EXPECT_EQ(kInstallTime,
GetDwordValue(kAppMachineClientStatePath, kRegValueInstallTimeSec));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppBranding_AllAlreadyExistBrandCodeOnly) {
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
_T("EFGH")));
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueClientId,
_T("existing_partner")));
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueReferralId,
__T("existingreferrerid")));
const DWORD kInstallTime = 1234567890;
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
kInstallTime));
EXPECT_SUCCEEDED(goopdate_utils::SetAppBranding(kAppMachineClientStatePath,
_T("ABCD"),
_T(""),
_T("")));
CString value;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
&value));
EXPECT_STREQ(_T("EFGH"), value);
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueClientId,
&value));
EXPECT_STREQ(_T("existing_partner"), value);
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueReferralId,
&value));
EXPECT_STREQ(__T("existingreferrerid"), value);
EXPECT_EQ(kInstallTime,
GetDwordValue(kAppMachineClientStatePath, kRegValueInstallTimeSec));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppBranding_BothAlreadyExistCliendIdOnly) {
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
_T("EFGH")));
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueClientId,
_T("existing_partner")));
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueReferralId,
__T("existingreferrerid")));
EXPECT_SUCCEEDED(goopdate_utils::SetAppBranding(kAppMachineClientStatePath,
_T(""),
_T("some_partner"),
_T("")));
CString value;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
&value));
EXPECT_STREQ(_T("EFGH"), value);
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueClientId,
&value));
EXPECT_STREQ(_T("existing_partner"), value);
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueReferralId,
&value));
EXPECT_STREQ(__T("existingreferrerid"), value);
DWORD dword_value(0);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
&dword_value));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppBranding_BothAlreadyExistBothValid) {
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
_T("EFGH")));
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueClientId,
_T("existing_partner")));
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueReferralId,
_T("existingreferrerid")));
EXPECT_SUCCEEDED(goopdate_utils::SetAppBranding(kAppMachineClientStatePath,
_T("ABCD"),
_T("some_partner"),
_T("")));
CString value;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
&value));
EXPECT_STREQ(_T("EFGH"), value);
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueClientId,
&value));
EXPECT_STREQ(_T("existing_partner"), value);
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueReferralId,
&value));
EXPECT_STREQ(_T("existingreferrerid"), value);
DWORD dword_value(0);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
&dword_value));
}
TEST_F(GoopdateUtilsRegistryProtectedTest,
SetAppBranding_InstallTimeAlreadyExistsBrandCodeOnly) {
const DWORD kExistingInstallTime = 1234567890;
ASSERT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
kExistingInstallTime));
EXPECT_SUCCEEDED(goopdate_utils::SetAppBranding(kAppMachineClientStatePath,
_T("ABCE"),
_T(""),
_T("")));
const uint32 now = Time64ToInt32(GetCurrent100NSTime());
CString value;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueBrandCode,
&value));
EXPECT_STREQ(_T("ABCE"), value);
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueClientId,
&value));
EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
RegKey::GetValue(kAppMachineClientStatePath,
kRegValueReferralId,
&value));
DWORD install_time = 0;
EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
kRegValueInstallTimeSec,
&install_time));
EXPECT_NE(kExistingInstallTime, install_time);
EXPECT_GE(now, install_time);
EXPECT_GE(static_cast<uint32>(200), now - install_time);
}
//
// IsMachineProcess tests.
//
class GoopdateUtilsIsMachineProcessTest : public testing::Test {
protected:
bool FromMachineDirHelper(CommandLineMode mode) {
return goopdate_utils::IsMachineProcess(mode,
true,
false,
false,
TRISTATE_NONE);
}
bool IsLocalSystemHelper(CommandLineMode mode) {
return goopdate_utils::IsMachineProcess(mode,
false,
true,
false,
TRISTATE_NONE);
}
bool MachineOverrideHelper(CommandLineMode mode) {
return goopdate_utils::IsMachineProcess(mode,
false,
false,
true,
TRISTATE_NONE);
}
bool NeedsAdminFalseHelper(CommandLineMode mode) {
return goopdate_utils::IsMachineProcess(mode,
false,
false,
false,
TRISTATE_FALSE);
}
bool NeedsAdminTrueHelper(CommandLineMode mode) {
return goopdate_utils::IsMachineProcess(mode,
false,
false,
false,
TRISTATE_TRUE);
}
};
TEST_F(GoopdateUtilsIsMachineProcessTest,
IsMachineProcess_MachineDirOnly) {
EXPECT_TRUE(FromMachineDirHelper(COMMANDLINE_MODE_UNKNOWN));
EXPECT_TRUE(FromMachineDirHelper(COMMANDLINE_MODE_NOARGS));
EXPECT_FALSE(FromMachineDirHelper(COMMANDLINE_MODE_CORE));
{
ExpectAsserts expect_asserts;
EXPECT_FALSE(FromMachineDirHelper(COMMANDLINE_MODE_SERVICE));
}
EXPECT_TRUE(FromMachineDirHelper(COMMANDLINE_MODE_REGSERVER));
EXPECT_TRUE(FromMachineDirHelper(COMMANDLINE_MODE_UNREGSERVER));
EXPECT_TRUE(FromMachineDirHelper(COMMANDLINE_MODE_NETDIAGS));
EXPECT_TRUE(FromMachineDirHelper(COMMANDLINE_MODE_CRASH));
// TODO(omaha): Change to machine.
EXPECT_FALSE(FromMachineDirHelper(COMMANDLINE_MODE_REPORTCRASH));
{
ExpectAsserts expect_asserts;
EXPECT_FALSE(FromMachineDirHelper(COMMANDLINE_MODE_INSTALL));
}
EXPECT_FALSE(FromMachineDirHelper(COMMANDLINE_MODE_UPDATE));
{
ExpectAsserts expect_asserts;
EXPECT_FALSE(FromMachineDirHelper(COMMANDLINE_MODE_IG));
EXPECT_FALSE(FromMachineDirHelper(COMMANDLINE_MODE_HANDOFF_INSTALL));
}
EXPECT_FALSE(FromMachineDirHelper(COMMANDLINE_MODE_UG));
EXPECT_FALSE(FromMachineDirHelper(COMMANDLINE_MODE_UA));
EXPECT_FALSE(FromMachineDirHelper(COMMANDLINE_MODE_RECOVER));
EXPECT_TRUE(FromMachineDirHelper(COMMANDLINE_MODE_WEBPLUGIN));
EXPECT_FALSE(FromMachineDirHelper(COMMANDLINE_MODE_CODE_RED_CHECK));
EXPECT_TRUE(FromMachineDirHelper(COMMANDLINE_MODE_COMSERVER));
EXPECT_TRUE(FromMachineDirHelper(COMMANDLINE_MODE_LEGACYUI));
EXPECT_TRUE(FromMachineDirHelper(COMMANDLINE_MODE_LEGACY_MANIFEST_HANDOFF));
{
ExpectAsserts expect_asserts;
EXPECT_FALSE(FromMachineDirHelper(COMMANDLINE_MODE_REGISTER_PRODUCT));
}
{
ExpectAsserts expect_asserts;
EXPECT_FALSE(FromMachineDirHelper(COMMANDLINE_MODE_UNREGISTER_PRODUCT));
}
EXPECT_TRUE(FromMachineDirHelper(
static_cast<CommandLineMode>(
COMMANDLINE_MODE_CRASH_HANDLER + 1)));
}
TEST_F(GoopdateUtilsIsMachineProcessTest,
IsMachineProcess_IsLocalSystemOnly) {
EXPECT_FALSE(IsLocalSystemHelper(COMMANDLINE_MODE_UNKNOWN));
EXPECT_FALSE(IsLocalSystemHelper(COMMANDLINE_MODE_NOARGS));
EXPECT_TRUE(IsLocalSystemHelper(COMMANDLINE_MODE_CORE));
EXPECT_TRUE(IsLocalSystemHelper(COMMANDLINE_MODE_SERVICE));
EXPECT_FALSE(IsLocalSystemHelper(COMMANDLINE_MODE_REGSERVER));
EXPECT_FALSE(IsLocalSystemHelper(COMMANDLINE_MODE_UNREGSERVER));
EXPECT_FALSE(IsLocalSystemHelper(COMMANDLINE_MODE_NETDIAGS));
EXPECT_FALSE(IsLocalSystemHelper(COMMANDLINE_MODE_CRASH));
EXPECT_FALSE(IsLocalSystemHelper(COMMANDLINE_MODE_REPORTCRASH));
{
ExpectAsserts expect_asserts;
EXPECT_FALSE(IsLocalSystemHelper(COMMANDLINE_MODE_INSTALL));
}
EXPECT_TRUE(IsLocalSystemHelper(COMMANDLINE_MODE_UPDATE));
{
ExpectAsserts expect_asserts;
EXPECT_FALSE(IsLocalSystemHelper(COMMANDLINE_MODE_IG));
EXPECT_FALSE(IsLocalSystemHelper(COMMANDLINE_MODE_HANDOFF_INSTALL));
}
EXPECT_TRUE(IsLocalSystemHelper(COMMANDLINE_MODE_UG));
EXPECT_TRUE(IsLocalSystemHelper(COMMANDLINE_MODE_UA));
EXPECT_FALSE(IsLocalSystemHelper(COMMANDLINE_MODE_RECOVER));
EXPECT_FALSE(IsLocalSystemHelper(COMMANDLINE_MODE_WEBPLUGIN));
EXPECT_TRUE(IsLocalSystemHelper(COMMANDLINE_MODE_CODE_RED_CHECK));
EXPECT_FALSE(IsLocalSystemHelper(COMMANDLINE_MODE_COMSERVER));
EXPECT_FALSE(IsLocalSystemHelper(COMMANDLINE_MODE_LEGACYUI));
EXPECT_FALSE(IsLocalSystemHelper(COMMANDLINE_MODE_LEGACY_MANIFEST_HANDOFF));
{
ExpectAsserts expect_asserts;
EXPECT_FALSE(IsLocalSystemHelper(COMMANDLINE_MODE_REGISTER_PRODUCT));
}
{
ExpectAsserts expect_asserts;
EXPECT_FALSE(IsLocalSystemHelper(COMMANDLINE_MODE_UNREGISTER_PRODUCT));
}
EXPECT_FALSE(IsLocalSystemHelper(
static_cast<CommandLineMode>(
COMMANDLINE_MODE_CRASH_HANDLER + 1)));
}
TEST_F(GoopdateUtilsIsMachineProcessTest,
IsMachineProcess_MachineOverrideOnly) {
EXPECT_FALSE(MachineOverrideHelper(COMMANDLINE_MODE_UNKNOWN));
EXPECT_FALSE(MachineOverrideHelper(COMMANDLINE_MODE_NOARGS));
EXPECT_FALSE(MachineOverrideHelper(COMMANDLINE_MODE_CORE));
{
ExpectAsserts expect_asserts;
EXPECT_FALSE(MachineOverrideHelper(COMMANDLINE_MODE_SERVICE));
}
EXPECT_FALSE(MachineOverrideHelper(COMMANDLINE_MODE_REGSERVER));
EXPECT_FALSE(MachineOverrideHelper(COMMANDLINE_MODE_UNREGSERVER));
EXPECT_FALSE(MachineOverrideHelper(COMMANDLINE_MODE_NETDIAGS));
EXPECT_FALSE(MachineOverrideHelper(COMMANDLINE_MODE_CRASH));
EXPECT_TRUE(MachineOverrideHelper(COMMANDLINE_MODE_REPORTCRASH));
{
ExpectAsserts expect_asserts;
EXPECT_FALSE(MachineOverrideHelper(COMMANDLINE_MODE_INSTALL));
}
EXPECT_FALSE(MachineOverrideHelper(COMMANDLINE_MODE_UPDATE));
{
ExpectAsserts expect_asserts;
EXPECT_FALSE(MachineOverrideHelper(COMMANDLINE_MODE_IG));
EXPECT_FALSE(MachineOverrideHelper(COMMANDLINE_MODE_HANDOFF_INSTALL));
}
EXPECT_TRUE(MachineOverrideHelper(COMMANDLINE_MODE_UG));
EXPECT_FALSE(MachineOverrideHelper(COMMANDLINE_MODE_UA));
EXPECT_TRUE(MachineOverrideHelper(COMMANDLINE_MODE_RECOVER));
EXPECT_FALSE(MachineOverrideHelper(COMMANDLINE_MODE_WEBPLUGIN));
EXPECT_FALSE(MachineOverrideHelper(COMMANDLINE_MODE_CODE_RED_CHECK));
EXPECT_FALSE(MachineOverrideHelper(COMMANDLINE_MODE_COMSERVER));
EXPECT_FALSE(MachineOverrideHelper(COMMANDLINE_MODE_LEGACYUI));
EXPECT_FALSE(MachineOverrideHelper(COMMANDLINE_MODE_LEGACY_MANIFEST_HANDOFF));
{
ExpectAsserts expect_asserts;
EXPECT_FALSE(MachineOverrideHelper(COMMANDLINE_MODE_REGISTER_PRODUCT));
}
{
ExpectAsserts expect_asserts;
EXPECT_FALSE(MachineOverrideHelper(COMMANDLINE_MODE_UNREGISTER_PRODUCT));
}
EXPECT_FALSE(MachineOverrideHelper(
static_cast<CommandLineMode>(
COMMANDLINE_MODE_CRASH_HANDLER + 1)));
}
TEST_F(GoopdateUtilsIsMachineProcessTest,
IsMachineProcess_NeedsAdminFalseOnly) {
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_UNKNOWN));
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_NOARGS));
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_CORE));
{
ExpectAsserts expect_asserts;
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_SERVICE));
}
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_REGSERVER));
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_UNREGSERVER));
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_NETDIAGS));
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_CRASH));
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_REPORTCRASH));
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_INSTALL));
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_UPDATE));
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_IG));
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_HANDOFF_INSTALL));
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_UG));
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_UA));
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_RECOVER));
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_WEBPLUGIN));
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_CODE_RED_CHECK));
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_COMSERVER));
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_LEGACYUI));
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_LEGACY_MANIFEST_HANDOFF));
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_REGISTER_PRODUCT));
EXPECT_FALSE(NeedsAdminFalseHelper(COMMANDLINE_MODE_UNREGISTER_PRODUCT));
EXPECT_FALSE(NeedsAdminFalseHelper(
static_cast<CommandLineMode>(
COMMANDLINE_MODE_CRASH_HANDLER + 1)));
}
TEST_F(GoopdateUtilsIsMachineProcessTest,
IsMachineProcess_NeedsAdminTrueOnly) {
EXPECT_FALSE(NeedsAdminTrueHelper(COMMANDLINE_MODE_UNKNOWN));
EXPECT_FALSE(NeedsAdminTrueHelper(COMMANDLINE_MODE_NOARGS));
EXPECT_FALSE(NeedsAdminTrueHelper(COMMANDLINE_MODE_CORE));
{
ExpectAsserts expect_asserts;
EXPECT_FALSE(NeedsAdminTrueHelper(COMMANDLINE_MODE_SERVICE));
}
EXPECT_FALSE(NeedsAdminTrueHelper(COMMANDLINE_MODE_REGSERVER));
EXPECT_FALSE(NeedsAdminTrueHelper(COMMANDLINE_MODE_UNREGSERVER));
EXPECT_FALSE(NeedsAdminTrueHelper(COMMANDLINE_MODE_NETDIAGS));
EXPECT_FALSE(NeedsAdminTrueHelper(COMMANDLINE_MODE_CRASH));
EXPECT_FALSE(NeedsAdminTrueHelper(COMMANDLINE_MODE_REPORTCRASH));
EXPECT_TRUE(NeedsAdminTrueHelper(COMMANDLINE_MODE_INSTALL));
EXPECT_FALSE(NeedsAdminTrueHelper(COMMANDLINE_MODE_UPDATE));
EXPECT_TRUE(NeedsAdminTrueHelper(COMMANDLINE_MODE_IG));
EXPECT_TRUE(NeedsAdminTrueHelper(COMMANDLINE_MODE_HANDOFF_INSTALL));
EXPECT_FALSE(NeedsAdminTrueHelper(COMMANDLINE_MODE_UG));
EXPECT_FALSE(NeedsAdminTrueHelper(COMMANDLINE_MODE_UA));
EXPECT_FALSE(NeedsAdminTrueHelper(COMMANDLINE_MODE_RECOVER));
EXPECT_FALSE(NeedsAdminTrueHelper(COMMANDLINE_MODE_WEBPLUGIN));
EXPECT_FALSE(NeedsAdminTrueHelper(COMMANDLINE_MODE_CODE_RED_CHECK));
EXPECT_FALSE(NeedsAdminTrueHelper(COMMANDLINE_MODE_COMSERVER));
EXPECT_FALSE(NeedsAdminTrueHelper(COMMANDLINE_MODE_LEGACYUI));
EXPECT_FALSE(NeedsAdminTrueHelper(COMMANDLINE_MODE_LEGACY_MANIFEST_HANDOFF));
EXPECT_TRUE(NeedsAdminTrueHelper(COMMANDLINE_MODE_REGISTER_PRODUCT));
EXPECT_TRUE(NeedsAdminTrueHelper(COMMANDLINE_MODE_UNREGISTER_PRODUCT));
EXPECT_FALSE(NeedsAdminTrueHelper(
static_cast<CommandLineMode>(
COMMANDLINE_MODE_CRASH_HANDLER + 1)));
}
TEST(GoopdateUtilsTest, IsGoogleUpdate2OrLater_LegacyVersions) {
EXPECT_FALSE(goopdate_utils::IsGoogleUpdate2OrLater(_T("1.0.0.0")));
EXPECT_FALSE(goopdate_utils::IsGoogleUpdate2OrLater(_T("1.1.103.9")));
EXPECT_FALSE(goopdate_utils::IsGoogleUpdate2OrLater(_T("1.1.65535.65535")));
}
TEST(GoopdateUtilsTest, IsGoogleUpdate2OrLater_Omaha2AndLater) {
EXPECT_TRUE(goopdate_utils::IsGoogleUpdate2OrLater(_T("1.2.0.0")));
EXPECT_TRUE(goopdate_utils::IsGoogleUpdate2OrLater(_T("1.2.0111.2222")));
EXPECT_TRUE(goopdate_utils::IsGoogleUpdate2OrLater(_T("1.3.456.7890")));
EXPECT_TRUE(goopdate_utils::IsGoogleUpdate2OrLater(_T("2.0.0.0")));
}
TEST(GoopdateUtilsTest, IsGoogleUpdate2OrLater_VersionZero) {
ExpectAsserts expect_asserts;
EXPECT_FALSE(
goopdate_utils::IsGoogleUpdate2OrLater(_T("0.0.0.0")));
}
TEST(GoopdateUtilsTest, IsGoogleUpdate2OrLater_VersionUpperLimits) {
EXPECT_TRUE(
goopdate_utils::IsGoogleUpdate2OrLater(_T("65535.65535.65535.65535")));
ExpectAsserts expect_asserts;
EXPECT_FALSE(
goopdate_utils::IsGoogleUpdate2OrLater(_T("65536.65536.65536.65536")));
EXPECT_FALSE(
goopdate_utils::IsGoogleUpdate2OrLater(_T("1.2.65536.65536")));
EXPECT_FALSE(
goopdate_utils::IsGoogleUpdate2OrLater(_T("1.1.65536.65536")));
}
TEST(GoopdateUtilsTest, IsGoogleUpdate2OrLater_TooFewElements) {
ExpectAsserts expect_asserts;
EXPECT_FALSE(goopdate_utils::IsGoogleUpdate2OrLater(_T("1.1.1")));
}
TEST(GoopdateUtilsTest, IsGoogleUpdate2OrLater_ExtraPeriod) {
ExpectAsserts expect_asserts;
EXPECT_FALSE(goopdate_utils::IsGoogleUpdate2OrLater(_T("1.1.2.3.")));
}
TEST(GoopdateUtilsTest, IsGoogleUpdate2OrLater_TooManyElements) {
ExpectAsserts expect_asserts;
EXPECT_FALSE(goopdate_utils::IsGoogleUpdate2OrLater(_T("1.1.2.3.4")));
}
TEST(GoopdateUtilsTest, IsGoogleUpdate2OrLater_Char) {
ExpectAsserts expect_asserts;
EXPECT_FALSE(goopdate_utils::IsGoogleUpdate2OrLater(_T("1.B.3.4")));
EXPECT_FALSE(goopdate_utils::IsGoogleUpdate2OrLater(_T("1.2.3.B")));
EXPECT_FALSE(goopdate_utils::IsGoogleUpdate2OrLater(_T("1.2.3.9B")));
}
TEST(GoopdateUtilsTest, FormatMessageForNetworkError) {
const TCHAR* const kTestAppName = _T("Test App");
CString message;
EXPECT_EQ(true, FormatMessageForNetworkError(GOOPDATE_E_NO_NETWORK,
kTestAppName,
&message));
EXPECT_STREQ(
_T("Installation failed. Ensure that your computer is connected to the ")
_T("Internet and that your firewall allows GoogleUpdate.exe to connect ")
_T("and then try again. Error code = 0x80040801."),
message);
EXPECT_EQ(true, FormatMessageForNetworkError(GOOPDATE_E_NETWORK_UNAUTHORIZED,
kTestAppName,
&message));
EXPECT_STREQ(
_T("The Test App installer could not connect to the Internet because of ")
_T("an HTTP 401 Unauthorized response. This is likely a proxy ")
_T("configuration issue. Please configure the proxy server to allow ")
_T("network access and try again or contact your network administrator. ")
_T("Error code = 0x80042191"),
message);
EXPECT_EQ(true, FormatMessageForNetworkError(GOOPDATE_E_NETWORK_FORBIDDEN,
kTestAppName,
&message));
EXPECT_STREQ(
_T("The Test App installer could not connect to the Internet because of ")
_T("an HTTP 403 Forbidden response. This is likely a proxy ")
_T("configuration issue. Please configure the proxy server to allow ")
_T("network access and try again or contact your network administrator. ")
_T("Error code = 0x80042193"),
message);
EXPECT_EQ(true,
FormatMessageForNetworkError(GOOPDATE_E_NETWORK_PROXYAUTHREQUIRED,
kTestAppName,
&message));
EXPECT_STREQ(
_T("The Test App installer could not connect to the Internet because a ")
_T("proxy server required user authentication. Please configure the ")
_T("proxy server to allow network access and try again or contact your ")
_T("network administrator. Error code = 0x80042197"),
message);
EXPECT_EQ(false, FormatMessageForNetworkError(E_FAIL,
kTestAppName,
&message));
EXPECT_STREQ(
_T("Installation failed. Ensure that your computer is connected to the ")
_T("Internet and that your firewall allows GoogleUpdate.exe to connect ")
_T("and then try again. Error code = 0x80004005."),
message);
}
TEST(GoopdateUtilsTest, WriteInstallerDataToTempFile) {
CStringA utf8_bom;
utf8_bom.Format("%c%c%c", 0xEF, 0xBB, 0xBF);
std::vector<CString> list_installer_data;
list_installer_data.push_back(_T(""));
list_installer_data.push_back(_T("hello\n"));
list_installer_data.push_back(_T("good bye"));
list_installer_data.push_back(_T(" there you\n go "));
list_installer_data.push_back(_T("\"http://foo.bar.org/?q=stuff&h=other\""));
list_installer_data.push_back(_T("foo\r\nbar\n"));
list_installer_data.push_back(_T("foo\n\rbar")); // LFCR is not recognized.
std::vector<CStringA> expected_installer_data;
expected_installer_data.push_back("");
expected_installer_data.push_back("hello\n");
expected_installer_data.push_back("good bye");
expected_installer_data.push_back(" there you\n go ");
expected_installer_data.push_back("\"http://foo.bar.org/?q=stuff&h=other\"");
expected_installer_data.push_back("foo\r\nbar\n");
expected_installer_data.push_back("foo\n\rbar");
ASSERT_EQ(expected_installer_data.size(), list_installer_data.size());
for (size_t i = 0; i < list_installer_data.size(); ++i) {
CString installer_data = list_installer_data[i];
SCOPED_TRACE(installer_data);
CString file_path;
HRESULT hr = goopdate_utils::WriteInstallerDataToTempFile(
installer_data,
&file_path);
EXPECT_SUCCEEDED(hr);
// TODO(omaha): consider eliminating the special case.
// WriteInstallerDataToTempFile() will return S_FALSE with "" data.
if (S_OK == hr) {
File file;
const int kBufferLen = 1000;
std::vector<byte> data_line(kBufferLen);
EXPECT_SUCCEEDED(file.Open(file_path, false, false));
uint32 bytes_read(0);
EXPECT_SUCCEEDED(file.Read(data_line.size(),
&data_line.front(),
&bytes_read));
data_line.resize(bytes_read);
data_line.push_back(0);
EXPECT_STREQ(utf8_bom + expected_installer_data[i],
reinterpret_cast<const char*>(&data_line.front()));
EXPECT_SUCCEEDED(file.Close());
} else {
EXPECT_TRUE(installer_data.IsEmpty());
}
}
}
TEST(GoopdateUtilsTest, GetDefaultGoopdateTaskName_Core_Machine) {
CString expected_task_name(kScheduledTaskNameMachinePrefix);
expected_task_name += kScheduledTaskNameCoreSuffix;
EXPECT_STREQ(
expected_task_name,
goopdate_utils::GetDefaultGoopdateTaskName(true, COMMANDLINE_MODE_CORE));
}
TEST(GoopdateUtilsTest, GetDefaultGoopdateTaskName_Core_User) {
CString expected_task_name_user = kScheduledTaskNameUserPrefix;
CString user_sid;
EXPECT_SUCCEEDED(user_info::GetCurrentUser(NULL, NULL, &user_sid));
expected_task_name_user += user_sid;
expected_task_name_user += kScheduledTaskNameCoreSuffix;
EXPECT_STREQ(
expected_task_name_user,
goopdate_utils::GetDefaultGoopdateTaskName(false, COMMANDLINE_MODE_CORE));
}
TEST(GoopdateUtilsTest, GetDefaultGoopdateTaskName_UA_Machine) {
CString expected_task_name(kScheduledTaskNameMachinePrefix);
expected_task_name += kScheduledTaskNameUASuffix;
EXPECT_STREQ(
expected_task_name,
goopdate_utils::GetDefaultGoopdateTaskName(true, COMMANDLINE_MODE_UA));
}
TEST(GoopdateUtilsTest, GetDefaultGoopdateTaskName_UA_User) {
CString expected_task_name_user = kScheduledTaskNameUserPrefix;
CString user_sid;
EXPECT_SUCCEEDED(user_info::GetCurrentUser(NULL, NULL, &user_sid));
expected_task_name_user += user_sid;
expected_task_name_user += kScheduledTaskNameUASuffix;
EXPECT_STREQ(
expected_task_name_user,
goopdate_utils::GetDefaultGoopdateTaskName(false, COMMANDLINE_MODE_UA));
}
} // namespace goopdate_utils
} // namespace omaha