Fix WebSocket close
This commit is contained in:
parent
70b3dbf548
commit
fc574ac209
|
@ -66,6 +66,7 @@ func (c *WSClient) streamingWS(ctx context.Context, stream, tag string) (chan Ev
|
||||||
|
|
||||||
q := make(chan Event)
|
q := make(chan Event)
|
||||||
go func() {
|
go func() {
|
||||||
|
defer close(q)
|
||||||
for {
|
for {
|
||||||
err := c.handleWS(ctx, u.String(), q)
|
err := c.handleWS(ctx, u.String(), q)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -85,7 +86,12 @@ func (c *WSClient) handleWS(ctx context.Context, rawurl string, q chan Event) er
|
||||||
// End.
|
// End.
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer conn.Close()
|
|
||||||
|
// Close the WebSocket when the context is canceled.
|
||||||
|
go func() {
|
||||||
|
<-ctx.Done()
|
||||||
|
conn.Close()
|
||||||
|
}()
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
|
|
|
@ -106,13 +106,12 @@ func wsMock(w http.ResponseWriter, r *http.Request) {
|
||||||
func wsTest(t *testing.T, q chan Event, cancel func()) {
|
func wsTest(t *testing.T, q chan Event, cancel func()) {
|
||||||
time.AfterFunc(time.Second, func() {
|
time.AfterFunc(time.Second, func() {
|
||||||
cancel()
|
cancel()
|
||||||
close(q)
|
|
||||||
})
|
})
|
||||||
events := []Event{}
|
events := []Event{}
|
||||||
for e := range q {
|
for e := range q {
|
||||||
events = append(events, e)
|
events = append(events, e)
|
||||||
}
|
}
|
||||||
if len(events) != 4 {
|
if len(events) != 6 {
|
||||||
t.Fatalf("result should be four: %d", len(events))
|
t.Fatalf("result should be four: %d", len(events))
|
||||||
}
|
}
|
||||||
if events[0].(*UpdateEvent).Status.Content != "foo" {
|
if events[0].(*UpdateEvent).Status.Content != "foo" {
|
||||||
|
@ -127,6 +126,12 @@ func wsTest(t *testing.T, q chan Event, cancel func()) {
|
||||||
if errorEvent, ok := events[3].(*ErrorEvent); !ok {
|
if errorEvent, ok := events[3].(*ErrorEvent); !ok {
|
||||||
t.Fatalf("should be fail: %v", errorEvent.err)
|
t.Fatalf("should be fail: %v", errorEvent.err)
|
||||||
}
|
}
|
||||||
|
if errorEvent, ok := events[4].(*ErrorEvent); !ok {
|
||||||
|
t.Fatalf("should be fail: %v", errorEvent.err)
|
||||||
|
}
|
||||||
|
if errorEvent, ok := events[5].(*ErrorEvent); !ok {
|
||||||
|
t.Fatalf("should be fail: %v", errorEvent.err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestStreamingWS(t *testing.T) {
|
func TestStreamingWS(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user