Files
memind/scripts/check-memory-v2-health.test.mjs
2026-07-03 09:46:03 +08:00

117 lines
3.0 KiB
JavaScript

import assert from 'node:assert/strict';
import test from 'node:test';
import { parseMemoryV2HealthArgs, runMemoryV2HealthCli } from './check-memory-v2-health.mjs';
function writableBuffer() {
let value = '';
return {
write(chunk) {
value += String(chunk);
},
value() {
return value;
},
};
}
test('parseMemoryV2HealthArgs parses release gate options', () => {
assert.deepEqual(
parseMemoryV2HealthArgs([
'--require-enabled',
'--expect-backend',
'legacy',
'--no-env-file',
'--env-file',
'.env.memory',
]),
{
requireEnabled: true,
expectedBackend: 'legacy',
envFile: '.env.memory',
},
);
});
test('runMemoryV2HealthCli passes with default legacy-safe runtime', async () => {
const stdout = writableBuffer();
const stderr = writableBuffer();
const code = await runMemoryV2HealthCli({
argv: ['--require-enabled', '--expect-backend', 'legacy', '--no-env-file'],
env: {
MEMORY_ENABLED: '1',
MEMORY_BACKEND: 'legacy',
MEMORY_FAIL_OPEN: '1',
},
stdout,
stderr,
});
const report = JSON.parse(stdout.value());
assert.equal(code, 0);
assert.equal(report.ok, true);
assert.equal(report.summary.backend, 'legacy');
assert.equal(stderr.value(), '');
});
test('runMemoryV2HealthCli fails when enabled is required but disabled', async () => {
const stdout = writableBuffer();
const code = await runMemoryV2HealthCli({
argv: ['--require-enabled', '--no-env-file'],
env: {
MEMORY_ENABLED: '0',
MEMORY_BACKEND: 'legacy',
},
stdout,
stderr: writableBuffer(),
});
const report = JSON.parse(stdout.value());
assert.equal(code, 1);
assert.equal(report.ok, false);
assert.equal(report.checks.find((check) => check.name === 'memory_enabled').ok, false);
});
test('runMemoryV2HealthCli verifies pgvector resolve canary keeps legacy writes', async () => {
const stdout = writableBuffer();
let poolEnded = false;
class FakePool {
async query() {
return { rows: [] };
}
async end() {
poolEnded = true;
}
}
const code = await runMemoryV2HealthCli({
argv: ['--require-enabled', '--expect-backend', 'pgvector', '--no-env-file'],
env: {
MEMORY_ENABLED: '1',
MEMORY_BACKEND: 'pgvector',
MEMORY_VECTOR_ENABLED: '1',
MEMORY_PGVECTOR_DATABASE_URL: 'postgresql://local/memory',
MEMORY_PGVECTOR_EMBEDDING_MODULE: './fake-embed.mjs',
},
stdout,
stderr: writableBuffer(),
async importPg() {
return { Pool: FakePool };
},
async importModule() {
return {
async embedQuery() {
return [0.1, 0.2, 0.3];
},
};
},
});
const report = JSON.parse(stdout.value());
assert.equal(code, 0);
assert.equal(poolEnded, true);
assert.equal(report.summary.selectedBackend, 'pgvector');
assert.equal(report.checks.find((check) => check.name === 'write_uses_legacy').ok, true);
assert.equal(report.checks.find((check) => check.name === 'compact_uses_legacy').ok, true);
});