diff options
author | hazæ41 <hazae41@gmail.com> | 2020-02-21 17:26:54 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-21 11:26:54 -0500 |
commit | 08686cbc3ae63008837ee45b2c4f41d6674c57dd (patch) | |
tree | 19367caaba8e2f9abca60a06a40561c86c18cd59 /cli/js/net_test.ts | |
parent | dd8a10948195f231a6a9eb652e3f208813904ad6 (diff) |
feat: support UDP sockets (#3946)
Diffstat (limited to 'cli/js/net_test.ts')
-rw-r--r-- | cli/js/net_test.ts | 80 |
1 files changed, 67 insertions, 13 deletions
diff --git a/cli/js/net_test.ts b/cli/js/net_test.ts index a2f086f0a..75bce2e52 100644 --- a/cli/js/net_test.ts +++ b/cli/js/net_test.ts @@ -1,7 +1,7 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. import { testPerm, assert, assertEquals } from "./test_util.ts"; -testPerm({ net: true }, function netListenClose(): void { +testPerm({ net: true }, function netTcpListenClose(): void { const listener = Deno.listen({ hostname: "127.0.0.1", port: 4500 }); assertEquals(listener.addr.transport, "tcp"); assertEquals(listener.addr.hostname, "127.0.0.1"); @@ -9,7 +9,21 @@ testPerm({ net: true }, function netListenClose(): void { listener.close(); }); -testPerm({ net: true }, async function netCloseWhileAccept(): Promise<void> { +testPerm({ net: true }, function netUdpListenClose(): void { + if (Deno.build.os === "win") return; // TODO + + const socket = Deno.listen({ + hostname: "127.0.0.1", + port: 4500, + transport: "udp" + }); + assertEquals(socket.addr.transport, "udp"); + assertEquals(socket.addr.hostname, "127.0.0.1"); + assertEquals(socket.addr.port, 4500); + socket.close(); +}); + +testPerm({ net: true }, async function netTcpCloseWhileAccept(): Promise<void> { const listener = Deno.listen({ port: 4501 }); const p = listener.accept(); listener.close(); @@ -24,7 +38,7 @@ testPerm({ net: true }, async function netCloseWhileAccept(): Promise<void> { assertEquals(err.message, "Listener has been closed"); }); -testPerm({ net: true }, async function netConcurrentAccept(): Promise<void> { +testPerm({ net: true }, async function netTcpConcurrentAccept(): Promise<void> { const listener = Deno.listen({ port: 4502 }); let acceptErrCount = 0; const checkErr = (e: Error): void => { @@ -44,7 +58,7 @@ testPerm({ net: true }, async function netConcurrentAccept(): Promise<void> { assertEquals(acceptErrCount, 1); }); -testPerm({ net: true }, async function netDialListen(): Promise<void> { +testPerm({ net: true }, async function netTcpDialListen(): Promise<void> { const listener = Deno.listen({ port: 4500 }); listener.accept().then( async (conn): Promise<void> => { @@ -76,18 +90,58 @@ testPerm({ net: true }, async function netDialListen(): Promise<void> { conn.close(); }); -testPerm({ net: true }, async function netListenCloseWhileIterating(): Promise< - void -> { - const listener = Deno.listen({ port: 8000 }); - const nextWhileClosing = listener[Symbol.asyncIterator]().next(); - listener.close(); - assertEquals(await nextWhileClosing, { value: undefined, done: true }); +testPerm({ net: true }, async function netUdpSendReceive(): Promise<void> { + if (Deno.build.os === "win") return; // TODO + + const alice = Deno.listen({ port: 4500, transport: "udp" }); + assertEquals(alice.addr.port, 4500); + assertEquals(alice.addr.hostname, "0.0.0.0"); + assertEquals(alice.addr.transport, "udp"); + + const bob = Deno.listen({ port: 4501, transport: "udp" }); + assertEquals(bob.addr.port, 4501); + assertEquals(bob.addr.hostname, "0.0.0.0"); + assertEquals(bob.addr.transport, "udp"); + + const sent = new Uint8Array([1, 2, 3]); + await alice.send(sent, bob.addr); - const nextAfterClosing = listener[Symbol.asyncIterator]().next(); - assertEquals(await nextAfterClosing, { value: undefined, done: true }); + const [recvd, remote] = await bob.receive(); + assertEquals(remote.port, 4500); + assertEquals(recvd.length, 3); + assertEquals(1, recvd[0]); + assertEquals(2, recvd[1]); + assertEquals(3, recvd[2]); }); +testPerm( + { net: true }, + async function netTcpListenCloseWhileIterating(): Promise<void> { + const listener = Deno.listen({ port: 8000 }); + const nextWhileClosing = listener[Symbol.asyncIterator]().next(); + listener.close(); + assertEquals(await nextWhileClosing, { value: undefined, done: true }); + + const nextAfterClosing = listener[Symbol.asyncIterator]().next(); + assertEquals(await nextAfterClosing, { value: undefined, done: true }); + } +); + +testPerm( + { net: true }, + async function netUdpListenCloseWhileIterating(): Promise<void> { + if (Deno.build.os === "win") return; // TODO + + const socket = Deno.listen({ port: 8000, transport: "udp" }); + const nextWhileClosing = socket[Symbol.asyncIterator]().next(); + socket.close(); + assertEquals(await nextWhileClosing, { value: undefined, done: true }); + + const nextAfterClosing = socket[Symbol.asyncIterator]().next(); + assertEquals(await nextAfterClosing, { value: undefined, done: true }); + } +); + /* TODO(ry) Re-enable this test. testPerm({ net: true }, async function netListenAsyncIterator(): Promise<void> { const listener = Deno.listen(":4500"); |