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

Side by Side Diff: net/base/sdch_manager_unittest.cc

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <limits.h> 5 #include <limits.h>
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "net/base/sdch_manager.h" 11 #include "net/base/sdch_manager.h"
12 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 13
14 namespace net { 14 namespace net {
15 15
16 //------------------------------------------------------------------------------ 16 //------------------------------------------------------------------------------
17 // Provide sample data and compression results with a sample VCDIFF dictionary. 17 // Provide sample data and compression results with a sample VCDIFF dictionary.
18 // Note an SDCH dictionary has extra meta-data before the VCDIFF dictionary. 18 // Note an SDCH dictionary has extra meta-data before the VCDIFF dictionary.
19 static const char kTestVcdiffDictionary[] = "DictionaryFor" 19 static const char kTestVcdiffDictionary[] =
20 "DictionaryFor"
20 "SdchCompression1SdchCompression2SdchCompression3SdchCompression\n"; 21 "SdchCompression1SdchCompression2SdchCompression3SdchCompression\n";
21 22
22 //------------------------------------------------------------------------------ 23 //------------------------------------------------------------------------------
23 24
24 class SdchManagerTest : public testing::Test { 25 class SdchManagerTest : public testing::Test {
25 protected: 26 protected:
26 SdchManagerTest() 27 SdchManagerTest() : sdch_manager_(new SdchManager) {}
27 : sdch_manager_(new SdchManager) {
28 }
29 28
30 scoped_ptr<SdchManager> sdch_manager_; // A singleton database. 29 scoped_ptr<SdchManager> sdch_manager_; // A singleton database.
31 }; 30 };
32 31
33 //------------------------------------------------------------------------------ 32 //------------------------------------------------------------------------------
34 static std::string NewSdchDictionary(const std::string& domain) { 33 static std::string NewSdchDictionary(const std::string& domain) {
35 std::string dictionary; 34 std::string dictionary;
36 if (!domain.empty()) { 35 if (!domain.empty()) {
37 dictionary.append("Domain: "); 36 dictionary.append("Domain: ");
38 dictionary.append(domain); 37 dictionary.append(domain);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 if (exponential < 0) 123 if (exponential < 0)
125 exponential = INT_MAX; // We don't wrap. 124 exponential = INT_MAX; // We don't wrap.
126 } 125 }
127 } 126 }
128 127
129 TEST_F(SdchManagerTest, CanSetExactMatchDictionary) { 128 TEST_F(SdchManagerTest, CanSetExactMatchDictionary) {
130 std::string dictionary_domain("x.y.z.google.com"); 129 std::string dictionary_domain("x.y.z.google.com");
131 std::string dictionary_text(NewSdchDictionary(dictionary_domain)); 130 std::string dictionary_text(NewSdchDictionary(dictionary_domain));
132 131
133 // Perfect match should work. 132 // Perfect match should work.
134 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary_text, 133 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(
135 GURL("http://" + dictionary_domain))); 134 dictionary_text, GURL("http://" + dictionary_domain)));
136 } 135 }
137 136
138 TEST_F(SdchManagerTest, CanAdvertiseDictionaryOverHTTP) { 137 TEST_F(SdchManagerTest, CanAdvertiseDictionaryOverHTTP) {
139 std::string dictionary_domain("x.y.z.google.com"); 138 std::string dictionary_domain("x.y.z.google.com");
140 std::string dictionary_text(NewSdchDictionary(dictionary_domain)); 139 std::string dictionary_text(NewSdchDictionary(dictionary_domain));
141 140
142 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary_text, 141 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(
143 GURL("http://" + dictionary_domain))); 142 dictionary_text, GURL("http://" + dictionary_domain)));
144 143
145 std::string dictionary_list; 144 std::string dictionary_list;
146 // HTTP target URL can advertise dictionary. 145 // HTTP target URL can advertise dictionary.
147 sdch_manager_->GetAvailDictionaryList( 146 sdch_manager_->GetAvailDictionaryList(
148 GURL("http://" + dictionary_domain + "/test"), 147 GURL("http://" + dictionary_domain + "/test"), &dictionary_list);
149 &dictionary_list);
150 EXPECT_FALSE(dictionary_list.empty()); 148 EXPECT_FALSE(dictionary_list.empty());
151 } 149 }
152 150
153 TEST_F(SdchManagerTest, CanNotAdvertiseDictionaryOverHTTPS) { 151 TEST_F(SdchManagerTest, CanNotAdvertiseDictionaryOverHTTPS) {
154 std::string dictionary_domain("x.y.z.google.com"); 152 std::string dictionary_domain("x.y.z.google.com");
155 std::string dictionary_text(NewSdchDictionary(dictionary_domain)); 153 std::string dictionary_text(NewSdchDictionary(dictionary_domain));
156 154
157 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary_text, 155 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(
158 GURL("http://" + dictionary_domain))); 156 dictionary_text, GURL("http://" + dictionary_domain)));
159 157
160 std::string dictionary_list; 158 std::string dictionary_list;
161 // HTTPS target URL should NOT advertise dictionary. 159 // HTTPS target URL should NOT advertise dictionary.
162 sdch_manager_->GetAvailDictionaryList( 160 sdch_manager_->GetAvailDictionaryList(
163 GURL("https://" + dictionary_domain + "/test"), 161 GURL("https://" + dictionary_domain + "/test"), &dictionary_list);
164 &dictionary_list);
165 EXPECT_TRUE(dictionary_list.empty()); 162 EXPECT_TRUE(dictionary_list.empty());
166 } 163 }
167 164
168 TEST_F(SdchManagerTest, CanUseHTTPSDictionaryOverHTTPSIfEnabled) { 165 TEST_F(SdchManagerTest, CanUseHTTPSDictionaryOverHTTPSIfEnabled) {
169 std::string dictionary_domain("x.y.z.google.com"); 166 std::string dictionary_domain("x.y.z.google.com");
170 std::string dictionary_text(NewSdchDictionary(dictionary_domain)); 167 std::string dictionary_text(NewSdchDictionary(dictionary_domain));
171 168
172 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary_text, 169 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(
173 GURL("https://" + dictionary_domain))); 170 dictionary_text, GURL("https://" + dictionary_domain)));
174 171
175 GURL target_url("https://" + dictionary_domain + "/test"); 172 GURL target_url("https://" + dictionary_domain + "/test");
176 std::string dictionary_list; 173 std::string dictionary_list;
177 // HTTPS target URL should advertise dictionary if secure scheme support is 174 // HTTPS target URL should advertise dictionary if secure scheme support is
178 // enabled. 175 // enabled.
179 sdch_manager_->EnableSecureSchemeSupport(true); 176 sdch_manager_->EnableSecureSchemeSupport(true);
180 sdch_manager_->GetAvailDictionaryList(target_url, &dictionary_list); 177 sdch_manager_->GetAvailDictionaryList(target_url, &dictionary_list);
181 EXPECT_FALSE(dictionary_list.empty()); 178 EXPECT_FALSE(dictionary_list.empty());
182 179
183 // Dictionary should be available. 180 // Dictionary should be available.
184 SdchManager::Dictionary* dictionary = NULL; 181 SdchManager::Dictionary* dictionary = NULL;
185 std::string client_hash; 182 std::string client_hash;
186 std::string server_hash; 183 std::string server_hash;
187 sdch_manager_->GenerateHash(dictionary_text, &client_hash, &server_hash); 184 sdch_manager_->GenerateHash(dictionary_text, &client_hash, &server_hash);
188 sdch_manager_->GetVcdiffDictionary(server_hash, target_url, &dictionary); 185 sdch_manager_->GetVcdiffDictionary(server_hash, target_url, &dictionary);
189 EXPECT_TRUE(dictionary != NULL); 186 EXPECT_TRUE(dictionary != NULL);
190 } 187 }
191 188
192 TEST_F(SdchManagerTest, CanNotUseHTTPDictionaryOverHTTPS) { 189 TEST_F(SdchManagerTest, CanNotUseHTTPDictionaryOverHTTPS) {
193 std::string dictionary_domain("x.y.z.google.com"); 190 std::string dictionary_domain("x.y.z.google.com");
194 std::string dictionary_text(NewSdchDictionary(dictionary_domain)); 191 std::string dictionary_text(NewSdchDictionary(dictionary_domain));
195 192
196 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary_text, 193 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(
197 GURL("http://" + dictionary_domain))); 194 dictionary_text, GURL("http://" + dictionary_domain)));
198 195
199 GURL target_url("https://" + dictionary_domain + "/test"); 196 GURL target_url("https://" + dictionary_domain + "/test");
200 std::string dictionary_list; 197 std::string dictionary_list;
201 // HTTPS target URL should not advertise dictionary acquired over HTTP even if 198 // HTTPS target URL should not advertise dictionary acquired over HTTP even if
202 // secure scheme support is enabled. 199 // secure scheme support is enabled.
203 sdch_manager_->EnableSecureSchemeSupport(true); 200 sdch_manager_->EnableSecureSchemeSupport(true);
204 sdch_manager_->GetAvailDictionaryList(target_url, &dictionary_list); 201 sdch_manager_->GetAvailDictionaryList(target_url, &dictionary_list);
205 EXPECT_TRUE(dictionary_list.empty()); 202 EXPECT_TRUE(dictionary_list.empty());
206 203
207 SdchManager::Dictionary* dictionary = NULL; 204 SdchManager::Dictionary* dictionary = NULL;
208 std::string client_hash; 205 std::string client_hash;
209 std::string server_hash; 206 std::string server_hash;
210 sdch_manager_->GenerateHash(dictionary_text, &client_hash, &server_hash); 207 sdch_manager_->GenerateHash(dictionary_text, &client_hash, &server_hash);
211 sdch_manager_->GetVcdiffDictionary(server_hash, target_url, &dictionary); 208 sdch_manager_->GetVcdiffDictionary(server_hash, target_url, &dictionary);
212 EXPECT_TRUE(dictionary == NULL); 209 EXPECT_TRUE(dictionary == NULL);
213 } 210 }
214 211
215 TEST_F(SdchManagerTest, FailToSetDomainMismatchDictionary) { 212 TEST_F(SdchManagerTest, FailToSetDomainMismatchDictionary) {
216 std::string dictionary_domain("x.y.z.google.com"); 213 std::string dictionary_domain("x.y.z.google.com");
217 std::string dictionary_text(NewSdchDictionary(dictionary_domain)); 214 std::string dictionary_text(NewSdchDictionary(dictionary_domain));
218 215
219 // Fail the "domain match" requirement. 216 // Fail the "domain match" requirement.
220 EXPECT_FALSE(sdch_manager_->AddSdchDictionary(dictionary_text, 217 EXPECT_FALSE(sdch_manager_->AddSdchDictionary(dictionary_text,
221 GURL("http://y.z.google.com"))); 218 GURL("http://y.z.google.com")));
222 } 219 }
223 220
224 TEST_F(SdchManagerTest, FailToSetDotHostPrefixDomainDictionary) { 221 TEST_F(SdchManagerTest, FailToSetDotHostPrefixDomainDictionary) {
225 std::string dictionary_domain("x.y.z.google.com"); 222 std::string dictionary_domain("x.y.z.google.com");
226 std::string dictionary_text(NewSdchDictionary(dictionary_domain)); 223 std::string dictionary_text(NewSdchDictionary(dictionary_domain));
227 224
228 // Fail the HD with D being the domain and H having a dot requirement. 225 // Fail the HD with D being the domain and H having a dot requirement.
229 EXPECT_FALSE(sdch_manager_->AddSdchDictionary(dictionary_text, 226 EXPECT_FALSE(sdch_manager_->AddSdchDictionary(
230 GURL("http://w.x.y.z.google.com"))); 227 dictionary_text, GURL("http://w.x.y.z.google.com")));
231 } 228 }
232 229
233 TEST_F(SdchManagerTest, FailToSetRepeatPrefixWithDotDictionary) { 230 TEST_F(SdchManagerTest, FailToSetRepeatPrefixWithDotDictionary) {
234 // Make sure that a prefix that matches the domain postfix won't confuse 231 // Make sure that a prefix that matches the domain postfix won't confuse
235 // the validation checks. 232 // the validation checks.
236 std::string dictionary_domain("www.google.com"); 233 std::string dictionary_domain("www.google.com");
237 std::string dictionary_text(NewSdchDictionary(dictionary_domain)); 234 std::string dictionary_text(NewSdchDictionary(dictionary_domain));
238 235
239 // Fail the HD with D being the domain and H having a dot requirement. 236 // Fail the HD with D being the domain and H having a dot requirement.
240 EXPECT_FALSE(sdch_manager_->AddSdchDictionary(dictionary_text, 237 EXPECT_FALSE(sdch_manager_->AddSdchDictionary(
241 GURL("http://www.google.com.www.google.com"))); 238 dictionary_text, GURL("http://www.google.com.www.google.com")));
242 } 239 }
243 240
244 TEST_F(SdchManagerTest, CanSetLeadingDotDomainDictionary) { 241 TEST_F(SdchManagerTest, CanSetLeadingDotDomainDictionary) {
245 // Make sure that a prefix that matches the domain postfix won't confuse 242 // Make sure that a prefix that matches the domain postfix won't confuse
246 // the validation checks. 243 // the validation checks.
247 std::string dictionary_domain(".google.com"); 244 std::string dictionary_domain(".google.com");
248 std::string dictionary_text(NewSdchDictionary(dictionary_domain)); 245 std::string dictionary_text(NewSdchDictionary(dictionary_domain));
249 246
250 // Verify that a leading dot in the domain is acceptable, as long as the host 247 // Verify that a leading dot in the domain is acceptable, as long as the host
251 // name does not contain any dots preceding the matched domain name. 248 // name does not contain any dots preceding the matched domain name.
252 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary_text, 249 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary_text,
253 GURL("http://www.google.com"))); 250 GURL("http://www.google.com")));
254 } 251 }
255 252
256 // Make sure the order of the tests is not helping us or confusing things. 253 // Make sure the order of the tests is not helping us or confusing things.
257 // See test CanSetExactMatchDictionary above for first try. 254 // See test CanSetExactMatchDictionary above for first try.
258 TEST_F(SdchManagerTest, CanStillSetExactMatchDictionary) { 255 TEST_F(SdchManagerTest, CanStillSetExactMatchDictionary) {
259 std::string dictionary_domain("x.y.z.google.com"); 256 std::string dictionary_domain("x.y.z.google.com");
260 std::string dictionary_text(NewSdchDictionary(dictionary_domain)); 257 std::string dictionary_text(NewSdchDictionary(dictionary_domain));
261 258
262 // Perfect match should *STILL* work. 259 // Perfect match should *STILL* work.
263 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary_text, 260 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(
264 GURL("http://" + dictionary_domain))); 261 dictionary_text, GURL("http://" + dictionary_domain)));
265 } 262 }
266 263
267 // Make sure the DOS protection precludes the addition of too many dictionaries. 264 // Make sure the DOS protection precludes the addition of too many dictionaries.
268 TEST_F(SdchManagerTest, TooManyDictionaries) { 265 TEST_F(SdchManagerTest, TooManyDictionaries) {
269 std::string dictionary_domain(".google.com"); 266 std::string dictionary_domain(".google.com");
270 std::string dictionary_text(NewSdchDictionary(dictionary_domain)); 267 std::string dictionary_text(NewSdchDictionary(dictionary_domain));
271 268
272 size_t count = 0; 269 size_t count = 0;
273 while (count <= SdchManager::kMaxDictionaryCount + 1) { 270 while (count <= SdchManager::kMaxDictionaryCount + 1) {
274 if (!sdch_manager_->AddSdchDictionary(dictionary_text, 271 if (!sdch_manager_->AddSdchDictionary(dictionary_text,
275 GURL("http://www.google.com"))) 272 GURL("http://www.google.com")))
276 break; 273 break;
277 274
278 dictionary_text += " "; // Create dictionary with different SHA signature. 275 dictionary_text += " "; // Create dictionary with different SHA signature.
279 ++count; 276 ++count;
280 } 277 }
281 EXPECT_EQ(SdchManager::kMaxDictionaryCount, count); 278 EXPECT_EQ(SdchManager::kMaxDictionaryCount, count);
282 } 279 }
283 280
284 TEST_F(SdchManagerTest, DictionaryNotTooLarge) { 281 TEST_F(SdchManagerTest, DictionaryNotTooLarge) {
285 std::string dictionary_domain(".google.com"); 282 std::string dictionary_domain(".google.com");
286 std::string dictionary_text(NewSdchDictionary(dictionary_domain)); 283 std::string dictionary_text(NewSdchDictionary(dictionary_domain));
287 284
288 dictionary_text.append( 285 dictionary_text.append(
289 SdchManager::kMaxDictionarySize - dictionary_text.size(), ' '); 286 SdchManager::kMaxDictionarySize - dictionary_text.size(), ' ');
290 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary_text, 287 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(
291 GURL("http://" + dictionary_domain))); 288 dictionary_text, GURL("http://" + dictionary_domain)));
292 } 289 }
293 290
294 TEST_F(SdchManagerTest, DictionaryTooLarge) { 291 TEST_F(SdchManagerTest, DictionaryTooLarge) {
295 std::string dictionary_domain(".google.com"); 292 std::string dictionary_domain(".google.com");
296 std::string dictionary_text(NewSdchDictionary(dictionary_domain)); 293 std::string dictionary_text(NewSdchDictionary(dictionary_domain));
297 294
298 dictionary_text.append( 295 dictionary_text.append(
299 SdchManager::kMaxDictionarySize + 1 - dictionary_text.size(), ' '); 296 SdchManager::kMaxDictionarySize + 1 - dictionary_text.size(), ' ');
300 EXPECT_FALSE(sdch_manager_->AddSdchDictionary(dictionary_text, 297 EXPECT_FALSE(sdch_manager_->AddSdchDictionary(
301 GURL("http://" + dictionary_domain))); 298 dictionary_text, GURL("http://" + dictionary_domain)));
302 } 299 }
303 300
304 TEST_F(SdchManagerTest, PathMatch) { 301 TEST_F(SdchManagerTest, PathMatch) {
305 bool (*PathMatch)(const std::string& path, const std::string& restriction) = 302 bool (*PathMatch)(const std::string& path, const std::string& restriction) =
306 SdchManager::Dictionary::PathMatch; 303 SdchManager::Dictionary::PathMatch;
307 // Perfect match is supported. 304 // Perfect match is supported.
308 EXPECT_TRUE(PathMatch("/search", "/search")); 305 EXPECT_TRUE(PathMatch("/search", "/search"));
309 EXPECT_TRUE(PathMatch("/search/", "/search/")); 306 EXPECT_TRUE(PathMatch("/search/", "/search/"));
310 307
311 // Prefix only works if last character of restriction is a slash, or first 308 // Prefix only works if last character of restriction is a slash, or first
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 sdch_manager_->SetAllowLatencyExperiment(url, false); 361 sdch_manager_->SetAllowLatencyExperiment(url, false);
365 EXPECT_FALSE(sdch_manager_->AllowLatencyExperiment(url)); 362 EXPECT_FALSE(sdch_manager_->AllowLatencyExperiment(url));
366 EXPECT_TRUE(sdch_manager_->AllowLatencyExperiment(url2)); 363 EXPECT_TRUE(sdch_manager_->AllowLatencyExperiment(url2));
367 364
368 sdch_manager_->SetAllowLatencyExperiment(url2, false); 365 sdch_manager_->SetAllowLatencyExperiment(url2, false);
369 EXPECT_FALSE(sdch_manager_->AllowLatencyExperiment(url)); 366 EXPECT_FALSE(sdch_manager_->AllowLatencyExperiment(url));
370 EXPECT_FALSE(sdch_manager_->AllowLatencyExperiment(url2)); 367 EXPECT_FALSE(sdch_manager_->AllowLatencyExperiment(url2));
371 } 368 }
372 369
373 } // namespace net 370 } // namespace net
374
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698