aboutsummaryrefslogtreecommitdiff
path: root/test/bun.js/proxy.test.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/bun.js/proxy.test.js')
-rw-r--r--test/bun.js/proxy.test.js60
1 files changed, 60 insertions, 0 deletions
diff --git a/test/bun.js/proxy.test.js b/test/bun.js/proxy.test.js
new file mode 100644
index 000000000..32b21f7e8
--- /dev/null
+++ b/test/bun.js/proxy.test.js
@@ -0,0 +1,60 @@
+import { afterAll, beforeAll, describe, expect, it } from "bun:test";
+import { gc } from "./gc";
+
+let proxy, server;
+
+// TODO: Proxy with TLS requests
+
+beforeAll(()=> {
+ proxy = Bun.serve({
+ async fetch(request) {
+ // if is not an proxy connection just drop it
+ if (!request.headers.has("proxy-connection")) {
+ return new Response("Bad Request", { status: 400 });
+ }
+
+ // simple http proxy
+ if (request.url.startsWith("http://")) {
+ return await fetch(request.url, { method: request.method, body: await request.text() });
+ }
+
+ // no TLS support here
+ return new Response("Bad Request", { status: 400 });
+
+ },
+ port: 54321,
+ });
+ server = Bun.serve({
+ async fetch(request) {
+ if (request.method === "POST"){
+ const text = await request.text();
+ return new Response(text,{ status: 200 });
+ }
+ return new Response("Hello, World",{ status: 200 });
+ },
+ port: 54322,
+ });
+});
+
+afterAll(() => {
+ server.stop();
+ proxy.stop();
+});
+
+describe("proxy", () => {
+ const requests = [
+ [ new Request("http://localhost:54322"), "fetch() GET with non-TLS Proxy", "http://localhost:54321"],
+ [ new Request("http://localhost:54322", { method: "POST", body: "Hello, World" }), "fetch() POST with non-TLS Proxy", "http://localhost:54321"]
+ ];
+ for (let [ request, name, proxy ] of requests) {
+ gc();
+ it(name, async () => {
+ gc();
+ const response = await fetch(request, { verbose: true, proxy });
+ gc();
+ const text = await response.text();
+ gc();
+ expect(text).toBe("Hello, World");
+ });
+ }
+}); \ No newline at end of file