1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
8 #include "base/basictypes.h"
10 #include "base/strings/string_number_conversions.h"
11 #include "base/strings/stringprintf.h"
12 #include "base/strings/utf_string_conversions.h"
13 #include "base/test/test_reg_util_win.h"
14 #include "base/time/time.h"
15 #include "base/win/registry.h"
16 #include "chrome/installer/gcapi/gcapi.h"
17 #include "chrome/installer/util/google_update_constants.h"
18 #include "testing/gtest/include/gtest/gtest.h"
21 using base::TimeDelta
;
22 using base::win::RegKey
;
25 class GCAPILastRunTest
: public ::testing::Test
{
27 void SetUp() override
{
28 // Override keys - this is undone during destruction.
29 override_manager_
.OverrideRegistry(HKEY_CURRENT_USER
);
31 // Create the client state key in the right places.
32 std::wstring
reg_path(google_update::kRegPathClientState
);
34 reg_path
+= google_update::kChromeUpgradeCode
;
35 RegKey
client_state(HKEY_CURRENT_USER
,
37 KEY_CREATE_SUB_KEY
| KEY_WOW64_32KEY
);
38 ASSERT_TRUE(client_state
.Valid());
40 // Place a bogus "pv" value in the right places to make the last run
41 // checker believe Chrome is installed.
42 std::wstring
clients_path(google_update::kRegPathClients
);
43 clients_path
+= L
"\\";
44 clients_path
+= google_update::kChromeUpgradeCode
;
45 RegKey
client_key(HKEY_CURRENT_USER
,
47 KEY_CREATE_SUB_KEY
| KEY_SET_VALUE
| KEY_WOW64_32KEY
);
48 ASSERT_TRUE(client_key
.Valid());
49 client_key
.WriteValue(L
"pv", L
"1.2.3.4");
52 bool SetLastRunTime(int64 last_run_time
) {
53 return SetLastRunTimeString(base::Int64ToString16(last_run_time
));
56 bool SetLastRunTimeString(const base::string16
& last_run_time_string
) {
57 const wchar_t* base_path
= google_update::kRegPathClientState
;
58 std::wstring
path(base_path
);
60 path
+= google_update::kChromeUpgradeCode
;
63 HKEY_CURRENT_USER
, path
.c_str(), KEY_SET_VALUE
| KEY_WOW64_32KEY
);
64 return (client_state
.Valid() &&
65 client_state
.WriteValue(
66 google_update::kRegLastRunTimeField
,
67 last_run_time_string
.c_str()) == ERROR_SUCCESS
);
71 registry_util::RegistryOverrideManager override_manager_
;
74 TEST_F(GCAPILastRunTest
, Basic
) {
75 Time last_run
= Time::NowFromSystemTime() - TimeDelta::FromDays(10);
76 EXPECT_TRUE(SetLastRunTime(last_run
.ToInternalValue()));
78 int days_since_last_run
= GoogleChromeDaysSinceLastRun();
79 EXPECT_EQ(10, days_since_last_run
);
82 TEST_F(GCAPILastRunTest
, NoLastRun
) {
83 int days_since_last_run
= GoogleChromeDaysSinceLastRun();
84 EXPECT_EQ(-1, days_since_last_run
);
87 TEST_F(GCAPILastRunTest
, InvalidLastRun
) {
88 EXPECT_TRUE(SetLastRunTimeString(L
"Hi Mum!"));
89 int days_since_last_run
= GoogleChromeDaysSinceLastRun();
90 EXPECT_EQ(-1, days_since_last_run
);
93 TEST_F(GCAPILastRunTest
, OutOfRangeLastRun
) {
94 Time last_run
= Time::NowFromSystemTime() - TimeDelta::FromDays(-42);
95 EXPECT_TRUE(SetLastRunTime(last_run
.ToInternalValue()));
97 int days_since_last_run
= GoogleChromeDaysSinceLastRun();
98 EXPECT_EQ(-1, days_since_last_run
);