summaryrefslogtreecommitdiff
path: root/packages/integrations/node/test
diff options
context:
space:
mode:
authorGravatar pilcrowOnPaper <80624252+pilcrowOnPaper@users.noreply.github.com> 2023-11-16 08:39:41 +0900
committerGravatar GitHub <noreply@github.com> 2023-11-16 05:09:41 +0530
commitc9487138d6d8fd39c8c8512239b6724cf2b275ff (patch)
tree5d9f7cb1dc6b134327b1dad89bd0b4dd93765c27 /packages/integrations/node/test
parenteeac2885514ecde558ad39bcee39f78f7b60109e (diff)
downloadastro-c9487138d6d8fd39c8c8512239b6724cf2b275ff.tar.gz
astro-c9487138d6d8fd39c8c8512239b6724cf2b275ff.tar.zst
astro-c9487138d6d8fd39c8c8512239b6724cf2b275ff.zip
Cancel response stream when connection closes (#9071)
* cancel stream on close * add changeset * add test * Update .changeset/modern-ways-develop.md Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca> --------- Co-authored-by: lilnasy <69170106+lilnasy@users.noreply.github.com> Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>
Diffstat (limited to 'packages/integrations/node/test')
-rw-r--r--packages/integrations/node/test/api-route.test.js19
-rw-r--r--packages/integrations/node/test/fixtures/api-route/src/pages/hash.ts2
-rw-r--r--packages/integrations/node/test/fixtures/api-route/src/pages/streaming.ts22
3 files changed, 42 insertions, 1 deletions
diff --git a/packages/integrations/node/test/api-route.test.js b/packages/integrations/node/test/api-route.test.js
index c830eee2d..7d9422ab4 100644
--- a/packages/integrations/node/test/api-route.test.js
+++ b/packages/integrations/node/test/api-route.test.js
@@ -89,4 +89,23 @@ describe('API routes', () => {
let [out] = await done;
expect(new Uint8Array(out.buffer)).to.deep.equal(expectedDigest);
});
+
+ it('Can bail on streaming', async () => {
+ const { handler } = await import('./fixtures/api-route/dist/server/entry.mjs');
+ let { req, res, done } = createRequestAndResponse({
+ url: '/streaming',
+ });
+
+ let locals = { cancelledByTheServer: false };
+
+ handler(req, res, () => {}, locals);
+ req.send();
+
+ await new Promise((resolve) => setTimeout(resolve, 500));
+ res.emit("close");
+
+ await done;
+
+ expect(locals).to.deep.include({ cancelledByTheServer: true });
+ });
});
diff --git a/packages/integrations/node/test/fixtures/api-route/src/pages/hash.ts b/packages/integrations/node/test/fixtures/api-route/src/pages/hash.ts
index fbf44c547..3f1b236de 100644
--- a/packages/integrations/node/test/fixtures/api-route/src/pages/hash.ts
+++ b/packages/integrations/node/test/fixtures/api-route/src/pages/hash.ts
@@ -1,6 +1,6 @@
import crypto from 'node:crypto';
-export async function post({ request }: { request: Request }) {
+export async function POST({ request }: { request: Request }) {
const hash = crypto.createHash('sha256');
const iterable = request.body as unknown as AsyncIterable<Uint8Array>;
diff --git a/packages/integrations/node/test/fixtures/api-route/src/pages/streaming.ts b/packages/integrations/node/test/fixtures/api-route/src/pages/streaming.ts
new file mode 100644
index 000000000..9ecb884bf
--- /dev/null
+++ b/packages/integrations/node/test/fixtures/api-route/src/pages/streaming.ts
@@ -0,0 +1,22 @@
+export const GET = ({ locals }) => {
+ let sentChunks = 0;
+
+ const readableStream = new ReadableStream({
+ async pull(controller) {
+ if (sentChunks === 3) return controller.close();
+ else sentChunks++;
+
+ await new Promise(resolve => setTimeout(resolve, 1000));
+ controller.enqueue(new TextEncoder().encode('hello\n'));
+ },
+ cancel() {
+ locals.cancelledByTheServer = true;
+ }
+ });
+
+ return new Response(readableStream, {
+ headers: {
+ "Content-Type": "text/event-stream"
+ }
+ });
+}