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

Side by Side Diff: components/domain_reliability/monitor_unittest.cc

Issue 1180223006: Domain Reliability: Simplify configs and reports (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix memory leak in unittests Created 5 years, 1 month 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 | « components/domain_reliability/monitor.cc ('k') | components/domain_reliability/scheduler.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/domain_reliability/monitor.h" 5 #include "components/domain_reliability/monitor.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "base/test/test_simple_task_runner.h" 13 #include "base/test/test_simple_task_runner.h"
14 #include "components/domain_reliability/baked_in_configs.h" 14 #include "components/domain_reliability/baked_in_configs.h"
15 #include "components/domain_reliability/beacon.h" 15 #include "components/domain_reliability/beacon.h"
16 #include "components/domain_reliability/config.h" 16 #include "components/domain_reliability/config.h"
17 #include "components/domain_reliability/google_configs.h"
17 #include "components/domain_reliability/test_util.h" 18 #include "components/domain_reliability/test_util.h"
18 #include "net/base/host_port_pair.h" 19 #include "net/base/host_port_pair.h"
19 #include "net/base/load_flags.h" 20 #include "net/base/load_flags.h"
20 #include "net/http/http_response_headers.h" 21 #include "net/http/http_response_headers.h"
21 #include "net/http/http_util.h" 22 #include "net/http/http_util.h"
22 #include "net/url_request/url_request_context_getter.h" 23 #include "net/url_request/url_request_context_getter.h"
23 #include "net/url_request/url_request_status.h" 24 #include "net/url_request/url_request_status.h"
24 #include "net/url_request/url_request_test_util.h" 25 #include "net/url_request/url_request_test_util.h"
25 #include "testing/gtest/include/gtest/gtest.h" 26 #include "testing/gtest/include/gtest/gtest.h"
26 27
27 namespace domain_reliability { 28 namespace domain_reliability {
28 29
29 namespace { 30 namespace {
30 31
31 typedef std::vector<DomainReliabilityBeacon> BeaconVector; 32 typedef std::vector<const DomainReliabilityBeacon*> BeaconVector;
32
33 static const size_t kAlwaysReportIndex = 0u;
34 static const size_t kNeverReportIndex = 1u;
35 33
36 scoped_refptr<net::HttpResponseHeaders> MakeHttpResponseHeaders( 34 scoped_refptr<net::HttpResponseHeaders> MakeHttpResponseHeaders(
37 const std::string& headers) { 35 const std::string& headers) {
38 return scoped_refptr<net::HttpResponseHeaders>( 36 return scoped_refptr<net::HttpResponseHeaders>(
39 new net::HttpResponseHeaders(net::HttpUtil::AssembleRawHeaders( 37 new net::HttpResponseHeaders(net::HttpUtil::AssembleRawHeaders(
40 headers.c_str(), headers.length()))); 38 headers.c_str(), headers.length())));
41 } 39 }
42 40
41 size_t CountQueuedBeacons(DomainReliabilityContext* context) {
42 BeaconVector beacons;
43 context->GetQueuedBeaconsForTesting(&beacons);
44 return beacons.size();
45 }
46
43 } // namespace 47 } // namespace
44 48
45 class DomainReliabilityMonitorTest : public testing::Test { 49 class DomainReliabilityMonitorTest : public testing::Test {
46 protected: 50 protected:
47 typedef DomainReliabilityMonitor::RequestInfo RequestInfo; 51 typedef DomainReliabilityMonitor::RequestInfo RequestInfo;
48 52
49 DomainReliabilityMonitorTest() 53 DomainReliabilityMonitorTest()
50 : pref_task_runner_(new base::TestSimpleTaskRunner()), 54 : pref_task_runner_(new base::TestSimpleTaskRunner()),
51 network_task_runner_(new base::TestSimpleTaskRunner()), 55 network_task_runner_(new base::TestSimpleTaskRunner()),
52 url_request_context_getter_( 56 url_request_context_getter_(
53 new net::TestURLRequestContextGetter(network_task_runner_)), 57 new net::TestURLRequestContextGetter(network_task_runner_)),
54 time_(new MockTime()), 58 time_(new MockTime()),
55 monitor_("test-reporter", 59 monitor_("test-reporter",
56 pref_task_runner_, 60 pref_task_runner_,
57 network_task_runner_, 61 network_task_runner_,
58 scoped_ptr<MockableTime>(time_)), 62 scoped_ptr<MockableTime>(time_)) {
59 context_(nullptr) {
60 monitor_.MoveToNetworkThread(); 63 monitor_.MoveToNetworkThread();
61 monitor_.InitURLRequestContext(url_request_context_getter_); 64 monitor_.InitURLRequestContext(url_request_context_getter_);
62 monitor_.SetDiscardUploads(false); 65 monitor_.SetDiscardUploads(false);
63 context_ = monitor_.AddContextForTesting(MakeTestConfig());
64 } 66 }
65 67
66 static RequestInfo MakeRequestInfo() { 68 static RequestInfo MakeRequestInfo() {
67 RequestInfo request; 69 RequestInfo request;
68 request.status = net::URLRequestStatus(); 70 request.status = net::URLRequestStatus();
69 request.response_info.socket_address = 71 request.response_info.socket_address =
70 net::HostPortPair::FromString("12.34.56.78:80"); 72 net::HostPortPair::FromString("12.34.56.78:80");
71 request.response_info.headers = MakeHttpResponseHeaders( 73 request.response_info.headers = MakeHttpResponseHeaders(
72 "HTTP/1.1 200 OK\n\n"); 74 "HTTP/1.1 200 OK\n\n");
73 request.response_info.was_cached = false; 75 request.response_info.was_cached = false;
74 request.response_info.network_accessed = true; 76 request.response_info.network_accessed = true;
75 request.response_info.was_fetched_via_proxy = false; 77 request.response_info.was_fetched_via_proxy = false;
76 request.load_flags = 0; 78 request.load_flags = 0;
77 request.is_upload = false; 79 request.is_upload = false;
78 return request; 80 return request;
79 } 81 }
80 82
81 void OnRequestLegComplete(const RequestInfo& info) { 83 void OnRequestLegComplete(const RequestInfo& info) {
82 monitor_.OnRequestLegComplete(info); 84 monitor_.OnRequestLegComplete(info);
83 } 85 }
84 86
85 size_t CountPendingBeacons() { 87 DomainReliabilityContext* CreateAndAddContext() {
86 BeaconVector beacons; 88 return monitor_.AddContextForTesting(MakeTestConfig());
87 context_->GetQueuedBeaconsForTesting(&beacons);
88 return beacons.size();
89 } 89 }
90 90
91 bool CheckRequestCounts(size_t index, 91 DomainReliabilityContext* CreateAndAddContextForOrigin(const GURL& origin,
92 uint32 expected_successful, 92 bool wildcard) {
93 uint32 expected_failed) { 93 scoped_ptr<DomainReliabilityConfig> config(
94 return CheckRequestCounts(context_, 94 MakeTestConfigWithOrigin(origin));
95 index, 95 config->include_subdomains = wildcard;
96 expected_successful, 96 return monitor_.AddContextForTesting(config.Pass());
97 expected_failed);
98 }
99
100 bool CheckRequestCounts(DomainReliabilityContext* context,
101 size_t index,
102 uint32 expected_successful,
103 uint32 expected_failed) {
104 uint32 successful, failed;
105 context->GetRequestCountsForTesting(index, &successful, &failed);
106 EXPECT_EQ(expected_successful, successful);
107 EXPECT_EQ(expected_failed, failed);
108 return expected_successful == successful && expected_failed == failed;
109 }
110
111 DomainReliabilityContext* CreateAndAddContext(const std::string& domain) {
112 return monitor_.AddContextForTesting(MakeTestConfigWithDomain(domain));
113 } 97 }
114 98
115 scoped_refptr<base::TestSimpleTaskRunner> pref_task_runner_; 99 scoped_refptr<base::TestSimpleTaskRunner> pref_task_runner_;
116 scoped_refptr<base::TestSimpleTaskRunner> network_task_runner_; 100 scoped_refptr<base::TestSimpleTaskRunner> network_task_runner_;
117 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; 101 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_;
118 MockTime* time_; 102 MockTime* time_;
119 DomainReliabilityMonitor monitor_; 103 DomainReliabilityMonitor monitor_;
120 DomainReliabilityContext* context_;
121 DomainReliabilityMonitor::RequestInfo request_; 104 DomainReliabilityMonitor::RequestInfo request_;
122 }; 105 };
123 106
124 namespace { 107 namespace {
125 108
126 TEST_F(DomainReliabilityMonitorTest, Create) { 109 TEST_F(DomainReliabilityMonitorTest, Create) {
127 EXPECT_EQ(0u, CountPendingBeacons());
128 EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 0u, 0u));
129 EXPECT_TRUE(CheckRequestCounts(kNeverReportIndex, 0u, 0u));
130 } 110 }
131 111
132 TEST_F(DomainReliabilityMonitorTest, NoContext) { 112 TEST_F(DomainReliabilityMonitorTest, NoContext) {
113 DomainReliabilityContext* context = CreateAndAddContext();
114
133 RequestInfo request = MakeRequestInfo(); 115 RequestInfo request = MakeRequestInfo();
134 request.url = GURL("http://no-context/"); 116 request.url = GURL("http://no-context/");
135 OnRequestLegComplete(request); 117 OnRequestLegComplete(request);
136 118
137 EXPECT_EQ(0u, CountPendingBeacons()); 119 EXPECT_EQ(0u, CountQueuedBeacons(context));
138 EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 0u, 0u));
139 EXPECT_TRUE(CheckRequestCounts(kNeverReportIndex, 0u, 0u));
140 }
141
142 TEST_F(DomainReliabilityMonitorTest, NotReported) {
143 RequestInfo request = MakeRequestInfo();
144 request.url = GURL("http://example/never_report");
145 OnRequestLegComplete(request);
146
147 EXPECT_EQ(0u, CountPendingBeacons());
148 EXPECT_TRUE(CheckRequestCounts(kNeverReportIndex, 1u, 0u));
149 } 120 }
150 121
151 TEST_F(DomainReliabilityMonitorTest, NetworkFailure) { 122 TEST_F(DomainReliabilityMonitorTest, NetworkFailure) {
123 DomainReliabilityContext* context = CreateAndAddContext();
124
152 RequestInfo request = MakeRequestInfo(); 125 RequestInfo request = MakeRequestInfo();
153 request.url = GURL("http://example/always_report"); 126 request.url = GURL("http://example/");
154 request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET); 127 request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET);
155 request.response_info.headers = nullptr; 128 request.response_info.headers = nullptr;
156 OnRequestLegComplete(request); 129 OnRequestLegComplete(request);
157 130
158 EXPECT_EQ(1u, CountPendingBeacons()); 131 EXPECT_EQ(1u, CountQueuedBeacons(context));
159 EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 0u, 1u));
160 } 132 }
161 133
162 TEST_F(DomainReliabilityMonitorTest, ServerFailure) { 134 TEST_F(DomainReliabilityMonitorTest, ServerFailure) {
135 DomainReliabilityContext* context = CreateAndAddContext();
136
163 RequestInfo request = MakeRequestInfo(); 137 RequestInfo request = MakeRequestInfo();
164 request.url = GURL("http://example/always_report"); 138 request.url = GURL("http://example/");
165 request.response_info.headers = 139 request.response_info.headers =
166 MakeHttpResponseHeaders("HTTP/1.1 500 :(\n\n"); 140 MakeHttpResponseHeaders("HTTP/1.1 500 :(\n\n");
167 OnRequestLegComplete(request); 141 OnRequestLegComplete(request);
168 142
169 EXPECT_EQ(1u, CountPendingBeacons()); 143 EXPECT_EQ(1u, CountQueuedBeacons(context));
170 EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 0u, 1u));
171 }
172
173 TEST_F(DomainReliabilityMonitorTest, NotReportedFailure) {
174 RequestInfo request = MakeRequestInfo();
175 request.url = GURL("http://example/never_report");
176 request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET);
177 OnRequestLegComplete(request);
178
179 EXPECT_EQ(0u, CountPendingBeacons());
180 EXPECT_TRUE(CheckRequestCounts(kNeverReportIndex, 0u, 1u));
181 }
182
183 TEST_F(DomainReliabilityMonitorTest, Request) {
184 RequestInfo request = MakeRequestInfo();
185 request.url = GURL("http://example/always_report");
186 OnRequestLegComplete(request);
187
188 EXPECT_EQ(1u, CountPendingBeacons());
189 EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 1u, 0u));
190 } 144 }
191 145
192 // Make sure the monitor does not log requests that did not access the network. 146 // Make sure the monitor does not log requests that did not access the network.
193 TEST_F(DomainReliabilityMonitorTest, DidNotAccessNetwork) { 147 TEST_F(DomainReliabilityMonitorTest, DidNotAccessNetwork) {
148 DomainReliabilityContext* context = CreateAndAddContext();
149
194 RequestInfo request = MakeRequestInfo(); 150 RequestInfo request = MakeRequestInfo();
195 request.url = GURL("http://example/always_report"); 151 request.url = GURL("http://example/");
196 request.response_info.network_accessed = false; 152 request.response_info.network_accessed = false;
197 OnRequestLegComplete(request); 153 OnRequestLegComplete(request);
198 154
199 EXPECT_EQ(0u, CountPendingBeacons()); 155 EXPECT_EQ(0u, CountQueuedBeacons(context));
200 EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 0u, 0u));
201 } 156 }
202 157
203 // Make sure the monitor does not log requests that don't send cookies. 158 // Make sure the monitor does not log requests that don't send cookies.
204 TEST_F(DomainReliabilityMonitorTest, DoNotSendCookies) { 159 TEST_F(DomainReliabilityMonitorTest, DoNotSendCookies) {
160 DomainReliabilityContext* context = CreateAndAddContext();
161
205 RequestInfo request = MakeRequestInfo(); 162 RequestInfo request = MakeRequestInfo();
206 request.url = GURL("http://example/always_report"); 163 request.url = GURL("http://example/");
207 request.load_flags = net::LOAD_DO_NOT_SEND_COOKIES; 164 request.load_flags = net::LOAD_DO_NOT_SEND_COOKIES;
208 OnRequestLegComplete(request); 165 OnRequestLegComplete(request);
209 166
210 EXPECT_EQ(0u, CountPendingBeacons()); 167 EXPECT_EQ(0u, CountQueuedBeacons(context));
211 EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 0u, 0u));
212 } 168 }
213 169
214 // Make sure the monitor does not log upload requests. 170 // Make sure the monitor does not log upload requests.
215 TEST_F(DomainReliabilityMonitorTest, IsUpload) { 171 TEST_F(DomainReliabilityMonitorTest, IsUpload) {
172 DomainReliabilityContext* context = CreateAndAddContext();
173
216 RequestInfo request = MakeRequestInfo(); 174 RequestInfo request = MakeRequestInfo();
217 request.url = GURL("http://example/always_report"); 175 request.url = GURL("http://example/");
218 request.is_upload = true; 176 request.is_upload = true;
219 OnRequestLegComplete(request); 177 OnRequestLegComplete(request);
220 178
221 EXPECT_EQ(0u, CountPendingBeacons()); 179 EXPECT_EQ(0u, CountQueuedBeacons(context));
222 EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 0u, 0u));
223 } 180 }
224 181
225 // Make sure the monitor does not log a network-local error. 182 // Make sure the monitor does not log a network-local error.
226 TEST_F(DomainReliabilityMonitorTest, LocalError) { 183 TEST_F(DomainReliabilityMonitorTest, LocalError) {
184 DomainReliabilityContext* context = CreateAndAddContext();
185
227 RequestInfo request = MakeRequestInfo(); 186 RequestInfo request = MakeRequestInfo();
228 request.url = GURL("http://example/always_report"); 187 request.url = GURL("http://example/");
229 request.status = 188 request.status =
230 net::URLRequestStatus::FromError(net::ERR_PROXY_CONNECTION_FAILED); 189 net::URLRequestStatus::FromError(net::ERR_PROXY_CONNECTION_FAILED);
231 OnRequestLegComplete(request); 190 OnRequestLegComplete(request);
232 191
233 EXPECT_EQ(0u, CountPendingBeacons()); 192 EXPECT_EQ(0u, CountQueuedBeacons(context));
234 EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 0u, 0u));
235 } 193 }
236 194
237 // Make sure the monitor does not log the proxy's IP if one was used. 195 // Make sure the monitor does not log the proxy's IP if one was used.
238 TEST_F(DomainReliabilityMonitorTest, WasFetchedViaProxy) { 196 TEST_F(DomainReliabilityMonitorTest, WasFetchedViaProxy) {
197 DomainReliabilityContext* context = CreateAndAddContext();
198
239 RequestInfo request = MakeRequestInfo(); 199 RequestInfo request = MakeRequestInfo();
240 request.url = GURL("http://example/always_report"); 200 request.url = GURL("http://example/");
201 request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET);
241 request.response_info.socket_address = 202 request.response_info.socket_address =
242 net::HostPortPair::FromString("127.0.0.1:3128"); 203 net::HostPortPair::FromString("127.0.0.1:3128");
243 request.response_info.was_fetched_via_proxy = true; 204 request.response_info.was_fetched_via_proxy = true;
244 OnRequestLegComplete(request); 205 OnRequestLegComplete(request);
245 206
246 BeaconVector beacons; 207 BeaconVector beacons;
247 context_->GetQueuedBeaconsForTesting(&beacons); 208 context->GetQueuedBeaconsForTesting(&beacons);
248 EXPECT_EQ(1u, beacons.size()); 209 EXPECT_EQ(1u, beacons.size());
249 EXPECT_TRUE(beacons[0].server_ip.empty()); 210 EXPECT_TRUE(beacons[0]->server_ip.empty());
250
251 EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 1u, 0u));
252 } 211 }
253 212
254 // Make sure the monitor does not log the cached IP returned after a successful 213 // Make sure the monitor does not log the cached IP returned after a successful
255 // cache revalidation request. 214 // cache revalidation request.
256 TEST_F(DomainReliabilityMonitorTest, 215 TEST_F(DomainReliabilityMonitorTest,
257 NoCachedIPFromSuccessfulRevalidationRequest) { 216 NoCachedIPFromSuccessfulRevalidationRequest) {
217 scoped_ptr<DomainReliabilityConfig> config = MakeTestConfig();
218 config->success_sample_rate = 1.0;
219 DomainReliabilityContext* context =
220 monitor_.AddContextForTesting(config.Pass());
221
258 RequestInfo request = MakeRequestInfo(); 222 RequestInfo request = MakeRequestInfo();
259 request.url = GURL("http://example/always_report"); 223 request.url = GURL("http://example/");
260 request.response_info.was_cached = true; 224 request.response_info.was_cached = true;
261 OnRequestLegComplete(request); 225 OnRequestLegComplete(request);
262 226
263 BeaconVector beacons; 227 BeaconVector beacons;
264 context_->GetQueuedBeaconsForTesting(&beacons); 228 context->GetQueuedBeaconsForTesting(&beacons);
265 EXPECT_EQ(1u, beacons.size()); 229 EXPECT_EQ(1u, beacons.size());
266 EXPECT_TRUE(beacons[0].server_ip.empty()); 230 EXPECT_TRUE(beacons[0]->server_ip.empty());
267 } 231 }
268 232
269 // Make sure the monitor does not log the cached IP returned with a failed 233 // Make sure the monitor does not log the cached IP returned with a failed
270 // cache revalidation request. 234 // cache revalidation request.
271 TEST_F(DomainReliabilityMonitorTest, NoCachedIPFromFailedRevalidationRequest) { 235 TEST_F(DomainReliabilityMonitorTest, NoCachedIPFromFailedRevalidationRequest) {
236 DomainReliabilityContext* context = CreateAndAddContext();
237
272 RequestInfo request = MakeRequestInfo(); 238 RequestInfo request = MakeRequestInfo();
273 request.url = GURL("http://example/always_report"); 239 request.url = GURL("http://example/");
274 request.response_info.was_cached = true; 240 request.response_info.was_cached = true;
275 request.status = 241 request.status =
276 net::URLRequestStatus::FromError(net::ERR_NAME_RESOLUTION_FAILED); 242 net::URLRequestStatus::FromError(net::ERR_NAME_RESOLUTION_FAILED);
277 OnRequestLegComplete(request); 243 OnRequestLegComplete(request);
278 244
279 BeaconVector beacons; 245 BeaconVector beacons;
280 context_->GetQueuedBeaconsForTesting(&beacons); 246 context->GetQueuedBeaconsForTesting(&beacons);
281 EXPECT_EQ(1u, beacons.size()); 247 EXPECT_EQ(1u, beacons.size());
282 EXPECT_TRUE(beacons[0].server_ip.empty()); 248 EXPECT_TRUE(beacons[0]->server_ip.empty());
283 } 249 }
284 250
285 TEST_F(DomainReliabilityMonitorTest, AtLeastOneBakedInConfig) { 251 TEST_F(DomainReliabilityMonitorTest, AtLeastOneBakedInConfig) {
286 DCHECK(kBakedInJsonConfigs[0] != nullptr); 252 DCHECK(kBakedInJsonConfigs[0] != nullptr);
287 } 253 }
288 254
289 // Will fail when baked-in configs expire, as a reminder to update them. 255 // Will fail when baked-in configs expire, as a reminder to update them.
290 // (Contact ttuttle@chromium.org if this starts failing.) 256 // (Contact ttuttle@chromium.org if this starts failing.)
291 TEST_F(DomainReliabilityMonitorTest, AddBakedInConfigs) { 257 TEST_F(DomainReliabilityMonitorTest, AddBakedInConfigs) {
292 // AddBakedInConfigs DCHECKs that the baked-in configs parse correctly, so 258 // AddBakedInConfigs DCHECKs that the baked-in configs parse correctly, so
293 // this unittest will fail if someone tries to add an invalid config to the 259 // this unittest will fail if someone tries to add an invalid config to the
294 // source tree. 260 // source tree.
295 monitor_.AddBakedInConfigs(); 261 monitor_.AddBakedInConfigs();
296 262
297 // Count the number of baked-in configs. 263 // Count the number of baked-in configs.
298 size_t num_baked_in_configs = 0; 264 size_t num_baked_in_configs = 0;
299 for (const char* const* p = kBakedInJsonConfigs; *p; ++p) 265 for (const char* const* p = kBakedInJsonConfigs; *p; ++p)
300 ++num_baked_in_configs; 266 ++num_baked_in_configs;
301 267
302 // The monitor should have contexts for all of the baked-in configs, plus the 268 // Also count the Google configs stored in abbreviated form.
303 // test one added in the test constructor. 269 std::vector<DomainReliabilityConfig*> google_configs;
304 EXPECT_EQ(num_baked_in_configs + 1, monitor_.contexts_size_for_testing()); 270 GetAllGoogleConfigs(&google_configs);
271 size_t num_google_configs = google_configs.size();
272 STLDeleteElements(&google_configs);
273
274 // The monitor should have contexts for all of the baked-in configs.
275 EXPECT_EQ(num_baked_in_configs + num_google_configs,
276 monitor_.contexts_size_for_testing());
305 } 277 }
306 278
307 TEST_F(DomainReliabilityMonitorTest, ClearBeacons) { 279 TEST_F(DomainReliabilityMonitorTest, ClearBeacons) {
280 DomainReliabilityContext* context = CreateAndAddContext();
281
308 // Initially the monitor should have just the test context, with no beacons. 282 // Initially the monitor should have just the test context, with no beacons.
309 EXPECT_EQ(1u, monitor_.contexts_size_for_testing()); 283 EXPECT_EQ(1u, monitor_.contexts_size_for_testing());
310 EXPECT_EQ(0u, CountPendingBeacons()); 284 EXPECT_EQ(0u, CountQueuedBeacons(context));
311 EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 0u, 0u));
312 EXPECT_TRUE(CheckRequestCounts(kNeverReportIndex, 0u, 0u));
313 285
314 // Add a beacon. 286 // Add a beacon.
315 RequestInfo request = MakeRequestInfo(); 287 RequestInfo request = MakeRequestInfo();
316 request.url = GURL("http://example/always_report"); 288 request.url = GURL("http://example/");
289 request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET);
317 OnRequestLegComplete(request); 290 OnRequestLegComplete(request);
318 291
319 // Make sure it was added. 292 // Make sure it was added.
320 EXPECT_EQ(1u, CountPendingBeacons()); 293 EXPECT_EQ(1u, CountQueuedBeacons(context));
321 EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 1u, 0u));
322 294
323 monitor_.ClearBrowsingData(CLEAR_BEACONS); 295 monitor_.ClearBrowsingData(CLEAR_BEACONS);
324 296
325 // Make sure the beacon was cleared, but not the contexts. 297 // Make sure the beacon was cleared, but not the contexts.
326 EXPECT_EQ(1u, monitor_.contexts_size_for_testing()); 298 EXPECT_EQ(1u, monitor_.contexts_size_for_testing());
327 EXPECT_EQ(0u, CountPendingBeacons()); 299 EXPECT_EQ(0u, CountQueuedBeacons(context));
328 EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 0u, 0u));
329 EXPECT_TRUE(CheckRequestCounts(kNeverReportIndex, 0u, 0u));
330 } 300 }
331 301
332 TEST_F(DomainReliabilityMonitorTest, ClearContexts) { 302 TEST_F(DomainReliabilityMonitorTest, ClearContexts) {
303 CreateAndAddContext();
304
333 // Initially the monitor should have just the test context. 305 // Initially the monitor should have just the test context.
334 EXPECT_EQ(1u, monitor_.contexts_size_for_testing()); 306 EXPECT_EQ(1u, monitor_.contexts_size_for_testing());
335 307
336 monitor_.ClearBrowsingData(CLEAR_CONTEXTS); 308 monitor_.ClearBrowsingData(CLEAR_CONTEXTS);
337 309
338 // Clearing contexts should leave the monitor with none. 310 // Clearing contexts should leave the monitor with none.
339 EXPECT_EQ(0u, monitor_.contexts_size_for_testing()); 311 EXPECT_EQ(0u, monitor_.contexts_size_for_testing());
340 } 312 }
341 313
342 TEST_F(DomainReliabilityMonitorTest, WildcardMatchesSelf) { 314 TEST_F(DomainReliabilityMonitorTest, WildcardMatchesSelf) {
343 DomainReliabilityContext* context = CreateAndAddContext("*.wildcard"); 315 DomainReliabilityContext* context =
316 CreateAndAddContextForOrigin(GURL("https://wildcard/"), true);
344 317
345 RequestInfo request = MakeRequestInfo(); 318 RequestInfo request = MakeRequestInfo();
346 request.url = GURL("http://wildcard/always_report"); 319 request.url = GURL("http://wildcard/");
320 request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET);
347 OnRequestLegComplete(request); 321 OnRequestLegComplete(request);
348 EXPECT_TRUE(CheckRequestCounts(context, kAlwaysReportIndex, 1u, 0u)); 322
323 EXPECT_EQ(1u, CountQueuedBeacons(context));
349 } 324 }
350 325
351 TEST_F(DomainReliabilityMonitorTest, WildcardMatchesSubdomain) { 326 TEST_F(DomainReliabilityMonitorTest, WildcardMatchesSubdomain) {
352 DomainReliabilityContext* context = CreateAndAddContext("*.wildcard"); 327 DomainReliabilityContext* context =
328 CreateAndAddContextForOrigin(GURL("https://wildcard/"), true);
353 329
354 RequestInfo request = MakeRequestInfo(); 330 RequestInfo request = MakeRequestInfo();
355 request.url = GURL("http://test.wildcard/always_report"); 331 request.url = GURL("http://test.wildcard/");
332 request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET);
356 OnRequestLegComplete(request); 333 OnRequestLegComplete(request);
357 EXPECT_TRUE(CheckRequestCounts(context, kAlwaysReportIndex, 1u, 0u)); 334
335 EXPECT_EQ(1u, CountQueuedBeacons(context));
358 } 336 }
359 337
360 TEST_F(DomainReliabilityMonitorTest, WildcardDoesntMatchSubsubdomain) { 338 TEST_F(DomainReliabilityMonitorTest, WildcardDoesntMatchSubsubdomain) {
361 DomainReliabilityContext* context = CreateAndAddContext("*.wildcard"); 339 DomainReliabilityContext* context =
340 CreateAndAddContextForOrigin(GURL("https://wildcard/"), true);
362 341
363 RequestInfo request = MakeRequestInfo(); 342 RequestInfo request = MakeRequestInfo();
364 request.url = GURL("http://test.test.wildcard/always_report"); 343 request.url = GURL("http://test.test.wildcard/");
344 request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET);
365 OnRequestLegComplete(request); 345 OnRequestLegComplete(request);
366 EXPECT_TRUE(CheckRequestCounts(context, kAlwaysReportIndex, 0u, 0u)); 346
347 EXPECT_EQ(0u, CountQueuedBeacons(context));
367 } 348 }
368 349
369 TEST_F(DomainReliabilityMonitorTest, WildcardPrefersSelfToSelfWildcard) { 350 TEST_F(DomainReliabilityMonitorTest, WildcardPrefersSelfToSelfWildcard) {
370 DomainReliabilityContext* context1 = CreateAndAddContext("wildcard"); 351 DomainReliabilityContext* context1 =
371 DomainReliabilityContext* context2 = CreateAndAddContext("*.wildcard"); 352 CreateAndAddContextForOrigin(GURL("https://wildcard/"), false);
353 DomainReliabilityContext* context2 =
354 CreateAndAddContextForOrigin(GURL("https://wildcard/"), true);
372 355
373 RequestInfo request = MakeRequestInfo(); 356 RequestInfo request = MakeRequestInfo();
374 request.url = GURL("http://wildcard/always_report"); 357 request.url = GURL("http://wildcard/");
358 request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET);
375 OnRequestLegComplete(request); 359 OnRequestLegComplete(request);
376 360
377 EXPECT_TRUE(CheckRequestCounts(context1, kAlwaysReportIndex, 1u, 0u)); 361 EXPECT_EQ(1u, CountQueuedBeacons(context1));
378 EXPECT_TRUE(CheckRequestCounts(context2, kAlwaysReportIndex, 0u, 0u)); 362 EXPECT_EQ(0u, CountQueuedBeacons(context2));
379 } 363 }
380 364
381 TEST_F(DomainReliabilityMonitorTest, WildcardPrefersSelfToParentWildcard) { 365 TEST_F(DomainReliabilityMonitorTest, WildcardPrefersSelfToParentWildcard) {
382 DomainReliabilityContext* context1 = CreateAndAddContext("test.wildcard"); 366 DomainReliabilityContext* context1 =
383 DomainReliabilityContext* context2 = CreateAndAddContext("*.wildcard"); 367 CreateAndAddContextForOrigin(GURL("https://test.wildcard/"), false);
368 DomainReliabilityContext* context2 =
369 CreateAndAddContextForOrigin(GURL("https://wildcard/"), true);
384 370
385 RequestInfo request = MakeRequestInfo(); 371 RequestInfo request = MakeRequestInfo();
386 request.url = GURL("http://test.wildcard/always_report"); 372 request.url = GURL("http://test.wildcard/");
373 request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET);
387 OnRequestLegComplete(request); 374 OnRequestLegComplete(request);
388 375
389 EXPECT_TRUE(CheckRequestCounts(context1, kAlwaysReportIndex, 1u, 0u)); 376 EXPECT_EQ(1u, CountQueuedBeacons(context1));
390 EXPECT_TRUE(CheckRequestCounts(context2, kAlwaysReportIndex, 0u, 0u)); 377 EXPECT_EQ(0u, CountQueuedBeacons(context2));
391 } 378 }
392 379
393 TEST_F(DomainReliabilityMonitorTest, 380 TEST_F(DomainReliabilityMonitorTest,
394 WildcardPrefersSelfWildcardToParentWildcard) { 381 WildcardPrefersSelfWildcardToParentWildcard) {
395 DomainReliabilityContext* context1 = CreateAndAddContext("*.test.wildcard"); 382 DomainReliabilityContext* context1 =
396 DomainReliabilityContext* context2 = CreateAndAddContext("*.wildcard"); 383 CreateAndAddContextForOrigin(GURL("https://test.wildcard/"), true);
384 DomainReliabilityContext* context2 =
385 CreateAndAddContextForOrigin(GURL("https://wildcard/"), true);
397 386
398 RequestInfo request = MakeRequestInfo(); 387 RequestInfo request = MakeRequestInfo();
399 request.url = GURL("http://test.wildcard/always_report"); 388 request.url = GURL("http://test.wildcard/");
389 request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET);
400 OnRequestLegComplete(request); 390 OnRequestLegComplete(request);
401 391
402 EXPECT_TRUE(CheckRequestCounts(context1, kAlwaysReportIndex, 1u, 0u)); 392 EXPECT_EQ(1u, CountQueuedBeacons(context1));
403 EXPECT_TRUE(CheckRequestCounts(context2, kAlwaysReportIndex, 0u, 0u)); 393 EXPECT_EQ(0u, CountQueuedBeacons(context2));
404 } 394 }
405 395
406 } // namespace 396 } // namespace
407 397
408 } // namespace domain_reliability 398 } // namespace domain_reliability
OLDNEW
« no previous file with comments | « components/domain_reliability/monitor.cc ('k') | components/domain_reliability/scheduler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698