OLD | NEW |
---|---|
(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 | |
OLD | NEW |