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

Side by Side Diff: common/stats_uploader_unittest.cc

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « common/stats_uploader.cc ('k') | common/update3_utils.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2008-2009 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 // ========================================================================
15
16 // All tests are user only.
17
18 #include <windows.h>
19 #include <limits.h>
20 #include <ctime>
21 #include "base/basictypes.h"
22 #include "base/scoped_ptr.h"
23 #include "omaha/base/constants.h"
24 #include "omaha/base/error.h"
25 #include "omaha/base/reg_key.h"
26 #include "omaha/base/scoped_ptr_address.h"
27 #include "omaha/common/stats_uploader.h"
28 #include "omaha/statsreport/metrics.h"
29 #include "omaha/testing/unit_test.h"
30
31 namespace omaha {
32
33 namespace {
34
35 DEFINE_METRIC_bool(test_bool);
36
37 } // namespace
38
39 class StatsUploaderTest : public testing::Test {
40 protected:
41 // These tests assume that metric collection is enabled. Since HKLM is not
42 // overridden, save the existing value if present before overriding it.
43 static void SetUpTestCase() {
44 is_updatedev_usagestats_present_ =
45 SUCCEEDED(RegKey::GetValue(MACHINE_REG_UPDATE_DEV,
46 kRegValueForceUsageStats,
47 &existing_updatedev_usagestats_value_));
48
49 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE_DEV,
50 kRegValueForceUsageStats,
51 static_cast<DWORD>(1)));
52 }
53
54 static void TearDownTestCase() {
55 if (is_updatedev_usagestats_present_) {
56 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE_DEV,
57 kRegValueForceUsageStats,
58 existing_updatedev_usagestats_value_));
59 } else {
60 EXPECT_SUCCEEDED(RegKey::DeleteValue(MACHINE_REG_UPDATE_DEV,
61 kRegValueForceUsageStats));
62 }
63 }
64
65 virtual void SetUp() {
66 RegKey::DeleteKey(kRegistryHiveOverrideRoot);
67
68 // Overriding HKLM prevents the Windows DNS resolver from working.
69 // Only override HKCU and run the tests as user.
70 OverrideSpecifiedRegistryHives(kRegistryHiveOverrideRoot, false, true);
71 stats_report::g_global_metrics.Initialize();
72 }
73
74 virtual void TearDown() {
75 stats_report::g_global_metrics.Uninitialize();
76 RestoreRegistryHives();
77 RegKey::DeleteKey(kRegistryHiveOverrideRoot);
78 }
79
80 HRESULT GetMetricValue(const TCHAR* value_name, bool* value) {
81 CString key_name = key_name_ + CString(_T("Booleans"));
82
83 scoped_array<byte> buffer;
84 DWORD byte_count(0);
85 HRESULT hr = RegKey::GetValue(key_name,
86 value_name,
87 address(buffer),
88 &byte_count);
89 if (FAILED(hr)) {
90 return hr;
91 }
92 if (byte_count != sizeof(uint32)) { // NOLINT
93 return HRESULT_FROM_WIN32(ERROR_INVALID_DATA);
94 }
95 *value = *reinterpret_cast<uint32*>(buffer.get()) != 0;
96 return S_OK;
97 }
98
99 HRESULT GetLastTrasmission(DWORD* last_transmission) {
100 const TCHAR value_name[] = _T("LastTransmission");
101 return RegKey::GetValue(key_name_, value_name, last_transmission);
102 }
103
104 HRESULT SetLastTransmission(DWORD last_transmission) {
105 const TCHAR value_name[] = _T("LastTransmission");
106 return RegKey::SetValue(key_name_, value_name, last_transmission);
107 }
108
109 bool AreMetricsEmpty() {
110 RegKey reg_key;
111 HRESULT hr = reg_key.Open(key_name_, KEY_READ);
112 if (FAILED(hr)) {
113 return true;
114 }
115 return reg_key.GetSubkeyCount() == 0;
116 }
117
118 static const TCHAR key_name_[];
119 static const TCHAR metric_name_[];
120
121 private:
122 static bool is_updatedev_usagestats_present_;
123 static DWORD existing_updatedev_usagestats_value_;
124 };
125
126 const TCHAR StatsUploaderTest::key_name_[] =
127 _T("HKCU\\Software\\") SHORT_COMPANY_NAME
128 _T("\\") PRODUCT_NAME _T("\\UsageStats\\Daily\\");
129 const TCHAR StatsUploaderTest::metric_name_[] = _T("test_bool");
130
131 bool StatsUploaderTest::is_updatedev_usagestats_present_ = false;
132 DWORD StatsUploaderTest::existing_updatedev_usagestats_value_ = 0;
133
134 TEST_F(StatsUploaderTest, AggregateMetrics) {
135 bool value = false;
136 EXPECT_HRESULT_FAILED(GetMetricValue(metric_name_, &value));
137
138 metric_test_bool = true;
139 EXPECT_HRESULT_SUCCEEDED(AggregateMetrics(false)); // User.
140
141 EXPECT_HRESULT_SUCCEEDED(GetMetricValue(metric_name_, &value));
142 EXPECT_EQ(true, value);
143
144 metric_test_bool = false;
145 EXPECT_HRESULT_SUCCEEDED(AggregateMetrics(false)); // User.
146
147 EXPECT_HRESULT_SUCCEEDED(GetMetricValue(metric_name_, &value));
148 EXPECT_EQ(false, value);
149 }
150
151 TEST_F(StatsUploaderTest, AggregateAndReportMetrics) {
152 metric_test_bool = true;
153
154 // Metrics are not in the registry until they are aggregated.
155 bool value = false;
156 EXPECT_HRESULT_FAILED(GetMetricValue(metric_name_, &value));
157
158 // AggregateAndReportMetrics resets metrics and updates 'LastTransmission' to
159 // the current time since there was no 'LastTransmission'.
160 EXPECT_HRESULT_SUCCEEDED(AggregateAndReportMetrics(false, false));
161 EXPECT_TRUE(AreMetricsEmpty());
162 DWORD last_transmission(0);
163 EXPECT_HRESULT_SUCCEEDED(GetLastTrasmission(&last_transmission));
164 EXPECT_NE(0, last_transmission);
165
166 // AggregateAndReportMetrics aggregates but it does not report since
167 // 'LastTransmission is current.
168 EXPECT_HRESULT_SUCCEEDED(AggregateAndReportMetrics(false, false));
169 EXPECT_FALSE(AreMetricsEmpty());
170 EXPECT_HRESULT_SUCCEEDED(GetMetricValue(metric_name_, &value));
171 EXPECT_EQ(true, value);
172 DWORD previous_last_transmission = last_transmission;
173 EXPECT_HRESULT_SUCCEEDED(GetLastTrasmission(&last_transmission));
174 EXPECT_EQ(previous_last_transmission, last_transmission);
175
176 // Roll back 'Last Trasmission' by 26 hours. AggregateAndReportMetrics
177 // aggregates, reports metrics, and updates 'LastTransmission'.
178 metric_test_bool = true;
179 last_transmission -= 26 * 60 * 60;
180 EXPECT_HRESULT_SUCCEEDED(SetLastTransmission(last_transmission));
181 EXPECT_HRESULT_SUCCEEDED(AggregateAndReportMetrics(false, false));
182 EXPECT_TRUE(AreMetricsEmpty());
183 previous_last_transmission = last_transmission;
184 EXPECT_HRESULT_SUCCEEDED(GetLastTrasmission(&last_transmission));
185 EXPECT_NE(previous_last_transmission, last_transmission);
186
187 // Roll forward the 'LastTransmission' by 60 seconds.
188 // AggregateAndReportMetrics resets metrics and updates 'LastTransmission' to
189 // the current time since there 'LastTransmission' was in the future.
190 metric_test_bool = true;
191 last_transmission = static_cast<DWORD>(time(NULL)) + 60;
192 EXPECT_HRESULT_SUCCEEDED(SetLastTransmission(last_transmission));
193 EXPECT_HRESULT_SUCCEEDED(AggregateAndReportMetrics(false, false));
194 EXPECT_TRUE(AreMetricsEmpty());
195 EXPECT_HRESULT_SUCCEEDED(GetLastTrasmission(&last_transmission));
196 EXPECT_NE(0, last_transmission);
197
198 // Force reporting the metrics.
199 metric_test_bool = true;
200 EXPECT_HRESULT_SUCCEEDED(AggregateAndReportMetrics(false, true));
201 EXPECT_TRUE(AreMetricsEmpty());
202 }
203
204 TEST_F(StatsUploaderTest, ResetPersistentMetricsTest) {
205 const TCHAR* keys[] = {
206 _T("HKCU\\Software\\") SHORT_COMPANY_NAME _T("\\") PRODUCT_NAME _T("\\UsageS tats\\Daily\\Timings"), // NOLINT
207 _T("HKCU\\Software\\") SHORT_COMPANY_NAME _T("\\") PRODUCT_NAME _T("\\UsageS tats\\Daily\\Counts"), // NOLINT
208 _T("HKCU\\Software\\") SHORT_COMPANY_NAME _T("\\") PRODUCT_NAME _T("\\UsageS tats\\Daily\\Integers"), // NOLINT
209 _T("HKCU\\Software\\") SHORT_COMPANY_NAME _T("\\") PRODUCT_NAME _T("\\UsageS tats\\Daily\\Booleans"), // NOLINT
210 };
211 EXPECT_HRESULT_SUCCEEDED(RegKey::CreateKeys(keys, arraysize(keys)));
212 EXPECT_HRESULT_SUCCEEDED(ResetMetrics(false)); // User.
213
214 for (size_t i = 0; i != arraysize(keys); ++i) {
215 EXPECT_FALSE(RegKey::HasKey(keys[i]));
216 }
217 EXPECT_TRUE(AreMetricsEmpty());
218
219 DWORD last_transmission(ULONG_MAX);
220 EXPECT_HRESULT_SUCCEEDED(GetLastTrasmission(&last_transmission));
221 EXPECT_NE(0, last_transmission);
222 }
223
224 // AggregateAndReportMetrics aggregates, but is unable to report metrics and
225 // does not update 'LastTransmission'.
226 TEST_F(StatsUploaderTest,
227 AggregateAndReportMetrics_GoogleUpdateEulaNotAccepted_DoNotForce) {
228 EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_UPDATE,
229 _T("eulaaccepted"),
230 static_cast<DWORD>(0)));
231
232 metric_test_bool = true;
233 DWORD last_transmission = 12345678;
234 EXPECT_HRESULT_SUCCEEDED(SetLastTransmission(last_transmission));
235 EXPECT_EQ(GOOPDATE_E_CANNOT_USE_NETWORK,
236 AggregateAndReportMetrics(false, false));
237 EXPECT_FALSE(AreMetricsEmpty());
238 DWORD previous_last_transmission = last_transmission;
239 EXPECT_HRESULT_SUCCEEDED(GetLastTrasmission(&last_transmission));
240 EXPECT_EQ(12345678, last_transmission);
241 }
242
243 // AggregateAndReportMetrics aggregates, but is unable to report metrics and
244 // does not update 'LastTransmission'.
245 TEST_F(StatsUploaderTest,
246 AggregateAndReportMetrics_GoogleUpdateEulaNotAccepted_Force) {
247 EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_UPDATE,
248 _T("eulaaccepted"),
249 static_cast<DWORD>(0)));
250
251 metric_test_bool = true;
252 DWORD last_transmission = 12345678;
253 EXPECT_HRESULT_SUCCEEDED(SetLastTransmission(last_transmission));
254 EXPECT_EQ(GOOPDATE_E_CANNOT_USE_NETWORK,
255 AggregateAndReportMetrics(false, true));
256 EXPECT_FALSE(AreMetricsEmpty());
257 DWORD previous_last_transmission = last_transmission;
258 EXPECT_HRESULT_SUCCEEDED(GetLastTrasmission(&last_transmission));
259 EXPECT_EQ(12345678, last_transmission);
260 }
261
262 } // namespace omaha
OLDNEW
« no previous file with comments | « common/stats_uploader.cc ('k') | common/update3_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698