diff options
author | João Souto <joao.jpgs@hotmail.com> | 2020-03-11 22:19:24 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-11 18:19:24 -0400 |
commit | fb5c31416d4b9e526ca0fcc134dc8f366e367012 (patch) | |
tree | cffd644e8f6b99db10a75ecb6e32879d9f4c3ce0 /cli/js/tests/net_test.ts | |
parent | 810e4a16bedbc77ef0651f4f24626d98ca566083 (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.ts | 43 |
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; + } +); |