GPU_GUARD_MONOREPO/packages/backend/test/skill_runtime_env.test.ts

76 lines
2.3 KiB
TypeScript
Raw Permalink Normal View History

2026-05-20 21:39:12 +08:00
import * as path from 'path';
import {
buildSkillRuntimeEnv,
mergeSkillProcessEnv,
} from '../src/modules/netaclaw/service/skill_runtime_env.js';
describe('buildSkillRuntimeEnv', () => {
it('injects dataDir, workspace root and upload root for vehicle damage inspection', () => {
const dataDir = path.resolve('C:\\RZYX_AI_DATA');
const uploadRoot = path.join(dataDir, 'uploads');
const env = buildSkillRuntimeEnv({
skillName: 'vehicle-damage-inspection',
dataDir,
uploadRoot,
});
expect(env.RZYX_AI_DATA_DIR).toBe(path.resolve(dataDir));
expect(env.RZYX_AI_UPLOAD_ROOT).toBe(path.resolve(uploadRoot));
expect(env.RZYX_AI_WORKSPACE_ROOT).toBe(
path.join(path.resolve(dataDir), 'workspace', 'vehicle-damage-inspection'),
);
});
it('uses generic workspace directory for other compute-entry skills', () => {
const dataDir = path.resolve('C:\\RZYX_AI_DATA');
const env = buildSkillRuntimeEnv({
skillName: 'ocr-reader',
dataDir,
uploadRoot: path.join(dataDir, 'uploads'),
});
expect(env.RZYX_AI_WORKSPACE_ROOT).toBe(
path.join(path.resolve(dataDir), 'workspace', 'ocr-reader'),
);
});
it.each(['../escape', 'bad--name', 'BadName'])('rejects invalid skill name %s', (skillName) => {
expect(() => buildSkillRuntimeEnv({
skillName,
dataDir: path.resolve('C:\\RZYX_AI_DATA'),
uploadRoot: path.resolve('C:\\RZYX_AI_DATA\\uploads'),
})).toThrow(`Invalid skill name for runtime workspace: ${skillName}`);
});
});
describe('mergeSkillProcessEnv', () => {
it('keeps runtime RZYX_AI paths authoritative over skill secrets', () => {
const env = mergeSkillProcessEnv(
{
PATH: 'base-path',
RZYX_AI_DATA_DIR: 'base-data',
},
{
SKILL_TOKEN: 'secret-token',
RZYX_AI_DATA_DIR: 'secret-data',
RZYX_AI_UPLOAD_ROOT: 'secret-upload',
RZYX_AI_WORKSPACE_ROOT: 'secret-workspace',
},
{
RZYX_AI_DATA_DIR: 'runtime-data',
RZYX_AI_UPLOAD_ROOT: 'runtime-upload',
RZYX_AI_WORKSPACE_ROOT: 'runtime-workspace',
},
);
expect(env).toEqual({
PATH: 'base-path',
SKILL_TOKEN: 'secret-token',
RZYX_AI_DATA_DIR: 'runtime-data',
RZYX_AI_UPLOAD_ROOT: 'runtime-upload',
RZYX_AI_WORKSPACE_ROOT: 'runtime-workspace',
});
});
});