import { describe, expect, it } from 'vitest' import { normalizeDistroId, parseOsPrettyName, parseOsReleaseOrUname, resolveSessionDistro } from '../../src/utils/hostDistro' describe('hostDistro', () => { it('normalizes common distro ids', () => { expect(normalizeDistroId('ubuntu')).toBe('ubuntu') expect(normalizeDistroId('deepin')).toBe('deepin') expect(normalizeDistroId('uos')).toBe('deepin') expect(normalizeDistroId('rocky')).toBe('rocky') expect(normalizeDistroId('rhel')).toBe('redhat') expect(normalizeDistroId('openEuler')).toBe('openeuler') expect(normalizeDistroId('anolis')).toBe('anolis') expect(normalizeDistroId('alinux')).toBe('alinux') expect(normalizeDistroId('amzn2')).toBe('amazon') expect(normalizeDistroId('Amazon Linux')).toBe('amazon') expect(normalizeDistroId('Alibaba Cloud Linux')).toBe('alinux') expect(normalizeDistroId('Linux')).toBe('linux') }) it('parses cloud linux from os-release NAME when needed', () => { expect( parseOsReleaseOrUname(`NAME="Alibaba Cloud Linux" ID=alinux VERSION_ID="3"`) ).toBe('alinux') expect( parseOsReleaseOrUname(`NAME="Amazon Linux" ID=amzn VERSION_ID="2023"`) ).toBe('amazon') }) it('parses os-release ID', () => { const sample = `NAME="Ubuntu" VERSION="22.04" ID=ubuntu ID_LIKE=debian ` expect(parseOsReleaseOrUname(sample)).toBe('ubuntu') }) it('maps TencentOS to centos icon family', () => { expect(normalizeDistroId('tencentos')).toBe('centos') expect( parseOsReleaseOrUname(`NAME="TencentOS Server" ID="tencentos" VERSION_ID="4"`) ).toBe('centos') }) it('parses PRETTY_NAME', () => { expect( parseOsPrettyName(`NAME="Ubuntu" PRETTY_NAME="Ubuntu 24.04.4 LTS" ID=ubuntu`) ).toBe('Ubuntu 24.04.4 LTS') }) it('resolves protocol defaults for desktop sessions', () => { expect(resolveSessionDistro({ protocol: 'rdp' })).toBe('windows') expect(resolveSessionDistro({ protocol: 'vnc' })).toBe('vnc') expect(resolveSessionDistro({ protocol: 'ssh', distro: 'debian' })).toBe('debian') expect(resolveSessionDistro({ protocol: 'ssh' })).toBe('linux') expect(resolveSessionDistro({})).toBe('linux') }) })