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

Unified Diff: net/base/sdch_manager_unittest.cc

Issue 841883002: Add an eviction mechanism for SDCH dictionaries. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Incorporated comments. Created 5 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: net/base/sdch_manager_unittest.cc
diff --git a/net/base/sdch_manager_unittest.cc b/net/base/sdch_manager_unittest.cc
index 3587084c5440ca69be8af06988d7f453b91b9ed8..21fe0ce0228ca99ca1bd06004ddaac686b088d84 100644
--- a/net/base/sdch_manager_unittest.cc
+++ b/net/base/sdch_manager_unittest.cc
@@ -31,15 +31,30 @@ static const char kTestVcdiffDictionary[] = "DictionaryFor"
class MockSdchObserver : public SdchObserver {
public:
- MockSdchObserver() : get_dictionary_notifications_(0) {}
+ MockSdchObserver()
+ : dictionary_used_notifications_(0),
+ get_dictionary_notifications_(0),
+ clear_dictionaries_notifications_(0) {}
+ std::string last_server_hash() { return last_server_hash_; }
+ int dictionary_used_notifications() { return dictionary_used_notifications_; }
const GURL& last_dictionary_request_url() {
return last_dictionary_request_url_;
}
const GURL& last_dictionary_url() { return last_dictionary_url_; }
int get_dictionary_notifications() { return get_dictionary_notifications_; }
+ int clear_dictionary_notifications() {
+ return clear_dictionaries_notifications_;
+ }
+
// SdchObserver implementation
+ void OnDictionaryUsed(SdchManager* manager,
+ const std::string& server_hash) override {
+ last_server_hash_ = server_hash;
+ ++dictionary_used_notifications_;
+ }
+
void OnGetDictionary(SdchManager* manager,
const GURL& request_url,
const GURL& dictionary_url) override {
@@ -47,10 +62,16 @@ class MockSdchObserver : public SdchObserver {
last_dictionary_request_url_ = request_url;
last_dictionary_url_ = dictionary_url;
}
- void OnClearDictionaries(SdchManager* manager) override {}
+ void OnClearDictionaries(SdchManager* manager) override {
+ ++clear_dictionaries_notifications_;
+ }
private:
+ int dictionary_used_notifications_;
int get_dictionary_notifications_;
+ int clear_dictionaries_notifications_;
+
+ std::string last_server_hash_;
GURL last_dictionary_request_url_;
GURL last_dictionary_url_;
};
Alexei Svitkine (slow) 2015/01/08 16:47:14 Nit: DISALLOW_COPY_AND_ASSIGN?
Randy Smith (Not in Mondays) 2015/01/08 18:00:11 Done.
@@ -79,7 +100,8 @@ class SdchManagerTest : public testing::Test {
// failure.
bool AddSdchDictionary(const std::string& dictionary_text,
const GURL& gurl) {
- return sdch_manager_->AddSdchDictionary(dictionary_text, gurl) == SDCH_OK;
+ return sdch_manager_->AddSdchDictionary(dictionary_text, gurl, nullptr) ==
+ SDCH_OK;
}
private:
@@ -394,40 +416,6 @@ TEST_F(SdchManagerTest, CanStillSetExactMatchDictionary) {
GURL("http://" + dictionary_domain)));
}
-// Make sure the DOS protection precludes the addition of too many dictionaries.
-TEST_F(SdchManagerTest, TooManyDictionaries) {
- std::string dictionary_domain(".google.com");
- std::string dictionary_text(NewSdchDictionary(dictionary_domain));
-
- for (size_t count = 0; count < SdchManager::kMaxDictionaryCount; ++count) {
- EXPECT_TRUE(AddSdchDictionary(dictionary_text,
- GURL("http://www.google.com")));
- dictionary_text += " "; // Create dictionary with different SHA signature.
- }
- EXPECT_FALSE(
- AddSdchDictionary(dictionary_text, GURL("http://www.google.com")));
-}
-
-TEST_F(SdchManagerTest, DictionaryNotTooLarge) {
- std::string dictionary_domain(".google.com");
- std::string dictionary_text(NewSdchDictionary(dictionary_domain));
-
- dictionary_text.append(
- SdchManager::kMaxDictionarySize - dictionary_text.size(), ' ');
- EXPECT_TRUE(AddSdchDictionary(dictionary_text,
- GURL("http://" + dictionary_domain)));
-}
-
-TEST_F(SdchManagerTest, DictionaryTooLarge) {
- std::string dictionary_domain(".google.com");
- std::string dictionary_text(NewSdchDictionary(dictionary_domain));
-
- dictionary_text.append(
- SdchManager::kMaxDictionarySize + 1 - dictionary_text.size(), ' ');
- EXPECT_FALSE(AddSdchDictionary(dictionary_text,
- GURL("http://" + dictionary_domain)));
-}
-
TEST_F(SdchManagerTest, PathMatch) {
bool (*PathMatch)(const std::string& path, const std::string& restriction) =
SdchManager::Dictionary::PathMatch;
@@ -528,7 +516,7 @@ TEST_F(SdchManagerTest, CanUseMultipleManagers) {
EXPECT_EQ(SDCH_OK, problem_code);
second_manager.AddSdchDictionary(
- dictionary_text_2, GURL("http://" + dictionary_domain_2));
+ dictionary_text_2, GURL("http://" + dictionary_domain_2), nullptr);
dict_set = second_manager.GetDictionarySetByHash(
GURL("http://" + dictionary_domain_2 + "/random_url"),
server_hash_2, &problem_code);
@@ -666,6 +654,38 @@ TEST_F(SdchManagerTest, SdchOnByDefault) {
EXPECT_EQ(SDCH_DISABLED, sdch_manager->IsInSupportedDomain(google_url));
}
+// Confirm dispatch of notification.
+TEST_F(SdchManagerTest, SdchDictionaryUsed) {
+ MockSdchObserver observer;
+ sdch_manager()->AddObserver(&observer);
+
+ EXPECT_EQ(0, observer.dictionary_used_notifications());
+ sdch_manager()->OnDictionaryUsed("xyzzy");
+ EXPECT_EQ(1, observer.dictionary_used_notifications());
+ EXPECT_EQ("xyzzy", observer.last_server_hash());
+
+ std::string dictionary_domain("x.y.z.google.com");
+ GURL target_gurl("http://" + dictionary_domain);
+ std::string dictionary_text(NewSdchDictionary(dictionary_domain));
+ std::string client_hash;
+ std::string server_hash;
+ SdchManager::GenerateHash(dictionary_text, &client_hash, &server_hash);
+ EXPECT_TRUE(AddSdchDictionary(dictionary_text, target_gurl));
+ EXPECT_EQ("xyzzy", observer.last_server_hash());
+ EXPECT_EQ(1, observer.dictionary_used_notifications());
+
+ EXPECT_TRUE(sdch_manager()->GetDictionarySet(target_gurl));
+ EXPECT_EQ("xyzzy", observer.last_server_hash());
+ EXPECT_EQ(1, observer.dictionary_used_notifications());
+
+ sdch_manager()->RemoveObserver(&observer);
+ EXPECT_EQ(1, observer.dictionary_used_notifications());
+ EXPECT_EQ("xyzzy", observer.last_server_hash());
+ sdch_manager()->OnDictionaryUsed("plugh");
+ EXPECT_EQ(1, observer.dictionary_used_notifications());
+ EXPECT_EQ("xyzzy", observer.last_server_hash());
+}
+
#else
TEST(SdchManagerTest, SdchOffByDefault) {

Powered by Google App Engine
This is Rietveld 408576698