@zenfs/core
Version:
A filesystem, anywhere
58 lines (48 loc) • 1.66 kB
text/typescript
// SPDX-License-Identifier: LGPL-3.0-or-later
import { configureSingleSync, configureSync, fs, InMemory, mounts, SingleBuffer, type Backend } from '@zenfs/core';
import { Errno } from 'kerium';
import assert from 'node:assert/strict';
import { suite, test } from 'node:test';
const AsyncBackend = {
name: 'AsyncBackend',
options: {},
async create() {
await Promise.resolve();
return InMemory.create({ label: 'async-backend' });
},
} satisfies Backend;
suite('Sync configuration', () => {
test('configureSingleSync mounts root synchronously', () => {
configureSingleSync({ backend: InMemory, label: 'sync-root' });
assert.equal(mounts.get('/')?.label, 'sync-root');
fs.writeFileSync('/sync-file', 'sync');
assert.equal(fs.readFileSync('/sync-file', 'utf8'), 'sync');
});
test('configureSync mounts additional directories', () => {
configureSync({
mounts: {
tmp: { backend: InMemory, label: 'sync-tmp' },
},
});
assert.ok(mounts.has('/tmp'));
fs.writeFileSync('/tmp/sync.txt', 'ok');
assert.equal(fs.readFileSync('/tmp/sync.txt', 'utf8'), 'ok');
fs.umount('/tmp');
fs.rmSync('/tmp', { recursive: true, force: true });
});
test('configureSync rejects asynchronous backends', () => {
assert.throws(
() =>
configureSync({
mounts: { '/': { backend: AsyncBackend } },
}),
{ errno: Errno.EAGAIN }
);
});
test('configureSingleSync works with SingleBuffer', () => {
const buffer = new ArrayBuffer(0x20000);
configureSingleSync({ backend: SingleBuffer, buffer });
fs.writeFileSync('/sb.txt', 'single-buffer');
assert.equal(fs.readFileSync('/sb.txt', 'utf8'), 'single-buffer');
});
});