import assert from 'node:assert/strict'; import {readFileSync} from 'node:fs'; const base=process.env.TEST_PANEL_URL; assert.ok(base && process.env.TEST_PASSWORD_FILE); let csrf='',cookie=''; async function req(path,method='GET',body){ const r=await fetch(base+path,{method,headers:{Cookie:cookie,Origin:base,'Content-Type':'application/json','X-CSRF-Token':csrf},body:body===undefined?undefined:JSON.stringify(body)}); if(path==='/api/login')cookie=r.headers.getSetCookie().map(v=>v.split(';')[0]).join('; '); return {status:r.status,data:await r.json()}; } const login=await req('/api/login','POST',{username:'admin',password:readFileSync(process.env.TEST_PASSWORD_FILE,'utf8').trim()}); assert.equal(login.status,200);csrf=login.data.csrf_token; const before=(await req('/api/instances')).data;assert.equal(before.length,1,'run with exactly one retained test instance'); const intent=await req('/api/intents','POST',{name:'Design real intent',version:'0.2.0-rc.2'});assert.equal(intent.status,202); let created; try { for(let n=0;n<60;n++){ const item=(await req('/api/intents')).data.find(x=>x.id===intent.data.id); assert.notEqual(item.status,'failed'); if(item.instance_id){created=item.instance_id;break;} await new Promise(r=>setTimeout(r,1000)); } assert.ok(created,'intent must create a real instance'); const list=(await req('/api/instances')).data;assert.equal(list.length,2);assert.ok(list.every(i=>i.status==='running')); const extra=await req('/api/instances','POST',{name:'must reject third',image_id:list[0].image_id});assert.equal(extra.status,409); assert.equal((await req('/api/intents','POST',{name:'must reject extra reservation',version:'0.2.0-rc.2'})).status,409); console.log('PASS persisted intent -> real runtime; two running instances; third create and reservation rejected'); } finally { if(created)assert.equal((await req('/api/instances/'+created,'DELETE')).status,200); else await req('/api/intents/'+intent.data.id,'DELETE'); } assert.equal((await req('/api/instances')).data.length,1); console.log('PASS deleted only this test runtime, retained data and prior instance');