Skip to content

Commit ef9faa0

Browse files
committed
test: move the Wasm NetConn read limit test to its own file
The fix-close-race-net-errclosed branch adds a test at the same place in ws_js_test.go, and the two insertions conflict on merge.
1 parent 880f112 commit ef9faa0

2 files changed

Lines changed: 70 additions & 59 deletions

File tree

‎netconn_js_test.go‎

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package websocket_test
2+
3+
import (
4+
"context"
5+
"io"
6+
"net"
7+
"os"
8+
"testing"
9+
"time"
10+
11+
"github.com/coder/websocket"
12+
"github.com/coder/websocket/internal/test/assert"
13+
"github.com/coder/websocket/internal/test/xrand"
14+
)
15+
16+
func TestWasmNetConnReadLimit(t *testing.T) {
17+
t.Parallel()
18+
19+
for _, tc := range []struct {
20+
name string
21+
netConn func(ctx context.Context, c *websocket.Conn) net.Conn
22+
msgSize int
23+
wantErr error
24+
}{
25+
{"Unset", func(ctx context.Context, c *websocket.Conn) net.Conn {
26+
return websocket.NetConn(ctx, c, websocket.MessageBinary)
27+
}, 65536, nil},
28+
{"DisabledBeforeNetConn", func(ctx context.Context, c *websocket.Conn) net.Conn {
29+
c.SetReadLimit(-1)
30+
return websocket.NetConn(ctx, c, websocket.MessageBinary)
31+
}, 65536, nil},
32+
{"BeforeNetConn", func(ctx context.Context, c *websocket.Conn) net.Conn {
33+
c.SetReadLimit(1024)
34+
return websocket.NetConn(ctx, c, websocket.MessageBinary)
35+
}, 4096, websocket.ErrMessageTooBig},
36+
{"AfterNetConn", func(ctx context.Context, c *websocket.Conn) net.Conn {
37+
nc := websocket.NetConn(ctx, c, websocket.MessageBinary)
38+
c.SetReadLimit(1024)
39+
return nc
40+
}, 4096, websocket.ErrMessageTooBig},
41+
} {
42+
t.Run(tc.name, func(t *testing.T) {
43+
t.Parallel()
44+
45+
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
46+
defer cancel()
47+
48+
c, _, err := websocket.Dial(ctx, os.Getenv("WS_ECHO_SERVER_URL"), &websocket.DialOptions{
49+
Subprotocols: []string{"echo"},
50+
})
51+
assert.Success(t, err)
52+
// The echo server expects StatusNormalClosure.
53+
defer c.Close(websocket.StatusNormalClosure, "")
54+
55+
nc := tc.netConn(ctx, c)
56+
msg := []byte(xrand.String(tc.msgSize))
57+
_, err = nc.Write(msg)
58+
assert.Success(t, err)
59+
60+
got := make([]byte, len(msg))
61+
_, err = io.ReadFull(nc, got)
62+
if tc.wantErr != nil {
63+
assert.ErrorIs(t, tc.wantErr, err)
64+
return
65+
}
66+
assert.Success(t, err)
67+
assert.Equal(t, "read msg", msg, got)
68+
})
69+
}
70+
}

‎ws_js_test.go‎

Lines changed: 0 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package websocket_test
22

33
import (
44
"context"
5-
"io"
6-
"net"
75
"net/http"
86
"os"
97
"testing"
@@ -12,7 +10,6 @@ import (
1210
"github.com/coder/websocket"
1311
"github.com/coder/websocket/internal/test/assert"
1412
"github.com/coder/websocket/internal/test/wstest"
15-
"github.com/coder/websocket/internal/test/xrand"
1613
)
1714

1815
func TestWasm(t *testing.T) {
@@ -40,62 +37,6 @@ func TestWasm(t *testing.T) {
4037
assert.Success(t, err)
4138
}
4239

43-
func TestWasmNetConnReadLimit(t *testing.T) {
44-
t.Parallel()
45-
46-
for _, tc := range []struct {
47-
name string
48-
netConn func(ctx context.Context, c *websocket.Conn) net.Conn
49-
msgSize int
50-
wantErr error
51-
}{
52-
{"Unset", func(ctx context.Context, c *websocket.Conn) net.Conn {
53-
return websocket.NetConn(ctx, c, websocket.MessageBinary)
54-
}, 65536, nil},
55-
{"DisabledBeforeNetConn", func(ctx context.Context, c *websocket.Conn) net.Conn {
56-
c.SetReadLimit(-1)
57-
return websocket.NetConn(ctx, c, websocket.MessageBinary)
58-
}, 65536, nil},
59-
{"BeforeNetConn", func(ctx context.Context, c *websocket.Conn) net.Conn {
60-
c.SetReadLimit(1024)
61-
return websocket.NetConn(ctx, c, websocket.MessageBinary)
62-
}, 4096, websocket.ErrMessageTooBig},
63-
{"AfterNetConn", func(ctx context.Context, c *websocket.Conn) net.Conn {
64-
nc := websocket.NetConn(ctx, c, websocket.MessageBinary)
65-
c.SetReadLimit(1024)
66-
return nc
67-
}, 4096, websocket.ErrMessageTooBig},
68-
} {
69-
t.Run(tc.name, func(t *testing.T) {
70-
t.Parallel()
71-
72-
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
73-
defer cancel()
74-
75-
c, _, err := websocket.Dial(ctx, os.Getenv("WS_ECHO_SERVER_URL"), &websocket.DialOptions{
76-
Subprotocols: []string{"echo"},
77-
})
78-
assert.Success(t, err)
79-
// The echo server expects StatusNormalClosure.
80-
defer c.Close(websocket.StatusNormalClosure, "")
81-
82-
nc := tc.netConn(ctx, c)
83-
msg := []byte(xrand.String(tc.msgSize))
84-
_, err = nc.Write(msg)
85-
assert.Success(t, err)
86-
87-
got := make([]byte, len(msg))
88-
_, err = io.ReadFull(nc, got)
89-
if tc.wantErr != nil {
90-
assert.ErrorIs(t, tc.wantErr, err)
91-
return
92-
}
93-
assert.Success(t, err)
94-
assert.Equal(t, "read msg", msg, got)
95-
})
96-
}
97-
}
98-
9940
func TestWasmDialTimeout(t *testing.T) {
10041
t.Parallel()
10142

0 commit comments

Comments
 (0)