|
1 | 1 | package qpack |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "bytes" |
| 5 | + |
4 | 6 | . "github.com/onsi/ginkgo" |
5 | 7 | . "github.com/onsi/gomega" |
6 | 8 | "golang.org/x/net/http2/hpack" |
@@ -175,4 +177,50 @@ var _ = Describe("Decoder", func() { |
175 | 177 | doPartialWrites(data) |
176 | 178 | }) |
177 | 179 | }) |
| 180 | + |
| 181 | + Context("using DecodeFull", func() { |
| 182 | + It("decodes nothing", func() { |
| 183 | + data, err := NewDecoder(nil).DecodeFull([]byte{}) |
| 184 | + Expect(err).ToNot(HaveOccurred()) |
| 185 | + Expect(data).To(BeEmpty()) |
| 186 | + }) |
| 187 | + |
| 188 | + It("decodes multiple entries", func() { |
| 189 | + buf := &bytes.Buffer{} |
| 190 | + enc := NewEncoder(buf) |
| 191 | + Expect(enc.WriteField(HeaderField{Name: "foo", Value: "bar"})).To(Succeed()) |
| 192 | + Expect(enc.WriteField(HeaderField{Name: "lorem", Value: "ipsum"})).To(Succeed()) |
| 193 | + data, err := NewDecoder(nil).DecodeFull(buf.Bytes()) |
| 194 | + Expect(err).ToNot(HaveOccurred()) |
| 195 | + Expect(data).To(Equal([]HeaderField{ |
| 196 | + {Name: "foo", Value: "bar"}, |
| 197 | + {Name: "lorem", Value: "ipsum"}, |
| 198 | + })) |
| 199 | + }) |
| 200 | + |
| 201 | + It("returns an error if the data is incomplete", func() { |
| 202 | + buf := &bytes.Buffer{} |
| 203 | + enc := NewEncoder(buf) |
| 204 | + Expect(enc.WriteField(HeaderField{Name: "foo", Value: "bar"})).To(Succeed()) |
| 205 | + _, err := NewDecoder(nil).DecodeFull(buf.Bytes()[:buf.Len()-2]) |
| 206 | + Expect(err).To(MatchError("decoding error: truncated headers")) |
| 207 | + }) |
| 208 | + |
| 209 | + It("restores the emitFunc afterwards", func() { |
| 210 | + var emitFuncCalled bool |
| 211 | + emitFunc := func(HeaderField) { |
| 212 | + emitFuncCalled = true |
| 213 | + } |
| 214 | + decoder := NewDecoder(emitFunc) |
| 215 | + buf := &bytes.Buffer{} |
| 216 | + enc := NewEncoder(buf) |
| 217 | + Expect(enc.WriteField(HeaderField{Name: "foo", Value: "bar"})).To(Succeed()) |
| 218 | + _, err := decoder.DecodeFull(buf.Bytes()) |
| 219 | + Expect(err).ToNot(HaveOccurred()) |
| 220 | + Expect(emitFuncCalled).To(BeFalse()) |
| 221 | + _, err = decoder.Write(buf.Bytes()) |
| 222 | + Expect(err).ToNot(HaveOccurred()) |
| 223 | + Expect(emitFuncCalled).To(BeTrue()) |
| 224 | + }) |
| 225 | + }) |
178 | 226 | }) |
0 commit comments