blob: 75734e4b2e5e80233cae5e07e660d65913bd5900 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
</head>
<body>
<script>
function randomValuesArrayBuffer(length)
{
const array = new Uint8Array(length);
// crypto.getRandomValues has a quota. See
// https://www.w3.org/TR/WebCryptoAPI/#Crypto-method-getRandomValues.
const cryptoQuota = 65535;
let index = 0;
const buffer = array.buffer;
while(index < buffer.byteLength) {
const bufferView = array.subarray(index, index + cryptoQuota);
window.crypto.getRandomValues(bufferView);
index += cryptoQuota;
}
return buffer;
}
function runTest(buffer, description) {
async_test((test) => {
const ws = new WebSocket("ws://127.0.0.1:8880/echo");
ws.binaryType = "arraybuffer";
let messageSHA256 = undefined;
let bufferSHA256 = window.crypto.subtle.digest("SHA-256", buffer);
ws.onopen = test.step_func(() => {
ws.send(buffer);
});
ws.onmessage = test.step_func((event) => {
if (event.data === "Goodbye")
return;
assert_equals(messageSHA256, undefined);
messageSHA256 = window.crypto.subtle.digest("SHA-256", event.data);
// Sending "Goodbye" lets the server close the connection.
ws.send("Goodbye");
});
ws.onclose = test.step_func((e) => {
assert_true(e.wasClean);
// Checking bytes in JS is slow with MSAN, so we compare the arrays on
// SHA dijest array.
Promise.all([messageSHA256, bufferSHA256]).then(
test.step_func_done(([messageDigest, bufferDigest]) => {
assert_array_equals(new Uint8Array(messageDigest),
new Uint8Array(bufferDigest), "Array dijest should be same.");
}),
test.unreached_func("digest should work")
);
});
}, description);
}
runTest(new ArrayBuffer(0), "empty array buffer");
runTest(new TextEncoder().encode('Hello, world!'), "text array buffer");
runTest(randomValuesArrayBuffer(256), "random 256 values");
runTest(randomValuesArrayBuffer(2560), "random 2560 values");
runTest(randomValuesArrayBuffer(25600), "random 25600 values");
runTest(randomValuesArrayBuffer(256000), "random 256000 values");
runTest(randomValuesArrayBuffer(1000000), "random 1000000 values");
</script>
</body>
</html>