Skip to content

Commit 3e70b10

Browse files
authored
Merge branch 'master' into fix/ws-support-code-reason
2 parents 60f6ba0 + ddc6193 commit 3e70b10

File tree

2 files changed

+38
-5
lines changed

2 files changed

+38
-5
lines changed

internal/js/modules/k6/experimental/websockets/websockets.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -642,13 +642,17 @@ func (w *webSocket) send(msg sobek.Value) {
642642
common.Throw(rt, fmt.Errorf("unsupported send type %T", o))
643643
}
644644

645-
buffer := msg.ToObject(rt).Get("buffer")
646-
ab, ok := buffer.Export().(sobek.ArrayBuffer)
647-
if !ok {
645+
var b []byte
646+
err = rt.ExportTo(msg, &b)
647+
if err != nil {
648648
common.Throw(rt,
649-
fmt.Errorf("buffer of an ArrayBufferView was not an ArrayBuffer but %T", buffer.Export()))
649+
fmt.Errorf("got error while trying to export ArrayBufferView to bytes: %w", err))
650+
}
651+
w.writeQueueCh <- message{
652+
mtype: websocket.BinaryMessage,
653+
data: b,
654+
t: time.Now(),
650655
}
651-
w.sendArrayBuffer(ab)
652656
}
653657
}
654658

internal/js/modules/k6/experimental/websockets/websockets_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,35 @@ func TestBinaryType_ArrayBuffer(t *testing.T) {
427427
require.Len(t, logs, 0)
428428
}
429429

430+
func TestBinaryType_ArrayBuffer_issue_5226(t *testing.T) {
431+
t.Parallel()
432+
ts := newTestState(t)
433+
logger, hook := testutils.NewLoggerWithHook(t, logrus.WarnLevel)
434+
ts.runtime.VU.StateField.Logger = logger
435+
_, err := ts.runtime.RunOnEventLoop(ts.tb.Replacer.Replace(`
436+
var ws = new WebSocket("WSBIN_URL/ws-echo")
437+
ws.binaryType = "arraybuffer"
438+
ws.addEventListener("open", () => {
439+
const sent = new Uint8Array(1024)
440+
ws.send(sent.subarray(0, 1))
441+
ws.onmessage = (e) => {
442+
if (!(e.data instanceof ArrayBuffer)) {
443+
throw new Error("Wrong event.data type; expected: ArrayBuffer, got: "+ typeof e.data);
444+
}
445+
446+
if (e.data.byteLength != 1) {
447+
throw new Error("The data received isn't equal to the data sent " + e.data.byteLength);
448+
}
449+
450+
ws.close();
451+
}
452+
})
453+
`))
454+
require.NoError(t, err)
455+
logs := hook.Drain()
456+
require.Len(t, logs, 0)
457+
}
458+
430459
func TestExceptionDontPanic(t *testing.T) {
431460
t.Parallel()
432461
cases := map[string]struct {

0 commit comments

Comments
 (0)