Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / installer / gcapi / gcapi_last_run_test.cc
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.
4
5 #include <limits>
6 #include <string>
7
8 #include "base/basictypes.h"
9 #include "base/guid.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"
19
20 using base::Time;
21 using base::TimeDelta;
22 using base::win::RegKey;
23
24
25 class GCAPILastRunTest : public ::testing::Test {
26  protected:
27   void SetUp() {
28     // Override keys - this is undone during destruction.
29     override_manager_.OverrideRegistry(HKEY_CURRENT_USER);
30
31     // Create the client state key in the right places.
32     std::wstring reg_path(google_update::kRegPathClientState);
33     reg_path += L"\\";
34     reg_path += google_update::kChromeUpgradeCode;
35     RegKey client_state(HKEY_CURRENT_USER,
36                         reg_path.c_str(),
37                         KEY_CREATE_SUB_KEY | KEY_WOW64_32KEY);
38     ASSERT_TRUE(client_state.Valid());
39
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,
46                       clients_path.c_str(),
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");
50   }
51
52   bool SetLastRunTime(int64 last_run_time) {
53     return SetLastRunTimeString(base::Int64ToString16(last_run_time));
54   }
55
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);
59     path += L"\\";
60     path += google_update::kChromeUpgradeCode;
61
62     RegKey client_state(
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);
68   }
69
70  private:
71   registry_util::RegistryOverrideManager override_manager_;
72 };
73
74 TEST_F(GCAPILastRunTest, Basic) {
75   Time last_run = Time::NowFromSystemTime() - TimeDelta::FromDays(10);
76   EXPECT_TRUE(SetLastRunTime(last_run.ToInternalValue()));
77
78   int days_since_last_run = GoogleChromeDaysSinceLastRun();
79   EXPECT_EQ(10, days_since_last_run);
80 }
81
82 TEST_F(GCAPILastRunTest, NoLastRun) {
83   int days_since_last_run = GoogleChromeDaysSinceLastRun();
84   EXPECT_EQ(-1, days_since_last_run);
85 }
86
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);
91 }
92
93 TEST_F(GCAPILastRunTest, OutOfRangeLastRun) {
94   Time last_run = Time::NowFromSystemTime() - TimeDelta::FromDays(-42);
95   EXPECT_TRUE(SetLastRunTime(last_run.ToInternalValue()));
96
97   int days_since_last_run = GoogleChromeDaysSinceLastRun();
98   EXPECT_EQ(-1, days_since_last_run);
99 }