diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/tests/unit/dispatch_buffer_test.ts | 76 | ||||
-rw-r--r-- | cli/tests/unit/dispatch_minimal_test.ts | 49 | ||||
-rw-r--r-- | cli/tests/unit/metrics_test.ts | 4 | ||||
-rw-r--r-- | cli/tests/unit/unit_tests.ts | 2 |
4 files changed, 79 insertions, 52 deletions
diff --git a/cli/tests/unit/dispatch_buffer_test.ts b/cli/tests/unit/dispatch_buffer_test.ts new file mode 100644 index 000000000..0e213fe3b --- /dev/null +++ b/cli/tests/unit/dispatch_buffer_test.ts @@ -0,0 +1,76 @@ +import { + assert, + assertEquals, + assertMatch, + unitTest, + unreachable, +} from "./test_util.ts"; + +const readErrorStackPattern = new RegExp( + `^.* + at handleError \\(.*10_dispatch_buffer\\.js:.*\\) + at bufferOpParseResult \\(.*10_dispatch_buffer\\.js:.*\\) + at Array.<anonymous> \\(.*10_dispatch_buffer\\.js:.*\\).*$`, + "ms", +); + +unitTest(async function sendAsyncStackTrace(): Promise<void> { + const buf = new Uint8Array(10); + const rid = 10; + try { + await Deno.read(rid, buf); + unreachable(); + } catch (error) { + assertMatch(error.stack, readErrorStackPattern); + } +}); + +declare global { + // deno-lint-ignore no-namespace + namespace Deno { + // deno-lint-ignore no-explicit-any + var core: any; // eslint-disable-line no-var + } +} + +unitTest(function bufferOpsHeaderTooShort(): void { + for (const op of ["op_read_sync", "op_read_async"]) { + const readOpId = Deno.core.ops()[op]; + const res = Deno.core.send( + readOpId, + new Uint8Array([ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + ]), + ); + + const headerByteLength = 4 * 4; + assert(res.byteLength > headerByteLength); + const view = new DataView( + res.buffer, + res.byteOffset + res.byteLength - headerByteLength, + headerByteLength, + ); + + const requestId = Number(view.getBigUint64(0, true)); + const status = view.getUint32(8, true); + const result = view.getUint32(12, true); + + assert(requestId === 0); + assert(status !== 0); + assertEquals(new TextDecoder().decode(res.slice(0, result)), "TypeError"); + assertEquals( + new TextDecoder().decode(res.slice(result, -headerByteLength)).trim(), + "Unparsable control buffer", + ); + } +}); diff --git a/cli/tests/unit/dispatch_minimal_test.ts b/cli/tests/unit/dispatch_minimal_test.ts deleted file mode 100644 index 234ba6a1c..000000000 --- a/cli/tests/unit/dispatch_minimal_test.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { - assert, - assertEquals, - assertMatch, - unitTest, - unreachable, -} from "./test_util.ts"; - -const readErrorStackPattern = new RegExp( - `^.* - at unwrapResponse \\(.*dispatch_minimal\\.js:.*\\) - at sendAsync \\(.*dispatch_minimal\\.js:.*\\) - at async Object\\.read \\(.*io\\.js:.*\\).*$`, - "ms", -); - -unitTest(async function sendAsyncStackTrace(): Promise<void> { - const buf = new Uint8Array(10); - const rid = 10; - try { - await Deno.read(rid, buf); - unreachable(); - } catch (error) { - assertMatch(error.stack, readErrorStackPattern); - } -}); - -declare global { - // deno-lint-ignore no-namespace - namespace Deno { - // deno-lint-ignore no-explicit-any - var core: any; // eslint-disable-line no-var - } -} - -unitTest(function malformedMinimalControlBuffer(): void { - const readOpId = Deno.core.ops()["op_read"]; - const res = Deno.core.send(readOpId, new Uint8Array([1, 2, 3, 4, 5])); - const header = res.slice(0, 12); - const buf32 = new Int32Array( - header.buffer, - header.byteOffset, - header.byteLength / 4, - ); - const arg = buf32[1]; - const codeAndMessage = new TextDecoder().decode(res.slice(12)).trim(); - assert(arg < 0); - assertEquals(codeAndMessage, "TypeErrorUnparsable control buffer"); -}); diff --git a/cli/tests/unit/metrics_test.ts b/cli/tests/unit/metrics_test.ts index 2f12ac90d..525e5aae6 100644 --- a/cli/tests/unit/metrics_test.ts +++ b/cli/tests/unit/metrics_test.ts @@ -13,7 +13,7 @@ unitTest(async function metrics(): Promise<void> { assert(m1.bytesSentControl > 0); assert(m1.bytesSentData >= 0); assert(m1.bytesReceived > 0); - const m1OpWrite = m1.ops["op_write"]; + const m1OpWrite = m1.ops["op_write_async"]; assert(m1OpWrite.opsDispatchedAsync > 0); assert(m1OpWrite.opsCompletedAsync > 0); assert(m1OpWrite.bytesSentControl > 0); @@ -28,7 +28,7 @@ unitTest(async function metrics(): Promise<void> { assert(m2.bytesSentControl > m1.bytesSentControl); assert(m2.bytesSentData >= m1.bytesSentData + dataMsg.byteLength); assert(m2.bytesReceived > m1.bytesReceived); - const m2OpWrite = m2.ops["op_write"]; + const m2OpWrite = m2.ops["op_write_async"]; assert(m2OpWrite.opsDispatchedAsync > m1OpWrite.opsDispatchedAsync); assert(m2OpWrite.opsCompletedAsync > m1OpWrite.opsCompletedAsync); assert(m2OpWrite.bytesSentControl > m1OpWrite.bytesSentControl); diff --git a/cli/tests/unit/unit_tests.ts b/cli/tests/unit/unit_tests.ts index 2664a9ab0..6277abdfe 100644 --- a/cli/tests/unit/unit_tests.ts +++ b/cli/tests/unit/unit_tests.ts @@ -15,7 +15,7 @@ import "./console_test.ts"; import "./copy_file_test.ts"; import "./custom_event_test.ts"; import "./dir_test.ts"; -import "./dispatch_minimal_test.ts"; +import "./dispatch_buffer_test.ts"; import "./dispatch_json_test.ts"; import "./error_stack_test.ts"; import "./event_test.ts"; |