MCPcopy
hub / github.com/nats-io/nats.go / TestWSParseInvalidFrames

Function TestWSParseInvalidFrames

ws_test.go:273–387  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

271}
272
273func TestWSParseInvalidFrames(t *testing.T) {
274
275 newReader := func() (*fakeReader, *websocketReader) {
276 mr := &fakeReader{}
277 r := wsNewReader(mr)
278 return mr, r
279 }
280
281 p := make([]byte, 100)
282
283 // Invalid utf-8 of close message
284 mr, r := newReader()
285 mr.buf.Write([]byte{136, 6, 3, 232, 't', 'e', 0xF1, 't'})
286 n, err := r.Read(p)
287 if err != io.EOF || n != 0 {
288 t.Fatalf("Error on read: n=%v err=%v", n, err)
289 }
290
291 // control frame length too long
292 mr, r = newReader()
293 mr.buf.Write([]byte{137, 126, 0, wsMaxControlPayloadSize + 10})
294 for i := 0; i < wsMaxControlPayloadSize+10; i++ {
295 mr.buf.WriteByte('a')
296 }
297 n, err = r.Read(p)
298 if n != 0 || err == nil || !strings.Contains(err.Error(), "maximum") {
299 t.Fatalf("Unexpected error: n=%v err=%v", n, err)
300 }
301
302 // Not a final frame
303 mr, r = newReader()
304 mr.buf.Write([]byte{byte(wsPingMessage), 0})
305 n, err = r.Read(p[:2])
306 if n != 0 || err == nil || !strings.Contains(err.Error(), "final") {
307 t.Fatalf("Unexpected error: n=%v err=%v", n, err)
308 }
309
310 // Marked as compressed
311 mr, r = newReader()
312 mr.buf.Write([]byte{byte(wsPingMessage) | wsRsv1Bit, 0})
313 n, err = r.Read(p[:2])
314 if n != 0 || err == nil || !strings.Contains(err.Error(), "compressed") {
315 t.Fatalf("Unexpected error: n=%v err=%v", n, err)
316 }
317
318 // Continuation frame marked as compressed
319 mr, r = newReader()
320 mr.buf.Write([]byte{2, 3})
321 mr.buf.WriteString("ABC")
322 mr.buf.Write([]byte{0 | wsRsv1Bit, 3})
323 mr.buf.WriteString("DEF")
324 n, err = r.Read(p)
325 if n != 0 || err == nil || !strings.Contains(err.Error(), "invalid continuation frame") {
326 t.Fatalf("Unexpected error: n=%v err=%v", n, err)
327 }
328
329 // Continuation frame after a final frame
330 mr, r = newReader()

Callers

nothing calls this directly

Calls 5

wsNewReaderFunction · 0.85
FatalfMethod · 0.80
ErrorMethod · 0.65
WriteMethod · 0.45
ReadMethod · 0.45

Tested by

no test coverage detected