aboutsummaryrefslogtreecommitdiff
path: root/test/js/node/net/node-net.test.ts
diff options
context:
space:
mode:
authorGravatar Ciro Spaciari <ciro.spaciari@gmail.com> 2023-03-13 20:42:35 -0300
committerGravatar GitHub <noreply@github.com> 2023-03-13 16:42:35 -0700
commitac9f8c0e93b6b91096a6dc8782f09a08c2e4f6c8 (patch)
tree9f710fcd00a4c2987212ab961bd57e67c0c60729 /test/js/node/net/node-net.test.ts
parent8d320d137393d88ada6961dc0781de9054a0c453 (diff)
downloadbun-ac9f8c0e93b6b91096a6dc8782f09a08c2e4f6c8.tar.gz
bun-ac9f8c0e93b6b91096a6dc8782f09a08c2e4f6c8.tar.zst
bun-ac9f8c0e93b6b91096a6dc8782f09a08c2e4f6c8.zip
feat(net.createServer) and adds socket.connect IPC support (#2337)
* added net.Server * fix fmt * fix cast and move test * fix node-net.tests.ts but breaks server data receive * fix end and close only emitting when data or pipe was added * fix socket starting paused * add echo test * fix fmt * fix fmt * on close if the socket is paused, keep paused until the user resumes it to match node behavior * resume on connect * fix getConnections, error on close, make _Handler private and create symbols for SocketServerHandlers * add path support (IPC) * fix unix domains support, add connect unix tests * fix unix socket tests * emit listening and listening error on next tick * fix connection flask test * try fix connect error on macos test * merge connection and drop tests * added exclusive option * fix socket.zig fmt * fix validation for options and add test for it * pass prettier fmt
Diffstat (limited to 'test/js/node/net/node-net.test.ts')
-rw-r--r--test/js/node/net/node-net.test.ts113
1 files changed, 95 insertions, 18 deletions
diff --git a/test/js/node/net/node-net.test.ts b/test/js/node/net/node-net.test.ts
index e6c17d931..fae1a50f7 100644
--- a/test/js/node/net/node-net.test.ts
+++ b/test/js/node/net/node-net.test.ts
@@ -1,5 +1,10 @@
import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it } from "bun:test";
import { connect, isIP, isIPv4, isIPv6, Socket } from "net";
+import { realpathSync, mkdtempSync } from "fs";
+import { tmpdir } from "os";
+import { join } from "path";
+
+const socket_domain = mkdtempSync(join(realpathSync(tmpdir()), "node-net"));
it("should support net.isIP()", () => {
expect(isIP("::1")).toBe(6);
@@ -27,12 +32,13 @@ it("should support net.isIPv6()", () => {
describe("net.Socket read", () => {
var port = 12345;
+ var unix_servers = 0;
for (let [message, label] of [
// ["Hello World!".repeat(1024), "long message"],
["Hello!", "short message"],
]) {
describe(label, () => {
- function runWithServer(cb) {
+ function runWithServer(cb, unix_domain_path) {
return done => {
function drain(socket) {
const message = socket.data.message;
@@ -44,23 +50,42 @@ describe("net.Socket read", () => {
}
}
- var server = Bun.listen({
- hostname: "localhost",
- port: port++,
- socket: {
- open(socket) {
- socket.data.message = message;
- drain(socket);
- },
- drain,
- error(socket, err) {
- done(err);
- },
- },
- data: {
- message: "",
- },
- });
+ var server = Bun.listen(
+ unix_domain_path
+ ? {
+ unix: join(unix_domain_path, `${unix_servers++}.sock`),
+ socket: {
+ open(socket) {
+ socket.data.message = message;
+ drain(socket);
+ },
+ drain,
+ error(socket, err) {
+ done(err);
+ },
+ },
+ data: {
+ message: "",
+ },
+ }
+ : {
+ hostname: "localhost",
+ port: port++,
+ socket: {
+ open(socket) {
+ socket.data.message = message;
+ drain(socket);
+ },
+ drain,
+ error(socket, err) {
+ done(err);
+ },
+ },
+ data: {
+ message: "",
+ },
+ },
+ );
function onDone(err) {
server.stop();
@@ -152,6 +177,58 @@ describe("net.Socket read", () => {
.on("error", done);
}),
);
+
+ it(
+ "should work with .connect(path)",
+ runWithServer((server, drain, done) => {
+ var data = "";
+ const socket = new Socket()
+ .connect(server.unix)
+ .on("connect", () => {
+ expect(socket).toBeDefined();
+ expect(socket.connecting).toBe(false);
+ })
+ .setEncoding("utf8")
+ .on("data", chunk => {
+ data += chunk;
+ })
+ .on("end", () => {
+ try {
+ expect(data).toBe(message);
+ done();
+ } catch (e) {
+ server.stop();
+ done(e);
+ }
+ })
+ .on("error", done);
+ }, socket_domain),
+ );
+
+ it(
+ "should work with .connect(path, listener)",
+ runWithServer((server, drain, done) => {
+ var data = "";
+ const socket = new Socket()
+ .connect(server.unix, () => {
+ expect(socket).toBeDefined();
+ expect(socket.connecting).toBe(false);
+ })
+ .setEncoding("utf8")
+ .on("data", chunk => {
+ data += chunk;
+ })
+ .on("end", () => {
+ try {
+ expect(data).toBe(message);
+ done();
+ } catch (e) {
+ done(e);
+ }
+ })
+ .on("error", done);
+ }, socket_domain),
+ );
});
}
});