OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "chrome/browser/net/passive_log_collector.h" | 5 #include "chrome/browser/net/passive_log_collector.h" |
6 | 6 |
7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
8 #include "base/format_macros.h" | 8 #include "base/format_macros.h" |
9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
10 #include "net/url_request/url_request_netlog_params.h" | 10 #include "net/url_request/url_request_netlog_params.h" |
11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
12 | 12 |
13 namespace { | 13 namespace { |
14 | 14 |
15 typedef PassiveLogCollector::RequestTracker RequestTracker; | 15 typedef PassiveLogCollector::RequestTracker RequestTracker; |
16 typedef PassiveLogCollector::RequestInfoList RequestInfoList; | 16 typedef PassiveLogCollector::RequestInfoList RequestInfoList; |
| 17 typedef PassiveLogCollector::SocketTracker SocketTracker; |
17 using net::NetLog; | 18 using net::NetLog; |
18 | 19 |
19 const NetLog::SourceType kSourceType = NetLog::SOURCE_NONE; | 20 const NetLog::SourceType kSourceType = NetLog::SOURCE_NONE; |
20 | 21 |
21 PassiveLogCollector::Entry MakeStartLogEntryWithURL(int source_id, | 22 PassiveLogCollector::Entry MakeStartLogEntryWithURL(int source_id, |
22 const std::string& url) { | 23 const std::string& url) { |
23 return PassiveLogCollector::Entry( | 24 return PassiveLogCollector::Entry( |
24 0, | 25 0, |
25 NetLog::TYPE_URL_REQUEST_START_JOB, | 26 NetLog::TYPE_URL_REQUEST_START_JOB, |
26 base::TimeTicks(), | 27 base::TimeTicks(), |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 collector->OnAddEntry(NetLog::TYPE_REQUEST_ALIVE, base::TimeTicks(), | 59 collector->OnAddEntry(NetLog::TYPE_REQUEST_ALIVE, base::TimeTicks(), |
59 NetLog::Source(NetLog::SOURCE_URL_REQUEST, id), | 60 NetLog::Source(NetLog::SOURCE_URL_REQUEST, id), |
60 NetLog::PHASE_END, NULL); | 61 NetLog::PHASE_END, NULL); |
61 } | 62 } |
62 | 63 |
63 std::string GetStringParam(const PassiveLogCollector::Entry& entry) { | 64 std::string GetStringParam(const PassiveLogCollector::Entry& entry) { |
64 return static_cast<net::NetLogStringParameter*>( | 65 return static_cast<net::NetLogStringParameter*>( |
65 entry.params.get())->value(); | 66 entry.params.get())->value(); |
66 } | 67 } |
67 | 68 |
| 69 bool OrderBySourceID(const PassiveLogCollector::RequestInfo& a, |
| 70 const PassiveLogCollector::RequestInfo& b) { |
| 71 return a.source_id < b.source_id; |
| 72 } |
| 73 |
| 74 RequestInfoList GetLiveRequests( |
| 75 const PassiveLogCollector::RequestTrackerBase& tracker) { |
| 76 RequestInfoList result = tracker.GetAllDeadOrAliveRequests(true); |
| 77 std::sort(result.begin(), result.end(), &OrderBySourceID); |
| 78 return result; |
| 79 } |
| 80 |
| 81 RequestInfoList GetDeadRequests( |
| 82 const PassiveLogCollector::RequestTrackerBase& tracker) { |
| 83 RequestInfoList result = tracker.GetAllDeadOrAliveRequests(false); |
| 84 std::sort(result.begin(), result.end(), &OrderBySourceID); |
| 85 return result; |
| 86 } |
| 87 |
68 static const int kMaxNumLoadLogEntries = 1; | 88 static const int kMaxNumLoadLogEntries = 1; |
69 | 89 |
70 } // namespace | 90 } // namespace |
71 | 91 |
72 TEST(RequestTrackerTest, BasicBounded) { | 92 TEST(RequestTrackerTest, BasicBounded) { |
73 RequestTracker tracker(NULL, NULL); | 93 RequestTracker tracker(NULL); |
74 EXPECT_EQ(0u, tracker.GetLiveRequests().size()); | 94 EXPECT_EQ(0u, GetLiveRequests(tracker).size()); |
75 EXPECT_EQ(0u, tracker.GetRecentlyDeceased().size()); | 95 EXPECT_EQ(0u, GetDeadRequests(tracker).size()); |
76 | 96 |
77 tracker.OnAddEntry(MakeStartLogEntry(1)); | 97 tracker.OnAddEntry(MakeStartLogEntry(1)); |
78 tracker.OnAddEntry(MakeStartLogEntry(2)); | 98 tracker.OnAddEntry(MakeStartLogEntry(2)); |
79 tracker.OnAddEntry(MakeStartLogEntry(3)); | 99 tracker.OnAddEntry(MakeStartLogEntry(3)); |
80 tracker.OnAddEntry(MakeStartLogEntry(4)); | 100 tracker.OnAddEntry(MakeStartLogEntry(4)); |
81 tracker.OnAddEntry(MakeStartLogEntry(5)); | 101 tracker.OnAddEntry(MakeStartLogEntry(5)); |
82 | 102 |
83 RequestInfoList live_reqs = tracker.GetLiveRequests(); | 103 RequestInfoList live_reqs = GetLiveRequests(tracker); |
84 | 104 |
85 ASSERT_EQ(5u, live_reqs.size()); | 105 ASSERT_EQ(5u, live_reqs.size()); |
86 EXPECT_EQ("http://req1/", live_reqs[0].GetURL()); | 106 EXPECT_EQ("http://req1/", live_reqs[0].GetURL()); |
87 EXPECT_EQ("http://req2/", live_reqs[1].GetURL()); | 107 EXPECT_EQ("http://req2/", live_reqs[1].GetURL()); |
88 EXPECT_EQ("http://req3/", live_reqs[2].GetURL()); | 108 EXPECT_EQ("http://req3/", live_reqs[2].GetURL()); |
89 EXPECT_EQ("http://req4/", live_reqs[3].GetURL()); | 109 EXPECT_EQ("http://req4/", live_reqs[3].GetURL()); |
90 EXPECT_EQ("http://req5/", live_reqs[4].GetURL()); | 110 EXPECT_EQ("http://req5/", live_reqs[4].GetURL()); |
91 | 111 |
92 tracker.OnAddEntry(MakeEndLogEntry(1)); | 112 tracker.OnAddEntry(MakeEndLogEntry(1)); |
93 tracker.OnAddEntry(MakeEndLogEntry(5)); | 113 tracker.OnAddEntry(MakeEndLogEntry(5)); |
94 tracker.OnAddEntry(MakeEndLogEntry(3)); | 114 tracker.OnAddEntry(MakeEndLogEntry(3)); |
95 | 115 |
96 ASSERT_EQ(3u, tracker.GetRecentlyDeceased().size()); | 116 ASSERT_EQ(3u, GetDeadRequests(tracker).size()); |
97 | 117 |
98 live_reqs = tracker.GetLiveRequests(); | 118 live_reqs = GetLiveRequests(tracker); |
99 | 119 |
100 ASSERT_EQ(2u, live_reqs.size()); | 120 ASSERT_EQ(2u, live_reqs.size()); |
101 EXPECT_EQ("http://req2/", live_reqs[0].GetURL()); | 121 EXPECT_EQ("http://req2/", live_reqs[0].GetURL()); |
102 EXPECT_EQ("http://req4/", live_reqs[1].GetURL()); | 122 EXPECT_EQ("http://req4/", live_reqs[1].GetURL()); |
103 } | 123 } |
104 | 124 |
105 TEST(RequestTrackerTest, GraveyardBounded) { | 125 TEST(RequestTrackerTest, GraveyardBounded) { |
106 RequestTracker tracker(NULL, NULL); | 126 RequestTracker tracker(NULL); |
107 EXPECT_EQ(0u, tracker.GetLiveRequests().size()); | 127 EXPECT_EQ(0u, GetLiveRequests(tracker).size()); |
108 EXPECT_EQ(0u, tracker.GetRecentlyDeceased().size()); | 128 EXPECT_EQ(0u, GetDeadRequests(tracker).size()); |
109 | 129 |
110 // Add twice as many requests as will fit in the graveyard. | 130 // Add twice as many requests as will fit in the graveyard. |
111 for (size_t i = 0; i < RequestTracker::kMaxGraveyardSize * 2; ++i) { | 131 for (size_t i = 0; i < RequestTracker::kMaxGraveyardSize * 2; ++i) { |
112 tracker.OnAddEntry(MakeStartLogEntry(i)); | 132 tracker.OnAddEntry(MakeStartLogEntry(i)); |
113 tracker.OnAddEntry(MakeEndLogEntry(i)); | 133 tracker.OnAddEntry(MakeEndLogEntry(i)); |
114 } | 134 } |
115 | 135 |
| 136 EXPECT_EQ(0u, GetLiveRequests(tracker).size()); |
| 137 |
116 // Check that only the last |kMaxGraveyardSize| requests are in-memory. | 138 // Check that only the last |kMaxGraveyardSize| requests are in-memory. |
117 | 139 |
118 RequestInfoList recent_reqs = tracker.GetRecentlyDeceased(); | 140 RequestInfoList recent_reqs = GetDeadRequests(tracker); |
119 | 141 |
120 ASSERT_EQ(RequestTracker::kMaxGraveyardSize, recent_reqs.size()); | 142 ASSERT_EQ(RequestTracker::kMaxGraveyardSize, recent_reqs.size()); |
121 | 143 |
122 for (size_t i = 0; i < RequestTracker::kMaxGraveyardSize; ++i) { | 144 for (size_t i = 0; i < RequestTracker::kMaxGraveyardSize; ++i) { |
123 size_t req_number = i + RequestTracker::kMaxGraveyardSize; | 145 size_t req_number = i + RequestTracker::kMaxGraveyardSize; |
124 std::string url = StringPrintf("http://req%" PRIuS "/", req_number); | 146 std::string url = StringPrintf("http://req%" PRIuS "/", req_number); |
125 EXPECT_EQ(url, recent_reqs[i].GetURL()); | 147 EXPECT_EQ(url, recent_reqs[i].GetURL()); |
126 } | 148 } |
127 } | 149 } |
128 | 150 |
129 // Check that we exclude "chrome://" URLs from being saved into the recent | 151 // Check that we exclude "chrome://" URLs from being saved into the recent |
130 // requests list (graveyard). | 152 // requests list (graveyard). |
131 TEST(RequestTrackerTest, GraveyardIsFiltered) { | 153 TEST(RequestTrackerTest, GraveyardIsFiltered) { |
132 RequestTracker tracker(NULL, NULL); | 154 RequestTracker tracker(NULL); |
133 | 155 |
134 // This will be excluded. | 156 // This will be excluded. |
135 std::string url1 = "chrome://dontcare/"; | 157 std::string url1 = "chrome://dontcare/"; |
136 tracker.OnAddEntry(MakeStartLogEntryWithURL(1, url1)); | 158 tracker.OnAddEntry(MakeStartLogEntryWithURL(1, url1)); |
137 tracker.OnAddEntry(MakeEndLogEntry(1)); | 159 tracker.OnAddEntry(MakeEndLogEntry(1)); |
138 | 160 |
139 // This will be be added to graveyard. | 161 // This will be be added to graveyard. |
140 std::string url2 = "chrome2://dontcare/"; | 162 std::string url2 = "chrome2://dontcare/"; |
141 tracker.OnAddEntry(MakeStartLogEntryWithURL(2, url2)); | 163 tracker.OnAddEntry(MakeStartLogEntryWithURL(2, url2)); |
142 tracker.OnAddEntry(MakeEndLogEntry(2)); | 164 tracker.OnAddEntry(MakeEndLogEntry(2)); |
143 | 165 |
144 // This will be be added to graveyard. | 166 // This will be be added to graveyard. |
145 std::string url3 = "http://foo/"; | 167 std::string url3 = "http://foo/"; |
146 tracker.OnAddEntry(MakeStartLogEntryWithURL(3, url3)); | 168 tracker.OnAddEntry(MakeStartLogEntryWithURL(3, url3)); |
147 tracker.OnAddEntry(MakeEndLogEntry(3)); | 169 tracker.OnAddEntry(MakeEndLogEntry(3)); |
148 | 170 |
149 ASSERT_EQ(2u, tracker.GetRecentlyDeceased().size()); | 171 ASSERT_EQ(2u, GetDeadRequests(tracker).size()); |
150 EXPECT_EQ(url2, tracker.GetRecentlyDeceased()[0].GetURL()); | 172 EXPECT_EQ(url2, GetDeadRequests(tracker)[0].GetURL()); |
151 EXPECT_EQ(url3, tracker.GetRecentlyDeceased()[1].GetURL()); | 173 EXPECT_EQ(url3, GetDeadRequests(tracker)[1].GetURL()); |
152 } | |
153 | |
154 TEST(PassiveLogCollectorTest, BasicConnectJobAssociation) { | |
155 PassiveLogCollector log; | |
156 | |
157 RequestInfoList requests = log.url_request_tracker()->GetLiveRequests(); | |
158 EXPECT_EQ(0u, requests.size()); | |
159 | |
160 AddStartURLRequestEntries(&log, 10); | |
161 AddStartURLRequestEntries(&log, 20); | |
162 | |
163 requests = log.url_request_tracker()->GetLiveRequests(); | |
164 EXPECT_EQ(2u, requests.size()); | |
165 | |
166 EXPECT_EQ(10u, requests[0].source_id); | |
167 EXPECT_EQ(2u, requests[0].entries.size()); | |
168 EXPECT_EQ(20u, requests[1].source_id); | |
169 EXPECT_EQ(2u, requests[1].entries.size()); | |
170 | |
171 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_ID , base::TimeTicks(), | |
172 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
173 NetLog::PHASE_BEGIN, new net::NetLogIntegerParameter("x", 11)); | |
174 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
175 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 11), | |
176 NetLog::PHASE_BEGIN, NULL); | |
177 | |
178 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_ID , base::TimeTicks(), | |
179 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 20), | |
180 NetLog::PHASE_BEGIN, new net::NetLogIntegerParameter("x", 21)); | |
181 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
182 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 21), | |
183 NetLog::PHASE_BEGIN, NULL); | |
184 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
185 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 21), | |
186 NetLog::PHASE_END, NULL); | |
187 | |
188 requests = log.url_request_tracker()->GetLiveRequests(); | |
189 EXPECT_EQ(2u, requests.size()); | |
190 | |
191 EXPECT_EQ(4u, requests[0].entries.size()); | |
192 EXPECT_EQ(5u, requests[1].entries.size()); | |
193 | |
194 AddEndURLRequestEntries(&log, 10); | |
195 AddEndURLRequestEntries(&log, 20); | |
196 | |
197 requests = log.url_request_tracker()->GetLiveRequests(); | |
198 EXPECT_EQ(0u, requests.size()); | |
199 | |
200 requests = log.url_request_tracker()->GetRecentlyDeceased(); | |
201 EXPECT_EQ(2u, requests.size()); | |
202 EXPECT_EQ(5u, requests[0].entries.size()); | |
203 EXPECT_EQ(6u, requests[1].entries.size()); | |
204 } | |
205 | |
206 TEST(PassiveLogCollectorTest, BasicSocketAssociation) { | |
207 PassiveLogCollector log; | |
208 | |
209 RequestInfoList requests = log.url_request_tracker()->GetLiveRequests(); | |
210 EXPECT_EQ(0u, requests.size()); | |
211 | |
212 AddStartURLRequestEntries(&log, 10); | |
213 AddStartURLRequestEntries(&log, 20); | |
214 | |
215 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_ID , base::TimeTicks(), | |
216 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
217 NetLog::PHASE_BEGIN, new net::NetLogIntegerParameter("x", 11)); | |
218 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
219 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 11), | |
220 NetLog::PHASE_BEGIN, NULL); | |
221 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
222 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 11), | |
223 NetLog::PHASE_END, NULL); | |
224 | |
225 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_ID , base::TimeTicks(), | |
226 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 20), | |
227 NetLog::PHASE_BEGIN, new net::NetLogIntegerParameter("x", 21)); | |
228 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
229 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 21), | |
230 NetLog::PHASE_BEGIN, NULL); | |
231 log.OnAddEntry(NetLog::TYPE_TCP_CONNECT , base::TimeTicks(), | |
232 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 21), | |
233 NetLog::PHASE_NONE, NULL); | |
234 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
235 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 21), | |
236 NetLog::PHASE_END, NULL); | |
237 | |
238 requests = log.url_request_tracker()->GetLiveRequests(); | |
239 EXPECT_EQ(2u, requests.size()); | |
240 | |
241 EXPECT_EQ(5u, requests[0].entries.size()); | |
242 EXPECT_EQ(6u, requests[1].entries.size()); | |
243 | |
244 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_ID , base::TimeTicks(), | |
245 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
246 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 11)); | |
247 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_ID , base::TimeTicks(), | |
248 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 20), | |
249 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 21)); | |
250 | |
251 requests = log.url_request_tracker()->GetLiveRequests(); | |
252 EXPECT_EQ(2u, requests.size()); | |
253 | |
254 EXPECT_EQ(6u, requests[0].entries.size()); | |
255 EXPECT_EQ(7u, requests[1].entries.size()); | |
256 | |
257 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_SOCKET_ID , base::TimeTicks(), | |
258 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
259 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 15)); | |
260 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_SOCKET_ID , base::TimeTicks(), | |
261 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 20), | |
262 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 25)); | |
263 | |
264 log.OnAddEntry(NetLog::TYPE_SOCKS_CONNECT , base::TimeTicks(), | |
265 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
266 NetLog::PHASE_NONE, NULL); | |
267 log.OnAddEntry(NetLog::TYPE_SSL_CONNECT , base::TimeTicks(), | |
268 NetLog::Source(NetLog::SOURCE_SOCKET, 25), | |
269 NetLog::PHASE_BEGIN, NULL); | |
270 log.OnAddEntry(NetLog::TYPE_SSL_CONNECT , base::TimeTicks(), | |
271 NetLog::Source(NetLog::SOURCE_SOCKET, 25), | |
272 NetLog::PHASE_END, NULL); | |
273 | |
274 requests = log.url_request_tracker()->GetLiveRequests(); | |
275 EXPECT_EQ(2u, requests.size()); | |
276 | |
277 EXPECT_EQ(8u, requests[0].entries.size()); | |
278 EXPECT_EQ(10u, requests[1].entries.size()); | |
279 | |
280 AddEndURLRequestEntries(&log, 10); | |
281 AddEndURLRequestEntries(&log, 20); | |
282 | |
283 log.OnAddEntry(NetLog::TYPE_TCP_SOCKET_DONE , base::TimeTicks(), | |
284 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
285 NetLog::PHASE_NONE, NULL); | |
286 log.OnAddEntry(NetLog::TYPE_TCP_SOCKET_DONE , base::TimeTicks(), | |
287 NetLog::Source(NetLog::SOURCE_SOCKET, 25), | |
288 NetLog::PHASE_NONE, NULL); | |
289 | |
290 requests = log.url_request_tracker()->GetLiveRequests(); | |
291 EXPECT_EQ(0u, requests.size()); | |
292 | |
293 requests = log.url_request_tracker()->GetRecentlyDeceased(); | |
294 EXPECT_EQ(2u, requests.size()); | |
295 EXPECT_EQ(9u, requests[0].entries.size()); | |
296 EXPECT_EQ(11u, requests[1].entries.size()); | |
297 } | |
298 | |
299 TEST(PassiveLogCollectorTest, IdleSocketAssociation) { | |
300 PassiveLogCollector log; | |
301 | |
302 RequestInfoList requests = log.url_request_tracker()->GetLiveRequests(); | |
303 EXPECT_EQ(0u, requests.size()); | |
304 | |
305 AddStartURLRequestEntries(&log, 10); | |
306 AddStartURLRequestEntries(&log, 20); | |
307 log.OnAddEntry(NetLog::TYPE_INIT_PROXY_RESOLVER , base::TimeTicks(), | |
308 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 20), | |
309 NetLog::PHASE_NONE, NULL); | |
310 | |
311 requests = log.url_request_tracker()->GetLiveRequests(); | |
312 EXPECT_EQ(2u, requests.size()); | |
313 | |
314 EXPECT_EQ(2u, requests[0].entries.size()); | |
315 EXPECT_EQ(3u, requests[1].entries.size()); | |
316 | |
317 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_SOCKET_ID , base::TimeTicks(), | |
318 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
319 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 15)); | |
320 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_SOCKET_ID , base::TimeTicks(), | |
321 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 20), | |
322 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 25)); | |
323 | |
324 log.OnAddEntry(NetLog::TYPE_SOCKS_CONNECT , base::TimeTicks(), | |
325 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
326 NetLog::PHASE_NONE, NULL); | |
327 log.OnAddEntry(NetLog::TYPE_SSL_CONNECT , base::TimeTicks(), | |
328 NetLog::Source(NetLog::SOURCE_SOCKET, 25), | |
329 NetLog::PHASE_BEGIN, NULL); | |
330 log.OnAddEntry(NetLog::TYPE_SSL_CONNECT , base::TimeTicks(), | |
331 NetLog::Source(NetLog::SOURCE_SOCKET, 25), | |
332 NetLog::PHASE_END, NULL); | |
333 | |
334 requests = log.url_request_tracker()->GetLiveRequests(); | |
335 EXPECT_EQ(2u, requests.size()); | |
336 | |
337 EXPECT_EQ(4u, requests[0].entries.size()); | |
338 EXPECT_EQ(6u, requests[1].entries.size()); | |
339 | |
340 AddEndURLRequestEntries(&log, 10); | |
341 AddEndURLRequestEntries(&log, 20); | |
342 | |
343 log.OnAddEntry(NetLog::TYPE_TCP_SOCKET_DONE , base::TimeTicks(), | |
344 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
345 NetLog::PHASE_NONE, NULL); | |
346 log.OnAddEntry(NetLog::TYPE_TCP_SOCKET_DONE , base::TimeTicks(), | |
347 NetLog::Source(NetLog::SOURCE_SOCKET, 25), | |
348 NetLog::PHASE_NONE, NULL); | |
349 | |
350 requests = log.url_request_tracker()->GetLiveRequests(); | |
351 EXPECT_EQ(0u, requests.size()); | |
352 | |
353 requests = log.url_request_tracker()->GetRecentlyDeceased(); | |
354 EXPECT_EQ(2u, requests.size()); | |
355 EXPECT_EQ(5u, requests[0].entries.size()); | |
356 EXPECT_EQ(7u, requests[1].entries.size()); | |
357 } | |
358 | |
359 TEST(PassiveLogCollectorTest, IdleAssociateAfterConnectJobStarted) { | |
360 PassiveLogCollector log; | |
361 | |
362 RequestInfoList requests = log.url_request_tracker()->GetLiveRequests(); | |
363 EXPECT_EQ(0u, requests.size()); | |
364 | |
365 AddStartURLRequestEntries(&log, 10); | |
366 AddStartURLRequestEntries(&log, 20); | |
367 | |
368 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_ID , base::TimeTicks(), | |
369 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
370 NetLog::PHASE_BEGIN, new net::NetLogIntegerParameter("x", 11)); | |
371 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
372 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 11), | |
373 NetLog::PHASE_BEGIN, NULL); | |
374 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
375 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 11), | |
376 NetLog::PHASE_END, NULL); | |
377 | |
378 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_ID , base::TimeTicks(), | |
379 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 20), | |
380 NetLog::PHASE_BEGIN, new net::NetLogIntegerParameter("x", 21)); | |
381 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
382 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 21), | |
383 NetLog::PHASE_BEGIN, NULL); | |
384 log.OnAddEntry(NetLog::TYPE_TCP_CONNECT , base::TimeTicks(), | |
385 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 21), | |
386 NetLog::PHASE_NONE, NULL); | |
387 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
388 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 21), | |
389 NetLog::PHASE_END, NULL); | |
390 | |
391 requests = log.url_request_tracker()->GetLiveRequests(); | |
392 EXPECT_EQ(2u, requests.size()); | |
393 | |
394 EXPECT_EQ(5u, requests[0].entries.size()); | |
395 EXPECT_EQ(6u, requests[1].entries.size()); | |
396 | |
397 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_SOCKET_ID , base::TimeTicks(), | |
398 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
399 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 15)); | |
400 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_SOCKET_ID , base::TimeTicks(), | |
401 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 20), | |
402 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 25)); | |
403 | |
404 log.OnAddEntry(NetLog::TYPE_SOCKS_CONNECT , base::TimeTicks(), | |
405 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
406 NetLog::PHASE_NONE, NULL); | |
407 log.OnAddEntry(NetLog::TYPE_SSL_CONNECT , base::TimeTicks(), | |
408 NetLog::Source(NetLog::SOURCE_SOCKET, 25), | |
409 NetLog::PHASE_BEGIN, NULL); | |
410 log.OnAddEntry(NetLog::TYPE_SSL_CONNECT , base::TimeTicks(), | |
411 NetLog::Source(NetLog::SOURCE_SOCKET, 25), | |
412 NetLog::PHASE_END, NULL); | |
413 | |
414 requests = log.url_request_tracker()->GetLiveRequests(); | |
415 EXPECT_EQ(2u, requests.size()); | |
416 | |
417 EXPECT_EQ(5u, requests[0].entries.size()); | |
418 EXPECT_EQ(6u, requests[1].entries.size()); | |
419 | |
420 AddEndURLRequestEntries(&log, 10); | |
421 AddEndURLRequestEntries(&log, 20); | |
422 | |
423 log.OnAddEntry(NetLog::TYPE_TCP_SOCKET_DONE , base::TimeTicks(), | |
424 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
425 NetLog::PHASE_NONE, NULL); | |
426 log.OnAddEntry(NetLog::TYPE_TCP_SOCKET_DONE , base::TimeTicks(), | |
427 NetLog::Source(NetLog::SOURCE_SOCKET, 25), | |
428 NetLog::PHASE_NONE, NULL); | |
429 | |
430 requests = log.url_request_tracker()->GetLiveRequests(); | |
431 EXPECT_EQ(0u, requests.size()); | |
432 | |
433 requests = log.url_request_tracker()->GetRecentlyDeceased(); | |
434 EXPECT_EQ(2u, requests.size()); | |
435 EXPECT_EQ(6u, requests[0].entries.size()); | |
436 EXPECT_EQ(7u, requests[1].entries.size()); | |
437 } | |
438 | |
439 TEST(PassiveLogCollectorTest, LateBindDifferentConnectJob) { | |
440 PassiveLogCollector log; | |
441 | |
442 RequestInfoList requests = log.url_request_tracker()->GetLiveRequests(); | |
443 EXPECT_EQ(0u, requests.size()); | |
444 | |
445 AddStartURLRequestEntries(&log, 10); | |
446 AddStartURLRequestEntries(&log, 20); | |
447 | |
448 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_ID , base::TimeTicks(), | |
449 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
450 NetLog::PHASE_BEGIN, new net::NetLogIntegerParameter("x", 11)); | |
451 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
452 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 11), | |
453 NetLog::PHASE_BEGIN, NULL); | |
454 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
455 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 11), | |
456 NetLog::PHASE_END, NULL); | |
457 | |
458 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_ID , base::TimeTicks(), | |
459 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 20), | |
460 NetLog::PHASE_BEGIN, new net::NetLogIntegerParameter("x", 21)); | |
461 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
462 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 21), | |
463 NetLog::PHASE_BEGIN, NULL); | |
464 log.OnAddEntry(NetLog::TYPE_TCP_CONNECT , base::TimeTicks(), | |
465 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 21), | |
466 NetLog::PHASE_NONE, NULL); | |
467 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
468 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 21), | |
469 NetLog::PHASE_END, NULL); | |
470 | |
471 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
472 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 31), | |
473 NetLog::PHASE_BEGIN, NULL); | |
474 log.OnAddEntry(NetLog::TYPE_TCP_CONNECT , base::TimeTicks(), | |
475 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 31), | |
476 NetLog::PHASE_BEGIN, NULL); | |
477 log.OnAddEntry(NetLog::TYPE_TCP_CONNECT , base::TimeTicks(), | |
478 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 31), | |
479 NetLog::PHASE_END, NULL); | |
480 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
481 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 31), | |
482 NetLog::PHASE_END, NULL); | |
483 | |
484 requests = log.url_request_tracker()->GetLiveRequests(); | |
485 EXPECT_EQ(2u, requests.size()); | |
486 | |
487 EXPECT_EQ(5u, requests[0].entries.size()); | |
488 EXPECT_EQ(6u, requests[1].entries.size()); | |
489 | |
490 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_ID , base::TimeTicks(), | |
491 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
492 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 21)); | |
493 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_ID , base::TimeTicks(), | |
494 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 20), | |
495 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 31)); | |
496 | |
497 requests = log.url_request_tracker()->GetLiveRequests(); | |
498 EXPECT_EQ(2u, requests.size()); | |
499 | |
500 EXPECT_EQ(7u, requests[0].entries.size()); | |
501 EXPECT_EQ(8u, requests[1].entries.size()); | |
502 | |
503 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_SOCKET_ID , base::TimeTicks(), | |
504 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
505 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 15)); | |
506 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_SOCKET_ID , base::TimeTicks(), | |
507 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 20), | |
508 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 25)); | |
509 | |
510 log.OnAddEntry(NetLog::TYPE_SOCKS_CONNECT , base::TimeTicks(), | |
511 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
512 NetLog::PHASE_NONE, NULL); | |
513 log.OnAddEntry(NetLog::TYPE_SSL_CONNECT , base::TimeTicks(), | |
514 NetLog::Source(NetLog::SOURCE_SOCKET, 25), | |
515 NetLog::PHASE_BEGIN, NULL); | |
516 log.OnAddEntry(NetLog::TYPE_SSL_CONNECT , base::TimeTicks(), | |
517 NetLog::Source(NetLog::SOURCE_SOCKET, 25), | |
518 NetLog::PHASE_END, NULL); | |
519 | |
520 requests = log.url_request_tracker()->GetLiveRequests(); | |
521 EXPECT_EQ(2u, requests.size()); | |
522 | |
523 EXPECT_EQ(9u, requests[0].entries.size()); | |
524 EXPECT_EQ(11u, requests[1].entries.size()); | |
525 | |
526 AddEndURLRequestEntries(&log, 10); | |
527 AddEndURLRequestEntries(&log, 20); | |
528 | |
529 log.OnAddEntry(NetLog::TYPE_TCP_SOCKET_DONE , base::TimeTicks(), | |
530 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
531 NetLog::PHASE_NONE, NULL); | |
532 log.OnAddEntry(NetLog::TYPE_TCP_SOCKET_DONE , base::TimeTicks(), | |
533 NetLog::Source(NetLog::SOURCE_SOCKET, 25), | |
534 NetLog::PHASE_NONE, NULL); | |
535 | |
536 requests = log.url_request_tracker()->GetLiveRequests(); | |
537 EXPECT_EQ(0u, requests.size()); | |
538 | |
539 requests = log.url_request_tracker()->GetRecentlyDeceased(); | |
540 EXPECT_EQ(2u, requests.size()); | |
541 EXPECT_EQ(10u, requests[0].entries.size()); | |
542 EXPECT_EQ(12u, requests[1].entries.size()); | |
543 } | |
544 | |
545 TEST(PassiveLogCollectorTest, LateBindPendingConnectJob) { | |
546 PassiveLogCollector log; | |
547 | |
548 RequestInfoList requests = log.url_request_tracker()->GetLiveRequests(); | |
549 EXPECT_EQ(0u, requests.size()); | |
550 | |
551 AddStartURLRequestEntries(&log, 10); | |
552 AddStartURLRequestEntries(&log, 20); | |
553 | |
554 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
555 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 11), | |
556 NetLog::PHASE_BEGIN, NULL); | |
557 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
558 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 11), | |
559 NetLog::PHASE_END, NULL); | |
560 | |
561 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
562 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 21), | |
563 NetLog::PHASE_BEGIN, NULL); | |
564 log.OnAddEntry(NetLog::TYPE_TCP_CONNECT , base::TimeTicks(), | |
565 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 21), | |
566 NetLog::PHASE_NONE, NULL); | |
567 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
568 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 21), | |
569 NetLog::PHASE_END, NULL); | |
570 | |
571 requests = log.url_request_tracker()->GetLiveRequests(); | |
572 EXPECT_EQ(2u, requests.size()); | |
573 | |
574 EXPECT_EQ(2u, requests[0].entries.size()); | |
575 EXPECT_EQ(2u, requests[1].entries.size()); | |
576 | |
577 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_ID , base::TimeTicks(), | |
578 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
579 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 11)); | |
580 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_ID , base::TimeTicks(), | |
581 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 20), | |
582 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 21)); | |
583 | |
584 requests = log.url_request_tracker()->GetLiveRequests(); | |
585 EXPECT_EQ(2u, requests.size()); | |
586 | |
587 EXPECT_EQ(5u, requests[0].entries.size()); | |
588 EXPECT_EQ(6u, requests[1].entries.size()); | |
589 | |
590 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_SOCKET_ID , base::TimeTicks(), | |
591 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
592 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 15)); | |
593 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_SOCKET_ID , base::TimeTicks(), | |
594 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 20), | |
595 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 25)); | |
596 | |
597 log.OnAddEntry(NetLog::TYPE_SOCKS_CONNECT , base::TimeTicks(), | |
598 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
599 NetLog::PHASE_NONE, NULL); | |
600 log.OnAddEntry(NetLog::TYPE_SSL_CONNECT , base::TimeTicks(), | |
601 NetLog::Source(NetLog::SOURCE_SOCKET, 25), | |
602 NetLog::PHASE_BEGIN, NULL); | |
603 log.OnAddEntry(NetLog::TYPE_SSL_CONNECT , base::TimeTicks(), | |
604 NetLog::Source(NetLog::SOURCE_SOCKET, 25), | |
605 NetLog::PHASE_END, NULL); | |
606 | |
607 requests = log.url_request_tracker()->GetLiveRequests(); | |
608 EXPECT_EQ(2u, requests.size()); | |
609 | |
610 EXPECT_EQ(7u, requests[0].entries.size()); | |
611 EXPECT_EQ(9u, requests[1].entries.size()); | |
612 | |
613 AddEndURLRequestEntries(&log, 10); | |
614 AddEndURLRequestEntries(&log, 20); | |
615 | |
616 log.OnAddEntry(NetLog::TYPE_TCP_SOCKET_DONE , base::TimeTicks(), | |
617 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
618 NetLog::PHASE_NONE, NULL); | |
619 log.OnAddEntry(NetLog::TYPE_TCP_SOCKET_DONE , base::TimeTicks(), | |
620 NetLog::Source(NetLog::SOURCE_SOCKET, 25), | |
621 NetLog::PHASE_NONE, NULL); | |
622 | |
623 requests = log.url_request_tracker()->GetLiveRequests(); | |
624 EXPECT_EQ(0u, requests.size()); | |
625 | |
626 requests = log.url_request_tracker()->GetRecentlyDeceased(); | |
627 EXPECT_EQ(2u, requests.size()); | |
628 EXPECT_EQ(8u, requests[0].entries.size()); | |
629 EXPECT_EQ(10u, requests[1].entries.size()); | |
630 } | |
631 | |
632 TEST(PassiveLogCollectorTest, ReconnectToIdleSocket) { | |
633 PassiveLogCollector log; | |
634 | |
635 RequestInfoList requests = log.url_request_tracker()->GetLiveRequests(); | |
636 EXPECT_EQ(0u, requests.size()); | |
637 | |
638 AddStartURLRequestEntries(&log, 10); | |
639 | |
640 // Initial socket. | |
641 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_SOCKET_ID , base::TimeTicks(), | |
642 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
643 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 15)); | |
644 log.OnAddEntry(NetLog::TYPE_SOCKS_CONNECT , base::TimeTicks(), | |
645 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
646 NetLog::PHASE_NONE, NULL); | |
647 | |
648 requests = log.url_request_tracker()->GetLiveRequests(); | |
649 EXPECT_EQ(1u, requests.size()); | |
650 EXPECT_EQ(4u, requests[0].entries.size()); | |
651 | |
652 // Reconnect. | |
653 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_SOCKET_ID , base::TimeTicks(), | |
654 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
655 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 17)); | |
656 log.OnAddEntry(NetLog::TYPE_SOCKS_CONNECT , base::TimeTicks(), | |
657 NetLog::Source(NetLog::SOURCE_SOCKET, 17), | |
658 NetLog::PHASE_NONE, NULL); | |
659 | |
660 requests = log.url_request_tracker()->GetLiveRequests(); | |
661 EXPECT_EQ(1u, requests.size()); | |
662 EXPECT_EQ(6u, requests[0].entries.size()); | |
663 | |
664 AddEndURLRequestEntries(&log, 10); | |
665 | |
666 log.OnAddEntry(NetLog::TYPE_TCP_SOCKET_DONE , base::TimeTicks(), | |
667 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
668 NetLog::PHASE_NONE, NULL); | |
669 | |
670 requests = log.url_request_tracker()->GetLiveRequests(); | |
671 EXPECT_EQ(0u, requests.size()); | |
672 | |
673 requests = log.url_request_tracker()->GetRecentlyDeceased(); | |
674 EXPECT_EQ(1u, requests.size()); | |
675 EXPECT_EQ(7u, requests[0].entries.size()); | |
676 } | |
677 | |
678 TEST(PassiveLogCollectorTest, ReconnectToLateBoundSocket) { | |
679 PassiveLogCollector log; | |
680 | |
681 RequestInfoList requests = log.url_request_tracker()->GetLiveRequests(); | |
682 EXPECT_EQ(0u, requests.size()); | |
683 | |
684 AddStartURLRequestEntries(&log, 10); | |
685 | |
686 // Initial socket. | |
687 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_SOCKET_ID , base::TimeTicks(), | |
688 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
689 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 15)); | |
690 log.OnAddEntry(NetLog::TYPE_SOCKS_CONNECT , base::TimeTicks(), | |
691 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
692 NetLog::PHASE_NONE, NULL); | |
693 | |
694 requests = log.url_request_tracker()->GetLiveRequests(); | |
695 EXPECT_EQ(1u, requests.size()); | |
696 EXPECT_EQ(4u, requests[0].entries.size()); | |
697 | |
698 // Now reconnect. | |
699 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_ID , base::TimeTicks(), | |
700 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
701 NetLog::PHASE_BEGIN, new net::NetLogIntegerParameter("x", 11)); | |
702 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
703 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 11), | |
704 NetLog::PHASE_BEGIN, NULL); | |
705 | |
706 requests = log.url_request_tracker()->GetLiveRequests(); | |
707 EXPECT_EQ(1u, requests.size()); | |
708 EXPECT_EQ(6u, requests[0].entries.size()); | |
709 | |
710 // But we get late bound to an idle socket. | |
711 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_SOCKET_ID , base::TimeTicks(), | |
712 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
713 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 17)); | |
714 log.OnAddEntry(NetLog::TYPE_SOCKS_CONNECT , base::TimeTicks(), | |
715 NetLog::Source(NetLog::SOURCE_SOCKET, 17), | |
716 NetLog::PHASE_NONE, NULL); | |
717 | |
718 requests = log.url_request_tracker()->GetLiveRequests(); | |
719 EXPECT_EQ(1u, requests.size()); | |
720 EXPECT_EQ(7u, requests[0].entries.size()); | |
721 | |
722 AddEndURLRequestEntries(&log, 10); | |
723 | |
724 log.OnAddEntry(NetLog::TYPE_TCP_SOCKET_DONE , base::TimeTicks(), | |
725 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
726 NetLog::PHASE_NONE, NULL); | |
727 | |
728 requests = log.url_request_tracker()->GetLiveRequests(); | |
729 EXPECT_EQ(0u, requests.size()); | |
730 | |
731 requests = log.url_request_tracker()->GetRecentlyDeceased(); | |
732 EXPECT_EQ(1u, requests.size()); | |
733 EXPECT_EQ(8u, requests[0].entries.size()); | |
734 } | |
735 | |
736 TEST(PassiveLogCollectorTest, ReconnectToLateBoundConnectJob) { | |
737 PassiveLogCollector log; | |
738 | |
739 RequestInfoList requests = log.url_request_tracker()->GetLiveRequests(); | |
740 EXPECT_EQ(0u, requests.size()); | |
741 | |
742 AddStartURLRequestEntries(&log, 10); | |
743 | |
744 // Initial socket. | |
745 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_SOCKET_ID , base::TimeTicks(), | |
746 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
747 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 15)); | |
748 log.OnAddEntry(NetLog::TYPE_SOCKS_CONNECT , base::TimeTicks(), | |
749 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
750 NetLog::PHASE_NONE, NULL); | |
751 | |
752 requests = log.url_request_tracker()->GetLiveRequests(); | |
753 EXPECT_EQ(1u, requests.size()); | |
754 EXPECT_EQ(4u, requests[0].entries.size()); | |
755 | |
756 // Now reconnect. | |
757 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_ID , base::TimeTicks(), | |
758 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
759 NetLog::PHASE_BEGIN, new net::NetLogIntegerParameter("x", 11)); | |
760 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
761 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 11), | |
762 NetLog::PHASE_BEGIN, NULL); | |
763 | |
764 requests = log.url_request_tracker()->GetLiveRequests(); | |
765 EXPECT_EQ(1u, requests.size()); | |
766 EXPECT_EQ(6u, requests[0].entries.size()); | |
767 | |
768 // But we get late bound to a different ConnectJob. | |
769 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
770 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 12), | |
771 NetLog::PHASE_BEGIN, NULL); | |
772 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
773 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 12), | |
774 NetLog::PHASE_END, NULL); | |
775 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_ID , base::TimeTicks(), | |
776 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
777 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 12)); | |
778 | |
779 requests = log.url_request_tracker()->GetLiveRequests(); | |
780 EXPECT_EQ(1u, requests.size()); | |
781 EXPECT_EQ(8u, requests[0].entries.size()); | |
782 | |
783 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_SOCKET_ID , base::TimeTicks(), | |
784 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
785 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 17)); | |
786 log.OnAddEntry(NetLog::TYPE_SOCKS_CONNECT , base::TimeTicks(), | |
787 NetLog::Source(NetLog::SOURCE_SOCKET, 17), | |
788 NetLog::PHASE_NONE, NULL); | |
789 | |
790 requests = log.url_request_tracker()->GetLiveRequests(); | |
791 EXPECT_EQ(1u, requests.size()); | |
792 EXPECT_EQ(10u, requests[0].entries.size()); | |
793 | |
794 AddEndURLRequestEntries(&log, 10); | |
795 | |
796 log.OnAddEntry(NetLog::TYPE_TCP_SOCKET_DONE , base::TimeTicks(), | |
797 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
798 NetLog::PHASE_NONE, NULL); | |
799 | |
800 requests = log.url_request_tracker()->GetLiveRequests(); | |
801 EXPECT_EQ(0u, requests.size()); | |
802 | |
803 requests = log.url_request_tracker()->GetRecentlyDeceased(); | |
804 EXPECT_EQ(1u, requests.size()); | |
805 EXPECT_EQ(11u, requests[0].entries.size()); | |
806 } | |
807 | |
808 TEST(PassiveLogCollectorTest, LostConnectJob) { | |
809 PassiveLogCollector log; | |
810 | |
811 RequestInfoList requests = log.url_request_tracker()->GetLiveRequests(); | |
812 EXPECT_EQ(0u, requests.size()); | |
813 | |
814 AddStartURLRequestEntries(&log, 10); | |
815 | |
816 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_ID , base::TimeTicks(), | |
817 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
818 NetLog::PHASE_BEGIN, new net::NetLogIntegerParameter("x", 11)); | |
819 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
820 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 11), | |
821 NetLog::PHASE_BEGIN, NULL); | |
822 log.OnAddEntry(NetLog::TYPE_SOCKS_CONNECT , base::TimeTicks(), | |
823 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 11), | |
824 NetLog::PHASE_NONE, NULL); | |
825 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB , base::TimeTicks(), | |
826 NetLog::Source(NetLog::SOURCE_CONNECT_JOB, 11), | |
827 NetLog::PHASE_END, NULL); | |
828 | |
829 requests = log.url_request_tracker()->GetLiveRequests(); | |
830 EXPECT_EQ(1u, requests.size()); | |
831 EXPECT_EQ(6u, requests[0].entries.size()); | |
832 | |
833 log.connect_job_tracker_.Clear(); | |
834 | |
835 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_ID , base::TimeTicks(), | |
836 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
837 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 11)); | |
838 | |
839 requests = log.url_request_tracker()->GetLiveRequests(); | |
840 EXPECT_EQ(1u, requests.size()); | |
841 EXPECT_EQ(5u, requests[0].entries.size()); | |
842 } | |
843 | |
844 TEST(PassiveLogCollectorTest, LostSocket) { | |
845 PassiveLogCollector log; | |
846 | |
847 RequestInfoList requests = log.url_request_tracker()->GetLiveRequests(); | |
848 EXPECT_EQ(0u, requests.size()); | |
849 | |
850 AddStartURLRequestEntries(&log, 10); | |
851 | |
852 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_SOCKET_ID , base::TimeTicks(), | |
853 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
854 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 15)); | |
855 log.OnAddEntry(NetLog::TYPE_SOCKS_CONNECT , base::TimeTicks(), | |
856 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
857 NetLog::PHASE_BEGIN, NULL); | |
858 log.OnAddEntry(NetLog::TYPE_SOCKS_CONNECT , base::TimeTicks(), | |
859 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
860 NetLog::PHASE_END, NULL); | |
861 log.OnAddEntry(NetLog::TYPE_SSL_CONNECT , base::TimeTicks(), | |
862 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
863 NetLog::PHASE_BEGIN, NULL); | |
864 log.OnAddEntry(NetLog::TYPE_SSL_CONNECT , base::TimeTicks(), | |
865 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
866 NetLog::PHASE_END, NULL); | |
867 | |
868 requests = log.url_request_tracker()->GetLiveRequests(); | |
869 EXPECT_EQ(1u, requests.size()); | |
870 EXPECT_EQ(7u, requests[0].entries.size()); | |
871 | |
872 log.socket_tracker_.Clear(); | |
873 | |
874 requests = log.url_request_tracker()->GetLiveRequests(); | |
875 EXPECT_EQ(1u, requests.size()); | |
876 EXPECT_EQ(4u, requests[0].entries.size()); | |
877 } | |
878 | |
879 TEST(PassiveLogCollectorTest, AccumulateRxTxData) { | |
880 PassiveLogCollector log; | |
881 | |
882 RequestInfoList requests = log.url_request_tracker()->GetLiveRequests(); | |
883 EXPECT_EQ(0u, requests.size()); | |
884 | |
885 AddStartURLRequestEntries(&log, 10); | |
886 | |
887 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_SOCKET_ID , base::TimeTicks(), | |
888 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 10), | |
889 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 15)); | |
890 log.OnAddEntry(NetLog::TYPE_SOCKS_CONNECT , base::TimeTicks(), | |
891 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
892 NetLog::PHASE_NONE, NULL); | |
893 | |
894 requests = log.url_request_tracker()->GetLiveRequests(); | |
895 EXPECT_EQ(1u, requests.size()); | |
896 EXPECT_EQ(4u, requests[0].entries.size()); | |
897 | |
898 log.OnAddEntry(NetLog::TYPE_SOCKET_BYTES_SENT , base::TimeTicks(), | |
899 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
900 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 1)); | |
901 requests = log.url_request_tracker()->GetLiveRequests(); | |
902 EXPECT_EQ(1u, requests.size()); | |
903 EXPECT_EQ(5u, requests[0].entries.size()); | |
904 EXPECT_EQ(NetLog::TYPE_TODO_STRING, requests[0].entries[4].type); | |
905 EXPECT_EQ("Tx/Rx: 1/0 [1/0 total on socket] (Bytes)", | |
906 GetStringParam(requests[0].entries[4])); | |
907 | |
908 log.OnAddEntry(NetLog::TYPE_SOCKET_BYTES_RECEIVED , base::TimeTicks(), | |
909 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
910 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 2)); | |
911 requests = log.url_request_tracker()->GetLiveRequests(); | |
912 EXPECT_EQ(1u, requests.size()); | |
913 EXPECT_EQ(5u, requests[0].entries.size()); | |
914 EXPECT_EQ(NetLog::TYPE_TODO_STRING, requests[0].entries[4].type); | |
915 EXPECT_EQ("Tx/Rx: 1/2 [1/2 total on socket] (Bytes)", | |
916 GetStringParam(requests[0].entries[4])); | |
917 | |
918 AddEndURLRequestEntries(&log, 10); | |
919 requests = log.url_request_tracker()->GetLiveRequests(); | |
920 EXPECT_EQ(0u, requests.size()); | |
921 requests = log.url_request_tracker()->GetRecentlyDeceased(); | |
922 EXPECT_EQ(1u, requests.size()); | |
923 EXPECT_EQ(6u, requests[0].entries.size()); | |
924 EXPECT_EQ(NetLog::TYPE_TODO_STRING, requests[0].entries[4].type); | |
925 EXPECT_EQ("Tx/Rx: 1/2 [1/2 total on socket] (Bytes)", | |
926 GetStringParam(requests[0].entries[4])); | |
927 | |
928 AddStartURLRequestEntries(&log, 20); | |
929 | |
930 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_SOCKET_ID , base::TimeTicks(), | |
931 NetLog::Source(NetLog::SOURCE_URL_REQUEST, 20), | |
932 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 15)); | |
933 log.OnAddEntry(NetLog::TYPE_SOCKS_CONNECT , base::TimeTicks(), | |
934 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
935 NetLog::PHASE_NONE, NULL); | |
936 | |
937 requests = log.url_request_tracker()->GetLiveRequests(); | |
938 EXPECT_EQ(1u, requests.size()); | |
939 EXPECT_EQ(4u, requests[0].entries.size()); | |
940 | |
941 log.OnAddEntry(NetLog::TYPE_SOCKET_BYTES_SENT , base::TimeTicks(), | |
942 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
943 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 4)); | |
944 log.OnAddEntry(NetLog::TYPE_SOCKET_BYTES_RECEIVED , base::TimeTicks(), | |
945 NetLog::Source(NetLog::SOURCE_SOCKET, 15), | |
946 NetLog::PHASE_END, new net::NetLogIntegerParameter("x", 8)); | |
947 requests = log.url_request_tracker()->GetLiveRequests(); | |
948 EXPECT_EQ(1u, requests.size()); | |
949 EXPECT_EQ(5u, requests[0].entries.size()); | |
950 EXPECT_EQ(NetLog::TYPE_TODO_STRING, requests[0].entries[4].type); | |
951 EXPECT_EQ("Tx/Rx: 4/8 [5/10 total on socket] (Bytes)", | |
952 GetStringParam(requests[0].entries[4])); | |
953 | |
954 AddEndURLRequestEntries(&log, 20); | |
955 requests = log.url_request_tracker()->GetLiveRequests(); | |
956 EXPECT_EQ(0u, requests.size()); | |
957 requests = log.url_request_tracker()->GetRecentlyDeceased(); | |
958 EXPECT_EQ(2u, requests.size()); | |
959 EXPECT_EQ(6u, requests[0].entries.size()); | |
960 EXPECT_EQ(6u, requests[1].entries.size()); | |
961 } | 174 } |
962 | 175 |
963 TEST(SpdySessionTracker, MovesToGraveyard) { | 176 TEST(SpdySessionTracker, MovesToGraveyard) { |
964 PassiveLogCollector::SpdySessionTracker tracker; | 177 PassiveLogCollector::SpdySessionTracker tracker; |
965 EXPECT_EQ(0u, tracker.GetLiveRequests().size()); | 178 EXPECT_EQ(0u, GetLiveRequests(tracker).size()); |
966 EXPECT_EQ(0u, tracker.GetRecentlyDeceased().size()); | 179 EXPECT_EQ(0u, GetDeadRequests(tracker).size()); |
967 | 180 |
968 PassiveLogCollector::Entry begin( | 181 PassiveLogCollector::Entry begin( |
969 0u, | 182 0u, |
970 NetLog::TYPE_SPDY_SESSION, | 183 NetLog::TYPE_SPDY_SESSION, |
971 base::TimeTicks(), | 184 base::TimeTicks(), |
972 NetLog::Source(NetLog::SOURCE_SPDY_SESSION, 1), | 185 NetLog::Source(NetLog::SOURCE_SPDY_SESSION, 1), |
973 NetLog::PHASE_BEGIN, | 186 NetLog::PHASE_BEGIN, |
974 NULL); | 187 NULL); |
975 | 188 |
976 tracker.OnAddEntry(begin); | 189 tracker.OnAddEntry(begin); |
977 EXPECT_EQ(1u, tracker.GetLiveRequests().size()); | 190 EXPECT_EQ(1u, GetLiveRequests(tracker).size()); |
978 EXPECT_EQ(0u, tracker.GetRecentlyDeceased().size()); | 191 EXPECT_EQ(0u, GetDeadRequests(tracker).size()); |
979 | 192 |
980 PassiveLogCollector::Entry end( | 193 PassiveLogCollector::Entry end( |
981 0u, | 194 0u, |
982 NetLog::TYPE_SPDY_SESSION, | 195 NetLog::TYPE_SPDY_SESSION, |
983 base::TimeTicks(), | 196 base::TimeTicks(), |
984 NetLog::Source(NetLog::SOURCE_SPDY_SESSION, 1), | 197 NetLog::Source(NetLog::SOURCE_SPDY_SESSION, 1), |
985 NetLog::PHASE_END, | 198 NetLog::PHASE_END, |
986 NULL); | 199 NULL); |
987 | 200 |
988 tracker.OnAddEntry(end); | 201 tracker.OnAddEntry(end); |
989 EXPECT_EQ(0u, tracker.GetLiveRequests().size()); | 202 EXPECT_EQ(0u, GetLiveRequests(tracker).size()); |
990 EXPECT_EQ(1u, tracker.GetRecentlyDeceased().size()); | 203 EXPECT_EQ(1u, GetDeadRequests(tracker).size()); |
991 } | 204 } |
| 205 |
| 206 // Test that when a SOURCE_SOCKET is connected to a SOURCE_URL_REQUEST |
| 207 // (via the TYPE_SOCKET_POOL_BOUND_TO_SOCKET event), it holds a reference |
| 208 // to the SOURCE_SOCKET preventing it from getting deleted as long as the |
| 209 // SOURCE_URL_REQUEST is still around. |
| 210 TEST(PassiveLogCollectorTest, HoldReferenceToDependentSource) { |
| 211 PassiveLogCollector log; |
| 212 |
| 213 EXPECT_EQ(0u, GetLiveRequests(log.url_request_tracker_).size()); |
| 214 EXPECT_EQ(0u, GetLiveRequests(log.socket_tracker_).size()); |
| 215 |
| 216 uint32 next_id = 0; |
| 217 NetLog::Source socket_source(NetLog::SOURCE_SOCKET, next_id++); |
| 218 NetLog::Source url_request_source(NetLog::SOURCE_URL_REQUEST, next_id++); |
| 219 |
| 220 // Start a SOURCE_SOCKET. |
| 221 log.OnAddEntry(NetLog::TYPE_SOCKET_ALIVE, |
| 222 base::TimeTicks(), |
| 223 socket_source, |
| 224 NetLog::PHASE_BEGIN, |
| 225 NULL); |
| 226 |
| 227 EXPECT_EQ(0u, GetLiveRequests(log.url_request_tracker_).size()); |
| 228 EXPECT_EQ(1u, GetLiveRequests(log.socket_tracker_).size()); |
| 229 |
| 230 // Start a SOURCE_URL_REQUEST. |
| 231 log.OnAddEntry(NetLog::TYPE_REQUEST_ALIVE, |
| 232 base::TimeTicks(), |
| 233 url_request_source, |
| 234 NetLog::PHASE_BEGIN, |
| 235 NULL); |
| 236 |
| 237 // Check that there is no association between the SOURCE_URL_REQUEST and the |
| 238 // SOURCE_SOCKET yet. |
| 239 ASSERT_EQ(1u, GetLiveRequests(log.url_request_tracker_).size()); |
| 240 { |
| 241 PassiveLogCollector::RequestInfo info = |
| 242 GetLiveRequests(log.url_request_tracker_)[0]; |
| 243 EXPECT_EQ(0, info.reference_count); |
| 244 EXPECT_EQ(0u, info.dependencies.size()); |
| 245 } |
| 246 ASSERT_EQ(1u, GetLiveRequests(log.socket_tracker_).size()); |
| 247 { |
| 248 PassiveLogCollector::RequestInfo info = |
| 249 GetLiveRequests(log.socket_tracker_)[0]; |
| 250 EXPECT_EQ(0, info.reference_count); |
| 251 EXPECT_EQ(0u, info.dependencies.size()); |
| 252 } |
| 253 |
| 254 // Associate the SOURCE_SOCKET with the SOURCE_URL_REQUEST. |
| 255 log.OnAddEntry(NetLog::TYPE_SOCKET_POOL_BOUND_TO_SOCKET, |
| 256 base::TimeTicks(), |
| 257 url_request_source, |
| 258 NetLog::PHASE_NONE, |
| 259 new net::NetLogSourceParameter("x", socket_source)); |
| 260 |
| 261 // Check that an associate was made -- the SOURCE_URL_REQUEST should have |
| 262 // added a reference to the SOURCE_SOCKET. |
| 263 ASSERT_EQ(1u, GetLiveRequests(log.url_request_tracker_).size()); |
| 264 { |
| 265 PassiveLogCollector::RequestInfo info = |
| 266 GetLiveRequests(log.url_request_tracker_)[0]; |
| 267 EXPECT_EQ(0, info.reference_count); |
| 268 EXPECT_EQ(1u, info.dependencies.size()); |
| 269 EXPECT_EQ(socket_source.id, info.dependencies[0].id); |
| 270 } |
| 271 ASSERT_EQ(1u, GetLiveRequests(log.socket_tracker_).size()); |
| 272 { |
| 273 PassiveLogCollector::RequestInfo info = |
| 274 GetLiveRequests(log.socket_tracker_)[0]; |
| 275 EXPECT_EQ(1, info.reference_count); |
| 276 EXPECT_EQ(0u, info.dependencies.size()); |
| 277 } |
| 278 |
| 279 // Now end both |source_socket| and |source_url_request|. This sends them |
| 280 // to deletion queue, and they will be deleted once space runs out. |
| 281 |
| 282 log.OnAddEntry(NetLog::TYPE_REQUEST_ALIVE, |
| 283 base::TimeTicks(), |
| 284 url_request_source, |
| 285 NetLog::PHASE_END, |
| 286 NULL); |
| 287 |
| 288 log.OnAddEntry(NetLog::TYPE_SOCKET_ALIVE, |
| 289 base::TimeTicks(), |
| 290 socket_source, |
| 291 NetLog::PHASE_END, |
| 292 NULL); |
| 293 |
| 294 // Verify that both sources are in fact dead, and that |source_url_request| |
| 295 // still holds a reference to |source_socket|. |
| 296 ASSERT_EQ(0u, GetLiveRequests(log.url_request_tracker_).size()); |
| 297 ASSERT_EQ(1u, GetDeadRequests(log.url_request_tracker_).size()); |
| 298 { |
| 299 PassiveLogCollector::RequestInfo info = |
| 300 GetDeadRequests(log.url_request_tracker_)[0]; |
| 301 EXPECT_EQ(0, info.reference_count); |
| 302 EXPECT_EQ(1u, info.dependencies.size()); |
| 303 EXPECT_EQ(socket_source.id, info.dependencies[0].id); |
| 304 } |
| 305 EXPECT_EQ(0u, GetLiveRequests(log.socket_tracker_).size()); |
| 306 ASSERT_EQ(1u, GetDeadRequests(log.socket_tracker_).size()); |
| 307 { |
| 308 PassiveLogCollector::RequestInfo info = |
| 309 GetDeadRequests(log.socket_tracker_)[0]; |
| 310 EXPECT_EQ(1, info.reference_count); |
| 311 EXPECT_EQ(0u, info.dependencies.size()); |
| 312 } |
| 313 |
| 314 // Cycle through a bunch of SOURCE_SOCKET -- if it were not referenced, this |
| 315 // loop will have deleted it. |
| 316 for (size_t i = 0; i < SocketTracker::kMaxGraveyardSize; ++i) { |
| 317 log.OnAddEntry(NetLog::TYPE_SOCKET_ALIVE, |
| 318 base::TimeTicks(), |
| 319 NetLog::Source(NetLog::SOURCE_SOCKET, next_id++), |
| 320 NetLog::PHASE_END, |
| 321 NULL); |
| 322 } |
| 323 |
| 324 EXPECT_EQ(0u, GetLiveRequests(log.socket_tracker_).size()); |
| 325 ASSERT_EQ(SocketTracker::kMaxGraveyardSize + 1, |
| 326 GetDeadRequests(log.socket_tracker_).size()); |
| 327 { |
| 328 PassiveLogCollector::RequestInfo info = |
| 329 GetDeadRequests(log.socket_tracker_)[0]; |
| 330 EXPECT_EQ(socket_source.id, info.source_id); |
| 331 EXPECT_EQ(1, info.reference_count); |
| 332 EXPECT_EQ(0u, info.dependencies.size()); |
| 333 } |
| 334 |
| 335 // Cycle through a bunch of SOURCE_URL_REQUEST -- this will cause |
| 336 // |source_url_request| to be freed, which in turn should release the final |
| 337 // reference to |source_socket| cause it to be freed as well. |
| 338 for (size_t i = 0; i < RequestTracker::kMaxGraveyardSize; ++i) { |
| 339 log.OnAddEntry(NetLog::TYPE_REQUEST_ALIVE, |
| 340 base::TimeTicks(), |
| 341 NetLog::Source(NetLog::SOURCE_URL_REQUEST, next_id++), |
| 342 NetLog::PHASE_END, |
| 343 NULL); |
| 344 } |
| 345 |
| 346 EXPECT_EQ(0u, GetLiveRequests(log.url_request_tracker_).size()); |
| 347 EXPECT_EQ(RequestTracker::kMaxGraveyardSize, |
| 348 GetDeadRequests(log.url_request_tracker_).size()); |
| 349 |
| 350 EXPECT_EQ(0u, GetLiveRequests(log.socket_tracker_).size()); |
| 351 EXPECT_EQ(SocketTracker::kMaxGraveyardSize, |
| 352 GetDeadRequests(log.socket_tracker_).size()); |
| 353 } |
OLD | NEW |