mindspace: version runtime contracts and audit packages
This commit is contained in:
@@ -4,11 +4,23 @@ import os from 'node:os';
|
||||
import path from 'node:path';
|
||||
import test from 'node:test';
|
||||
import {
|
||||
assertMindSpaceStorageAdapterContract,
|
||||
createLocalMindSpaceStorageAdapter,
|
||||
MINDSPACE_STORAGE_ADAPTER_CONTRACT_VERSION,
|
||||
normalizeMindSpaceStorageKey,
|
||||
resolveStoragePath,
|
||||
} from './mindspace-storage-adapter.mjs';
|
||||
|
||||
test('storage adapter exposes a versioned contract', () => {
|
||||
assert.equal(MINDSPACE_STORAGE_ADAPTER_CONTRACT_VERSION, 1);
|
||||
const adapter = createLocalMindSpaceStorageAdapter('/tmp/mindspace-storage-contract');
|
||||
assert.equal(assertMindSpaceStorageAdapterContract(adapter), adapter);
|
||||
assert.throws(
|
||||
() => assertMindSpaceStorageAdapterContract({ putObject() {} }),
|
||||
(error) => error.code === 'invalid_storage_adapter',
|
||||
);
|
||||
});
|
||||
|
||||
test('normalizeMindSpaceStorageKey rejects absolute paths and traversal', () => {
|
||||
assert.equal(normalizeMindSpaceStorageKey('users/u1/file.txt'), 'users/u1/file.txt');
|
||||
assert.equal(normalizeMindSpaceStorageKey('users/u1/./file.txt'), 'users/u1/file.txt');
|
||||
@@ -59,6 +71,10 @@ test('local storage adapter writes, reads, stats, lists, copies, and deletes obj
|
||||
'users/u1/conversations/s1/public/report.html',
|
||||
],
|
||||
);
|
||||
assert.deepEqual(
|
||||
(await adapter.listPrefix('users/u1/conversations/s1/generated')).map((item) => item.key),
|
||||
['users/u1/conversations/s1/generated/report-copy.html'],
|
||||
);
|
||||
|
||||
await adapter.deleteObject('users/u1/conversations/s1/public/report.html');
|
||||
assert.equal((await adapter.statObject('users/u1/conversations/s1/public/report.html')).exists, false);
|
||||
|
||||
Reference in New Issue
Block a user