Skip to content
This repository was archived by the owner on Dec 7, 2019. It is now read-only.

Commit be2992b

Browse files
committed
add reset to stream interface
1 parent 829afa0 commit be2992b

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

muxer.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ type Stream interface {
1212
io.Writer
1313
io.Closer
1414

15+
Reset() error
16+
1517
SetDeadline(time.Time) error
1618
SetReadDeadline(time.Time) error
1719
SetWriteDeadline(time.Time) error

test/ttest.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,47 @@ func SubtestStreamOpenStress(t *testing.T, tr smux.Transport) {
354354
}
355355
}
356356

357+
func SubtestStreamReset(t *testing.T, tr smux.Transport) {
358+
a, b := tcpPipe(t)
359+
defer a.Close()
360+
defer b.Close()
361+
362+
done := make(chan struct{})
363+
go func() {
364+
muxa, err := tr.NewConn(a, true)
365+
if err != nil {
366+
panic(err)
367+
}
368+
369+
s, err := muxa.OpenStream()
370+
if err != nil {
371+
panic(err)
372+
}
373+
time.Sleep(time.Millisecond * 50)
374+
375+
_, err = s.Write([]byte("foo"))
376+
if err == nil {
377+
t.Error("should have failed to write")
378+
}
379+
380+
s.Close()
381+
done <- struct{}{}
382+
}()
383+
384+
muxb, err := tr.NewConn(b, false)
385+
if err != nil {
386+
t.Fatal(err)
387+
}
388+
389+
go muxb.Serve(func(s smux.Stream) {
390+
s.Reset()
391+
done <- struct{}{}
392+
})
393+
394+
<-done
395+
<-done
396+
}
397+
357398
func SubtestStress1Conn1Stream1Msg(t *testing.T, tr smux.Transport) {
358399
SubtestStress(t, Options{
359400
tr: tr,
@@ -431,6 +472,7 @@ func SubtestAll(t *testing.T, tr smux.Transport) {
431472
SubtestStress1Conn1000Stream10Msg,
432473
SubtestStress1Conn100Stream100Msg10MB,
433474
SubtestStreamOpenStress,
475+
SubtestStreamReset,
434476
}
435477

436478
for _, f := range tests {

0 commit comments

Comments
 (0)