From 06bd692e5c4a8f66960d3919e7087530b60c20dd Mon Sep 17 00:00:00 2001 From: Liam Murphy <43807659+Liamolucko@users.noreply.github.com> Date: Tue, 26 Jan 2021 23:34:40 +1100 Subject: fix(std/node): Stop callbacks being called twice when callback throws error (#8867) --- std/node/_crypto/randomBytes_test.ts | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) (limited to 'std/node/_crypto/randomBytes_test.ts') diff --git a/std/node/_crypto/randomBytes_test.ts b/std/node/_crypto/randomBytes_test.ts index 701127dce..6dd2091e1 100644 --- a/std/node/_crypto/randomBytes_test.ts +++ b/std/node/_crypto/randomBytes_test.ts @@ -1,4 +1,11 @@ -import { assert, assertEquals, assertThrows } from "../../testing/asserts.ts"; +import { + assert, + assertEquals, + assertStringIncludes, + assertThrows, + assertThrowsAsync, +} from "../../testing/asserts.ts"; +import { assertCallbackErrorUncaught } from "../_utils.ts"; import randomBytes, { MAX_RANDOM_VALUES, MAX_SIZE } from "./randomBytes.ts"; Deno.test("randomBytes sync works correctly", function () { @@ -59,10 +66,24 @@ Deno.test("randomBytes async works correctly", function () { assert(!err); }) ); - assertThrows(() => - randomBytes(-1, function (err) { - //Shouldn't throw async - assert(!err); + assertThrowsAsync(() => + new Promise((resolve, reject) => { + randomBytes(-1, function (err, res) { + //Shouldn't throw async + if (err) { + reject(err); + } else { + resolve(res); + } + }); }) ); }); + +Deno.test("[std/node/crypto] randomBytes callback isn't called twice if error is thrown", async () => { + const importUrl = new URL("./randomBytes.ts", import.meta.url); + await assertCallbackErrorUncaught({ + prelude: `import randomBytes from ${JSON.stringify(importUrl)}`, + invocation: "randomBytes(0, ", + }); +}); -- cgit v1.2.3