diff options
author | 2022-11-15 00:11:22 -0800 | |
---|---|---|
committer | 2022-11-15 00:12:34 -0800 | |
commit | a63fe2be247c3f2dd5ab84552e3e9e9681498caa (patch) | |
tree | 9e3ce67a649902a06d8fcc75e070ad5d243fb7f4 /test/bun.js/fetch-gzip.test.ts | |
parent | bf75f61ddff892d78589b746af0c518fa7dd6ed0 (diff) | |
download | bun-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.ts | 61 |
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(); }); |