/// import { describe, expect, it } from 'vitest'; import { canEnableTls, canEnableReality, canEnableTlsFlow, canEnableStream, canEnableVisionSeed, isSS2022, isSSMultiUser, } from '@/lib/xray/protocol-capabilities'; // Pure-function tests for the capability predicates. Each fixture × stream // case is locked via snapshot — these were captured at the close of the // legacy class migration and verified byte-equal to the legacy Inbound // class instance methods. Drift past this baseline is a regression. const fixtures = import.meta.glob( './golden/fixtures/inbound/*.json', { eager: true, import: 'default' }, ); interface FixtureShape { protocol: string; settings: Record } const STREAM_CASES: { network: string; security: string }[] = [ { network: 'tcp', security: 'none' }, { network: 'tcp', security: 'tls' }, { network: 'tcp', security: 'reality' }, { network: 'ws', security: 'none' }, { network: 'ws', security: 'tls' }, { network: 'grpc', security: 'none' }, { network: 'grpc', security: 'tls' }, { network: 'grpc', security: 'reality' }, { network: 'kcp', security: 'none' }, { network: 'httpupgrade', security: 'none' }, { network: 'httpupgrade', security: 'tls' }, { network: 'xhttp', security: 'none' }, { network: 'xhttp', security: 'tls' }, { network: 'xhttp', security: 'reality' }, ]; function fixtureName(path: string): string { return (path.split('/').pop() ?? path).replace(/\.json$/, ''); } describe('protocol capability predicates', () => { const entries = Object.entries(fixtures).sort(([a], [b]) => a.localeCompare(b)); for (const [path, raw] of entries) { const name = fixtureName(path); const fix = raw as FixtureShape; for (const stream of STREAM_CASES) { it(`${name} :: ${stream.network}/${stream.security}`, () => { const values = { protocol: fix.protocol, streamSettings: { network: stream.network, security: stream.security }, settings: fix.settings, }; const result = { canEnableTls: canEnableTls(values), canEnableReality: canEnableReality(values), canEnableTlsFlow: canEnableTlsFlow(values), canEnableStream: canEnableStream(values), canEnableVisionSeed: canEnableVisionSeed(values), isSS2022: isSS2022(values), isSSMultiUser: isSSMultiUser(values), }; expect(result).toMatchSnapshot(); }); } } });