summaryrefslogtreecommitdiff
path: root/cli/tests/unit/dispatch_minimal_test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tests/unit/dispatch_minimal_test.ts')
-rw-r--r--cli/tests/unit/dispatch_minimal_test.ts43
1 files changed, 43 insertions, 0 deletions
diff --git a/cli/tests/unit/dispatch_minimal_test.ts b/cli/tests/unit/dispatch_minimal_test.ts
new file mode 100644
index 000000000..afc17f4fb
--- /dev/null
+++ b/cli/tests/unit/dispatch_minimal_test.ts
@@ -0,0 +1,43 @@
+import {
+ assert,
+ assertEquals,
+ assertMatch,
+ unitTest,
+ unreachable,
+} from "./test_util.ts";
+
+const readErrorStackPattern = new RegExp(
+ `^.*
+ at unwrapResponse \\(.*dispatch_minimal\\.ts:.*\\)
+ at Object.sendAsyncMinimal \\(.*dispatch_minimal\\.ts:.*\\)
+ at async Object\\.read \\(.*io\\.ts:.*\\).*$`,
+ "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);
+ }
+});
+
+unitTest(function malformedMinimalControlBuffer(): void {
+ // @ts-ignore
+ const readOpId = Deno.core.ops()["op_read"];
+ // @ts-ignore
+ 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 message = new TextDecoder().decode(res.slice(12)).trim();
+ assert(arg < 0);
+ assertEquals(message, "Unparsable control buffer");
+});