mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 18:38:55 +00:00
131 lines
3.0 KiB
TypeScript
131 lines
3.0 KiB
TypeScript
import { afterEach, expect, test } from "bun:test";
|
|
|
|
const Response = globalThis.Response;
|
|
const Request = globalThis.Request;
|
|
const Headers = globalThis.Headers;
|
|
const Blob = globalThis.Blob;
|
|
|
|
afterEach(() => {
|
|
globalThis.Response = Response;
|
|
globalThis.Request = Request;
|
|
globalThis.Headers = Headers;
|
|
globalThis.Blob = Blob;
|
|
});
|
|
|
|
// This test passes by not hanging.
|
|
test("Overriding Request, Response, Headers, and Blob should not break node:http server", async () => {
|
|
const Response = globalThis.Response;
|
|
const Request = globalThis.Request;
|
|
const Headers = globalThis.Headers;
|
|
const Blob = globalThis.Blob;
|
|
|
|
globalThis.Response = class MyResponse {
|
|
get body() {
|
|
throw new Error("body getter should not be called");
|
|
}
|
|
|
|
get headers() {
|
|
throw new Error("headers getter should not be called");
|
|
}
|
|
|
|
get status() {
|
|
throw new Error("status getter should not be called");
|
|
}
|
|
|
|
get statusText() {
|
|
throw new Error("statusText getter should not be called");
|
|
}
|
|
|
|
get ok() {
|
|
throw new Error("ok getter should not be called");
|
|
}
|
|
|
|
get url() {
|
|
throw new Error("url getter should not be called");
|
|
}
|
|
|
|
get type() {
|
|
throw new Error("type getter should not be called");
|
|
}
|
|
};
|
|
globalThis.Request = class MyRequest {};
|
|
globalThis.Headers = class MyHeaders {
|
|
entries() {
|
|
throw new Error("entries should not be called");
|
|
}
|
|
|
|
get() {
|
|
throw new Error("get should not be called");
|
|
}
|
|
|
|
has() {
|
|
throw new Error("has should not be called");
|
|
}
|
|
|
|
keys() {
|
|
throw new Error("keys should not be called");
|
|
}
|
|
|
|
values() {
|
|
throw new Error("values should not be called");
|
|
}
|
|
|
|
forEach() {
|
|
throw new Error("forEach should not be called");
|
|
}
|
|
|
|
[Symbol.iterator]() {
|
|
throw new Error("[Symbol.iterator] should not be called");
|
|
}
|
|
|
|
[Symbol.toStringTag]() {
|
|
throw new Error("[Symbol.toStringTag] should not be called");
|
|
}
|
|
|
|
append() {
|
|
throw new Error("append should not be called");
|
|
}
|
|
};
|
|
globalThis.Blob = class MyBlob {};
|
|
|
|
const http = require("http");
|
|
const server = http.createServer((req, res) => {
|
|
res.end("Hello World\n");
|
|
});
|
|
const { promise, resolve, reject } = Promise.withResolvers();
|
|
|
|
server.listen(0, () => {
|
|
const { port } = server.address();
|
|
// client request
|
|
const req = http
|
|
.request(`http://localhost:${port}`, res => {
|
|
res
|
|
.on("data", data => {
|
|
expect(data.toString()).toBe("Hello World\n");
|
|
})
|
|
.on("end", () => {
|
|
server.close();
|
|
console.log("closing time");
|
|
});
|
|
})
|
|
.on("error", reject)
|
|
.end();
|
|
});
|
|
|
|
server.on("close", () => {
|
|
resolve();
|
|
});
|
|
server.on("error", err => {
|
|
reject(err);
|
|
});
|
|
|
|
try {
|
|
await promise;
|
|
} finally {
|
|
globalThis.Response = Response;
|
|
globalThis.Request = Request;
|
|
globalThis.Headers = Headers;
|
|
globalThis.Blob = Blob;
|
|
}
|
|
});
|