From ce01b5ed30af15609c7f28423515e49731c7af98 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Tue, 3 May 2016 14:04:01 +0700 Subject: [PATCH] implement BlockedFrame writing --- frames/blocked_frame.go | 12 ++++++++++-- frames/blocked_frame_test.go | 14 ++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/frames/blocked_frame.go b/frames/blocked_frame.go index a1a61a8c..a0ac1dd4 100644 --- a/frames/blocked_frame.go +++ b/frames/blocked_frame.go @@ -14,12 +14,20 @@ type BlockedFrame struct { //Write writes a RST_STREAM frame func (f *BlockedFrame) Write(b *bytes.Buffer, packetNumber protocol.PacketNumber, packetNumberLen uint8) error { - panic("BlockedFrame: Write not yet implemented") + b.WriteByte(0x05) + + if f.StreamID == 0 { + panic("Writing of connection level BlockedFrames not yet implemented.") + } + + utils.WriteUint32(b, uint32(f.StreamID)) + + return nil } // MinLength of a written frame func (f *BlockedFrame) MinLength() int { - panic("BlockedFrame: Write not yet implemented") + return 1 + 4 } // ParseBlockedFrame parses a BLOCKED frame diff --git a/frames/blocked_frame_test.go b/frames/blocked_frame_test.go index b068cc8a..bac38376 100644 --- a/frames/blocked_frame_test.go +++ b/frames/blocked_frame_test.go @@ -17,4 +17,18 @@ var _ = Describe("BlockedFrame", func() { Expect(frame.StreamID).To(Equal(protocol.StreamID(0xDEADBEEF))) }) }) + + Context("when writing", func() { + It("writes a sample frame", func() { + b := &bytes.Buffer{} + frame := BlockedFrame{StreamID: 0x1337} + frame.Write(b, 10, 6) + Expect(b.Bytes()).To(Equal([]byte{0x05, 0x37, 0x13, 0x0, 0x0})) + }) + + It("has the correct min length", func() { + frame := BlockedFrame{StreamID: 3} + Expect(frame.MinLength()).To(Equal(5)) + }) + }) })