| <!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> |