Index: chrome/browser/net/passive_log_collector_unittest.cc |
=================================================================== |
--- chrome/browser/net/passive_log_collector_unittest.cc (revision 41560) |
+++ chrome/browser/net/passive_log_collector_unittest.cc (working copy) |
@@ -1,8 +1,8 @@ |
-// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "net/url_request/request_tracker.h" |
+#include "chrome/browser/net/passive_log_collector.h" |
#include "base/compiler_specific.h" |
#include "base/format_macros.h" |
@@ -11,110 +11,101 @@ |
namespace { |
-static const int kMaxNumLoadLogEntries = 1; |
+typedef PassiveLogCollector::RequestTracker RequestTracker; |
+typedef PassiveLogCollector::RequestInfoList RequestInfoList; |
-class TestRequest { |
- public: |
- explicit TestRequest(const GURL& url) |
- : url_(url), |
- load_log_(new net::LoadLog(kMaxNumLoadLogEntries)), |
- ALLOW_THIS_IN_INITIALIZER_LIST(request_tracker_node_(this)) {} |
- ~TestRequest() {} |
+const net::NetLog::SourceType kSourceType = net::NetLog::SOURCE_NONE; |
- // This method is used in RequestTrackerTest::Basic test. |
- const GURL& original_url() const { return url_; } |
+net::NetLog::Entry MakeStartLogEntryWithURL(int source_id, |
+ const std::string& url) { |
+ net::NetLog::Entry entry; |
+ entry.source.type = kSourceType; |
+ entry.source.id = source_id; |
+ entry.type = net::NetLog::Entry::TYPE_EVENT; |
+ entry.event = net::NetLog::Event(net::NetLog::TYPE_REQUEST_ALIVE, |
+ net::NetLog::PHASE_BEGIN); |
+ entry.string = url; |
+ return entry; |
+} |
- private: |
- // RequestTracker<T> will access GetRecentRequestInfo() and |
- // |request_tracker_node_|. |
- friend class RequestTracker<TestRequest>; |
+net::NetLog::Entry MakeStartLogEntry(int source_id) { |
+ return MakeStartLogEntryWithURL(source_id, |
+ StringPrintf("http://req%d", source_id)); |
+} |
- void GetInfoForTracker( |
- RequestTracker<TestRequest>::RecentRequestInfo* info) const { |
- info->original_url = url_; |
- info->load_log = load_log_; |
- } |
+net::NetLog::Entry MakeEndLogEntry(int source_id) { |
+ net::NetLog::Entry entry; |
+ entry.source.type = kSourceType; |
+ entry.source.id = source_id; |
+ entry.type = net::NetLog::Entry::TYPE_EVENT; |
+ entry.event = net::NetLog::Event(net::NetLog::TYPE_REQUEST_ALIVE, |
+ net::NetLog::PHASE_END); |
+ return entry; |
+} |
- const GURL url_; |
- scoped_refptr<net::LoadLog> load_log_; |
+static const int kMaxNumLoadLogEntries = 1; |
- RequestTracker<TestRequest>::Node request_tracker_node_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TestRequest); |
-}; |
- |
- |
TEST(RequestTrackerTest, BasicBounded) { |
- RequestTracker<TestRequest> tracker; |
+ RequestTracker tracker(NULL); |
EXPECT_FALSE(tracker.IsUnbounded()); |
EXPECT_EQ(0u, tracker.GetLiveRequests().size()); |
EXPECT_EQ(0u, tracker.GetRecentlyDeceased().size()); |
- TestRequest req1(GURL("http://req1")); |
- TestRequest req2(GURL("http://req2")); |
- TestRequest req3(GURL("http://req3")); |
- TestRequest req4(GURL("http://req4")); |
- TestRequest req5(GURL("http://req5")); |
+ tracker.OnAddEntry(MakeStartLogEntry(1)); |
+ tracker.OnAddEntry(MakeStartLogEntry(2)); |
+ tracker.OnAddEntry(MakeStartLogEntry(3)); |
+ tracker.OnAddEntry(MakeStartLogEntry(4)); |
+ tracker.OnAddEntry(MakeStartLogEntry(5)); |
- tracker.Add(&req1); |
- tracker.Add(&req2); |
- tracker.Add(&req3); |
- tracker.Add(&req4); |
- tracker.Add(&req5); |
+ RequestInfoList live_reqs = tracker.GetLiveRequests(); |
- std::vector<TestRequest*> live_reqs = tracker.GetLiveRequests(); |
- |
ASSERT_EQ(5u, live_reqs.size()); |
- EXPECT_EQ(GURL("http://req1"), live_reqs[0]->original_url()); |
- EXPECT_EQ(GURL("http://req2"), live_reqs[1]->original_url()); |
- EXPECT_EQ(GURL("http://req3"), live_reqs[2]->original_url()); |
- EXPECT_EQ(GURL("http://req4"), live_reqs[3]->original_url()); |
- EXPECT_EQ(GURL("http://req5"), live_reqs[4]->original_url()); |
+ EXPECT_EQ("http://req1", live_reqs[0].url); |
+ EXPECT_EQ("http://req2", live_reqs[1].url); |
+ EXPECT_EQ("http://req3", live_reqs[2].url); |
+ EXPECT_EQ("http://req4", live_reqs[3].url); |
+ EXPECT_EQ("http://req5", live_reqs[4].url); |
- tracker.Remove(&req1); |
- tracker.Remove(&req5); |
- tracker.Remove(&req3); |
+ tracker.OnAddEntry(MakeEndLogEntry(1)); |
+ tracker.OnAddEntry(MakeEndLogEntry(5)); |
+ tracker.OnAddEntry(MakeEndLogEntry(3)); |
ASSERT_EQ(3u, tracker.GetRecentlyDeceased().size()); |
live_reqs = tracker.GetLiveRequests(); |
ASSERT_EQ(2u, live_reqs.size()); |
- EXPECT_EQ(GURL("http://req2"), live_reqs[0]->original_url()); |
- EXPECT_EQ(GURL("http://req4"), live_reqs[1]->original_url()); |
+ EXPECT_EQ("http://req2", live_reqs[0].url); |
+ EXPECT_EQ("http://req4", live_reqs[1].url); |
} |
TEST(RequestTrackerTest, GraveyardBounded) { |
- RequestTracker<TestRequest> tracker; |
+ RequestTracker tracker(NULL); |
EXPECT_FALSE(tracker.IsUnbounded()); |
EXPECT_EQ(0u, tracker.GetLiveRequests().size()); |
EXPECT_EQ(0u, tracker.GetRecentlyDeceased().size()); |
// Add twice as many requests as will fit in the graveyard. |
- for (size_t i = 0; |
- i < RequestTracker<TestRequest>::kMaxGraveyardSize * 2; |
- ++i) { |
- TestRequest req(GURL(StringPrintf("http://req%" PRIuS, i).c_str())); |
- tracker.Add(&req); |
- tracker.Remove(&req); |
+ for (size_t i = 0; i < RequestTracker::kMaxGraveyardSize * 2; ++i) { |
+ tracker.OnAddEntry(MakeStartLogEntry(i)); |
+ tracker.OnAddEntry(MakeEndLogEntry(i)); |
} |
// Check that only the last |kMaxGraveyardSize| requests are in-memory. |
- RequestTracker<TestRequest>::RecentRequestInfoList recent_reqs = |
- tracker.GetRecentlyDeceased(); |
+ RequestInfoList recent_reqs = tracker.GetRecentlyDeceased(); |
- ASSERT_EQ(RequestTracker<TestRequest>::kMaxGraveyardSize, recent_reqs.size()); |
+ ASSERT_EQ(RequestTracker::kMaxGraveyardSize, recent_reqs.size()); |
- for (size_t i = 0; i < RequestTracker<TestRequest>::kMaxGraveyardSize; ++i) { |
- size_t req_number = i + RequestTracker<TestRequest>::kMaxGraveyardSize; |
- GURL url(StringPrintf("http://req%" PRIuS, req_number).c_str()); |
- EXPECT_EQ(url, recent_reqs[i].original_url); |
+ for (size_t i = 0; i < RequestTracker::kMaxGraveyardSize; ++i) { |
+ size_t req_number = i + RequestTracker::kMaxGraveyardSize; |
+ std::string url = StringPrintf("http://req%" PRIuS, req_number); |
+ EXPECT_EQ(url, recent_reqs[i].url); |
} |
} |
TEST(RequestTrackerTest, GraveyardUnbounded) { |
- RequestTracker<TestRequest> tracker; |
+ RequestTracker tracker(NULL); |
EXPECT_FALSE(tracker.IsUnbounded()); |
EXPECT_EQ(0u, tracker.GetLiveRequests().size()); |
EXPECT_EQ(0u, tracker.GetRecentlyDeceased().size()); |
@@ -125,111 +116,69 @@ |
// Add twice as many requests as would fit in the bounded graveyard. |
- size_t kMaxSize = RequestTracker<TestRequest>::kMaxGraveyardSize * 2; |
+ size_t kMaxSize = RequestTracker::kMaxGraveyardSize * 2; |
for (size_t i = 0; i < kMaxSize; ++i) { |
- TestRequest req(GURL(StringPrintf("http://req%" PRIuS, i).c_str())); |
- tracker.Add(&req); |
- tracker.Remove(&req); |
+ tracker.OnAddEntry(MakeStartLogEntry(i)); |
+ tracker.OnAddEntry(MakeEndLogEntry(i)); |
} |
// Check that all of them got saved. |
- RequestTracker<TestRequest>::RecentRequestInfoList recent_reqs = |
- tracker.GetRecentlyDeceased(); |
+ RequestInfoList recent_reqs = tracker.GetRecentlyDeceased(); |
ASSERT_EQ(kMaxSize, recent_reqs.size()); |
for (size_t i = 0; i < kMaxSize; ++i) { |
- GURL url(StringPrintf("http://req%" PRIuS, i).c_str()); |
- EXPECT_EQ(url, recent_reqs[i].original_url); |
+ std::string url = StringPrintf("http://req%" PRIuS, i); |
+ EXPECT_EQ(url, recent_reqs[i].url); |
} |
} |
// Check that very long URLs are truncated. |
TEST(RequestTrackerTest, GraveyardURLBounded) { |
- RequestTracker<TestRequest> tracker; |
+ RequestTracker tracker(NULL); |
EXPECT_FALSE(tracker.IsUnbounded()); |
- std::string big_url_spec("http://"); |
- big_url_spec.resize(2 * RequestTracker<TestRequest>::kMaxGraveyardURLSize, |
- 'x'); |
- GURL big_url(big_url_spec); |
- TestRequest req(big_url); |
+ std::string big_url("http://"); |
+ big_url.resize(2 * RequestTracker::kMaxGraveyardURLSize, 'x'); |
- tracker.Add(&req); |
- tracker.Remove(&req); |
+ tracker.OnAddEntry(MakeStartLogEntryWithURL(1, big_url)); |
+ tracker.OnAddEntry(MakeEndLogEntry(1)); |
ASSERT_EQ(1u, tracker.GetRecentlyDeceased().size()); |
- // The +1 is because GURL canonicalizes with a trailing '/' ... maybe |
- // we should just save the std::string rather than the GURL. |
- EXPECT_EQ(RequestTracker<TestRequest>::kMaxGraveyardURLSize + 1, |
- tracker.GetRecentlyDeceased()[0].original_url.spec().size()); |
+ EXPECT_EQ(RequestTracker::kMaxGraveyardURLSize, |
+ tracker.GetRecentlyDeceased()[0].url.size()); |
} |
-// Test the doesn't fail if the URL was invalid. http://crbug.com/21423. |
-TEST(URLRequestTrackerTest, TrackingInvalidURL) { |
- RequestTracker<TestRequest> tracker; |
+// Check that we exclude "chrome://" URLs from being saved into the recent |
+// requests list (graveyard). |
+TEST(RequestTrackerTest, GraveyardIsFiltered) { |
+ RequestTracker tracker(NULL); |
EXPECT_FALSE(tracker.IsUnbounded()); |
- EXPECT_EQ(0u, tracker.GetLiveRequests().size()); |
- EXPECT_EQ(0u, tracker.GetRecentlyDeceased().size()); |
- |
- GURL invalid_url("xabc"); |
- EXPECT_FALSE(invalid_url.is_valid()); |
- TestRequest req(invalid_url); |
- |
- tracker.Add(&req); |
- tracker.Remove(&req); |
- |
- // Check that the invalid URL made it into graveyard. |
- ASSERT_EQ(1u, tracker.GetRecentlyDeceased().size()); |
- EXPECT_FALSE(tracker.GetRecentlyDeceased()[0].original_url.is_valid()); |
-} |
- |
-bool ShouldRequestBeAddedToGraveyard(const GURL& url) { |
- return !url.SchemeIs("chrome") && !url.SchemeIs("data"); |
-} |
- |
-// Check that we can exclude "chrome://" URLs and "data:" URLs from being |
-// saved into the recent requests list (graveyard), by using a filter. |
-TEST(RequestTrackerTest, GraveyardCanBeFiltered) { |
- RequestTracker<TestRequest> tracker; |
- EXPECT_FALSE(tracker.IsUnbounded()); |
- |
- tracker.SetGraveyardFilter(ShouldRequestBeAddedToGraveyard); |
- |
// This will be excluded. |
- GURL url1("chrome://dontcare/"); |
- TestRequest req1(url1); |
- tracker.Add(&req1); |
- tracker.Remove(&req1); |
+ std::string url1 = "chrome://dontcare/"; |
+ tracker.OnAddEntry(MakeStartLogEntryWithURL(1, url1)); |
+ tracker.OnAddEntry(MakeEndLogEntry(1)); |
// This will be be added to graveyard. |
- GURL url2("chrome2://dontcare/"); |
- TestRequest req2(url2); |
- tracker.Add(&req2); |
- tracker.Remove(&req2); |
+ std::string url2 = "chrome2://dontcare/"; |
+ tracker.OnAddEntry(MakeStartLogEntryWithURL(2, url2)); |
+ tracker.OnAddEntry(MakeEndLogEntry(2)); |
// This will be be added to graveyard. |
- GURL url3("http://foo/"); |
- TestRequest req3(url3); |
- tracker.Add(&req3); |
- tracker.Remove(&req3); |
+ std::string url3 = "http://foo/"; |
+ tracker.OnAddEntry(MakeStartLogEntryWithURL(3, url3)); |
+ tracker.OnAddEntry(MakeEndLogEntry(3)); |
- // This will be be excluded. |
- GURL url4("data:sup"); |
- TestRequest req4(url4); |
- tracker.Add(&req4); |
- tracker.Remove(&req4); |
- |
ASSERT_EQ(2u, tracker.GetRecentlyDeceased().size()); |
- EXPECT_EQ(url2, tracker.GetRecentlyDeceased()[0].original_url); |
- EXPECT_EQ(url3, tracker.GetRecentlyDeceased()[1].original_url); |
+ EXPECT_EQ(url2, tracker.GetRecentlyDeceased()[0].url); |
+ EXPECT_EQ(url3, tracker.GetRecentlyDeceased()[1].url); |
} |
// Convert an unbounded tracker back to being bounded. |
TEST(RequestTrackerTest, ConvertUnboundedToBounded) { |
- RequestTracker<TestRequest> tracker; |
+ RequestTracker tracker(NULL); |
EXPECT_FALSE(tracker.IsUnbounded()); |
EXPECT_EQ(0u, tracker.GetLiveRequests().size()); |
EXPECT_EQ(0u, tracker.GetRecentlyDeceased().size()); |
@@ -239,11 +188,10 @@ |
// Add twice as many requests as would fit in the bounded graveyard. |
- size_t kMaxSize = RequestTracker<TestRequest>::kMaxGraveyardSize * 2; |
+ size_t kMaxSize = RequestTracker::kMaxGraveyardSize * 2; |
for (size_t i = 0; i < kMaxSize; ++i) { |
- TestRequest req(GURL(StringPrintf("http://req%" PRIuS, i).c_str())); |
- tracker.Add(&req); |
- tracker.Remove(&req); |
+ tracker.OnAddEntry(MakeStartLogEntry(i)); |
+ tracker.OnAddEntry(MakeEndLogEntry(i)); |
} |
// Check that all of them got saved. |
@@ -252,11 +200,10 @@ |
// Now make the tracker bounded, and add more entries to its graveyard. |
tracker.SetUnbounded(false); |
- kMaxSize = RequestTracker<TestRequest>::kMaxGraveyardSize; |
- for (size_t i = 0; i < kMaxSize; ++i) { |
- TestRequest req(GURL(StringPrintf("http://req%" PRIuS, i).c_str())); |
- tracker.Add(&req); |
- tracker.Remove(&req); |
+ kMaxSize = RequestTracker::kMaxGraveyardSize; |
+ for (size_t i = kMaxSize; i < 2 * kMaxSize; ++i) { |
+ tracker.OnAddEntry(MakeStartLogEntry(i)); |
+ tracker.OnAddEntry(MakeEndLogEntry(i)); |
} |
// We should only have kMaxGraveyardSize entries now. |