aboutsummaryrefslogtreecommitdiff
path: root/test/bun.js/fetch-gzip.test.ts
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-11-15 00:11:22 -0800
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-11-15 00:12:34 -0800
commita63fe2be247c3f2dd5ab84552e3e9e9681498caa (patch)
tree9e3ce67a649902a06d8fcc75e070ad5d243fb7f4 /test/bun.js/fetch-gzip.test.ts
parentbf75f61ddff892d78589b746af0c518fa7dd6ed0 (diff)
downloadbun-a63fe2be247c3f2dd5ab84552e3e9e9681498caa.tar.gz
bun-a63fe2be247c3f2dd5ab84552e3e9e9681498caa.tar.zst
bun-a63fe2be247c3f2dd5ab84552e3e9e9681498caa.zip
Add a test with decently large headers
Diffstat (limited to 'test/bun.js/fetch-gzip.test.ts')
-rw-r--r--test/bun.js/fetch-gzip.test.ts61
1 files changed, 61 insertions, 0 deletions
diff --git a/test/bun.js/fetch-gzip.test.ts b/test/bun.js/fetch-gzip.test.ts
index a75e01701..d2637121c 100644
--- a/test/bun.js/fetch-gzip.test.ts
+++ b/test/bun.js/fetch-gzip.test.ts
@@ -113,4 +113,65 @@ it("fetch() with a gzip response works (multiple chunks)", async () => {
),
),
).toBe(true);
+ server.stop();
+});
+
+it("fetch() with a gzip response works (multiple chunks, TCP server)", async (done) => {
+ const compressed = await Bun.file(
+ import.meta.dir + "/fixture.html.gz",
+ ).arrayBuffer();
+ const server = Bun.listen({
+ port: 4024,
+ hostname: "0.0.0.0",
+ socket: {
+ async open(socket) {
+ var corked: any[] = [];
+ var cork = true;
+ async function write(chunk) {
+ await new Promise<void>((resolve, reject) => {
+ if (cork) {
+ corked.push(chunk);
+ }
+
+ if (!cork && corked.length) {
+ socket.write(corked.join(""));
+ corked.length = 0;
+ }
+
+ if (!cork) {
+ socket.write(chunk);
+ }
+
+ resolve();
+ });
+ }
+ await write("HTTP/1.1 200 OK\r\n");
+ await write("Content-Encoding: gzip\r\n");
+ await write("Content-Type: text/html; charset=utf-8\r\n");
+ await write("Content-Length: " + compressed.byteLength + "\r\n");
+ await write("X-WTF: " + "lol".repeat(1000) + "\r\n");
+ await write("\r\n");
+ for (var i = 100; i < compressed.byteLength; i += 100) {
+ cork = false;
+ await write(compressed.slice(i - 100, i));
+ }
+ await write(compressed.slice(i - 100));
+ await socket.end();
+ },
+ drain(socket) {},
+ },
+ });
+ await 1;
+
+ const res = await fetch(`http://${server.hostname}:${server.port}`, {});
+ const arrayBuffer = await res.arrayBuffer();
+ expect(
+ new Buffer(arrayBuffer).equals(
+ new Buffer(
+ await Bun.file(import.meta.dir + "/fixture.html").arrayBuffer(),
+ ),
+ ),
+ ).toBe(true);
+ server.stop();
+ done();
});