| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- /// <reference types="vite/client" />
- 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<unknown>(
- './golden/fixtures/inbound/*.json',
- { eager: true, import: 'default' },
- );
- interface FixtureShape { protocol: string; settings: Record<string, unknown> }
- 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();
- });
- }
- }
- });
|