30 lines
1.4 KiB
TypeScript
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'
|
|
);
|
|
});
|
|
});
|