Sweep active code, tests, identity files, public docs, CMS seed content, and stale handoffs so old assistant-name fixtures no longer leak into current Clawdie/system-namespace behavior. Keep the skills-memory SQL artifact unchanged per regeneration policy. --- Build: pass Tests: pass — 2197 passed (164 files) --- Build: pass | Tests: pass — 2197 passed (650 files)
100 lines
3.8 KiB
TypeScript
100 lines
3.8 KiB
TypeScript
import fs from 'fs';
|
|
import path from 'path';
|
|
|
|
import { describe, expect, it } from 'vitest';
|
|
|
|
import { ensureSplitBrainSecrets } from './secrets.js';
|
|
|
|
function mkTemp(prefix: string): string {
|
|
const base = path.join(process.cwd(), 'tmp', 'tests');
|
|
fs.mkdirSync(base, { recursive: true });
|
|
return fs.mkdtempSync(path.join(base, prefix));
|
|
}
|
|
|
|
describe('split-brain secret sync', () => {
|
|
it('generates passwords and derived DB URLs from agent identity', () => {
|
|
const priorDbHost = process.env.DB_HOST;
|
|
const priorDbRuntime = process.env.DB_RUNTIME;
|
|
const priorWardenDbIp = process.env.WARDEN_DB_IP;
|
|
delete process.env.DB_HOST;
|
|
delete process.env.DB_RUNTIME;
|
|
delete process.env.WARDEN_DB_IP;
|
|
|
|
const projectRoot = mkTemp('clawdie-secrets-');
|
|
fs.writeFileSync(
|
|
path.join(projectRoot, '.env'),
|
|
['TENANT_ID=alpha', 'WARDEN_SUBNET_BASE=10.0.0', ''].join('\n'),
|
|
);
|
|
|
|
try {
|
|
const secrets = ensureSplitBrainSecrets(projectRoot);
|
|
const envContent = fs.readFileSync(
|
|
path.join(projectRoot, '.env'),
|
|
'utf-8',
|
|
);
|
|
|
|
expect(secrets.skillsDbUser).toBe('alpha_reader');
|
|
expect(secrets.memoryDbUser).toBe('alpha_brain');
|
|
expect(secrets.skillsDbName).toBe('alpha_skills');
|
|
expect(secrets.memoryDbName).toBe('alpha_brain');
|
|
expect(secrets.forgejoDbUser).toBe('alpha_forgejo');
|
|
expect(secrets.forgejoDbName).toBe('alpha_forgejo');
|
|
expect(envContent).toMatch(/^POSTGRES_ADMIN_PASSWORD=.+$/m);
|
|
expect(envContent).toMatch(/^SKILLS_DB_PASSWORD=.+$/m);
|
|
expect(envContent).toMatch(/^MEMORY_DB_PASSWORD=.+$/m);
|
|
expect(envContent).toMatch(/^FORGEJO_DB_PASSWORD=.+$/m);
|
|
expect(secrets.dbHost).toBe('10.0.0.5');
|
|
expect(envContent).toContain('@10.0.0.5:5432/alpha_skills');
|
|
expect(envContent).toContain('@10.0.0.5:5432/alpha_brain');
|
|
expect(envContent).toContain('@10.0.0.5:5432/alpha_forgejo');
|
|
} finally {
|
|
if (priorDbHost === undefined) delete process.env.DB_HOST;
|
|
else process.env.DB_HOST = priorDbHost;
|
|
if (priorDbRuntime === undefined) delete process.env.DB_RUNTIME;
|
|
else process.env.DB_RUNTIME = priorDbRuntime;
|
|
if (priorWardenDbIp === undefined) delete process.env.WARDEN_DB_IP;
|
|
else process.env.WARDEN_DB_IP = priorWardenDbIp;
|
|
}
|
|
});
|
|
|
|
it('preserves existing passwords on rerun', () => {
|
|
const projectRoot = mkTemp('clawdie-secrets-');
|
|
fs.writeFileSync(
|
|
path.join(projectRoot, '.env'),
|
|
[
|
|
'TENANT_ID=clawdie',
|
|
'WARDEN_SUBNET_BASE=10.0.0',
|
|
'POSTGRES_ADMIN_PASSWORD=keep-admin',
|
|
'SKILLS_DB_PASSWORD=keep-skills',
|
|
'MEMORY_DB_PASSWORD=keep-memory',
|
|
'FORGEJO_DB_PASSWORD=keep-forgejo',
|
|
'STRAPI_DB_PASSWORD=keep-strapi',
|
|
].join('\n') + '\n',
|
|
);
|
|
|
|
const secrets = ensureSplitBrainSecrets(projectRoot);
|
|
|
|
expect(secrets.postgresAdminPassword).toBe('keep-admin');
|
|
expect(secrets.skillsDbPassword).toBe('keep-skills');
|
|
expect(secrets.memoryDbPassword).toBe('keep-memory');
|
|
expect(secrets.forgejoDbPassword).toBe('keep-forgejo');
|
|
expect(secrets.strapiDbPassword).toBe('keep-strapi');
|
|
});
|
|
|
|
it('derives PostgreSQL-safe identifiers from hyphenated agent names', () => {
|
|
const projectRoot = mkTemp('clawdie-secrets-');
|
|
fs.writeFileSync(
|
|
path.join(projectRoot, '.env'),
|
|
'TENANT_ID=clawdie-ai\nWARDEN_SUBNET_BASE=192.168.100\n',
|
|
);
|
|
|
|
const secrets = ensureSplitBrainSecrets(projectRoot);
|
|
|
|
expect(secrets.skillsDbUser).toBe('clawdie_ai_reader');
|
|
expect(secrets.skillsDbName).toBe('clawdie_ai_skills');
|
|
expect(secrets.memoryDbUser).toBe('clawdie_ai_brain');
|
|
expect(secrets.memoryDbName).toBe('clawdie_ai_brain');
|
|
expect(secrets.forgejoDbUser).toBe('clawdie_ai_forgejo');
|
|
expect(secrets.forgejoDbName).toBe('clawdie_ai_forgejo');
|
|
});
|
|
});
|