@@ -15,19 +15,24 @@ import (
15
15
"testing"
16
16
"time"
17
17
18
+ "github.com/golang/protobuf/proto"
19
+ "github.com/golang/protobuf/ptypes"
20
+ "github.com/golang/protobuf/ptypes/duration"
18
21
"golang.org/x/xerrors"
19
22
20
23
"nhooyr.io/websocket"
21
24
"nhooyr.io/websocket/internal/test/cmp"
22
25
"nhooyr.io/websocket/internal/test/wstest"
23
26
"nhooyr.io/websocket/internal/test/xrand"
24
27
"nhooyr.io/websocket/internal/xsync"
28
+ "nhooyr.io/websocket/wsjson"
29
+ "nhooyr.io/websocket/wspb"
25
30
)
26
31
27
32
func TestConn (t * testing.T ) {
28
33
t .Parallel ()
29
34
30
- t .Run ("data " , func (t * testing.T ) {
35
+ t .Run ("fuzzData " , func (t * testing.T ) {
31
36
t .Parallel ()
32
37
33
38
for i := 0 ; i < 5 ; i ++ {
@@ -317,6 +322,102 @@ func TestConn(t *testing.T) {
317
322
t .Fatal (err )
318
323
}
319
324
})
325
+
326
+ t .Run ("wsjson" , func (t * testing.T ) {
327
+ t .Parallel ()
328
+
329
+ c1 , c2 , err := wstest .Pipe (nil , nil )
330
+ if err != nil {
331
+ t .Fatal (err )
332
+ }
333
+ defer c2 .Close (websocket .StatusInternalError , "" )
334
+ defer c1 .Close (websocket .StatusInternalError , "" )
335
+
336
+ ctx , cancel := context .WithTimeout (context .Background (), time .Second * 5 )
337
+ defer cancel ()
338
+
339
+ echoLoopErr := xsync .Go (func () error {
340
+ err := wstest .EchoLoop (ctx , c2 )
341
+ return assertCloseStatus (websocket .StatusNormalClosure , err )
342
+ })
343
+ defer func () {
344
+ err := <- echoLoopErr
345
+ if err != nil {
346
+ t .Errorf ("echo loop error: %v" , err )
347
+ }
348
+ }()
349
+ defer cancel ()
350
+
351
+ c1 .SetReadLimit (131072 )
352
+
353
+ exp := xrand .String (xrand .Int (131072 ))
354
+ err = wsjson .Write (ctx , c1 , exp )
355
+ if err != nil {
356
+ t .Fatal (err )
357
+ }
358
+
359
+ var act interface {}
360
+ err = wsjson .Read (ctx , c1 , & act )
361
+ if err != nil {
362
+ t .Fatal (err )
363
+ }
364
+ if exp != act {
365
+ t .Fatal (cmp .Diff (exp , act ))
366
+ }
367
+
368
+ err = c1 .Close (websocket .StatusNormalClosure , "" )
369
+ if err != nil {
370
+ t .Fatalf ("unexpected error: %v" , err )
371
+ }
372
+ })
373
+
374
+ t .Run ("wspb" , func (t * testing.T ) {
375
+ t .Parallel ()
376
+
377
+ c1 , c2 , err := wstest .Pipe (nil , nil )
378
+ if err != nil {
379
+ t .Fatal (err )
380
+ }
381
+ defer c2 .Close (websocket .StatusInternalError , "" )
382
+ defer c1 .Close (websocket .StatusInternalError , "" )
383
+
384
+ ctx , cancel := context .WithTimeout (context .Background (), time .Second * 5 )
385
+ defer cancel ()
386
+
387
+ echoLoopErr := xsync .Go (func () error {
388
+ err := wstest .EchoLoop (ctx , c2 )
389
+ return assertCloseStatus (websocket .StatusNormalClosure , err )
390
+ })
391
+ defer func () {
392
+ err := <- echoLoopErr
393
+ if err != nil {
394
+ t .Errorf ("echo loop error: %v" , err )
395
+ }
396
+ }()
397
+ defer cancel ()
398
+
399
+ c1 .SetReadLimit (131072 )
400
+
401
+ exp := ptypes .DurationProto (100 )
402
+ err = wspb .Write (ctx , c1 , exp )
403
+ if err != nil {
404
+ t .Fatal (err )
405
+ }
406
+
407
+ act := & duration.Duration {}
408
+ err = wspb .Read (ctx , c1 , act )
409
+ if err != nil {
410
+ t .Fatal (err )
411
+ }
412
+ if ! proto .Equal (exp , act ) {
413
+ t .Fatal (cmp .Diff (exp , act ))
414
+ }
415
+
416
+ err = c1 .Close (websocket .StatusNormalClosure , "" )
417
+ if err != nil {
418
+ t .Fatalf ("unexpected error: %v" , err )
419
+ }
420
+ })
320
421
}
321
422
322
423
func TestWasm (t * testing.T ) {
@@ -345,7 +446,7 @@ func TestWasm(t *testing.T) {
345
446
defer wg .Wait ()
346
447
defer s .Close ()
347
448
348
- ctx , cancel := context .WithTimeout (context .Background (), time .Second * 20 )
449
+ ctx , cancel := context .WithTimeout (context .Background (), time .Minute )
349
450
defer cancel ()
350
451
351
452
cmd := exec .CommandContext (ctx , "go" , "test" , "-exec=wasmbrowsertest" , "./..." )
0 commit comments