Files
naxos-api/tests/zfs.service.test.ts
T
2026-09-03 23:56:02 +02:00

53 lines
2.0 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { ZfsService } from '../src/services/zfs.service.js';
describe('ZfsService', () => {
const zfs = new ZfsService();
it('should list configured ZFS pools with health status', async () => {
const pools = await zfs.listPools();
expect(pools).toBeDefined();
expect(pools.length).toBeGreaterThan(0);
const tank = pools.find((p) => p.name === 'tank');
expect(tank).toBeDefined();
expect(tank?.health).toBe('ONLINE');
expect(tank?.capacityPercent).toBeGreaterThanOrEqual(0);
});
it('should list datasets with proper mountpoint and compression', async () => {
const datasets = await zfs.listDatasets('tank');
expect(datasets.length).toBeGreaterThan(0);
const photos = datasets.find((d) => d.name === 'tank/media/photos');
expect(photos).toBeDefined();
expect(photos?.mountpoint).toBe('/tank/media/photos');
expect(photos?.compression).toBe('zstd');
});
it('should scan for unimported foreign pools without data loss', async () => {
const unimported = await zfs.scanUnimportedPools();
expect(unimported).toBeDefined();
expect(Array.isArray(unimported)).toBe(true);
});
it('should safely import a foreign pool', async () => {
const res = await zfs.importPool({ poolName: 'truenas_pool', force: true, noMount: true });
expect(res.success).toBe(true);
const pools = await zfs.listPools();
const imported = pools.find((p) => p.name === 'truenas_pool');
expect(imported).toBeDefined();
});
it('should create and rollback snapshots', async () => {
const snapTag = `test-${Date.now()}`;
const createRes = await zfs.createSnapshot('tank/media/photos', snapTag);
expect(createRes.success).toBe(true);
const snapshots = await zfs.listSnapshots('tank/media/photos');
const created = snapshots.find((s) => s.snapshotTag === snapTag);
expect(created).toBeDefined();
const rollbackRes = await zfs.rollbackSnapshot(`tank/media/photos@${snapTag}`);
expect(rollbackRes.success).toBe(true);
});
});