From 6ad063eaad5bf2fc6a9c3029f3723d6b8805a2be Mon Sep 17 00:00:00 2001 From: Steven Chim <655241+chimurai@users.noreply.github.com> Date: Sun, 19 Apr 2026 13:33:55 +0000 Subject: [PATCH] chore(ipv6): only run ipv6 e2e test in ipv6 environment --- test/e2e/ipv6.spec.ts | 4 ++-- test/e2e/test-kit.ts | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/test/e2e/ipv6.spec.ts b/test/e2e/ipv6.spec.ts index 7754c621..73eb6516 100644 --- a/test/e2e/ipv6.spec.ts +++ b/test/e2e/ipv6.spec.ts @@ -3,9 +3,9 @@ import { getLocal } from 'mockttp'; import request from 'supertest'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import { createApp, createProxyMiddleware } from './test-kit.js'; +import { createApp, createProxyMiddleware, isIPv6Available } from './test-kit.js'; -describe('ipv6 integration', () => { +describe.runIf(await isIPv6Available())('ipv6 integration', () => { let targetServer: Mockttp; beforeEach(async () => { diff --git a/test/e2e/test-kit.ts b/test/e2e/test-kit.ts index 65ae391e..5141e816 100644 --- a/test/e2e/test-kit.ts +++ b/test/e2e/test-kit.ts @@ -1,3 +1,5 @@ +import { createServer } from 'node:net'; + import express, { type Express, type RequestHandler } from 'express'; export { @@ -18,3 +20,21 @@ export function createAppWithPath(path: string | string[], middleware: RequestHa app.use(path, middleware); return app; } + +/** + * Detects if the current environment supports IPv6 + * Used to conditionally run tests that require IPv6 support + */ +export async function isIPv6Available(): Promise { + return new Promise((resolve) => { + const server = createServer(); + + const done = (result: boolean) => { + server.removeAllListeners('error'); + server.close(() => resolve(result)); + }; + + server.once('error', () => done(false)); + server.listen(0, '::1', () => done(true)); + }); +}