summaryrefslogtreecommitdiff
path: root/cli/tests
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tests')
-rw-r--r--cli/tests/unit/dispatch_buffer_test.ts76
-rw-r--r--cli/tests/unit/dispatch_minimal_test.ts49
-rw-r--r--cli/tests/unit/metrics_test.ts4
-rw-r--r--cli/tests/unit/unit_tests.ts2
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";