summaryrefslogtreecommitdiff
path: root/cli/js/tests/net_test.ts
diff options
context:
space:
mode:
authorJoão Souto <joao.jpgs@hotmail.com>2020-03-11 22:19:24 +0000
committerGitHub <noreply@github.com>2020-03-11 18:19:24 -0400
commitfb5c31416d4b9e526ca0fcc134dc8f366e367012 (patch)
treecffd644e8f6b99db10a75ecb6e32879d9f4c3ce0 /cli/js/tests/net_test.ts
parent810e4a16bedbc77ef0651f4f24626d98ca566083 (diff)
Add waker to StreamResource to fix hang on close bugs (#4293)
Diffstat (limited to 'cli/js/tests/net_test.ts')
-rw-r--r--cli/js/tests/net_test.ts43
1 files changed, 43 insertions, 0 deletions
diff --git a/cli/js/tests/net_test.ts b/cli/js/tests/net_test.ts
index 1a58c3531..fccd62f38 100644
--- a/cli/js/tests/net_test.ts
+++ b/cli/js/tests/net_test.ts
@@ -336,3 +336,46 @@ unitTest(
conn.close();
}
);
+
+unitTest(
+ {
+ perms: { net: true }
+ },
+ async function netHangsOnClose() {
+ let acceptedConn: Deno.Conn;
+ const resolvable = createResolvable();
+
+ async function iteratorReq(listener: Deno.Listener): Promise<void> {
+ const p = new Uint8Array(10);
+ const conn = await listener.accept();
+ acceptedConn = conn;
+
+ try {
+ while (true) {
+ const nread = await conn.read(p);
+ if (nread === Deno.EOF) {
+ break;
+ }
+ await conn.write(new Uint8Array([1, 2, 3]));
+ }
+ } catch (err) {
+ assert(!!err);
+ assert(err instanceof Deno.errors.BadResource);
+ }
+
+ resolvable.resolve();
+ }
+
+ const addr = { hostname: "127.0.0.1", port: 4500 };
+ const listener = Deno.listen(addr);
+ iteratorReq(listener);
+ const conn = await Deno.connect(addr);
+ await conn.write(new Uint8Array([1, 2, 3, 4]));
+ const buf = new Uint8Array(10);
+ await conn.read(buf);
+ conn!.close();
+ acceptedConn!.close();
+ listener.close();
+ await resolvable;
+ }
+);