@@ -27,24 +27,64 @@ var _ = Describe("Encoder", func() {
2727 return
2828 }
2929
30- It ("encodes" , func () {
30+ checkHeaderField := func (data []byte , hf HeaderField ) []byte {
31+ Expect (data [0 ] & (0x80 ^ 0x40 ^ 0x20 )).To (Equal (uint8 (0x20 ))) // 001xxxxx
32+ Expect (data [0 ] & 0x8 ).To (BeZero ()) // no Huffman encoding
33+ nameLen , data , err := readVarInt (3 , data )
34+ 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 ):]
42+ }
43+
44+ It ("encodes a single field" , func () {
3145 hf := HeaderField {Name : "foobar" , Value : "lorem ipsum" }
3246 Expect (encoder .WriteField (hf )).To (Succeed ())
3347
3448 data , requiredInsertCount , deltaBase := readPrefix (output .Bytes ())
3549 Expect (requiredInsertCount ).To (BeZero ())
3650 Expect (deltaBase ).To (BeZero ())
3751
38- Expect (data [0 ] & (0x80 ^ 0x40 ^ 0x20 )).To (Equal (uint8 (0x20 ))) // 001xxxxx
39- Expect (data [0 ] & 0x8 ).To (BeZero ()) // no Huffman encoding
40- nameLen , data , err := readVarInt (3 , data )
41- Expect (err ).ToNot (HaveOccurred ())
42- Expect (nameLen ).To (BeEquivalentTo (6 ))
43- Expect (string (data [:6 ])).To (Equal ("foobar" ))
44- valueLen , data , err := readVarInt (7 , data [6 :])
45- Expect (err ).ToNot (HaveOccurred ())
46- Expect (valueLen ).To (BeEquivalentTo (11 ))
47- Expect (string (data [:11 ])).To (Equal ("lorem ipsum" ))
48- Expect (data [11 :]).To (BeEmpty ())
52+ data = checkHeaderField (data , hf )
53+ Expect (data ).To (BeEmpty ())
54+ })
55+
56+ It ("encodes multipe fields" , func () {
57+ hf1 := HeaderField {Name : "foobar" , Value : "lorem ipsum" }
58+ hf2 := HeaderField {Name : "raboof" , Value : "dolor sit amet" }
59+ Expect (encoder .WriteField (hf1 )).To (Succeed ())
60+ Expect (encoder .WriteField (hf2 )).To (Succeed ())
61+
62+ data , requiredInsertCount , deltaBase := readPrefix (output .Bytes ())
63+ Expect (requiredInsertCount ).To (BeZero ())
64+ Expect (deltaBase ).To (BeZero ())
65+
66+ data = checkHeaderField (data , hf1 )
67+ data = checkHeaderField (data , hf2 )
68+ Expect (data ).To (BeEmpty ())
69+ })
70+
71+ It ("encodes multiple requests" , func () {
72+ hf1 := HeaderField {Name : "foobar" , Value : "lorem ipsum" }
73+ Expect (encoder .WriteField (hf1 )).To (Succeed ())
74+ data , requiredInsertCount , deltaBase := readPrefix (output .Bytes ())
75+ Expect (requiredInsertCount ).To (BeZero ())
76+ Expect (deltaBase ).To (BeZero ())
77+ data = checkHeaderField (data , hf1 )
78+ Expect (data ).To (BeEmpty ())
79+
80+ output .Reset ()
81+ Expect (encoder .Close ())
82+ hf2 := HeaderField {Name : "raboof" , Value : "dolor sit amet" }
83+ Expect (encoder .WriteField (hf2 )).To (Succeed ())
84+ data , requiredInsertCount , deltaBase = readPrefix (output .Bytes ())
85+ Expect (requiredInsertCount ).To (BeZero ())
86+ Expect (deltaBase ).To (BeZero ())
87+ data = checkHeaderField (data , hf2 )
88+ Expect (data ).To (BeEmpty ())
4989 })
5090})
0 commit comments