MCPcopy
hub / github.com/coder/websocket / TestWriteSingleFrameCompressed

Function TestWriteSingleFrameCompressed

compress_test.go:71–135  ·  view source on GitHub ↗

TestWriteSingleFrameCompressed verifies that Conn.Write sends compressed messages in a single frame instead of multiple frames, and that messages below the flateThreshold are sent uncompressed. This is a regression test for https://github.com/coder/websocket/issues/435

(t *testing.T)

Source from the content-addressed store, hash-verified

69// below the flateThreshold are sent uncompressed.
70// This is a regression test for https://github.com/coder/websocket/issues/435
71func TestWriteSingleFrameCompressed(t *testing.T) {
72 t.Parallel()
73
74 var (
75 flateThreshold = 64
76
77 largeMsg = []byte(strings.Repeat("hello world ", 100))
78 smallMsg = []byte("small message")
79 )
80
81 testCases := []struct {
82 name string
83 mode CompressionMode
84 msg []byte
85 wantRsv1 bool // true = compressed, false = uncompressed
86 }{
87 {"ContextTakeover/AboveThreshold", CompressionContextTakeover, largeMsg, true},
88 {"NoContextTakeover/AboveThreshold", CompressionNoContextTakeover, largeMsg, true},
89 {"ContextTakeover/BelowThreshold", CompressionContextTakeover, smallMsg, false},
90 {"NoContextTakeover/BelowThreshold", CompressionNoContextTakeover, smallMsg, false},
91 }
92
93 for _, tc := range testCases {
94 t.Run(tc.name, func(t *testing.T) {
95 t.Parallel()
96
97 clientConn, serverConn := net.Pipe()
98 defer clientConn.Close()
99 defer serverConn.Close()
100
101 c := newConn(connConfig{
102 rwc: clientConn,
103 client: true,
104 copts: tc.mode.opts(),
105 flateThreshold: flateThreshold,
106 br: bufio.NewReader(clientConn),
107 bw: bufio.NewWriterSize(clientConn, 4096),
108 })
109
110 ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*100)
111 defer cancel()
112
113 writeDone := make(chan error, 1)
114 go func() {
115 writeDone <- c.Write(ctx, MessageText, tc.msg)
116 }()
117
118 reader := bufio.NewReader(serverConn)
119 readBuf := make([]byte, 8)
120
121 h, err := readFrameHeader(reader, readBuf)
122 assert.Success(t, err)
123
124 _, err = io.CopyN(io.Discard, reader, h.payloadLength)
125 assert.Success(t, err)
126
127 assert.Equal(t, "opcode", opText, h.opcode)
128 assert.Equal(t, "rsv1 (compressed)", tc.wantRsv1, h.rsv1)

Callers

nothing calls this directly

Calls 7

SuccessFunction · 0.92
EqualFunction · 0.92
newConnFunction · 0.85
readFrameHeaderFunction · 0.85
optsMethod · 0.80
CloseMethod · 0.45
WriteMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…