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

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

Issue 1555953002: Adds backoff and Min Wait Duration compliance to Protocolmanager pver4 handlers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@osb-pm-2
Patch Set: Review COmments Created 4 years, 11 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/protocol_manager_unittest.cc
diff --git a/chrome/browser/safe_browsing/protocol_manager_unittest.cc b/chrome/browser/safe_browsing/protocol_manager_unittest.cc
index 03368549b97398278069a09cea9ed86768a584b4..20852191e5f4827306279888997e677f15d077f4 100644
--- a/chrome/browser/safe_browsing/protocol_manager_unittest.cc
+++ b/chrome/browser/safe_browsing/protocol_manager_unittest.cc
@@ -254,6 +254,77 @@ TEST_F(SafeBrowsingProtocolManagerTest, TestGetHashBackOffTimes) {
EXPECT_TRUE(pm->next_gethash_time_== now + TimeDelta::FromMinutes(480));
}
+TEST_F(SafeBrowsingProtocolManagerTest, TestGetV4HashBackOffTimes) {
+ scoped_ptr<SafeBrowsingProtocolManager> pm(CreateProtocolManager(NULL));
+
+ // No errors or back off time yet.
+ EXPECT_EQ(0U, pm->gethash_v4_error_count_);
+ EXPECT_EQ(1U, pm->gethash_v4_back_off_mult_);
+ Time now = Time::Now();
+ EXPECT_TRUE(pm->next_gethash_v4_time_ < now);
+
+ // 1 error.
+ pm->HandleGetHashV4Error(now);
+ EXPECT_EQ(1U, pm->gethash_v4_error_count_);
+ EXPECT_EQ(1U, pm->gethash_v4_back_off_mult_);
+ EXPECT_LE(now + TimeDelta::FromMinutes(15), pm->next_gethash_v4_time_);
+ EXPECT_GE(now + TimeDelta::FromMinutes(30), pm->next_gethash_v4_time_);
+
+ // 2 errors.
+ pm->HandleGetHashV4Error(now);
+ EXPECT_EQ(2U, pm->gethash_v4_error_count_);
+ EXPECT_EQ(2U, pm->gethash_v4_back_off_mult_);
+ EXPECT_LE(now + TimeDelta::FromMinutes(30), pm->next_gethash_v4_time_);
+ EXPECT_GE(now + TimeDelta::FromMinutes(60), pm->next_gethash_v4_time_);
+
+ // 3 errors.
+ pm->HandleGetHashV4Error(now);
+ EXPECT_EQ(3U, pm->gethash_v4_error_count_);
+ EXPECT_EQ(4U, pm->gethash_v4_back_off_mult_);
+ EXPECT_LE(now + TimeDelta::FromMinutes(60), pm->next_gethash_v4_time_);
+ EXPECT_GE(now + TimeDelta::FromMinutes(120), pm->next_gethash_v4_time_);
+
+ // 4 errors.
+ pm->HandleGetHashV4Error(now);
+ EXPECT_EQ(4U, pm->gethash_v4_error_count_);
+ EXPECT_EQ(8U, pm->gethash_v4_back_off_mult_);
+ EXPECT_LE(now + TimeDelta::FromMinutes(120), pm->next_gethash_v4_time_);
+ EXPECT_GE(now + TimeDelta::FromMinutes(240), pm->next_gethash_v4_time_);
+
+ // 5 errors.
+ pm->HandleGetHashV4Error(now);
+ EXPECT_EQ(5U, pm->gethash_v4_error_count_);
+ EXPECT_EQ(16U, pm->gethash_v4_back_off_mult_);
+ EXPECT_LE(now + TimeDelta::FromMinutes(240), pm->next_gethash_v4_time_);
+ EXPECT_GE(now + TimeDelta::FromMinutes(480), pm->next_gethash_v4_time_);
+
+ // 6 errors.
+ pm->HandleGetHashV4Error(now);
+ EXPECT_EQ(6U, pm->gethash_v4_error_count_);
+ EXPECT_EQ(32U, pm->gethash_v4_back_off_mult_);
+ EXPECT_LE(now + TimeDelta::FromMinutes(480), pm->next_gethash_v4_time_);
+ EXPECT_GE(now + TimeDelta::FromMinutes(960), pm->next_gethash_v4_time_);
+
+ // 7 errors.
+ pm->HandleGetHashV4Error(now);
+ EXPECT_EQ(7U, pm->gethash_v4_error_count_);
+ EXPECT_EQ(64U, pm->gethash_v4_back_off_mult_);
+ EXPECT_LE(now + TimeDelta::FromMinutes(960), pm->next_gethash_v4_time_);
+ EXPECT_GE(now + TimeDelta::FromMinutes(1920), pm->next_gethash_v4_time_);
+
+ // 8 errors, reached max backoff.
+ pm->HandleGetHashV4Error(now);
+ EXPECT_EQ(8U, pm->gethash_v4_error_count_);
+ EXPECT_EQ(128U, pm->gethash_v4_back_off_mult_);
+ EXPECT_EQ(now + TimeDelta::FromHours(24), pm->next_gethash_v4_time_);
+
+ // 9 errors, reached max backoff and multiplier capped.
+ pm->HandleGetHashV4Error(now);
+ EXPECT_EQ(9U, pm->gethash_v4_error_count_);
+ EXPECT_EQ(128U, pm->gethash_v4_back_off_mult_);
+ EXPECT_EQ(now + TimeDelta::FromHours(24), pm->next_gethash_v4_time_);
+}
+
TEST_F(SafeBrowsingProtocolManagerTest, TestGetHashUrl) {
scoped_ptr<SafeBrowsingProtocolManager> pm(CreateProtocolManager(NULL));
@@ -329,6 +400,7 @@ TEST_F(SafeBrowsingProtocolManagerTest, TestParseV4HashResponse) {
FindFullHashesResponse res;
res.mutable_negative_cache_duration()->set_seconds(600);
+ res.mutable_minimum_wait_duration()->set_seconds(400);
ThreatMatch* m = res.add_matches();
m->set_threat_type(API_ABUSE);
m->set_platform_type(CHROME_PLATFORM);
@@ -345,6 +417,7 @@ TEST_F(SafeBrowsingProtocolManagerTest, TestParseV4HashResponse) {
std::string res_data;
res.SerializeToString(&res_data);
+ Time now = Time::Now();
std::vector<SBFullHashResult> full_hashes;
base::TimeDelta cache_lifetime;
pm->ParseV4HashResponse(res_data, &full_hashes, &cache_lifetime);
@@ -355,6 +428,7 @@ TEST_F(SafeBrowsingProtocolManagerTest, TestParseV4HashResponse) {
SBFullHashForString("Everything's shiny, Cap'n."), full_hashes[0].hash));
EXPECT_EQ("NOTIFICATIONS,", full_hashes[0].metadata);
EXPECT_EQ(base::TimeDelta::FromSeconds(300), full_hashes[0].cache_duration);
+ EXPECT_LE(now + base::TimeDelta::FromSeconds(400), pm->next_gethash_v4_time_);
kcarattini 2016/01/07 06:48:53 Added a test for minimum_wait_duration here.
Nathan Parker 2016/01/12 04:14:38 Shouldn't this be eq, since you set min_wait_durat
kcarattini 2016/01/12 05:18:07 They're different because the min_wait_duration se
}
// Adds an entry with an ignored ThreatEntryType.

Powered by Google App Engine
This is Rietveld 408576698