summaryrefslogtreecommitdiff
path: root/cli/tests/unit
diff options
context:
space:
mode:
authorInteon <42113979+inteon@users.noreply.github.com>2021-03-18 14:10:27 +0100
committerGitHub <noreply@github.com>2021-03-18 14:10:27 +0100
commit20627c91364d2a992fdfaaad7c8ae86454dbc2ed (patch)
treeacef1a279e92fe072da2cce2178889f6124c47c7 /cli/tests/unit
parent0e70d9e59bc0e70f1921bb217ee00fc2e6facb69 (diff)
refactor: update minimal ops & rename to buffer ops (#9719)
This commit rewrites "dispatch_minimal" into "dispatch_buffer". It's part of an effort to unify JS interface for ops for both json and minimal (buffer) ops. Before this commit "minimal ops" could be either sync or async depending on the return type from the op, but this commit changes it to have separate signatures for sync and async ops (just like in case of json ops).
Diffstat (limited to 'cli/tests/unit')
-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";