summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rw-r--r--cli/tests/unit_node/net_test.ts70
1 files changed, 39 insertions, 31 deletions
diff --git a/cli/tests/unit_node/net_test.ts b/cli/tests/unit_node/net_test.ts
index 312271f88..b9d9b796a 100644
--- a/cli/tests/unit_node/net_test.ts
+++ b/cli/tests/unit_node/net_test.ts
@@ -5,7 +5,7 @@ import {
assert,
assertEquals,
} from "../../../test_util/std/testing/asserts.ts";
-import { deferred } from "../../../test_util/std/async/deferred.ts";
+import { Deferred, deferred } from "../../../test_util/std/async/deferred.ts";
import * as path from "../../../test_util/std/path/mod.ts";
import * as http from "node:http";
@@ -131,17 +131,18 @@ Deno.test("[node/net] connection event has socket value", async () => {
await Promise.all([p, p2]);
});
+/// We need to make sure that any shared buffers are never used concurrently by two reads.
// https://github.com/denoland/deno/issues/20188
Deno.test("[node/net] multiple Sockets should get correct server data", async () => {
- const p = deferred();
- const p2 = deferred();
+ const socketCount = 9;
- const dataReceived1 = deferred();
- const dataReceived2 = deferred();
-
- const events1: string[] = [];
- const events2: string[] = [];
+ class TestSocket {
+ dataReceived: Deferred<undefined> = deferred();
+ events: string[] = [];
+ socket: net.Socket | undefined;
+ }
+ const finished = deferred();
const server = net.createServer();
server.on("connection", (socket) => {
assert(socket !== undefined);
@@ -150,40 +151,47 @@ Deno.test("[node/net] multiple Sockets should get correct server data", async ()
});
});
+ const sockets: TestSocket[] = [];
+ for (let i = 0; i < socketCount; i++) {
+ sockets[i] = new TestSocket();
+ }
+
server.listen(async () => {
// deno-lint-ignore no-explicit-any
const { port } = server.address() as any;
- const socket1 = net.createConnection(port);
- const socket2 = net.createConnection(port);
-
- socket1.on("data", (data) => {
- events1.push(new TextDecoder().decode(data));
- dataReceived1.resolve();
- });
-
- socket2.on("data", (data) => {
- events2.push(new TextDecoder().decode(data));
- dataReceived2.resolve();
- });
+ for (let i = 0; i < socketCount; i++) {
+ const socket = sockets[i].socket = net.createConnection(port);
+ socket.on("data", (data) => {
+ const count = sockets[i].events.length;
+ sockets[i].events.push(new TextDecoder().decode(data));
+ if (count === 0) {
+ // Trigger an immediate second write
+ sockets[i].socket?.write(`${i}`.repeat(3));
+ } else {
+ sockets[i].dataReceived.resolve();
+ }
+ });
+ }
- socket1.write("111");
- socket2.write("222");
+ for (let i = 0; i < socketCount; i++) {
+ sockets[i].socket?.write(`${i}`.repeat(3));
+ }
- await Promise.all([dataReceived1, dataReceived2]);
+ await Promise.all(sockets.map((socket) => socket.dataReceived));
- socket1.end();
- socket2.end();
+ for (let i = 0; i < socketCount; i++) {
+ sockets[i].socket?.end();
+ }
server.close(() => {
- p.resolve();
+ finished.resolve();
});
-
- p2.resolve();
});
- await Promise.all([p, p2]);
+ await finished;
- assertEquals(events1, ["111"]);
- assertEquals(events2, ["222"]);
+ for (let i = 0; i < socketCount; i++) {
+ assertEquals(sockets[i].events, [`${i}`.repeat(3), `${i}`.repeat(3)]);
+ }
});