| 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 |