|
|
@@ -113,8 +113,9 @@ func TestStaticTable(t *testing.T) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func TestHeaderTableAt(t *testing.T) {
|
|
|
+func TestDynamicTableAt(t *testing.T) {
|
|
|
var dt dynamicTable
|
|
|
+ dt.setMaxSize(4 << 10)
|
|
|
if got, want := dt.at(2), (HeaderField{":method", "GET"}); got != want {
|
|
|
t.Errorf("at(2) = %q; want %q", got, want)
|
|
|
}
|
|
|
@@ -131,6 +132,33 @@ func TestHeaderTableAt(t *testing.T) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+func TestDynamicTableSizeEvict(t *testing.T) {
|
|
|
+ var dt dynamicTable
|
|
|
+ dt.setMaxSize(4 << 10)
|
|
|
+ if want := uint32(0); dt.size != want {
|
|
|
+ t.Fatalf("size = %d; want %d", dt.size, want)
|
|
|
+ }
|
|
|
+ dt.add(HeaderField{"blake", "eats pizza"})
|
|
|
+ if want := uint32(15 + 32); dt.size != want {
|
|
|
+ t.Fatalf("after pizza, size = %d; want %d", dt.size, want)
|
|
|
+ }
|
|
|
+ dt.add(HeaderField{"foo", "bar"})
|
|
|
+ if want := uint32(15 + 32 + 6 + 32); dt.size != want {
|
|
|
+ t.Fatalf("after foo bar, size = %d; want %d", dt.size, want)
|
|
|
+ }
|
|
|
+ dt.setMaxSize(15 + 32 + 1 /* slop */)
|
|
|
+ if want := uint32(6 + 32); dt.size != want {
|
|
|
+ t.Fatalf("after setMaxSize, size = %d; want %d", dt.size, want)
|
|
|
+ }
|
|
|
+ if got, want := dt.at(len(staticTable)+1), (HeaderField{"foo", "bar"}); got != want {
|
|
|
+ t.Errorf("at(dyn 1) = %q; want %q", got, want)
|
|
|
+ }
|
|
|
+ dt.add(HeaderField{"long", strings.Repeat("x", 500)})
|
|
|
+ if want := uint32(0); dt.size != want {
|
|
|
+ t.Fatalf("after big one, size = %d; want %d", dt.size, want)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
func TestHuffmanDecode(t *testing.T) {
|
|
|
tests := []struct {
|
|
|
inHex, want string
|