mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
92 lines
2.1 KiB
TypeScript
92 lines
2.1 KiB
TypeScript
import { expect, test } from "bun:test";
|
|
import { tls } from "harness";
|
|
import http from "http";
|
|
import type { AutoRequestOptions } from "http2-wrapper";
|
|
import http2Wrapper from "http2-wrapper";
|
|
|
|
async function doRequest(options: AutoRequestOptions) {
|
|
const { promise, resolve, reject } = Promise.withResolvers();
|
|
const request = await http2Wrapper.auto(options, (response: http.IncomingMessage) => {
|
|
if (response.statusCode !== 200) {
|
|
return reject(new Error(`expected status code 200 rejected: ${response.statusCode}`));
|
|
}
|
|
|
|
const body: Array<Buffer> = [];
|
|
response.on("error", reject);
|
|
response.on("data", (chunk: Buffer) => body.push(chunk));
|
|
response.on("end", () => {
|
|
resolve(Buffer.concat(body).toString());
|
|
});
|
|
});
|
|
|
|
request.on("error", reject);
|
|
|
|
request.end("123456");
|
|
const body = (await promise) as string;
|
|
expect(body).toBeString();
|
|
const parsed = JSON.parse(body);
|
|
expect(parsed.data).toBe("123456");
|
|
}
|
|
|
|
test("should allow http/1.1 when using http2-wrapper", async () => {
|
|
{
|
|
using server = Bun.serve({
|
|
port: 0,
|
|
async fetch(req) {
|
|
return new Response(
|
|
JSON.stringify({
|
|
data: await req.text(),
|
|
}),
|
|
{
|
|
headers: {
|
|
"content-type": "application/json",
|
|
},
|
|
},
|
|
);
|
|
},
|
|
});
|
|
|
|
await doRequest({
|
|
host: "localhost",
|
|
port: server.port,
|
|
protocol: "http:",
|
|
path: "/post",
|
|
method: "POST",
|
|
headers: {
|
|
"content-length": 6,
|
|
},
|
|
});
|
|
}
|
|
|
|
{
|
|
using server = Bun.serve({
|
|
tls,
|
|
port: 0,
|
|
hostname: "localhost",
|
|
async fetch(req) {
|
|
return new Response(
|
|
JSON.stringify({
|
|
data: await req.text(),
|
|
}),
|
|
{
|
|
headers: {
|
|
"content-type": "application/json",
|
|
},
|
|
},
|
|
);
|
|
},
|
|
});
|
|
await doRequest({
|
|
host: "localhost",
|
|
port: server.port,
|
|
protocol: "https:",
|
|
path: "/post",
|
|
method: "POST",
|
|
ca: tls.cert,
|
|
headers: {
|
|
"content-length": 6,
|
|
},
|
|
});
|
|
}
|
|
});
|