Files
core2026/tools/legacy-db-migration/test/incremental.test.ts
T

30 lines
1.4 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import {
fingerprintMariaConnection,
requireIncrementalCheckpoint,
validateSourceIdentity,
} from '../src/incremental.js';
describe('legacy incremental source identity', () => {
it('excludes passwords while binding host, database, user, and non-secret options', () => {
const first = fingerprintMariaConnection('mariadb://reader:first@db.internal:3307/root_dump?ssl=true');
const rotated = fingerprintMariaConnection('mariadb://reader:rotated@db.internal:3307/root_dump?ssl=true');
const otherDatabase = fingerprintMariaConnection('mariadb://reader:rotated@db.internal:3307/che_dump?ssl=true');
expect(first).toBe(rotated);
expect(first).not.toBe(otherDatabase);
});
it('rejects missing, mismatched, and malformed checkpoint identities', () => {
const source = { key: 'cutover:che', fingerprint: 'a'.repeat(64) };
expect(() => requireIncrementalCheckpoint(null, source, 'hall')).toThrow('completed full checkpoint');
expect(() =>
requireIncrementalCheckpoint({ sourceFingerprint: 'b'.repeat(64), lastLegacyId: 1n }, source, 'hall')
).toThrow('fingerprint changed');
expect(() => validateSourceIdentity({ key: '../unsafe', fingerprint: 'a'.repeat(64) })).toThrow(
'safe characters'
);
});
});