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

Side by Side Diff: components/safe_browsing_db/v4_get_hash_protocol_manager_unittest.cc

Issue 1703413002: Move common PVer4 code into a V4ProtocolManagerUtil class. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Pass config as pointer, instead of reference Created 4 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 <vector> 5 #include <vector>
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "base/time/time.h" 10 #include "base/time/time.h"
(...skipping 15 matching lines...) Expand all
26 const char kAppVer[] = "1.0"; 26 const char kAppVer[] = "1.0";
27 const char kKeyParam[] = "test_key_param"; 27 const char kKeyParam[] = "test_key_param";
28 28
29 } // namespace 29 } // namespace
30 30
31 namespace safe_browsing { 31 namespace safe_browsing {
32 32
33 class SafeBrowsingV4GetHashProtocolManagerTest : public testing::Test { 33 class SafeBrowsingV4GetHashProtocolManagerTest : public testing::Test {
34 protected: 34 protected:
35 scoped_ptr<V4GetHashProtocolManager> CreateProtocolManager() { 35 scoped_ptr<V4GetHashProtocolManager> CreateProtocolManager() {
36 V4GetHashProtocolConfig config; 36 V4ProtocolConfig config;
37 config.client_name = kClient; 37 config.client_name = kClient;
38 config.version = kAppVer; 38 config.version = kAppVer;
39 config.key_param = kKeyParam; 39 config.key_param = kKeyParam;
40 return scoped_ptr<V4GetHashProtocolManager>( 40 return scoped_ptr<V4GetHashProtocolManager>(
41 V4GetHashProtocolManager::Create(NULL, config)); 41 V4GetHashProtocolManager::Create(NULL, config));
42 } 42 }
43 43
44 std::string GetStockV4HashResponse() { 44 std::string GetStockV4HashResponse() {
45 FindFullHashesResponse res; 45 FindFullHashesResponse res;
46 res.mutable_negative_cache_duration()->set_seconds(600); 46 res.mutable_negative_cache_duration()->set_seconds(600);
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 fetcher->set_status(net::URLRequestStatus()); 156 fetcher->set_status(net::URLRequestStatus());
157 fetcher->set_response_code(200); 157 fetcher->set_response_code(200);
158 fetcher->SetResponseString(GetStockV4HashResponse()); 158 fetcher->SetResponseString(GetStockV4HashResponse());
159 fetcher->delegate()->OnURLFetchComplete(fetcher); 159 fetcher->delegate()->OnURLFetchComplete(fetcher);
160 160
161 // No error, back off multiplier is unchanged. 161 // No error, back off multiplier is unchanged.
162 EXPECT_EQ(0ul, pm->gethash_error_count_); 162 EXPECT_EQ(0ul, pm->gethash_error_count_);
163 EXPECT_EQ(1ul, pm->gethash_back_off_mult_); 163 EXPECT_EQ(1ul, pm->gethash_back_off_mult_);
164 } 164 }
165 165
166 TEST_F(SafeBrowsingV4GetHashProtocolManagerTest, TestGetHashBackOffTimes) {
167 scoped_ptr<V4GetHashProtocolManager> pm(CreateProtocolManager());
168
169 // No errors or back off time yet.
170 EXPECT_EQ(0U, pm->gethash_error_count_);
171 EXPECT_EQ(1U, pm->gethash_back_off_mult_);
172 Time now = Time::Now();
173 EXPECT_TRUE(pm->next_gethash_time_ < now);
174
175 // 1 error.
176 pm->HandleGetHashError(now);
177 EXPECT_EQ(1U, pm->gethash_error_count_);
178 EXPECT_EQ(1U, pm->gethash_back_off_mult_);
179 EXPECT_LE(now + TimeDelta::FromMinutes(15), pm->next_gethash_time_);
180 EXPECT_GE(now + TimeDelta::FromMinutes(30), pm->next_gethash_time_);
181
182 // 2 errors.
183 pm->HandleGetHashError(now);
184 EXPECT_EQ(2U, pm->gethash_error_count_);
185 EXPECT_EQ(2U, pm->gethash_back_off_mult_);
186 EXPECT_LE(now + TimeDelta::FromMinutes(30), pm->next_gethash_time_);
187 EXPECT_GE(now + TimeDelta::FromMinutes(60), pm->next_gethash_time_);
188
189 // 3 errors.
190 pm->HandleGetHashError(now);
191 EXPECT_EQ(3U, pm->gethash_error_count_);
192 EXPECT_EQ(4U, pm->gethash_back_off_mult_);
193 EXPECT_LE(now + TimeDelta::FromMinutes(60), pm->next_gethash_time_);
194 EXPECT_GE(now + TimeDelta::FromMinutes(120), pm->next_gethash_time_);
195
196 // 4 errors.
197 pm->HandleGetHashError(now);
198 EXPECT_EQ(4U, pm->gethash_error_count_);
199 EXPECT_EQ(8U, pm->gethash_back_off_mult_);
200 EXPECT_LE(now + TimeDelta::FromMinutes(120), pm->next_gethash_time_);
201 EXPECT_GE(now + TimeDelta::FromMinutes(240), pm->next_gethash_time_);
202
203 // 5 errors.
204 pm->HandleGetHashError(now);
205 EXPECT_EQ(5U, pm->gethash_error_count_);
206 EXPECT_EQ(16U, pm->gethash_back_off_mult_);
207 EXPECT_LE(now + TimeDelta::FromMinutes(240), pm->next_gethash_time_);
208 EXPECT_GE(now + TimeDelta::FromMinutes(480), pm->next_gethash_time_);
209
210 // 6 errors.
211 pm->HandleGetHashError(now);
212 EXPECT_EQ(6U, pm->gethash_error_count_);
213 EXPECT_EQ(32U, pm->gethash_back_off_mult_);
214 EXPECT_LE(now + TimeDelta::FromMinutes(480), pm->next_gethash_time_);
215 EXPECT_GE(now + TimeDelta::FromMinutes(960), pm->next_gethash_time_);
216
217 // 7 errors.
218 pm->HandleGetHashError(now);
219 EXPECT_EQ(7U, pm->gethash_error_count_);
220 EXPECT_EQ(64U, pm->gethash_back_off_mult_);
221 EXPECT_LE(now + TimeDelta::FromMinutes(960), pm->next_gethash_time_);
222 EXPECT_GE(now + TimeDelta::FromMinutes(1920), pm->next_gethash_time_);
223
224 // 8 errors, reached max backoff.
225 pm->HandleGetHashError(now);
226 EXPECT_EQ(8U, pm->gethash_error_count_);
227 EXPECT_EQ(128U, pm->gethash_back_off_mult_);
228 EXPECT_EQ(now + TimeDelta::FromHours(24), pm->next_gethash_time_);
229
230 // 9 errors, reached max backoff and multiplier capped.
231 pm->HandleGetHashError(now);
232 EXPECT_EQ(9U, pm->gethash_error_count_);
233 EXPECT_EQ(128U, pm->gethash_back_off_mult_);
234 EXPECT_EQ(now + TimeDelta::FromHours(24), pm->next_gethash_time_);
235 }
236
237 TEST_F(SafeBrowsingV4GetHashProtocolManagerTest, TestGetHashUrl) {
238 scoped_ptr<V4GetHashProtocolManager> pm(CreateProtocolManager());
239
240 EXPECT_EQ(
241 "https://safebrowsing.googleapis.com/v4/encodedFullHashes/request_base64?"
242 "alt=proto&client_id=unittest&client_version=1.0&key=test_key_param",
243 pm->GetHashUrl("request_base64").spec());
244 }
245
246 TEST_F(SafeBrowsingV4GetHashProtocolManagerTest, TestGetHashRequest) { 166 TEST_F(SafeBrowsingV4GetHashProtocolManagerTest, TestGetHashRequest) {
247 scoped_ptr<V4GetHashProtocolManager> pm(CreateProtocolManager()); 167 scoped_ptr<V4GetHashProtocolManager> pm(CreateProtocolManager());
248 168
249 FindFullHashesRequest req; 169 FindFullHashesRequest req;
250 ThreatInfo* info = req.mutable_threat_info(); 170 ThreatInfo* info = req.mutable_threat_info();
251 info->add_threat_types(API_ABUSE); 171 info->add_threat_types(API_ABUSE);
252 info->add_platform_types(CHROME_PLATFORM); 172 info->add_platform_types(CHROME_PLATFORM);
253 info->add_threat_entry_types(URL_EXPRESSION); 173 info->add_threat_entry_types(URL_EXPRESSION);
254 174
255 SBPrefix one = 1u; 175 SBPrefix one = 1u;
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 // Serialize. 343 // Serialize.
424 std::string res_data; 344 std::string res_data;
425 res.SerializeToString(&res_data); 345 res.SerializeToString(&res_data);
426 346
427 std::vector<SBFullHashResult> full_hashes; 347 std::vector<SBFullHashResult> full_hashes;
428 base::TimeDelta cache_lifetime; 348 base::TimeDelta cache_lifetime;
429 EXPECT_FALSE(pm->ParseHashResponse(res_data, &full_hashes, &cache_lifetime)); 349 EXPECT_FALSE(pm->ParseHashResponse(res_data, &full_hashes, &cache_lifetime));
430 } 350 }
431 351
432 } // namespace safe_browsing 352 } // namespace safe_browsing
OLDNEW
« no previous file with comments | « components/safe_browsing_db/v4_get_hash_protocol_manager.cc ('k') | components/safe_browsing_db/v4_protocol_manager_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698