summaryrefslogtreecommitdiff
path: root/cli/js/tests/net_test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'cli/js/tests/net_test.ts')
-rw-r--r--cli/js/tests/net_test.ts527
1 files changed, 0 insertions, 527 deletions
diff --git a/cli/js/tests/net_test.ts b/cli/js/tests/net_test.ts
deleted file mode 100644
index 9e9a1e5e8..000000000
--- a/cli/js/tests/net_test.ts
+++ /dev/null
@@ -1,527 +0,0 @@
-// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
-import {
- unitTest,
- assert,
- assertEquals,
- createResolvable,
-} from "./test_util.ts";
-
-unitTest({ perms: { net: true } }, function netTcpListenClose(): void {
- const listener = Deno.listen({ hostname: "127.0.0.1", port: 3500 });
- assert(listener.addr.transport === "tcp");
- assertEquals(listener.addr.hostname, "127.0.0.1");
- assertEquals(listener.addr.port, 3500);
- listener.close();
-});
-
-unitTest(
- {
- perms: { net: true },
- // TODO:
- ignore: Deno.build.os === "windows",
- },
- function netUdpListenClose(): void {
- const socket = Deno.listenDatagram({
- hostname: "127.0.0.1",
- port: 3500,
- transport: "udp",
- });
- assert(socket.addr.transport === "udp");
- assertEquals(socket.addr.hostname, "127.0.0.1");
- assertEquals(socket.addr.port, 3500);
- socket.close();
- }
-);
-
-unitTest(
- { ignore: Deno.build.os === "windows", perms: { read: true, write: true } },
- function netUnixListenClose(): void {
- const filePath = Deno.makeTempFileSync();
- const socket = Deno.listen({
- path: filePath,
- transport: "unix",
- });
- assert(socket.addr.transport === "unix");
- assertEquals(socket.addr.path, filePath);
- socket.close();
- }
-);
-
-unitTest(
- { ignore: Deno.build.os === "windows", perms: { read: true, write: true } },
- function netUnixPacketListenClose(): void {
- const filePath = Deno.makeTempFileSync();
- const socket = Deno.listenDatagram({
- path: filePath,
- transport: "unixpacket",
- });
- assert(socket.addr.transport === "unixpacket");
- assertEquals(socket.addr.path, filePath);
- socket.close();
- }
-);
-
-unitTest(
- {
- perms: { net: true },
- },
- async function netTcpCloseWhileAccept(): Promise<void> {
- const listener = Deno.listen({ port: 4501 });
- const p = listener.accept();
- listener.close();
- let err;
- try {
- await p;
- } catch (e) {
- err = e;
- }
- assert(!!err);
- assert(err instanceof Error);
- assertEquals(err.message, "Listener has been closed");
- }
-);
-
-unitTest(
- { ignore: Deno.build.os === "windows", perms: { read: true, write: true } },
- async function netUnixCloseWhileAccept(): Promise<void> {
- const filePath = await Deno.makeTempFile();
- const listener = Deno.listen({
- path: filePath,
- transport: "unix",
- });
- const p = listener.accept();
- listener.close();
- let err;
- try {
- await p;
- } catch (e) {
- err = e;
- }
- assert(!!err);
- assert(err instanceof Error);
- assertEquals(err.message, "Listener has been closed");
- }
-);
-
-unitTest(
- { perms: { net: true } },
- async function netTcpConcurrentAccept(): Promise<void> {
- const listener = Deno.listen({ port: 4502 });
- let acceptErrCount = 0;
- const checkErr = (e: Error): void => {
- if (e.message === "Listener has been closed") {
- assertEquals(acceptErrCount, 1);
- } else if (e.message === "Another accept task is ongoing") {
- acceptErrCount++;
- } else {
- throw new Error("Unexpected error message");
- }
- };
- const p = listener.accept().catch(checkErr);
- const p1 = listener.accept().catch(checkErr);
- await Promise.race([p, p1]);
- listener.close();
- await Promise.all([p, p1]);
- assertEquals(acceptErrCount, 1);
- }
-);
-
-// TODO(jsouto): Enable when tokio updates mio to v0.7!
-unitTest(
- { ignore: true, perms: { read: true, write: true } },
- async function netUnixConcurrentAccept(): Promise<void> {
- const filePath = await Deno.makeTempFile();
- const listener = Deno.listen({ transport: "unix", path: filePath });
- let acceptErrCount = 0;
- const checkErr = (e: Error): void => {
- if (e.message === "Listener has been closed") {
- assertEquals(acceptErrCount, 1);
- } else if (e.message === "Another accept task is ongoing") {
- acceptErrCount++;
- } else {
- throw new Error("Unexpected error message");
- }
- };
- const p = listener.accept().catch(checkErr);
- const p1 = listener.accept().catch(checkErr);
- await Promise.race([p, p1]);
- listener.close();
- await [p, p1];
- assertEquals(acceptErrCount, 1);
- }
-);
-
-unitTest({ perms: { net: true } }, async function netTcpDialListen(): Promise<
- void
-> {
- const listener = Deno.listen({ port: 3500 });
- listener.accept().then(
- async (conn): Promise<void> => {
- assert(conn.remoteAddr != null);
- assert(conn.localAddr.transport === "tcp");
- assertEquals(conn.localAddr.hostname, "127.0.0.1");
- assertEquals(conn.localAddr.port, 3500);
- await conn.write(new Uint8Array([1, 2, 3]));
- conn.close();
- }
- );
-
- const conn = await Deno.connect({ hostname: "127.0.0.1", port: 3500 });
- assert(conn.remoteAddr.transport === "tcp");
- assertEquals(conn.remoteAddr.hostname, "127.0.0.1");
- assertEquals(conn.remoteAddr.port, 3500);
- assert(conn.localAddr != null);
- const buf = new Uint8Array(1024);
- const readResult = await conn.read(buf);
- assertEquals(3, readResult);
- assertEquals(1, buf[0]);
- assertEquals(2, buf[1]);
- assertEquals(3, buf[2]);
- assert(conn.rid > 0);
-
- assert(readResult !== null);
-
- const readResult2 = await conn.read(buf);
- assertEquals(readResult2, null);
-
- listener.close();
- conn.close();
-});
-
-unitTest(
- { ignore: Deno.build.os === "windows", perms: { read: true, write: true } },
- async function netUnixDialListen(): Promise<void> {
- const filePath = await Deno.makeTempFile();
- const listener = Deno.listen({ path: filePath, transport: "unix" });
- listener.accept().then(
- async (conn): Promise<void> => {
- assert(conn.remoteAddr != null);
- assert(conn.localAddr.transport === "unix");
- assertEquals(conn.localAddr.path, filePath);
- await conn.write(new Uint8Array([1, 2, 3]));
- conn.close();
- }
- );
- const conn = await Deno.connect({ path: filePath, transport: "unix" });
- assert(conn.remoteAddr.transport === "unix");
- assertEquals(conn.remoteAddr.path, filePath);
- assert(conn.remoteAddr != null);
- const buf = new Uint8Array(1024);
- const readResult = await conn.read(buf);
- assertEquals(3, readResult);
- assertEquals(1, buf[0]);
- assertEquals(2, buf[1]);
- assertEquals(3, buf[2]);
- assert(conn.rid > 0);
-
- assert(readResult !== null);
-
- const readResult2 = await conn.read(buf);
- assertEquals(readResult2, null);
-
- listener.close();
- conn.close();
- }
-);
-
-unitTest(
- { ignore: Deno.build.os === "windows", perms: { net: true } },
- async function netUdpSendReceive(): Promise<void> {
- const alice = Deno.listenDatagram({ port: 3500, transport: "udp" });
- assert(alice.addr.transport === "udp");
- assertEquals(alice.addr.port, 3500);
- assertEquals(alice.addr.hostname, "127.0.0.1");
-
- const bob = Deno.listenDatagram({ port: 4501, transport: "udp" });
- assert(bob.addr.transport === "udp");
- assertEquals(bob.addr.port, 4501);
- assertEquals(bob.addr.hostname, "127.0.0.1");
-
- const sent = new Uint8Array([1, 2, 3]);
- await alice.send(sent, bob.addr);
-
- const [recvd, remote] = await bob.receive();
- assert(remote.transport === "udp");
- assertEquals(remote.port, 3500);
- assertEquals(recvd.length, 3);
- assertEquals(1, recvd[0]);
- assertEquals(2, recvd[1]);
- assertEquals(3, recvd[2]);
- alice.close();
- bob.close();
- }
-);
-
-unitTest(
- { ignore: Deno.build.os === "windows", perms: { read: true, write: true } },
- async function netUnixPacketSendReceive(): Promise<void> {
- const filePath = await Deno.makeTempFile();
- const alice = Deno.listenDatagram({
- path: filePath,
- transport: "unixpacket",
- });
- assert(alice.addr.transport === "unixpacket");
- assertEquals(alice.addr.path, filePath);
-
- const bob = Deno.listenDatagram({
- path: filePath,
- transport: "unixpacket",
- });
- assert(bob.addr.transport === "unixpacket");
- assertEquals(bob.addr.path, filePath);
-
- const sent = new Uint8Array([1, 2, 3]);
- await alice.send(sent, bob.addr);
-
- const [recvd, remote] = await bob.receive();
- assert(remote.transport === "unixpacket");
- assertEquals(remote.path, filePath);
- assertEquals(recvd.length, 3);
- assertEquals(1, recvd[0]);
- assertEquals(2, recvd[1]);
- assertEquals(3, recvd[2]);
- alice.close();
- bob.close();
- }
-);
-
-unitTest(
- { perms: { net: true } },
- async function netTcpListenIteratorBreakClosesResource(): Promise<void> {
- const promise = createResolvable();
-
- async function iterate(listener: Deno.Listener): Promise<void> {
- let i = 0;
-
- for await (const conn of listener) {
- conn.close();
- i++;
-
- if (i > 1) {
- break;
- }
- }
-
- promise.resolve();
- }
-
- const addr = { hostname: "127.0.0.1", port: 8888 };
- const listener = Deno.listen(addr);
- iterate(listener);
-
- await new Promise((resolve: () => void, _) => {
- setTimeout(resolve, 100);
- });
- const conn1 = await Deno.connect(addr);
- conn1.close();
- const conn2 = await Deno.connect(addr);
- conn2.close();
-
- await promise;
- }
-);
-
-unitTest(
- { perms: { 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 });
- }
-);
-
-unitTest(
- { ignore: Deno.build.os === "windows", perms: { net: true } },
- async function netUdpListenCloseWhileIterating(): Promise<void> {
- const socket = Deno.listenDatagram({ 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 });
- }
-);
-
-unitTest(
- { ignore: Deno.build.os === "windows", perms: { read: true, write: true } },
- async function netUnixListenCloseWhileIterating(): Promise<void> {
- const filePath = Deno.makeTempFileSync();
- const socket = Deno.listen({ path: filePath, transport: "unix" });
- 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 });
- }
-);
-
-unitTest(
- { ignore: Deno.build.os === "windows", perms: { read: true, write: true } },
- async function netUnixPacketListenCloseWhileIterating(): Promise<void> {
- const filePath = Deno.makeTempFileSync();
- const socket = Deno.listenDatagram({
- path: filePath,
- transport: "unixpacket",
- });
- 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 });
- }
-);
-
-unitTest(
- {
- // FIXME(bartlomieju)
- ignore: true,
- perms: { net: true },
- },
- async function netListenAsyncIterator(): Promise<void> {
- const addr = { hostname: "127.0.0.1", port: 3500 };
- const listener = Deno.listen(addr);
- const runAsyncIterator = async (): Promise<void> => {
- for await (const conn of listener) {
- await conn.write(new Uint8Array([1, 2, 3]));
- conn.close();
- }
- };
- runAsyncIterator();
- const conn = await Deno.connect(addr);
- const buf = new Uint8Array(1024);
- const readResult = await conn.read(buf);
- assertEquals(3, readResult);
- assertEquals(1, buf[0]);
- assertEquals(2, buf[1]);
- assertEquals(3, buf[2]);
- assert(conn.rid > 0);
-
- assert(readResult !== null);
-
- const readResult2 = await conn.read(buf);
- assertEquals(readResult2, null);
-
- listener.close();
- conn.close();
- }
-);
-
-unitTest(
- {
- // FIXME(bartlomieju)
- ignore: true,
- perms: { net: true },
- },
- async function netCloseWriteSuccess() {
- const addr = { hostname: "127.0.0.1", port: 3500 };
- const listener = Deno.listen(addr);
- const closeDeferred = createResolvable();
- listener.accept().then(async (conn) => {
- await conn.write(new Uint8Array([1, 2, 3]));
- await closeDeferred;
- conn.close();
- });
- const conn = await Deno.connect(addr);
- conn.closeWrite(); // closing write
- const buf = new Uint8Array(1024);
- // Check read not impacted
- const readResult = await conn.read(buf);
- assertEquals(3, readResult);
- assertEquals(1, buf[0]);
- assertEquals(2, buf[1]);
- assertEquals(3, buf[2]);
- // Check write should be closed
- let err;
- try {
- await conn.write(new Uint8Array([1, 2, 3]));
- } catch (e) {
- err = e;
- }
- assert(!!err);
- assert(err instanceof Deno.errors.BrokenPipe);
- closeDeferred.resolve();
- listener.close();
- conn.close();
- }
-);
-
-unitTest(
- {
- // FIXME(bartlomieju)
- ignore: true,
- perms: { net: true },
- },
- async function netDoubleCloseWrite() {
- const addr = { hostname: "127.0.0.1", port: 3500 };
- const listener = Deno.listen(addr);
- const closeDeferred = createResolvable();
- listener.accept().then(async (conn) => {
- await closeDeferred;
- conn.close();
- });
- const conn = await Deno.connect(addr);
- conn.closeWrite(); // closing write
- let err;
- try {
- // Duplicated close should throw error
- conn.closeWrite();
- } catch (e) {
- err = e;
- }
- assert(!!err);
- assert(err instanceof Deno.errors.NotConnected);
- closeDeferred.resolve();
- listener.close();
- 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 === null) {
- 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: 3500 };
- 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;
- }
-);