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

Side by Side Diff: chrome/installer/util/experiment_storage_unittest.cc

Issue 2889323004: Win 10 Inactive toast experiment metrics and storage modifications. (Closed)
Patch Set: Apply some comments and try bots errors Created 3 years, 6 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
OLDNEW
(Empty)
1 // Copyright 2017 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 "chrome/installer/util/experiment_storage.h"
6
7 #include "base/strings/string_piece.h"
8 #include "base/test/test_reg_util_win.h"
9 #include "chrome/install_static/install_details.h"
10 #include "chrome/install_static/test/scoped_install_details.h"
11 #include "chrome/installer/util/browser_distribution.h"
12 #include "chrome/installer/util/experiment.h"
13 #include "chrome/installer/util/experiment_metrics.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 namespace installer {
17
18 // A test fixture that can tests saving experiment data in windows registry.
19 // Individual tests provide a parameter, which is true if Chrome is installed
20 // in system level.
21 class ExperimentStorageTest : public ::testing::TestWithParam<bool> {
22 protected:
23 ExperimentStorageTest()
24 : system_level_install_(GetParam()),
25 scoped_install_details_(system_level_install_, 0) {}
26
27 HKEY root() {
28 return system_level_install_ ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
29 }
30
31 void SetUp() override {
32 ::testing::TestWithParam<bool>::SetUp();
33 ASSERT_NO_FATAL_FAILURE(override_manager_.OverrideRegistry(root()));
34
35 // Create an empty participation key since participation registry is assumed
36 // to be present for chrome build.
37 base::win::RegKey key;
38 ASSERT_EQ(ERROR_SUCCESS, key.Create(root(),
39 install_static::InstallDetails::Get()
40 .GetClientStateKeyPath()
41 .c_str(),
42 KEY_WOW64_32KEY | KEY_QUERY_VALUE));
43 }
44
45 bool system_level_install_;
46
47 private:
48 install_static::ScopedInstallDetails scoped_install_details_;
49 registry_util::RegistryOverrideManager override_manager_;
50
51 DISALLOW_COPY_AND_ASSIGN(ExperimentStorageTest);
52 };
53
54 TEST_P(ExperimentStorageTest, TestEncodeDecodeMetrics) {
55 ExperimentMetrics metrics;
56 metrics.state = ExperimentMetrics::kGroupAssigned;
57 metrics.toast_location = ExperimentMetrics::kOverTaskbarPin;
58 metrics.toast_count = 1;
59 metrics.first_toast_offset_days = 30;
60 metrics.toast_hour = 3;
61 metrics.last_used_bucket = 2;
62 metrics.action_delay_bucket = 11;
63 metrics.session_length_bucket = 36;
64 base::string16 encoded_metrics(ExperimentStorage::EncodeMetrics(metrics));
65 EXPECT_EQ(L"5BIMD4IA", encoded_metrics);
66 ExperimentMetrics decoded_metrics;
67 ASSERT_TRUE(
68 ExperimentStorage::DecodeMetrics(encoded_metrics, &decoded_metrics));
69 EXPECT_EQ(metrics, decoded_metrics);
70 }
71
72 TEST_P(ExperimentStorageTest, TestEncodeDecodeForMax) {
73 Experiment experiment;
74 experiment.AssignGroup(ExperimentMetrics::kNumGroups - 1);
75 experiment.SetToastLocation(ExperimentMetrics::kOverNotificationArea);
76 experiment.SetInactiveDays(ExperimentMetrics::kMaxLastUsed);
77 experiment.SetToastCount(ExperimentMetrics::kMaxToastCount);
78 experiment.SetUserSessionUptime(
79 base::TimeDelta::FromMinutes(ExperimentMetrics::kMaxSessionLength));
80 experiment.SetActionDelay(
81 base::TimeDelta::FromSeconds(ExperimentMetrics::kMaxActionDelay));
82 experiment.SetDisplayTime(
83 base::Time::UnixEpoch() +
84 base::TimeDelta::FromSeconds(ExperimentMetrics::kExperimentStartSeconds) +
85 base::TimeDelta::FromDays(ExperimentMetrics::kMaxFirstToastOffsetDays));
86 experiment.SetState(ExperimentMetrics::kUserLogOff); // Max state.
87 ExperimentMetrics metrics = experiment.metrics();
88 // toast_hour uses LocalMidnight whose value depend on local time. So, reset
89 // it to its maximum value.
90 metrics.toast_hour = 24;
91 base::string16 encoded_metrics(ExperimentStorage::EncodeMetrics(metrics));
92 EXPECT_EQ(L"///j//8f", encoded_metrics);
93 ExperimentMetrics decoded_metrics;
94 ASSERT_TRUE(
95 ExperimentStorage::DecodeMetrics(encoded_metrics, &decoded_metrics));
96 EXPECT_EQ(decoded_metrics.state, ExperimentMetrics::kUserLogOff);
97 EXPECT_EQ(decoded_metrics.group, ExperimentMetrics::kNumGroups - 1);
98 EXPECT_EQ(decoded_metrics.toast_location,
99 ExperimentMetrics::kOverNotificationArea);
100 EXPECT_EQ(decoded_metrics.toast_count, ExperimentMetrics::kMaxToastCount);
101 EXPECT_EQ(decoded_metrics.first_toast_offset_days,
102 ExperimentMetrics::kMaxFirstToastOffsetDays);
103 EXPECT_EQ(decoded_metrics.toast_hour, 24);
104 // Following are exponential buckets. So, there max value will be
105 // 2^bits - 1
106 EXPECT_EQ(decoded_metrics.last_used_bucket,
107 (1 << ExperimentMetrics::kLastUsedBucketBits) - 1);
108 EXPECT_EQ(decoded_metrics.action_delay_bucket,
109 (1 << ExperimentMetrics::kActionDelayBucketBits) - 1);
110 EXPECT_EQ(decoded_metrics.session_length_bucket,
111 (1 << ExperimentMetrics::kSessionLengthBucketBits) - 1);
112 }
113
114 TEST_P(ExperimentStorageTest, TestEncodeDecodeForMin) {
115 ExperimentMetrics metrics;
116 metrics.state = ExperimentMetrics::kRelaunchFailed;
117 base::string16 encoded_metrics(ExperimentStorage::EncodeMetrics(metrics));
118 EXPECT_EQ(L"AAAAAAAA", encoded_metrics);
119 ExperimentMetrics decoded_metrics;
120 ASSERT_TRUE(
121 ExperimentStorage::DecodeMetrics(encoded_metrics, &decoded_metrics));
122 EXPECT_EQ(metrics, decoded_metrics);
123 }
124
125 TEST_P(ExperimentStorageTest, TestReadWriteParticipation) {
126 ExperimentStorage storage;
127 ExperimentStorage::Participation expected =
128 ExperimentStorage::Participation::kIsParticipating;
129 ASSERT_TRUE(storage.AcquireLock()->WriteParticipation(expected));
130 ExperimentStorage::Participation p;
131 ASSERT_TRUE(storage.AcquireLock()->ReadParticipation(&p));
132 EXPECT_EQ(expected, p);
133 }
134
135 TEST_P(ExperimentStorageTest, TestLoadStoreExperiment) {
136 Experiment experiment;
137 experiment.AssignGroup(5);
138 ExperimentStorage storage;
139 ASSERT_TRUE(storage.AcquireLock()->StoreExperiment(experiment));
140 Experiment stored_experiment;
141 ASSERT_TRUE(storage.AcquireLock()->LoadExperiment(&stored_experiment));
142 EXPECT_EQ(ExperimentMetrics::kGroupAssigned, stored_experiment.state());
143 EXPECT_EQ(5, stored_experiment.group());
144 // Verify that expeirment state is stored in correct location in registry.
145 base::win::RegKey key;
146 base::string16 client_state_path(
147 system_level_install_
148 ? BrowserDistribution::GetDistribution()->GetStateMediumKey()
149 : BrowserDistribution::GetDistribution()->GetStateKey());
150 client_state_path.append(L"\\Retention");
151 EXPECT_EQ(ERROR_SUCCESS, key.Open(root(), client_state_path.c_str(),
152 KEY_QUERY_VALUE | KEY_WOW64_32KEY));
153 }
154
155 TEST_P(ExperimentStorageTest, TestLoadStoreMetrics) {
156 ExperimentStorage storage;
157 ExperimentMetrics metrics;
158 metrics.state = ExperimentMetrics::kGroupAssigned;
159 metrics.toast_location = ExperimentMetrics::kOverTaskbarPin;
160 metrics.toast_count = 1;
161 metrics.first_toast_offset_days = 30;
162 metrics.toast_hour = 3;
163 metrics.last_used_bucket = 2;
164 metrics.action_delay_bucket = 11;
165 metrics.session_length_bucket = 36;
166 ASSERT_TRUE(storage.AcquireLock()->StoreMetrics(metrics));
167 ExperimentMetrics stored_metrics;
168 ASSERT_TRUE(storage.AcquireLock()->LoadMetrics(&stored_metrics));
169 EXPECT_EQ(L"5BIMD4IA", ExperimentStorage::EncodeMetrics(stored_metrics));
170 // Verify that expeirment labels are stored in registry.
171 EXPECT_EQ(metrics, stored_metrics);
172 }
173
174 INSTANTIATE_TEST_CASE_P(UserLevel,
175 ExperimentStorageTest,
176 ::testing::Values(false));
177
178 INSTANTIATE_TEST_CASE_P(SystemLevel,
179 ExperimentStorageTest,
180 ::testing::Values(true));
181
182 } // namespace installer
OLDNEW
« no previous file with comments | « chrome/installer/util/experiment_storage.cc ('k') | chrome/installer/util/experiment_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698