finalmask.test.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /// <reference types="vite/client" />
  2. import { describe, expect, it } from 'vitest';
  3. import { parseGeckoPacketSize } from '@/lib/xray/forms/transport/FinalMaskForm';
  4. import { FinalMaskStreamSettingsSchema } from '@/schemas/protocols/stream';
  5. const fixtures = import.meta.glob<unknown>(
  6. './golden/fixtures/finalmask/*.json',
  7. { eager: true, import: 'default' },
  8. );
  9. function fixtureName(path: string): string {
  10. const file = path.split('/').pop() ?? path;
  11. return file.replace(/\.json$/, '');
  12. }
  13. describe('FinalMaskStreamSettingsSchema fixtures', () => {
  14. const entries = Object.entries(fixtures).sort(([a], [b]) => a.localeCompare(b));
  15. expect(entries.length, 'expected at least one fixture under golden/fixtures/finalmask').toBeGreaterThan(0);
  16. for (const [path, raw] of entries) {
  17. it(`parses ${fixtureName(path)} byte-stably`, () => {
  18. const parsed = FinalMaskStreamSettingsSchema.parse(raw);
  19. expect(parsed).toMatchSnapshot();
  20. });
  21. }
  22. });
  23. describe('parseGeckoPacketSize', () => {
  24. it('accepts positive ordered packet size ranges', () => {
  25. expect(parseGeckoPacketSize('512-1200')).toEqual({ min: 512, max: 1200 });
  26. expect(parseGeckoPacketSize('1200-1200')).toEqual({ min: 1200, max: 1200 });
  27. expect(parseGeckoPacketSize('1-2048')).toEqual({ min: 1, max: 2048 });
  28. });
  29. it('rejects invalid packet size ranges', () => {
  30. expect(parseGeckoPacketSize('')).toBeNull();
  31. expect(parseGeckoPacketSize('0-1200')).toBeNull();
  32. expect(parseGeckoPacketSize('1200-512')).toBeNull();
  33. expect(parseGeckoPacketSize('512')).toBeNull();
  34. expect(parseGeckoPacketSize('512-abc')).toBeNull();
  35. // exceeds xray-core's gecko buffer (max 2048)
  36. expect(parseGeckoPacketSize('512-2049')).toBeNull();
  37. expect(parseGeckoPacketSize('512-9999')).toBeNull();
  38. });
  39. });