add CloseRemote method to stream

ref #109
This commit is contained in:
Lucas Clemente
2016-05-18 13:01:44 +02:00
parent ceb5ef48c4
commit b185ea04e1
5 changed files with 22 additions and 8 deletions

View File

@@ -14,9 +14,9 @@ type mockStream struct {
bytes.Buffer
}
func (mockStream) Close() error { return nil }
func (s mockStream) StreamID() protocol.StreamID { return s.id }
func (mockStream) Close() error { return nil }
func (mockStream) CloseRemote(offset protocol.ByteCount) { panic("not implemented") }
func (s mockStream) StreamID() protocol.StreamID { return s.id }
var _ = Describe("Response Writer", func() {
var (

View File

@@ -88,11 +88,9 @@ func (s *mockStream) Write(p []byte) (int, error) {
return s.dataWritten.Write(p)
}
func (s *mockStream) Close() error {
panic("not implemented")
}
func (s mockStream) StreamID() protocol.StreamID { panic("not implemented") }
func (s *mockStream) Close() error { panic("not implemented") }
func (mockStream) CloseRemote(offset protocol.ByteCount) { panic("not implemented") }
func (s mockStream) StreamID() protocol.StreamID { panic("not implemented") }
var _ = Describe("Crypto setup", func() {
var (

View File

@@ -254,6 +254,11 @@ func (s *stream) AddStreamFrame(frame *frames.StreamFrame) error {
return nil
}
// CloseRemote makes the stream receive a "virtual" FIN stream frame at a given offset
func (s *stream) CloseRemote(offset protocol.ByteCount) {
s.AddStreamFrame(&frames.StreamFrame{FinBit: true, Offset: offset})
}
func (s *stream) maybeTriggerWindowUpdate() {
// check for stream level window updates
doUpdate, byteOffset := s.flowController.MaybeTriggerWindowUpdate()

View File

@@ -655,5 +655,15 @@ var _ = Describe("Stream", func() {
Expect(err).To(MatchError(testErr))
})
})
Context("when CloseRemote is called", func() {
It("closes", func() {
str.CloseRemote(0)
b := make([]byte, 8)
n, err := str.Read(b)
Expect(n).To(BeZero())
Expect(err).To(MatchError(io.EOF))
})
})
})
})

View File

@@ -21,6 +21,7 @@ type Stream interface {
io.Writer
io.Closer
StreamID() protocol.StreamID
CloseRemote(offset protocol.ByteCount)
}
// ReadUintN reads N bytes