Files
gnome-jarvis/test/qvac-ownership.test.js
T
snxraven a4073b9020
Rolling release / release (push) Successful in 6m36s
Check Point
2026-09-12 09:07:09 -04:00

22 lines
1.1 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import { Agent, acquireQvac, releaseQvac, closeQvac, qvacStatus } from '../daemon/qvac-master.js';
test('concurrent master acquisition loads once and failed acquisition does not leak owners', async () => {
const original = { resources: Agent.engine.resources, load: Agent.engine.load, close: Agent.engine.close };
let loads = 0;
Agent.engine.resources = async () => ({ gpus: [{}] });
Agent.engine.load = async () => { loads++; return { device: 'gpu' }; };
Agent.engine.close = async () => {};
try {
await Promise.all([acquireQvac(), acquireQvac()]);
assert.equal(loads, 1); assert.equal(qvacStatus().owners, 2);
releaseQvac(); releaseQvac(); await closeQvac();
Agent.engine.resources = async () => { throw new Error('discovery failed'); };
await assert.rejects(acquireQvac(), /discovery failed/);
assert.equal(qvacStatus().owners, 0);
Agent.engine.resources = async () => ({ gpus: [{}] });
await acquireQvac(); assert.equal(loads, 2); releaseQvac();
} finally { await closeQvac(); Object.assign(Agent.engine, original); }
});