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

Side by Side Diff: chrome/renderer/net/net_error_helper_unittest.cc

Issue 13270005: Display DNS probe results. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Don't break DnsProbe histograms Created 7 years, 5 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 (c) 2013 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/renderer/net/net_error_helper.h"
6
7 #include "base/logging.h"
8 #include "chrome/common/net/net_error_info.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 using chrome_common_net::DnsProbeStatus;
12 using chrome_common_net::DnsProbeStatusToString;
13
14 enum TestStep {
15 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, LOAD_ERROR_START,
16 LOAD_COMMIT, LOAD_FINISH,
17
18 STATUS_STARTED, STATUS_NOT_RUN, STATUS_FINISHED,
19
20 EXPECT_UPDATE
21 };
22
23 class TestNetErrorHelper : public NetErrorHelper {
24 public:
25 TestNetErrorHelper()
26 : NetErrorHelper(NULL),
27 mock_page_update_count_(0),
28 mock_displayed_probe_status_(chrome_common_net::DNS_PROBE_MAX) {}
29
30 virtual ~TestNetErrorHelper() {}
31
32 void StartLoad(bool is_main_frame, bool is_error_page) {
33 OnStartLoad(is_main_frame, is_error_page);
34 }
35
36 void FailLoad(bool is_main_frame, bool is_dns_error) {
37 OnFailLoad(is_main_frame, is_dns_error);
38 }
39
40 void CommitLoad(bool is_main_frame) {
41 OnCommitLoad(is_main_frame);
42 }
43
44 void FinishLoad(bool is_main_frame) {
45 OnFinishLoad(is_main_frame);
46 }
47
48 void ReceiveProbeStatus(DnsProbeStatus status) {
49 OnNetErrorInfo(static_cast<int>(status));
50 }
51
52 int mock_page_update_count() const { return mock_page_update_count_; }
53 DnsProbeStatus mock_displayed_probe_status() const {
54 return mock_displayed_probe_status_;
55 }
56
57 protected:
58 virtual void UpdateErrorPage() OVERRIDE {
59 DVLOG(1) << "Updating error page with status "
60 << DnsProbeStatusToString(last_probe_status_);
61 mock_page_update_count_++;
62 mock_displayed_probe_status_ = last_probe_status_;
63 }
64
65 private:
66 int mock_page_update_count_;
67 DnsProbeStatus mock_displayed_probe_status_;
68 };
69
70 class NetErrorHelperTest : public testing::Test {
71 protected:
72 enum MainFrame { SUB_FRAME, MAIN_FRAME };
73 enum ErrorPage { NORMAL_PAGE, ERROR_PAGE };
74 enum ErrorType { OTHER_ERROR, DNS_ERROR };
75
76 void StartLoad(MainFrame main_frame, ErrorPage error_page) {
77 helper_.StartLoad(main_frame == MAIN_FRAME, error_page == ERROR_PAGE);
78 }
79
80 void FailLoad(MainFrame main_frame, ErrorType error_type) {
81 helper_.FailLoad(main_frame == MAIN_FRAME, error_type == DNS_ERROR);
82 }
83
84 void CommitLoad(MainFrame main_frame) {
85 helper_.CommitLoad(main_frame == MAIN_FRAME);
86 }
87
88 void FinishLoad(MainFrame main_frame) {
89 helper_.FinishLoad(main_frame == MAIN_FRAME);
90 }
91
92 void ReceiveProbeStatus(DnsProbeStatus status) {
93 helper_.ReceiveProbeStatus(status);
94 }
95
96 void RunTest(const TestStep steps[], int step_count);
97
98 int page_update_count() const { return helper_.mock_page_update_count(); }
99 DnsProbeStatus displayed_probe_status() const {
100 return helper_.mock_displayed_probe_status();
101 }
102
103 private:
104 TestNetErrorHelper helper_;
105 };
106
107 void NetErrorHelperTest::RunTest(const TestStep steps[], int step_count) {
108 bool update_expected = false;
109 int update_count = page_update_count();
110 chrome_common_net::DnsProbeStatus last_status_received =
111 chrome_common_net::DNS_PROBE_POSSIBLE;
112
113 for (int i = 0; i < step_count; i++) {
114 switch (steps[i]) {
115 case LOAD_NORMAL_START:
116 StartLoad(MAIN_FRAME, NORMAL_PAGE);
117 break;
118 case LOAD_NORMAL_FAIL:
119 FailLoad(MAIN_FRAME, DNS_ERROR);
120 break;
121 case LOAD_ERROR_START:
122 StartLoad(MAIN_FRAME, ERROR_PAGE);
123 break;
124 case LOAD_COMMIT:
125 CommitLoad(MAIN_FRAME);
126 break;
127 case LOAD_FINISH:
128 FinishLoad(MAIN_FRAME);
129 break;
130 case STATUS_STARTED:
131 ReceiveProbeStatus(chrome_common_net::DNS_PROBE_STARTED);
132 last_status_received = chrome_common_net::DNS_PROBE_STARTED;
133 break;
134 case STATUS_NOT_RUN:
135 ReceiveProbeStatus(chrome_common_net::DNS_PROBE_NOT_RUN);
136 last_status_received = chrome_common_net::DNS_PROBE_NOT_RUN;
137 break;
138 case STATUS_FINISHED:
139 ReceiveProbeStatus(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
140 last_status_received = chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN;
141 break;
142 case EXPECT_UPDATE:
143 // EXPECT_UPDATE acts as an instruction prefix that declares that the
144 // next instruction should cause an update.
145 DCHECK(!update_expected);
146 break;
147 }
148
149 if (steps[i] == EXPECT_UPDATE) {
150 update_expected = true;
151 } else if (update_expected) {
152 DCHECK_NE(chrome_common_net::DNS_PROBE_POSSIBLE, last_status_received);
153 ++update_count;
154 EXPECT_EQ(update_count, page_update_count());
155 EXPECT_EQ(last_status_received, displayed_probe_status());
156 update_expected = false;
157
158 if (page_update_count() != update_count) {
159 LOG(ERROR) << "Missing update at step " << i << ".";
160 return;
161 }
162 } else {
163 EXPECT_EQ(update_count, page_update_count());
164
165 if (page_update_count() != update_count) {
166 LOG(ERROR) << "Spurious update at step " << i << ".";
167 return;
168 }
169 }
170 }
171
172 DCHECK(!update_expected);
173 }
174
175 TEST_F(NetErrorHelperTest, Null) {
176 // Test that we can simply create and destroy a NetErrorHelper.
177 }
178
179 TEST_F(NetErrorHelperTest, SuccessfulPageLoad) {
180 StartLoad(MAIN_FRAME, NORMAL_PAGE);
181 CommitLoad(MAIN_FRAME);
182 FinishLoad(MAIN_FRAME);
183
184 // Ignore spurious status.
185 ReceiveProbeStatus(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
186 EXPECT_EQ(0, page_update_count());
187 }
188
189 TEST_F(NetErrorHelperTest, MainFrameNonDnsError) {
190 StartLoad(MAIN_FRAME, NORMAL_PAGE);
191 FailLoad(MAIN_FRAME, OTHER_ERROR);
192 StartLoad(MAIN_FRAME, ERROR_PAGE);
193 CommitLoad(MAIN_FRAME);
194 FinishLoad(MAIN_FRAME);
195
196 // Ignore spurious status.
197 ReceiveProbeStatus(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
198 EXPECT_EQ(0, page_update_count());
199 }
200
201 TEST_F(NetErrorHelperTest, SubFrameDnsError) {
202 StartLoad(SUB_FRAME, NORMAL_PAGE);
203 FailLoad(SUB_FRAME, DNS_ERROR);
204 StartLoad(SUB_FRAME, ERROR_PAGE);
205 CommitLoad(SUB_FRAME);
206 FinishLoad(SUB_FRAME);
207
208 // Ignore spurious status.
209 ReceiveProbeStatus(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN);
210 EXPECT_EQ(0, page_update_count());
211 }
212
213 TEST_F(NetErrorHelperTest, FinishedAfterFail) {
214 const TestStep steps[] = {
215 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, STATUS_FINISHED, LOAD_ERROR_START,
216 LOAD_COMMIT, EXPECT_UPDATE, LOAD_FINISH
217 };
218 RunTest(steps, arraysize(steps));
219 }
220
221 TEST_F(NetErrorHelperTest, FinishedAfterFail_StartedAfterFail) {
222 const TestStep steps[] = {
223 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, STATUS_STARTED, STATUS_FINISHED,
224 LOAD_ERROR_START, LOAD_COMMIT, EXPECT_UPDATE, LOAD_FINISH
225 };
226 RunTest(steps, arraysize(steps));
227 }
228
229 TEST_F(NetErrorHelperTest, FinishedAfterStart) {
230 const TestStep steps[] = {
231 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, LOAD_ERROR_START, STATUS_FINISHED,
232 LOAD_COMMIT, EXPECT_UPDATE, LOAD_FINISH
233 };
234 RunTest(steps, arraysize(steps));
235 }
236
237 TEST_F(NetErrorHelperTest, FinishedAfterStart_StartedAfterFail) {
238 const TestStep steps[] = {
239 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, STATUS_STARTED, LOAD_ERROR_START,
240 STATUS_FINISHED, LOAD_COMMIT, EXPECT_UPDATE, LOAD_FINISH
241 };
242 RunTest(steps, arraysize(steps));
243 }
244
245 TEST_F(NetErrorHelperTest, FinishedAfterStart_StartedAfterStart) {
246 const TestStep steps[] = {
247 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, STATUS_STARTED, LOAD_ERROR_START,
248 STATUS_FINISHED, LOAD_COMMIT, EXPECT_UPDATE, LOAD_FINISH
249 };
250 RunTest(steps, arraysize(steps));
251 }
252
253 TEST_F(NetErrorHelperTest, FinishedAfterCommit) {
254 const TestStep steps[] = {
255 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, LOAD_ERROR_START, LOAD_COMMIT,
256 STATUS_FINISHED, EXPECT_UPDATE, LOAD_FINISH
257 };
258 RunTest(steps, arraysize(steps));
259 }
260
261 TEST_F(NetErrorHelperTest, FinishedAfterCommit_StartedAfterFail) {
262 const TestStep steps[] = {
263 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, STATUS_STARTED, LOAD_ERROR_START,
264 LOAD_COMMIT, STATUS_FINISHED, EXPECT_UPDATE, LOAD_FINISH
265 };
266 RunTest(steps, arraysize(steps));
267 }
268
269 TEST_F(NetErrorHelperTest, FinishedAfterCommit_StartedAfterStart) {
270 const TestStep steps[] = {
271 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, LOAD_ERROR_START, STATUS_STARTED,
272 LOAD_ERROR_START, LOAD_COMMIT, STATUS_FINISHED, EXPECT_UPDATE, LOAD_FINISH
273 };
274 RunTest(steps, arraysize(steps));
275 }
276
277 TEST_F(NetErrorHelperTest, FinishedAfterCommit_StartedAfterCommit) {
278 const TestStep steps[] = {
279 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, LOAD_ERROR_START, LOAD_COMMIT,
280 STATUS_STARTED, STATUS_FINISHED, EXPECT_UPDATE, LOAD_FINISH
281 };
282 RunTest(steps, arraysize(steps));
283 }
284
285 TEST_F(NetErrorHelperTest, FinishedAfterFinish) {
286 const TestStep steps[] = {
287 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, LOAD_ERROR_START, LOAD_COMMIT,
288 LOAD_FINISH, EXPECT_UPDATE, STATUS_FINISHED
289 };
290 RunTest(steps, arraysize(steps));
291 }
292
293 TEST_F(NetErrorHelperTest, FinishedAfterFinish_StartAfterFail) {
294 const TestStep steps[] = {
295 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, STATUS_STARTED, LOAD_ERROR_START,
296 LOAD_COMMIT, EXPECT_UPDATE, LOAD_FINISH, EXPECT_UPDATE, STATUS_FINISHED
297 };
298 RunTest(steps, arraysize(steps));
299 }
300
301 TEST_F(NetErrorHelperTest, FinishedAfterFinish_StartAfterStart) {
302 const TestStep steps[] = {
303 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, LOAD_ERROR_START, STATUS_STARTED,
304 LOAD_COMMIT, EXPECT_UPDATE, LOAD_FINISH, EXPECT_UPDATE, STATUS_FINISHED
305 };
306 RunTest(steps, arraysize(steps));
307 }
308
309 TEST_F(NetErrorHelperTest, FinishedAfterFinish_StartAfterCommit) {
310 const TestStep steps[] = {
311 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, LOAD_ERROR_START, LOAD_COMMIT,
312 STATUS_STARTED, EXPECT_UPDATE, LOAD_FINISH, EXPECT_UPDATE, STATUS_FINISHED
313 };
314 RunTest(steps, arraysize(steps));
315 }
316
317 TEST_F(NetErrorHelperTest, FinishedAfterFinish_StartAfterFinish) {
318 const TestStep steps[] = {
319 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, LOAD_ERROR_START, LOAD_COMMIT,
320 LOAD_FINISH, EXPECT_UPDATE, STATUS_STARTED, EXPECT_UPDATE, STATUS_FINISHED
321 };
322 RunTest(steps, arraysize(steps));
323 }
324
325 TEST_F(NetErrorHelperTest, FinishedAfterNewStart) {
326 const TestStep steps[] = {
327 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, LOAD_ERROR_START, LOAD_COMMIT,
328 LOAD_FINISH, LOAD_NORMAL_START, EXPECT_UPDATE, STATUS_FINISHED,
329 LOAD_COMMIT, LOAD_FINISH
330 };
331 RunTest(steps, arraysize(steps));
332 }
333
334 TEST_F(NetErrorHelperTest, NotRunAfterFail) {
335 const TestStep steps[] = {
336 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, STATUS_NOT_RUN, LOAD_ERROR_START,
337 LOAD_COMMIT, EXPECT_UPDATE, LOAD_FINISH
338 };
339 RunTest(steps, arraysize(steps));
340 }
341
342 TEST_F(NetErrorHelperTest, NotRunAfterStart) {
343 const TestStep steps[] = {
344 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, LOAD_ERROR_START, STATUS_NOT_RUN,
345 LOAD_COMMIT, EXPECT_UPDATE, LOAD_FINISH
346 };
347 RunTest(steps, arraysize(steps));
348 }
349
350 TEST_F(NetErrorHelperTest, NotRunAfterCommit) {
351 const TestStep steps[] = {
352 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, LOAD_ERROR_START, LOAD_COMMIT,
353 STATUS_NOT_RUN, EXPECT_UPDATE, LOAD_FINISH
354 };
355 RunTest(steps, arraysize(steps));
356 }
357
358 TEST_F(NetErrorHelperTest, NotRunAfterFinish) {
359 const TestStep steps[] = {
360 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, LOAD_ERROR_START, LOAD_COMMIT,
361 LOAD_FINISH, EXPECT_UPDATE, STATUS_NOT_RUN
362 };
363 RunTest(steps, arraysize(steps));
364 }
365
366 TEST_F(NetErrorHelperTest, FinishedAfterNewCommit) {
367 const TestStep steps[] = {
368 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, LOAD_ERROR_START, LOAD_COMMIT,
369 LOAD_FINISH, LOAD_NORMAL_START, LOAD_COMMIT, STATUS_FINISHED, LOAD_FINISH
370 };
371 RunTest(steps, arraysize(steps));
372 }
373
374 TEST_F(NetErrorHelperTest, FinishedAfterNewFinish) {
375 const TestStep steps[] = {
376 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, LOAD_ERROR_START, LOAD_COMMIT,
377 LOAD_FINISH, LOAD_NORMAL_START, LOAD_COMMIT, LOAD_FINISH, STATUS_FINISHED
378 };
379 RunTest(steps, arraysize(steps));
380 }
381
382 // Two iterations of FinishedAfterStart_StartAfterFail
383 TEST_F(NetErrorHelperTest, TwoProbes) {
384 const TestStep steps[] = {
385 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, STATUS_STARTED, LOAD_ERROR_START,
386 STATUS_FINISHED, LOAD_COMMIT, EXPECT_UPDATE, LOAD_FINISH,
387 LOAD_NORMAL_START, LOAD_NORMAL_FAIL, STATUS_STARTED, LOAD_ERROR_START,
388 STATUS_FINISHED, LOAD_COMMIT, EXPECT_UPDATE, LOAD_FINISH
389 };
390 RunTest(steps, arraysize(steps));
391 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698