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

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

Issue 1658913003: SafeBrowsing: Move V4ProtocolManager to components. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@sb-v4-3
Patch Set: Add build dependency 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
« no previous file with comments | « chrome/browser/safe_browsing/v4_protocol_manager.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/safe_browsing/v4_protocol_manager_unittest.cc
diff --git a/chrome/browser/safe_browsing/v4_protocol_manager_unittest.cc b/chrome/browser/safe_browsing/v4_protocol_manager_unittest.cc
deleted file mode 100644
index 84ac45e8c5dd072f813d321286dad29d55e49595..0000000000000000000000000000000000000000
--- a/chrome/browser/safe_browsing/v4_protocol_manager_unittest.cc
+++ /dev/null
@@ -1,432 +0,0 @@
-// Copyright 2016 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 <vector>
-
-#include "base/base64.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/strings/stringprintf.h"
-#include "base/time/time.h"
-#include "chrome/browser/safe_browsing/v4_protocol_manager.h"
-#include "components/safe_browsing_db/safebrowsing.pb.h"
-#include "components/safe_browsing_db/util.h"
-#include "net/base/escape.h"
-#include "net/base/load_flags.h"
-#include "net/base/net_errors.h"
-#include "net/url_request/test_url_fetcher_factory.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using base::Time;
-using base::TimeDelta;
-
-namespace {
-
-const char kClient[] = "unittest";
-const char kAppVer[] = "1.0";
-const char kKeyParam[] = "test_key_param";
-
-} // namespace
-
-namespace safe_browsing {
-
-class SafeBrowsingV4ProtocolManagerTest : public testing::Test {
- protected:
-
- scoped_ptr<V4ProtocolManager> CreateProtocolManager() {
- V4ProtocolConfig config;
- config.client_name = kClient;
- config.version = kAppVer;
- config.key_param = kKeyParam;
- return scoped_ptr<V4ProtocolManager>(
- V4ProtocolManager::Create(NULL, config));
- }
-
- std::string GetStockV4HashResponse() {
- FindFullHashesResponse res;
- res.mutable_negative_cache_duration()->set_seconds(600);
- ThreatMatch* m = res.add_matches();
- m->set_threat_type(API_ABUSE);
- m->set_platform_type(CHROME_PLATFORM);
- m->set_threat_entry_type(URL_EXPRESSION);
- m->mutable_cache_duration()->set_seconds(300);
- m->mutable_threat()->set_hash(
- SBFullHashToString(SBFullHashForString("Everything's shiny, Cap'n.")));
- ThreatEntryMetadata::MetadataEntry* e =
- m->mutable_threat_entry_metadata()->add_entries();
- e->set_key("permission");
- e->set_value("NOTIFICATIONS");
-
- // Serialize.
- std::string res_data;
- res.SerializeToString(&res_data);
-
- return res_data;
- }
-};
-
-void ValidateGetV4HashResults(
- const std::vector<SBFullHashResult>& expected_full_hashes,
- const base::TimeDelta& expected_cache_duration,
- const std::vector<SBFullHashResult>& full_hashes,
- const base::TimeDelta& cache_duration) {
- EXPECT_EQ(expected_cache_duration, cache_duration);
- ASSERT_EQ(expected_full_hashes.size(), full_hashes.size());
-
- for (unsigned int i = 0; i < expected_full_hashes.size(); ++i) {
- const SBFullHashResult& expected = expected_full_hashes[i];
- const SBFullHashResult& actual = full_hashes[i];
- EXPECT_TRUE(SBFullHashEqual(expected.hash, actual.hash));
- EXPECT_EQ(expected.metadata, actual.metadata);
- EXPECT_EQ(expected.cache_duration, actual.cache_duration);
- }
-}
-
-TEST_F(SafeBrowsingV4ProtocolManagerTest, TestGetHashErrorHandlingNetwork) {
- net::TestURLFetcherFactory factory;
- scoped_ptr<V4ProtocolManager> pm(CreateProtocolManager());
-
- std::vector<SBPrefix> prefixes;
- std::vector<SBFullHashResult> expected_full_hashes;
- base::TimeDelta expected_cache_duration;
-
- pm->GetFullHashesWithApis(
- prefixes, base::Bind(&ValidateGetV4HashResults, expected_full_hashes,
- expected_cache_duration));
-
- net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
- DCHECK(fetcher);
- // Failed request status should result in error.
- fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::FAILED,
- net::ERR_CONNECTION_RESET));
- fetcher->set_response_code(200);
- fetcher->SetResponseString(GetStockV4HashResponse());
- fetcher->delegate()->OnURLFetchComplete(fetcher);
-
- // Should have recorded one error, but back off multiplier is unchanged.
- EXPECT_EQ(1ul, pm->gethash_error_count_);
- EXPECT_EQ(1ul, pm->gethash_back_off_mult_);
-}
-
-TEST_F(SafeBrowsingV4ProtocolManagerTest,
- TestGetHashErrorHandlingResponseCode) {
- net::TestURLFetcherFactory factory;
- scoped_ptr<V4ProtocolManager> pm(CreateProtocolManager());
-
- std::vector<SBPrefix> prefixes;
- std::vector<SBFullHashResult> expected_full_hashes;
- base::TimeDelta expected_cache_duration;
-
- pm->GetFullHashesWithApis(
- prefixes, base::Bind(&ValidateGetV4HashResults, expected_full_hashes,
- expected_cache_duration));
-
- net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
- DCHECK(fetcher);
- fetcher->set_status(net::URLRequestStatus());
- // Response code of anything other than 200 should result in error.
- fetcher->set_response_code(204);
- fetcher->SetResponseString(GetStockV4HashResponse());
- fetcher->delegate()->OnURLFetchComplete(fetcher);
-
- // Should have recorded one error, but back off multiplier is unchanged.
- EXPECT_EQ(1ul, pm->gethash_error_count_);
- EXPECT_EQ(1ul, pm->gethash_back_off_mult_);
-}
-
-TEST_F(SafeBrowsingV4ProtocolManagerTest, TestGetHashErrorHandlingOK) {
- net::TestURLFetcherFactory factory;
- scoped_ptr<V4ProtocolManager> pm(CreateProtocolManager());
-
- std::vector<SBPrefix> prefixes;
- std::vector<SBFullHashResult> expected_full_hashes;
- SBFullHashResult hash_result;
- hash_result.hash = SBFullHashForString("Everything's shiny, Cap'n.");
- hash_result.metadata = "NOTIFICATIONS,";
- hash_result.cache_duration = base::TimeDelta::FromSeconds(300);
- expected_full_hashes.push_back(hash_result);
- base::TimeDelta expected_cache_duration = base::TimeDelta::FromSeconds(600);
-
- pm->GetFullHashesWithApis(
- prefixes, base::Bind(&ValidateGetV4HashResults, expected_full_hashes,
- expected_cache_duration));
-
- net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
- DCHECK(fetcher);
- fetcher->set_status(net::URLRequestStatus());
- fetcher->set_response_code(200);
- fetcher->SetResponseString(GetStockV4HashResponse());
- fetcher->delegate()->OnURLFetchComplete(fetcher);
-
- // No error, back off multiplier is unchanged.
- EXPECT_EQ(0ul, pm->gethash_error_count_);
- EXPECT_EQ(1ul, pm->gethash_back_off_mult_);
-}
-
-TEST_F(SafeBrowsingV4ProtocolManagerTest, TestGetHashBackOffTimes) {
- scoped_ptr<V4ProtocolManager> pm(CreateProtocolManager());
-
- // No errors or back off time yet.
- EXPECT_EQ(0U, pm->gethash_error_count_);
- EXPECT_EQ(1U, pm->gethash_back_off_mult_);
- Time now = Time::Now();
- EXPECT_TRUE(pm->next_gethash_time_ < now);
-
- // 1 error.
- pm->HandleGetHashError(now);
- EXPECT_EQ(1U, pm->gethash_error_count_);
- EXPECT_EQ(1U, pm->gethash_back_off_mult_);
- EXPECT_LE(now + TimeDelta::FromMinutes(15), pm->next_gethash_time_);
- EXPECT_GE(now + TimeDelta::FromMinutes(30), pm->next_gethash_time_);
-
- // 2 errors.
- pm->HandleGetHashError(now);
- EXPECT_EQ(2U, pm->gethash_error_count_);
- EXPECT_EQ(2U, pm->gethash_back_off_mult_);
- EXPECT_LE(now + TimeDelta::FromMinutes(30), pm->next_gethash_time_);
- EXPECT_GE(now + TimeDelta::FromMinutes(60), pm->next_gethash_time_);
-
- // 3 errors.
- pm->HandleGetHashError(now);
- EXPECT_EQ(3U, pm->gethash_error_count_);
- EXPECT_EQ(4U, pm->gethash_back_off_mult_);
- EXPECT_LE(now + TimeDelta::FromMinutes(60), pm->next_gethash_time_);
- EXPECT_GE(now + TimeDelta::FromMinutes(120), pm->next_gethash_time_);
-
- // 4 errors.
- pm->HandleGetHashError(now);
- EXPECT_EQ(4U, pm->gethash_error_count_);
- EXPECT_EQ(8U, pm->gethash_back_off_mult_);
- EXPECT_LE(now + TimeDelta::FromMinutes(120), pm->next_gethash_time_);
- EXPECT_GE(now + TimeDelta::FromMinutes(240), pm->next_gethash_time_);
-
- // 5 errors.
- pm->HandleGetHashError(now);
- EXPECT_EQ(5U, pm->gethash_error_count_);
- EXPECT_EQ(16U, pm->gethash_back_off_mult_);
- EXPECT_LE(now + TimeDelta::FromMinutes(240), pm->next_gethash_time_);
- EXPECT_GE(now + TimeDelta::FromMinutes(480), pm->next_gethash_time_);
-
- // 6 errors.
- pm->HandleGetHashError(now);
- EXPECT_EQ(6U, pm->gethash_error_count_);
- EXPECT_EQ(32U, pm->gethash_back_off_mult_);
- EXPECT_LE(now + TimeDelta::FromMinutes(480), pm->next_gethash_time_);
- EXPECT_GE(now + TimeDelta::FromMinutes(960), pm->next_gethash_time_);
-
- // 7 errors.
- pm->HandleGetHashError(now);
- EXPECT_EQ(7U, pm->gethash_error_count_);
- EXPECT_EQ(64U, pm->gethash_back_off_mult_);
- EXPECT_LE(now + TimeDelta::FromMinutes(960), pm->next_gethash_time_);
- EXPECT_GE(now + TimeDelta::FromMinutes(1920), pm->next_gethash_time_);
-
- // 8 errors, reached max backoff.
- pm->HandleGetHashError(now);
- EXPECT_EQ(8U, pm->gethash_error_count_);
- EXPECT_EQ(128U, pm->gethash_back_off_mult_);
- EXPECT_EQ(now + TimeDelta::FromHours(24), pm->next_gethash_time_);
-
- // 9 errors, reached max backoff and multiplier capped.
- pm->HandleGetHashError(now);
- EXPECT_EQ(9U, pm->gethash_error_count_);
- EXPECT_EQ(128U, pm->gethash_back_off_mult_);
- EXPECT_EQ(now + TimeDelta::FromHours(24), pm->next_gethash_time_);
-}
-
-TEST_F(SafeBrowsingV4ProtocolManagerTest, TestGetHashUrl) {
- scoped_ptr<V4ProtocolManager> pm(CreateProtocolManager());
-
- EXPECT_EQ(
- "https://safebrowsing.googleapis.com/v4/encodedFullHashes/request_base64?"
- "alt=proto&client_id=unittest&client_version=1.0&key=test_key_param",
- pm->GetHashUrl("request_base64").spec());
-}
-
-TEST_F(SafeBrowsingV4ProtocolManagerTest, TestGetHashRequest) {
- scoped_ptr<V4ProtocolManager> pm(CreateProtocolManager());
-
- FindFullHashesRequest req;
- ThreatInfo* info = req.mutable_threat_info();
- info->add_threat_types(API_ABUSE);
- info->add_platform_types(CHROME_PLATFORM);
- info->add_threat_entry_types(URL_EXPRESSION);
-
- SBPrefix one = 1u;
- SBPrefix two = 2u;
- SBPrefix three = 3u;
- std::string hash(reinterpret_cast<const char*>(&one), sizeof(SBPrefix));
- info->add_threat_entries()->set_hash(hash);
- hash.clear();
- hash.append(reinterpret_cast<const char*>(&two), sizeof(SBPrefix));
- info->add_threat_entries()->set_hash(hash);
- hash.clear();
- hash.append(reinterpret_cast<const char*>(&three), sizeof(SBPrefix));
- info->add_threat_entries()->set_hash(hash);
-
- // Serialize and Base64 encode.
- std::string req_data, req_base64;
- req.SerializeToString(&req_data);
- base::Base64Encode(req_data, &req_base64);
-
- std::vector<PlatformType> platform;
- platform.push_back(CHROME_PLATFORM);
- std::vector<SBPrefix> prefixes;
- prefixes.push_back(one);
- prefixes.push_back(two);
- prefixes.push_back(three);
- EXPECT_EQ(req_base64, pm->GetHashRequest(prefixes, platform, API_ABUSE));
-}
-
-TEST_F(SafeBrowsingV4ProtocolManagerTest, TestParseHashResponse) {
- scoped_ptr<V4ProtocolManager> pm(CreateProtocolManager());
-
- 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);
- m->set_threat_entry_type(URL_EXPRESSION);
- m->mutable_cache_duration()->set_seconds(300);
- m->mutable_threat()->set_hash(
- SBFullHashToString(SBFullHashForString("Everything's shiny, Cap'n.")));
- ThreatEntryMetadata::MetadataEntry* e =
- m->mutable_threat_entry_metadata()->add_entries();
- e->set_key("permission");
- e->set_value("NOTIFICATIONS");
-
- // Serialize.
- std::string res_data;
- res.SerializeToString(&res_data);
-
- Time now = Time::Now();
- std::vector<SBFullHashResult> full_hashes;
- base::TimeDelta cache_lifetime;
- EXPECT_TRUE(pm->ParseHashResponse(res_data, &full_hashes, &cache_lifetime));
-
- EXPECT_EQ(base::TimeDelta::FromSeconds(600), cache_lifetime);
- EXPECT_EQ(1ul, full_hashes.size());
- EXPECT_TRUE(SBFullHashEqual(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_time_);
-}
-
-// Adds an entry with an ignored ThreatEntryType.
-TEST_F(SafeBrowsingV4ProtocolManagerTest,
- TestParseHashResponseWrongThreatEntryType) {
- scoped_ptr<V4ProtocolManager> pm(CreateProtocolManager());
-
- FindFullHashesResponse res;
- res.mutable_negative_cache_duration()->set_seconds(600);
- res.add_matches()->set_threat_entry_type(BINARY_DIGEST);
-
- // Serialize.
- std::string res_data;
- res.SerializeToString(&res_data);
-
- std::vector<SBFullHashResult> full_hashes;
- base::TimeDelta cache_lifetime;
- EXPECT_FALSE(pm->ParseHashResponse(res_data, &full_hashes, &cache_lifetime));
-
- EXPECT_EQ(base::TimeDelta::FromSeconds(600), cache_lifetime);
- // There should be no hash results.
- EXPECT_EQ(0ul, full_hashes.size());
-}
-
-// Adds an entry with a SOCIAL_ENGINEERING threat type.
-TEST_F(SafeBrowsingV4ProtocolManagerTest,
- TestParseHashResponseSocialEngineeringThreatType) {
- scoped_ptr<V4ProtocolManager> pm(CreateProtocolManager());
-
- FindFullHashesResponse res;
- res.mutable_negative_cache_duration()->set_seconds(600);
- ThreatMatch* m = res.add_matches();
- m->set_threat_type(SOCIAL_ENGINEERING);
- m->set_platform_type(CHROME_PLATFORM);
- m->set_threat_entry_type(URL_EXPRESSION);
- m->mutable_threat()->set_hash(
- SBFullHashToString(SBFullHashForString("Not to fret.")));
- ThreatEntryMetadata::MetadataEntry* e =
- m->mutable_threat_entry_metadata()->add_entries();
- e->set_key("permission");
- e->set_value("IGNORED");
-
- // Serialize.
- std::string res_data;
- res.SerializeToString(&res_data);
-
- std::vector<SBFullHashResult> full_hashes;
- base::TimeDelta cache_lifetime;
- EXPECT_FALSE(pm->ParseHashResponse(res_data, &full_hashes, &cache_lifetime));
-
- EXPECT_EQ(base::TimeDelta::FromSeconds(600), cache_lifetime);
- EXPECT_EQ(0ul, full_hashes.size());
-}
-
-// Adds metadata with a key value that is not "permission".
-TEST_F(SafeBrowsingV4ProtocolManagerTest,
- TestParseHashResponseNonPermissionMetadata) {
- scoped_ptr<V4ProtocolManager> pm(CreateProtocolManager());
-
- FindFullHashesResponse res;
- res.mutable_negative_cache_duration()->set_seconds(600);
- ThreatMatch* m = res.add_matches();
- m->set_threat_type(API_ABUSE);
- m->set_platform_type(CHROME_PLATFORM);
- m->set_threat_entry_type(URL_EXPRESSION);
- m->mutable_threat()->set_hash(
- SBFullHashToString(SBFullHashForString("Not to fret.")));
- ThreatEntryMetadata::MetadataEntry* e =
- m->mutable_threat_entry_metadata()->add_entries();
- e->set_key("notpermission");
- e->set_value("NOTGEOLOCATION");
-
- // Serialize.
- std::string res_data;
- res.SerializeToString(&res_data);
-
- std::vector<SBFullHashResult> full_hashes;
- base::TimeDelta cache_lifetime;
- EXPECT_TRUE(pm->ParseHashResponse(res_data, &full_hashes, &cache_lifetime));
-
- EXPECT_EQ(base::TimeDelta::FromSeconds(600), cache_lifetime);
- EXPECT_EQ(1ul, full_hashes.size());
-
- EXPECT_TRUE(SBFullHashEqual(SBFullHashForString("Not to fret."),
- full_hashes[0].hash));
- // Metadata should be empty.
- EXPECT_EQ("", full_hashes[0].metadata);
- EXPECT_EQ(base::TimeDelta::FromSeconds(0), full_hashes[0].cache_duration);
-}
-
-TEST_F(SafeBrowsingV4ProtocolManagerTest,
- TestParseHashResponseInconsistentThreatTypes) {
- scoped_ptr<V4ProtocolManager> pm(CreateProtocolManager());
-
- FindFullHashesResponse res;
- ThreatMatch* m1 = res.add_matches();
- m1->set_threat_type(API_ABUSE);
- m1->set_platform_type(CHROME_PLATFORM);
- m1->set_threat_entry_type(URL_EXPRESSION);
- m1->mutable_threat()->set_hash(
- SBFullHashToString(SBFullHashForString("Everything's shiny, Cap'n.")));
- m1->mutable_threat_entry_metadata()->add_entries();
- ThreatMatch* m2 = res.add_matches();
- m2->set_threat_type(MALWARE_THREAT);
- m2->set_threat_entry_type(URL_EXPRESSION);
- m2->mutable_threat()->set_hash(
- SBFullHashToString(SBFullHashForString("Not to fret.")));
-
- // Serialize.
- std::string res_data;
- res.SerializeToString(&res_data);
-
- std::vector<SBFullHashResult> full_hashes;
- base::TimeDelta cache_lifetime;
- EXPECT_FALSE(pm->ParseHashResponse(res_data, &full_hashes, &cache_lifetime));
-}
-
-} // namespace safe_browsing
« no previous file with comments | « chrome/browser/safe_browsing/v4_protocol_manager.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698