Close session on write error
This commit is contained in:
+11
-5
@@ -6,6 +6,7 @@ import (
|
|||||||
"math/rand"
|
"math/rand"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
@@ -469,7 +470,8 @@ func TestHandleError(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestHandleErrorWrite(t *testing.T) {
|
func TestHandleErrorWrite(t *testing.T) {
|
||||||
done := make(chan bool)
|
writeError := make(chan struct{})
|
||||||
|
disconnect := make(chan struct{})
|
||||||
|
|
||||||
ws := NewTestServer()
|
ws := NewTestServer()
|
||||||
ws.m.Config.WriteWait = 0
|
ws.m.Config.WriteWait = 0
|
||||||
@@ -482,12 +484,15 @@ func TestHandleErrorWrite(t *testing.T) {
|
|||||||
ws.m.HandleError(func(s *Session, err error) {
|
ws.m.HandleError(func(s *Session, err error) {
|
||||||
assert.NotNil(t, err)
|
assert.NotNil(t, err)
|
||||||
|
|
||||||
var closeError *websocket.CloseError
|
if os.IsTimeout(err) {
|
||||||
if !errors.As(err, &closeError) {
|
close(writeError)
|
||||||
close(done)
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
ws.m.HandleDisconnect(func(s *Session) {
|
||||||
|
close(disconnect)
|
||||||
|
})
|
||||||
|
|
||||||
server := httptest.NewServer(ws)
|
server := httptest.NewServer(ws)
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
|
|
||||||
@@ -496,7 +501,8 @@ func TestHandleErrorWrite(t *testing.T) {
|
|||||||
|
|
||||||
go conn.NextReader()
|
go conn.NextReader()
|
||||||
|
|
||||||
<-done
|
<-writeError
|
||||||
|
<-disconnect
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestErrClosed(t *testing.T) {
|
func TestErrClosed(t *testing.T) {
|
||||||
|
|||||||
@@ -105,6 +105,8 @@ loop:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
s.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Session) readPump() {
|
func (s *Session) readPump() {
|
||||||
|
|||||||
Reference in New Issue
Block a user