117 lines
3.0 KiB
JavaScript
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);
|
|
});
|