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

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

Issue 2889323004: Win 10 Inactive toast experiment metrics and storage modifications. (Closed)
Patch Set: Apply review comments 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.
grt (UTC plus 2) 2017/06/09 20:02:27 this set of tests is downright awesome!
nikunjb 2017/06/13 00:27:36 Acknowledged. Thanks.
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.h"
6
7 #include <cmath>
8
9 #include "base/time/time.h"
10 #include "chrome/installer/util/experiment_metrics.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace installer {
14
15 TEST(ExperimentTest, TestInitializeFromMetrics) {
16 Experiment experiment;
17 ExperimentMetrics metrics_with_group;
18 metrics_with_group.state = ExperimentMetrics::kGroupAssigned;
19 metrics_with_group.group = 5;
20 experiment.InitializeFromMetrics(metrics_with_group);
21 EXPECT_EQ(ExperimentMetrics::kGroupAssigned, experiment.state());
22 EXPECT_EQ(5, experiment.group());
23 }
24
25 TEST(ExperimentTest, TestSetState) {
26 Experiment experiment;
27 EXPECT_EQ(ExperimentMetrics::kUninitialized, experiment.state());
28 EXPECT_EQ(ExperimentMetrics::kUninitialized, experiment.metrics().state);
29 experiment.SetState(ExperimentMetrics::kGroupAssigned);
30 EXPECT_EQ(ExperimentMetrics::kGroupAssigned, experiment.metrics().state);
31 EXPECT_EQ(ExperimentMetrics::kGroupAssigned, experiment.state());
32 }
33
34 TEST(ExperimentTest, TestAssignGroup) {
35 Experiment experiment;
36 experiment.AssignGroup(5);
37 EXPECT_EQ(5, experiment.metrics().group);
38 EXPECT_EQ(5, experiment.group());
39 EXPECT_EQ(ExperimentMetrics::kGroupAssigned, experiment.metrics().state);
40 EXPECT_EQ(ExperimentMetrics::kGroupAssigned, experiment.state());
41 }
42
43 TEST(ExperimentTest, TestSetInactiveDays) {
44 Experiment experiment;
45 experiment.AssignGroup(5);
46
47 experiment.SetInactiveDays(0);
48 EXPECT_EQ(0, experiment.metrics().last_used_bucket);
49 EXPECT_EQ(0, experiment.inactive_days());
50
51 experiment.SetInactiveDays(28);
52 EXPECT_EQ(57, experiment.metrics().last_used_bucket);
53 EXPECT_EQ(28, experiment.inactive_days());
54
55 experiment.SetInactiveDays(35);
56 EXPECT_EQ(61, experiment.metrics().last_used_bucket);
57 EXPECT_EQ(35, experiment.inactive_days());
58
59 experiment.SetInactiveDays(60);
60 EXPECT_EQ(70, experiment.metrics().last_used_bucket);
61 EXPECT_EQ(60, experiment.inactive_days());
62
63 experiment.SetInactiveDays(ExperimentMetrics::kMaxLastUsed);
64 EXPECT_EQ(127, experiment.metrics().last_used_bucket);
65 EXPECT_EQ(ExperimentMetrics::kMaxLastUsed, experiment.inactive_days());
66
67 experiment.SetInactiveDays(2 * ExperimentMetrics::kMaxLastUsed);
68 EXPECT_EQ(127, experiment.metrics().last_used_bucket);
69 EXPECT_EQ(2 * ExperimentMetrics::kMaxLastUsed, experiment.inactive_days());
70 }
71
72 TEST(ExperimentTest, TestSetDisplayTime) {
73 Experiment experiment;
74 experiment.AssignGroup(5);
75 base::Time zero_day =
76 base::Time::FromDoubleT(ExperimentMetrics::kExperimentStartSeconds);
77 experiment.SetDisplayTime(zero_day);
78 EXPECT_EQ(0, experiment.metrics().first_toast_offset);
79 EXPECT_EQ(zero_day, experiment.first_display_time());
80 EXPECT_EQ(zero_day, experiment.latest_display_time());
81
82 base::Time one_day = zero_day + base::TimeDelta::FromDays(1);
83 experiment.SetDisplayTime(one_day);
84 EXPECT_EQ(1, experiment.metrics().first_toast_offset);
85 EXPECT_EQ(one_day, experiment.first_display_time());
86 EXPECT_EQ(one_day, experiment.latest_display_time());
87
88 // Test that calling SetDisplayTime again will not reset first_toast_offset.
89 base::Time two_day = zero_day + base::TimeDelta::FromDays(2);
90 experiment.SetDisplayTime(two_day);
91 EXPECT_EQ(1, experiment.metrics().first_toast_offset);
92 EXPECT_EQ(one_day, experiment.first_display_time());
93 EXPECT_EQ(two_day, experiment.latest_display_time());
94
95 // Test for maximum value.
96 Experiment new_experiment;
97 new_experiment.AssignGroup(5);
98 base::Time max_day = zero_day + base::TimeDelta::FromDays(
99 ExperimentMetrics::kMaxFirstToastOffset);
100 new_experiment.SetDisplayTime(max_day);
101 EXPECT_EQ(ExperimentMetrics::kMaxFirstToastOffset,
102 new_experiment.metrics().first_toast_offset);
103 EXPECT_EQ(max_day, new_experiment.first_display_time());
104 EXPECT_EQ(max_day, new_experiment.latest_display_time());
105
106 // Test setting toast_hour. Since it depends on local time it is
107 // tested by setting toast hour for two consecutive hours and verifying the
108 // difference is 1.
109 base::Time two_day_one_hour = two_day + base::TimeDelta::FromHours(1);
110 Experiment hour_experiment;
111 hour_experiment.AssignGroup(5);
112 hour_experiment.SetDisplayTime(two_day_one_hour);
113 int diff_hour =
114 hour_experiment.metrics().toast_hour - experiment.metrics().toast_hour;
115 EXPECT_EQ(1, diff_hour);
116 }
117
118 TEST(ExperimentTest, TestSetUserSessionUptime) {
119 Experiment experiment;
120 experiment.AssignGroup(5);
121 experiment.SetUserSessionUptime(base::TimeDelta::FromMinutes(0));
122 EXPECT_EQ(0, experiment.metrics().session_length_bucket);
123 EXPECT_EQ(0, experiment.user_session_uptime().InMinutes());
124
125 experiment.SetUserSessionUptime(base::TimeDelta::FromMinutes(60));
126 EXPECT_EQ(24, experiment.metrics().session_length_bucket);
127 EXPECT_EQ(60, experiment.user_session_uptime().InMinutes());
128
129 experiment.SetUserSessionUptime(base::TimeDelta::FromMinutes(60 * 24));
130 EXPECT_EQ(43, experiment.metrics().session_length_bucket);
131 EXPECT_EQ(60 * 24, experiment.user_session_uptime().InMinutes());
132
133 experiment.SetUserSessionUptime(
134 base::TimeDelta::FromMinutes(ExperimentMetrics::kMaxSessionLength));
135 EXPECT_EQ(63, experiment.metrics().session_length_bucket);
136 EXPECT_EQ(ExperimentMetrics::kMaxSessionLength,
137 experiment.user_session_uptime().InMinutes());
138
139 experiment.SetUserSessionUptime(
140 base::TimeDelta::FromMinutes(2 * ExperimentMetrics::kMaxSessionLength));
141 EXPECT_EQ(63, experiment.metrics().session_length_bucket);
142 EXPECT_EQ(2 * ExperimentMetrics::kMaxSessionLength,
143 experiment.user_session_uptime().InMinutes());
144 }
145
146 TEST(ExperimentTest, TestSetActionDelay) {
147 Experiment experiment;
148 experiment.AssignGroup(5);
149 experiment.SetActionDelay(base::TimeDelta::FromSeconds(0));
150 EXPECT_EQ(0, experiment.metrics().action_delay_bucket);
151 EXPECT_EQ(0, experiment.user_session_uptime().InSeconds());
152
153 experiment.SetActionDelay(base::TimeDelta::FromSeconds(60));
154 EXPECT_EQ(10, experiment.metrics().action_delay_bucket);
155 EXPECT_EQ(60, experiment.action_delay().InSeconds());
156
157 experiment.SetActionDelay(base::TimeDelta::FromSeconds(60 * 60));
158 EXPECT_EQ(19, experiment.metrics().action_delay_bucket);
159 EXPECT_EQ(60 * 60, experiment.action_delay().InSeconds());
160
161 experiment.SetActionDelay(
162 base::TimeDelta::FromSeconds(ExperimentMetrics::kMaxActionDelay));
163 EXPECT_EQ(31, experiment.metrics().action_delay_bucket);
164 EXPECT_EQ(ExperimentMetrics::kMaxActionDelay,
165 experiment.action_delay().InSeconds());
166
167 experiment.SetActionDelay(
168 base::TimeDelta::FromSeconds(2 * ExperimentMetrics::kMaxActionDelay));
169 EXPECT_EQ(31, experiment.metrics().action_delay_bucket);
170 EXPECT_EQ(2 * ExperimentMetrics::kMaxActionDelay,
171 experiment.action_delay().InSeconds());
172 }
173
174 TEST(ExperimentTest, TestAllSetters) {
175 Experiment experiment;
176 experiment.AssignGroup(5);
177 experiment.SetState(ExperimentMetrics::kGroupAssigned);
178 experiment.SetToastLocation(ExperimentMetrics::kOverTaskbarPin);
179 experiment.SetInactiveDays(1621);
180 experiment.SetToastCount(1);
181 base::Time test_display_time =
182 (base::Time::UnixEpoch() +
183 base::TimeDelta::FromSeconds(
184 ExperimentMetrics::kExperimentStartSeconds) +
185 base::TimeDelta::FromDays(30) + base::TimeDelta::FromHours(3));
186 experiment.SetDisplayTime(test_display_time);
187 experiment.SetUserSessionUptime(base::TimeDelta::FromMinutes(3962));
188 experiment.SetActionDelay(base::TimeDelta::FromSeconds(32875));
189
190 EXPECT_EQ(ExperimentMetrics::kGroupAssigned, experiment.state());
191 EXPECT_EQ(5, experiment.group());
192 EXPECT_EQ(ExperimentMetrics::kOverTaskbarPin, experiment.toast_location());
193 EXPECT_EQ(1621, experiment.inactive_days());
194 EXPECT_EQ(1, experiment.toast_count());
195 EXPECT_EQ(test_display_time, experiment.first_display_time());
196 EXPECT_EQ(test_display_time, experiment.latest_display_time());
197 EXPECT_EQ(base::TimeDelta::FromMinutes(3962),
198 experiment.user_session_uptime());
199 EXPECT_EQ(base::TimeDelta::FromSeconds(32875), experiment.action_delay());
200
201 EXPECT_EQ(ExperimentMetrics::kGroupAssigned, experiment.metrics().state);
202 EXPECT_EQ(5, experiment.metrics().group);
203 EXPECT_EQ(ExperimentMetrics::kOverTaskbarPin,
204 experiment.metrics().toast_location);
205 EXPECT_EQ(1, experiment.metrics().toast_count);
206 EXPECT_EQ(30, experiment.metrics().first_toast_offset);
207 EXPECT_EQ(125, experiment.metrics().last_used_bucket);
208 EXPECT_EQ(24, experiment.metrics().action_delay_bucket);
209 EXPECT_EQ(49, experiment.metrics().session_length_bucket);
210 }
211
212 } // namespace installer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698