diff options
Diffstat (limited to 'test/bun.js')
-rw-r--r-- | test/bun.js/socket/echo.js | 70 | ||||
-rw-r--r-- | test/bun.js/socket/socket.test.ts | 34 |
2 files changed, 104 insertions, 0 deletions
diff --git a/test/bun.js/socket/echo.js b/test/bun.js/socket/echo.js new file mode 100644 index 000000000..e864f1b2b --- /dev/null +++ b/test/bun.js/socket/echo.js @@ -0,0 +1,70 @@ +function createOptions(type, message, closeOnDone) { + let buffers = []; + let report = function() { + report = function() {}; + const data = new Uint8Array(buffers.reduce(function(sum, buffer) { + return sum + buffer.length; + }, 0)); + buffers.reduce(function(offset, buffer) { + data.set(buffer, offset); + return offset + buffer.length; + }, 0); + console.log(type, "GOT", new TextDecoder().decode(data)); + } + + let done = closeOnDone ? function(socket, sent) { + socket.data[sent ? "sent" : "received"] = true; + if (socket.data.sent && socket.data.received) { + done = function() {}; + closeOnDone(socket); + } + } : function() {}; + + function drain(socket) { + const message = socket.data.message; + const written = socket.write(message); + if (written < message.length) { + socket.data.message = message.slice(written); + } else { + done(socket, true); + } + } + + return { + hostname: "localhost", + port: 12345, + socket: { + close() { + report(); + console.log(type, "CLOSED"); + }, + data(socket, buffer) { + buffers.push(buffer); + done(socket); + }, + drain: drain, + end() { + report(); + console.log(type, "ENDED"); + }, + error(socket, err) { + console.log(type, "ERRED", err); + }, + open(socket) { + console.log(type, "OPENED"); + drain(socket); + }, + }, + data: { + sent: false, + received: false, + message: message, + }, + }; +} + +const server = Bun.listen(createOptions("[Server]", "response", socket => { + server.stop(); + socket.end(); +})); +Bun.connect(createOptions("[Client]", "request")); diff --git a/test/bun.js/socket/socket.test.ts b/test/bun.js/socket/socket.test.ts new file mode 100644 index 000000000..aff001c75 --- /dev/null +++ b/test/bun.js/socket/socket.test.ts @@ -0,0 +1,34 @@ +import { expect, it } from "bun:test"; +import { bunExe } from "../bunExe"; +import { spawn } from "bun"; + +it("should keep process alive only when active", async () => { + const { exited, stdout, stderr } = spawn({ + cmd: [ bunExe(), "echo.js" ], + cwd: import.meta.dir, + stdout: "pipe", + stdin: null, + stderr: "pipe", + env: { + BUN_DEBUG_QUIET_LOGS: 1, + }, + }); + expect(await exited).toBe(0); + expect(await new Response(stderr).text()).toBe(""); + var lines = (await new Response(stdout).text()).split(/\r?\n/); + expect(lines.filter(function(line) { + return line.startsWith("[Server]"); + })).toEqual([ + "[Server] OPENED", + "[Server] GOT request", + "[Server] CLOSED", + ]); + expect(lines.filter(function(line) { + return line.startsWith("[Client]"); + })).toEqual([ + "[Client] OPENED", + "[Client] GOT response", + "[Client] ENDED", + "[Client] CLOSED", + ]); +}); |