@@ -3,6 +3,8 @@ package qpack
3
3
import (
4
4
"bytes"
5
5
6
+ "golang.org/x/net/http2/hpack"
7
+
6
8
. "github.com/onsi/ginkgo"
7
9
. "github.com/onsi/gomega"
8
10
)
@@ -29,41 +31,42 @@ var _ = Describe("Encoder", func() {
29
31
30
32
checkHeaderField := func (data []byte , hf HeaderField ) []byte {
31
33
Expect (data [0 ] & (0x80 ^ 0x40 ^ 0x20 )).To (Equal (uint8 (0x20 ))) // 001xxxxx
32
- Expect (data [0 ] & 0x8 ).To (BeZero ()) // no Huffman encoding
34
+ Expect (data [0 ] & 0x8 ).ToNot (BeZero ()) // Huffman encoding
33
35
nameLen , data , err := readVarInt (3 , data )
34
36
Expect (err ).ToNot (HaveOccurred ())
35
- Expect (nameLen ).To (BeEquivalentTo (len (hf .Name )))
36
- Expect (string (data [:len (hf .Name )])).To (Equal (hf .Name ))
37
- valueLen , data , err := readVarInt (7 , data [len (hf .Name ):])
38
- Expect (err ).ToNot (HaveOccurred ())
39
- Expect (valueLen ).To (BeEquivalentTo (len (hf .Value )))
40
- Expect (string (data [:len (hf .Value )])).To (Equal (hf .Value ))
41
- return data [len (hf .Value ):]
37
+ l := hpack .HuffmanEncodeLength (hf .Name )
38
+ Expect (nameLen ).To (BeEquivalentTo (l ))
39
+ Expect (hpack .HuffmanDecodeToString (data [:l ])).To (Equal (hf .Name ))
40
+ valueLen , data , err := readVarInt (7 , data [l :])
41
+ l = hpack .HuffmanEncodeLength (hf .Value )
42
+ Expect (valueLen ).To (BeEquivalentTo (l ))
43
+ Expect (hpack .HuffmanDecodeToString (data [:l ])).To (Equal (hf .Value ))
44
+ return data [l :]
42
45
}
43
46
44
- // Reads one indexed field line representation from data and verifies it
45
- // matches expected_hf.
47
+ // Reads one indexed field line representation from data and verifies it matches hf.
46
48
// Returns the leftover bytes from data.
47
- checkIndexedHeaderField := func (data []byte , expected_hf HeaderField ) []byte {
49
+ checkIndexedHeaderField := func (data []byte , hf HeaderField ) []byte {
48
50
Expect (data [0 ] >> 7 ).To (Equal (uint8 (1 ))) // 1Txxxxxx
49
51
index , data , err := readVarInt (6 , data )
50
52
Expect (err ).ToNot (HaveOccurred ())
51
- Expect (staticTableEntries [index ]).To (Equal (expected_hf ))
53
+ Expect (staticTableEntries [index ]).To (Equal (hf ))
52
54
return data
53
55
}
54
56
55
- checkHeaderFieldWithNameRef := func (data []byte , expected_hf HeaderField ) []byte {
57
+ checkHeaderFieldWithNameRef := func (data []byte , hf HeaderField ) []byte {
56
58
// read name reference
57
59
Expect (data [0 ] >> 6 ).To (Equal (uint8 (1 ))) // 01NTxxxx
58
60
index , data , err := readVarInt (4 , data )
59
61
Expect (err ).ToNot (HaveOccurred ())
60
- Expect (staticTableEntries [index ].Name ).To (Equal (expected_hf .Name ))
62
+ Expect (staticTableEntries [index ].Name ).To (Equal (hf .Name ))
61
63
// read literal value
62
64
valueLen , data , err := readVarInt (7 , data )
63
65
Expect (err ).ToNot (HaveOccurred ())
64
- Expect (valueLen ).To (BeEquivalentTo (len (expected_hf .Value )))
65
- Expect (string (data [:len (expected_hf .Value )])).To (Equal (expected_hf .Value ))
66
- return data [len (expected_hf .Value ):]
66
+ l := hpack .HuffmanEncodeLength (hf .Value )
67
+ Expect (valueLen ).To (BeEquivalentTo (l ))
68
+ Expect (hpack .HuffmanDecodeToString (data [:l ])).To (Equal (hf .Value ))
69
+ return data [l :]
67
70
}
68
71
69
72
It ("encodes a single field" , func () {
0 commit comments