aboutsummaryrefslogtreecommitdiff
path: root/test/bun.js/serve.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'test/bun.js/serve.test.ts')
-rw-r--r--test/bun.js/serve.test.ts82
1 files changed, 82 insertions, 0 deletions
diff --git a/test/bun.js/serve.test.ts b/test/bun.js/serve.test.ts
new file mode 100644
index 000000000..8b785dd25
--- /dev/null
+++ b/test/bun.js/serve.test.ts
@@ -0,0 +1,82 @@
+import { file, serve } from "bun";
+import { expect, it } from "bun:test";
+import { readFileSync } from "fs";
+import { resolve } from "path";
+
+var port = 40000;
+
+it("should work for a hello world", async () => {
+ const server = serve({
+ port: port++,
+ fetch(req) {
+ return new Response(`Hello, world!`);
+ },
+ });
+ const response = await fetch(`http://localhost:${server.port}`);
+ expect(await response.text()).toBe("Hello, world!");
+ server.stop();
+});
+
+it("should work for a file", async () => {
+ const fixture = resolve(import.meta.dir, "./fetch.js.txt");
+ const textToExpect = readFileSync(fixture, "utf-8");
+
+ const server = serve({
+ port: port++,
+ fetch(req) {
+ return new Response(file(fixture));
+ },
+ });
+ const response = await fetch(`http://localhost:${server.port}`);
+ expect(await response.text()).toBe(textToExpect);
+ server.stop();
+});
+
+it("fetch should work with headers", async () => {
+ const fixture = resolve(import.meta.dir, "./fetch.js.txt");
+
+ const server = serve({
+ port: port++,
+ fetch(req) {
+ if (req.headers.get("X-Foo") !== "bar") {
+ return new Response("X-Foo header not set", { status: 500 });
+ }
+ return new Response(file(fixture), {
+ headers: { "X-Both-Ways": "1" },
+ });
+ },
+ });
+ const response = await fetch(`http://localhost:${server.port}`, {
+ headers: {
+ "X-Foo": "bar",
+ },
+ });
+
+ expect(response.status).toBe(200);
+ expect(response.headers.get("X-Both-Ways")).toBe("1");
+ server.stop();
+});
+
+var count = 200;
+it(`should work for a file ${count} times`, async () => {
+ const fixture = resolve(import.meta.dir, "./fetch.js.txt");
+ const textToExpect = readFileSync(fixture, "utf-8");
+ var ran = 0;
+ const server = serve({
+ port: port++,
+ async fetch(req) {
+ return new Response(file(fixture));
+ },
+ });
+
+ // this gets stuck if run about 200 times awaiting all the promises
+ // when the promises are run altogether, instead of one at a time
+ // it's hard to say if this only happens here due to some weird stuff with the test runner
+ // or if it's "real" issue
+ for (let i = 0; i < count; i++) {
+ const response = await fetch(`http://localhost:${server.port}`);
+ expect(await response.text()).toBe(textToExpect);
+ }
+
+ server.stop();
+});