mirror of
https://github.com/oven-sh/bun
synced 2026-02-13 20:39:05 +00:00
* initial steps for proxy-server * added http_proxy in fetch, move 3rd argument to 3nd argument options, add some non-TLS proxy tests * some changes * use only 1 buffer for url+proxy, merge headers on fetch * initial steps * change back to override headers instead of merging in fetch * fix build response.zig * fix conditional in merged headers on fetch * updated with main and make proxy disabled if null is passed Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
60 lines
1.6 KiB
JavaScript
60 lines
1.6 KiB
JavaScript
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");
|
|
});
|
|
}
|
|
}); |