import { bunEnv, bunRun, joinP, tempDirWithFiles } from "harness"; test("cloneable and transferable equals", () => { const dir = tempDirWithFiles("bun-test", { "index.ts": ` import cluster from "cluster"; import { expect } from "bun:test"; if (cluster.isPrimary) { cluster.settings.serialization = "advanced"; const worker = cluster.fork(); const original = Uint8Array.from([21, 11, 96, 126, 243, 128, 164]); const buf = Uint8Array.from([21, 11, 96, 126, 243, 128, 164]); const ab = buf.buffer.transfer(); expect(ab).toBeInstanceOf(ArrayBuffer); expect(new Uint8Array(ab)).toEqual(original); worker.on("online", function () { worker.send(ab); }); worker.on("message", function (data) { worker.kill(); expect(data).toBeInstanceOf(ArrayBuffer); expect(new Uint8Array(data)).toEqual(original); process.exit(0); }); } else { process.on("message", msg => { console.log("W", msg); process.send!(msg); }); } `, }); bunRun(joinP(dir, "index.ts"), bunEnv, true); }); test("cloneable and non-transferable not-equals (BunFile)", () => { const dir = tempDirWithFiles("bun-test", { "index.ts": ` import cluster from "cluster"; import { expect } from "bun:test"; if (cluster.isPrimary) { cluster.settings.serialization = "advanced"; const worker = cluster.fork(); const file = Bun.file(import.meta.filename); console.log("P", "O", file); expect(file).toBeInstanceOf(Blob); // Bun.BunFile isnt exposed to JS expect(file.name).toEqual(import.meta.filename); expect(file.type).toEqual("text/javascript;charset=utf-8"); worker.on("online", function () { worker.send({ file }); }); worker.on("exit", function (code, signal) { if (code !== 0) { process.exit(code); } }); worker.on("message", function (data) { worker.kill(); const { file } = data; console.log("P", "M", file); expect(file.name).toBeUndefined(); expect(file.type).toBeUndefined(); expect(file).toBeEmptyObject(); process.exit(0); }); } else { process.on("message", msg => { console.log("W", msg); process.send!(msg); }); process.on("uncaughtExceptionMonitor", (error) => { console.error(error); process.exit(1); }); } `, }); bunRun(joinP(dir, "index.ts"), bunEnv, true); }); test("cloneable and non-transferable not-equals (net.BlockList)", () => { const dir = tempDirWithFiles("bun-test", { "index.ts": ` import cluster from "cluster"; import net from "net"; import { expect } from "bun:test"; if (cluster.isPrimary) { cluster.settings.serialization = "advanced"; const worker = cluster.fork(); const blocklist = new net.BlockList(); console.log("P", "O", blocklist); blocklist.addAddress("123.123.123.123"); worker.on("online", function () { worker.send({ blocklist }); }); worker.on("exit", function (code, signal) { if (code !== 0) { process.exit(code); } }); worker.on("message", function (data) { worker.kill(); const { blocklist } = data; console.log("P", "M", blocklist); expect(blocklist.rules).toBeUndefined(); expect(blocklist).toBeEmptyObject(); process.exit(0); }); } else { process.on("message", msg => { console.log("W", msg); process.send!(msg); }); process.on("uncaughtExceptionMonitor", (error) => { console.error(error); process.exit(1); }); } `, }); bunRun(joinP(dir, "index.ts"), bunEnv, true); });