MCPcopy
hub / github.com/gorilla/websocket / TestReadLimit

Function TestReadLimit

conn_test.go:465–553  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

463}
464
465func TestReadLimit(t *testing.T) {
466 t.Run("Test ReadLimit is enforced", func(t *testing.T) {
467 const readLimit = 512
468 message := make([]byte, readLimit+1)
469
470 var b1, b2 bytes.Buffer
471 wc := newConn(&fakeNetConn{Writer: &b1}, false, 1024, readLimit-2, nil, nil, nil)
472 rc := newTestConn(&b1, &b2, true)
473 rc.SetReadLimit(readLimit)
474
475 // Send message at the limit with interleaved pong.
476 w, _ := wc.NextWriter(BinaryMessage)
477 w.Write(message[:readLimit-1])
478 wc.WriteControl(PongMessage, []byte("this is a pong"), time.Now().Add(10*time.Second))
479 w.Write(message[:1])
480 w.Close()
481
482 // Send message larger than the limit.
483 wc.WriteMessage(BinaryMessage, message[:readLimit+1])
484
485 op, _, err := rc.NextReader()
486 if op != BinaryMessage || err != nil {
487 t.Fatalf("1: NextReader() returned %d, %v", op, err)
488 }
489 op, r, err := rc.NextReader()
490 if op != BinaryMessage || err != nil {
491 t.Fatalf("2: NextReader() returned %d, %v", op, err)
492 }
493 _, err = io.Copy(ioutil.Discard, r)
494 if err != ErrReadLimit {
495 t.Fatalf("io.Copy() returned %v", err)
496 }
497 })
498
499 t.Run("Test that ReadLimit cannot be overflowed", func(t *testing.T) {
500 const readLimit = 1
501
502 var b1, b2 bytes.Buffer
503 rc := newTestConn(&b1, &b2, true)
504 rc.SetReadLimit(readLimit)
505
506 // First, send a non-final binary message
507 b1.Write([]byte("\x02\x81"))
508
509 // Mask key
510 b1.Write([]byte("\x00\x00\x00\x00"))
511
512 // First payload
513 b1.Write([]byte("A"))
514
515 // Next, send a negative-length, non-final continuation frame
516 b1.Write([]byte("\x00\xFF\x80\x00\x00\x00\x00\x00\x00\x00"))
517
518 // Mask key
519 b1.Write([]byte("\x00\x00\x00\x00"))
520
521 // Next, send a too long, final continuation frame
522 b1.Write([]byte("\x80\xFF\x00\x00\x00\x00\x00\x00\x00\x05"))

Callers

nothing calls this directly

Calls 10

newConnFunction · 0.85
newTestConnFunction · 0.85
SetReadLimitMethod · 0.80
NextWriterMethod · 0.80
WriteControlMethod · 0.80
WriteMessageMethod · 0.80
NextReaderMethod · 0.80
WriteMethod · 0.45
CloseMethod · 0.45
ReadMethod · 0.45

Tested by

no test coverage detected