OLD | NEW |
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 "net/spdy/hpack/hpack_header_table.h" | 5 #include "net/spdy/hpack/hpack_header_table.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <set> | 8 #include <set> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
252 EXPECT_EQ(entry2, | 252 EXPECT_EQ(entry2, |
253 table_.GetByNameAndValue(first_static_entry->name(), "Value Four")); | 253 table_.GetByNameAndValue(first_static_entry->name(), "Value Four")); |
254 | 254 |
255 // Evict |entry2|. Queries by its name & value are not found. | 255 // Evict |entry2|. Queries by its name & value are not found. |
256 peer_.Evict(1); | 256 peer_.Evict(1); |
257 EXPECT_EQ(NULL, | 257 EXPECT_EQ(NULL, |
258 table_.GetByNameAndValue(first_static_entry->name(), "Value Four")); | 258 table_.GetByNameAndValue(first_static_entry->name(), "Value Four")); |
259 } | 259 } |
260 | 260 |
261 TEST_F(HpackHeaderTableTest, SetSizes) { | 261 TEST_F(HpackHeaderTableTest, SetSizes) { |
262 FLAGS_chromium_reloadable_flag_increase_hpack_table_size = true; | |
263 string key = "key", value = "value"; | 262 string key = "key", value = "value"; |
264 const HpackEntry* entry1 = table_.TryAddEntry(key, value); | 263 const HpackEntry* entry1 = table_.TryAddEntry(key, value); |
265 const HpackEntry* entry2 = table_.TryAddEntry(key, value); | 264 const HpackEntry* entry2 = table_.TryAddEntry(key, value); |
266 const HpackEntry* entry3 = table_.TryAddEntry(key, value); | 265 const HpackEntry* entry3 = table_.TryAddEntry(key, value); |
267 | 266 |
268 // Set exactly large enough. No Evictions. | 267 // Set exactly large enough. No Evictions. |
269 size_t max_size = entry1->Size() + entry2->Size() + entry3->Size(); | 268 size_t max_size = entry1->Size() + entry2->Size() + entry3->Size(); |
270 table_.SetMaxSize(max_size); | 269 table_.SetMaxSize(max_size); |
271 EXPECT_EQ(3u, peer_.dynamic_entries().size()); | 270 EXPECT_EQ(3u, peer_.dynamic_entries().size()); |
272 | 271 |
(...skipping 11 matching lines...) Expand all Loading... |
284 | 283 |
285 // SETTINGS_HEADER_TABLE_SIZE upper-bounds |table_.max_size()|, | 284 // SETTINGS_HEADER_TABLE_SIZE upper-bounds |table_.max_size()|, |
286 // and will force evictions. | 285 // and will force evictions. |
287 max_size = entry3->Size() - 1; | 286 max_size = entry3->Size() - 1; |
288 table_.SetSettingsHeaderTableSize(max_size); | 287 table_.SetSettingsHeaderTableSize(max_size); |
289 EXPECT_EQ(max_size, table_.max_size()); | 288 EXPECT_EQ(max_size, table_.max_size()); |
290 EXPECT_EQ(max_size, table_.settings_size_bound()); | 289 EXPECT_EQ(max_size, table_.settings_size_bound()); |
291 EXPECT_EQ(0u, peer_.dynamic_entries().size()); | 290 EXPECT_EQ(0u, peer_.dynamic_entries().size()); |
292 } | 291 } |
293 | 292 |
294 TEST_F(HpackHeaderTableTest, SetSizesOld) { | |
295 FLAGS_chromium_reloadable_flag_increase_hpack_table_size = false; | |
296 | |
297 string key = "key", value = "value"; | |
298 const HpackEntry* entry1 = table_.TryAddEntry(key, value); | |
299 const HpackEntry* entry2 = table_.TryAddEntry(key, value); | |
300 const HpackEntry* entry3 = table_.TryAddEntry(key, value); | |
301 | |
302 // Set exactly large enough. No Evictions. | |
303 size_t max_size = entry1->Size() + entry2->Size() + entry3->Size(); | |
304 table_.SetMaxSize(max_size); | |
305 EXPECT_EQ(3u, peer_.dynamic_entries().size()); | |
306 | |
307 // Set just too small. One eviction. | |
308 max_size = entry1->Size() + entry2->Size() + entry3->Size() - 1; | |
309 table_.SetMaxSize(max_size); | |
310 EXPECT_EQ(2u, peer_.dynamic_entries().size()); | |
311 | |
312 // Changing SETTINGS_HEADER_TABLE_SIZE doesn't affect table_.max_size(), | |
313 // iff SETTINGS_HEADER_TABLE_SIZE >= |max_size|. | |
314 EXPECT_EQ(kDefaultHeaderTableSizeSetting, table_.settings_size_bound()); | |
315 table_.SetSettingsHeaderTableSize(kDefaultHeaderTableSizeSetting * 2); | |
316 EXPECT_EQ(max_size, table_.max_size()); | |
317 table_.SetSettingsHeaderTableSize(max_size + 1); | |
318 EXPECT_EQ(max_size, table_.max_size()); | |
319 EXPECT_EQ(2u, peer_.dynamic_entries().size()); | |
320 | |
321 // SETTINGS_HEADER_TABLE_SIZE upper-bounds |table_.max_size()|, | |
322 // and will force evictions. | |
323 max_size = entry3->Size() - 1; | |
324 table_.SetSettingsHeaderTableSize(max_size); | |
325 EXPECT_EQ(max_size, table_.max_size()); | |
326 EXPECT_EQ(max_size, table_.settings_size_bound()); | |
327 EXPECT_EQ(0u, peer_.dynamic_entries().size()); | |
328 } | |
329 | |
330 TEST_F(HpackHeaderTableTest, EvictionCountForEntry) { | 293 TEST_F(HpackHeaderTableTest, EvictionCountForEntry) { |
331 string key = "key", value = "value"; | 294 string key = "key", value = "value"; |
332 const HpackEntry* entry1 = table_.TryAddEntry(key, value); | 295 const HpackEntry* entry1 = table_.TryAddEntry(key, value); |
333 const HpackEntry* entry2 = table_.TryAddEntry(key, value); | 296 const HpackEntry* entry2 = table_.TryAddEntry(key, value); |
334 size_t entry3_size = HpackEntry::Size(key, value); | 297 size_t entry3_size = HpackEntry::Size(key, value); |
335 | 298 |
336 // Just enough capacity for third entry. | 299 // Just enough capacity for third entry. |
337 table_.SetMaxSize(entry1->Size() + entry2->Size() + entry3_size); | 300 table_.SetMaxSize(entry1->Size() + entry2->Size() + entry3_size); |
338 EXPECT_EQ(0u, peer_.EvictionCountForEntry(key, value)); | 301 EXPECT_EQ(0u, peer_.EvictionCountForEntry(key, value)); |
339 EXPECT_EQ(1u, peer_.EvictionCountForEntry(key, value + "x")); | 302 EXPECT_EQ(1u, peer_.EvictionCountForEntry(key, value + "x")); |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
477 HpackHeaderTable::EntryHasher hasher; | 440 HpackHeaderTable::EntryHasher hasher; |
478 EXPECT_EQ(hasher(&entry1), hasher(&entry2)); | 441 EXPECT_EQ(hasher(&entry1), hasher(&entry2)); |
479 | 442 |
480 HpackHeaderTable::EntriesEq eq; | 443 HpackHeaderTable::EntriesEq eq; |
481 EXPECT_TRUE(eq(&entry1, &entry2)); | 444 EXPECT_TRUE(eq(&entry1, &entry2)); |
482 } | 445 } |
483 | 446 |
484 } // namespace | 447 } // namespace |
485 | 448 |
486 } // namespace net | 449 } // namespace net |
OLD | NEW |