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

Unified Diff: chrome/browser/safe_browsing/client_side_detection_service_unittest.cc

Issue 6374017: Add caching to phishing client side detection. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Updated header comments Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/safe_browsing/client_side_detection_service_unittest.cc
diff --git a/chrome/browser/safe_browsing/client_side_detection_service_unittest.cc b/chrome/browser/safe_browsing/client_side_detection_service_unittest.cc
index b418d14a6e4de6fc90c6b4f9204e0aba1c50eb19..ce64fb1e0a12cfb796dd6241a40e13ebaa2ffa4c 100644
--- a/chrome/browser/safe_browsing/client_side_detection_service_unittest.cc
+++ b/chrome/browser/safe_browsing/client_side_detection_service_unittest.cc
@@ -94,6 +94,41 @@ class ClientSideDetectionServiceTest : public testing::Test {
return csd_service_->phishing_report_times_;
}
+ void TestUpdateCache() {
+ ClientSideDetectionService::PhishingCache& cache = csd_service_->cache_;
+ base::Time now = base::Time::Now();
+ base::Time time = base::Time::Now() -
+ ClientSideDetectionService::kNegativeCacheInterval +
+ base::TimeDelta::FromMinutes(2);
Brian Ryner 2011/02/08 20:16:48 Did you mean to use the "now" variable here instea
gcasto (DO NOT USE) 2011/02/09 00:10:52 Done.
+ cache[GURL("http://first.url.com/")] =
+ make_linked_ptr(new ClientSideDetectionService::CacheState(false,
+ time));
+
+ time = now - ClientSideDetectionService::kNegativeCacheInterval -
+ base::TimeDelta::FromHours(1);
+ cache[GURL("http://second.url.com/")] =
+ make_linked_ptr(new ClientSideDetectionService::CacheState(false,
+ time));
+
+ time = now - ClientSideDetectionService::kPositiveCacheInterval -
+ base::TimeDelta::FromMinutes(5);
+ cache[GURL("http://third.url.com/")] =
+ make_linked_ptr(new ClientSideDetectionService::CacheState(true, time));
+
+ time = now - ClientSideDetectionService::kPositiveCacheInterval +
+ base::TimeDelta::FromMinutes(5);
+ cache[GURL("http://fourth.url.com/")] =
+ make_linked_ptr(new ClientSideDetectionService::CacheState(true, time));
+
+ LOG(INFO) << "Size:" << cache.size();
Brian Ryner 2011/02/08 20:16:48 Did you mean to leave this in?
gcasto (DO NOT USE) 2011/02/09 00:10:52 Removed.
+ csd_service_->UpdateCache();
+
+ // Only 2 elements should be in the cache, the first and the fourth.
+ EXPECT_EQ(2U, cache.size());
+ EXPECT_NE(cache.find(GURL("http://first.url.com/")), cache.end());
+ EXPECT_NE(cache.find(GURL("http://fourth.url.com/")), cache.end());
+ }
+
protected:
scoped_ptr<ClientSideDetectionService> csd_service_;
scoped_ptr<FakeURLFetcherFactory> factory_;
@@ -188,16 +223,46 @@ TEST_F(ClientSideDetectionServiceTest, SendClientReportPhishingRequest) {
SetClientReportPhishingResponse(response.SerializeAsString(),
true /* success */);
EXPECT_TRUE(SendClientReportPhishingRequest(url, score));
+
+ // Caching causes this to still count as phishy.
response.set_phishy(false);
SetClientReportPhishingResponse(response.SerializeAsString(),
true /* success */);
- EXPECT_FALSE(SendClientReportPhishingRequest(url, score));
+ EXPECT_TRUE(SendClientReportPhishingRequest(url, score));
+
+ // This request will fail and should not be cached.
+ GURL second_url("http://b.com/");
+ response.set_phishy(false);
+ SetClientReportPhishingResponse(response.SerializeAsString(),
+ false /* success*/);
+ EXPECT_FALSE(SendClientReportPhishingRequest(second_url, score));
+
+ // Verify that the previous request was not cached.
+ response.set_phishy(true);
+ SetClientReportPhishingResponse(response.SerializeAsString(),
+ true /* success */);
+ EXPECT_TRUE(SendClientReportPhishingRequest(second_url, score));
+
+ // This request is blocked because it's not in the cache and we have more
+ // than 3 requests.
+ GURL third_url("http://c.com");
+ response.set_phishy(true);
+ SetClientReportPhishingResponse(response.SerializeAsString(),
+ true /* success */);
+ EXPECT_FALSE(SendClientReportPhishingRequest(third_url, score));
+
+ // Verify that caching still works even when new requests are blocked.
+ response.set_phishy(true);
+ SetClientReportPhishingResponse(response.SerializeAsString(),
+ true /* success */);
+ EXPECT_TRUE(SendClientReportPhishingRequest(url, score));
base::Time after = base::Time::Now();
- // Check that we have recorded 3 requests, all within the correct time range.
+ // Check that we have recorded 4 requests, all within the correct time range.
+ // The blocked request and the cached requests should not be present.
std::queue<base::Time>& report_times = GetPhishingReportTimes();
- EXPECT_EQ(3U, report_times.size());
+ EXPECT_EQ(4U, report_times.size());
while (!report_times.empty()) {
base::Time time = report_times.back();
report_times.pop();
@@ -224,4 +289,14 @@ TEST_F(ClientSideDetectionServiceTest, GetNumReportTest) {
EXPECT_EQ(2, GetNumReportsPerDay());
}
+TEST_F(ClientSideDetectionServiceTest, UpdateCacheTest) {
+ SetModelFetchResponse("bogus model", true /* success */);
+ ScopedTempDir tmp_dir;
+ ASSERT_TRUE(tmp_dir.CreateUniqueTempDir());
+ csd_service_.reset(ClientSideDetectionService::Create(
+ tmp_dir.path().AppendASCII("model"), NULL));
+
+ TestUpdateCache();
+}
+
} // namespace safe_browsing

Powered by Google App Engine
This is Rietveld 408576698