import { describe, expect, it } from 'vitest' import { connectionReuseFingerprint } from '../../src/utils/connectionFingerprint' import type { SSHConnectionConfig } from '../../shared/types/session.types' const base = (): SSHConnectionConfig => ({ host: 'example.com', port: 22, username: 'root', authType: 'password', password: 'secret', }) describe('connectionReuseFingerprint', () => { it('matches identical configs', () => { expect(connectionReuseFingerprint(base())).toBe(connectionReuseFingerprint(base())) }) it('differs when password presence changes', () => { const a = base() const b = { ...base(), password: undefined, authType: 'agent' as const } expect(connectionReuseFingerprint(a)).not.toBe(connectionReuseFingerprint(b)) }) it('differs when private key path differs', () => { const a = { ...base(), authType: 'key' as const, password: undefined, privateKey: '/a' } const b = { ...base(), authType: 'key' as const, password: undefined, privateKey: '/b' } expect(connectionReuseFingerprint(a)).not.toBe(connectionReuseFingerprint(b)) }) it('differs when proxy differs', () => { const a = { ...base(), proxy: { type: 'socks5' as const, host: '127.0.0.1', port: 1080 }, } const b = { ...base(), proxy: { type: 'http' as const, host: '127.0.0.1', port: 8080 }, } expect(connectionReuseFingerprint(a)).not.toBe(connectionReuseFingerprint(b)) }) it('differs when jump host differs', () => { const a = { ...base(), jumpHost: { host: 'bastion', username: 'jump', authType: 'password' as const, password: 'x' }, } const b = { ...base(), jumpHost: { host: 'other', username: 'jump', authType: 'password' as const, password: 'x' }, } expect(connectionReuseFingerprint(a)).not.toBe(connectionReuseFingerprint(b)) }) })