diff options
-rw-r--r-- | packages/bun-types/bun.d.ts | 4 | ||||
-rw-r--r-- | test/js/bun/net/connect-returns-socket-unix.js | 53 | ||||
-rw-r--r-- | test/js/bun/net/connect-returns-socket.js | 50 | ||||
-rw-r--r-- | test/js/bun/net/echo.js | 2 | ||||
-rw-r--r-- | test/js/bun/net/socket.test.ts | 14 |
5 files changed, 120 insertions, 3 deletions
diff --git a/packages/bun-types/bun.d.ts b/packages/bun-types/bun.d.ts index 381e888a3..698bb8b2b 100644 --- a/packages/bun-types/bun.d.ts +++ b/packages/bun-types/bun.d.ts @@ -3139,10 +3139,10 @@ declare module "bun" { */ export function connect<Data = undefined>( options: TCPSocketConnectOptions<Data>, - ): Promise<TCPSocketListener<typeof options>>; + ): Promise<Socket<Data>>; export function connect<Data = undefined>( options: UnixSocketOptions<Data>, - ): Promise<UnixSocketListener<typeof options>>; + ): Promise<Socket<Data>>; /** * diff --git a/test/js/bun/net/connect-returns-socket-unix.js b/test/js/bun/net/connect-returns-socket-unix.js new file mode 100644 index 000000000..1c6c80545 --- /dev/null +++ b/test/js/bun/net/connect-returns-socket-unix.js @@ -0,0 +1,53 @@ +import fs from "fs"; +import os from "os"; + +let resolve; +const promise = new Promise(r => (resolve = r)); + +const unix = os.tmpdir() + "/bun-connect-unix-socket-test.socket"; + +const server = Bun.listen({ + unix, + socket: { + open(socket) { + console.log("SERVER OPENED"); + }, + data(socket, buffer) { + socket.write(buffer); + }, + error(socket, err) { + console.log("SERVER ERRED", err); + }, + }, +}); + +const client = await Bun.connect({ + unix, + socket: { + open(socket) { + console.log("CLIENT OPENED"); + socket.write("Hello, world!"); + }, + data(socket, buffer) { + console.log("CLIENT RECEIVED", buffer.toString()); + if (buffer.toString().includes("From returned socket")) { + resolve(); + } + }, + }, +}); + +console.log(client.localPort); +client.write("From returned socket"); + +setTimeout(() => { + console.error("Test Failed"); + process.exit(1); +}, 1000); + +await promise; + +client.end(); +server.stop(); + +process.exit(0); diff --git a/test/js/bun/net/connect-returns-socket.js b/test/js/bun/net/connect-returns-socket.js new file mode 100644 index 000000000..aee2c29cb --- /dev/null +++ b/test/js/bun/net/connect-returns-socket.js @@ -0,0 +1,50 @@ +let resolve; +const promise = new Promise(r => (resolve = r)); + +const server = Bun.listen({ + hostname: "localhost", + port: 0, + socket: { + open(socket) { + console.log("SERVER OPENED"); + }, + data(socket, buffer) { + socket.write(buffer); + }, + error(socket, err) { + console.log("SERVER ERRED", err); + }, + }, +}); + +const client = await Bun.connect({ + hostname: "localhost", + port: server.port, + socket: { + open(socket) { + console.log("CLIENT OPENED"); + socket.write("Hello, world!"); + }, + data(socket, buffer) { + console.log("CLIENT RECEIVED", buffer.toString()); + if (buffer.toString().includes("From returned socket")) { + resolve(); + } + }, + }, +}); + +console.log(client.localPort); +client.write("From returned socket"); + +setTimeout(() => { + console.error("Test Failed"); + process.exit(1); +}, 1000); + +await promise; + +client.end(); +server.stop(); + +process.exit(0); diff --git a/test/js/bun/net/echo.js b/test/js/bun/net/echo.js index 28ded3658..97c61d011 100644 --- a/test/js/bun/net/echo.js +++ b/test/js/bun/net/echo.js @@ -74,7 +74,7 @@ const server = Bun.listen( }), ); -await Bun.connect({ +const socket = await Bun.connect({ ...createOptions("[Client]", "request"), port: server.port, }); diff --git a/test/js/bun/net/socket.test.ts b/test/js/bun/net/socket.test.ts index 47b33d1d4..1da000834 100644 --- a/test/js/bun/net/socket.test.ts +++ b/test/js/bun/net/socket.test.ts @@ -27,6 +27,20 @@ it("should keep process alive only when active", async () => { ).toEqual(["[Client] OPENED", "[Client] GOT response", "[Client] CLOSED"]); }); +it("connect() should return the socket object", async () => { + const { exited, stdout, stderr } = spawn({ + cmd: [bunExe(), "connect-returns-socket.js"], + cwd: import.meta.dir, + stdout: "pipe", + stdin: null, + stderr: "pipe", + env: bunEnv, + }); + + expect(await exited).toBe(0); + expect(await new Response(stderr).text()).toBe(""); +}); + it("listen() should throw connection error for invalid host", () => { expect(() => { const handlers: SocketHandler = { |