openvibers/openvibe.bot Commits

The machines API says how many desks run on each machine (desks_running, from its telemetry), for placing an agent's next desk; the desks page test asserts the count (#186)

OP OpenVibers committed 17 days ago · ad91d82962 · 2 files, +7 −1

Changes

ddiff --git a/server/api/v1.js b/server/api/v1.js
iindex 0317b9f..dc9a218 100644
---- a/server/api/v1.js
++++ b/server/api/v1.js
@@@ -429,6 +429,8 @@ function v1Router({ domain, apiAuth, limits, hub, jobs: jobService, config, subm
level: typeof sensors.computer_level === 'string' ? sensors.computer_level : ((pick('files') || pick('terminal') || pick('screen') || {}).level || null),
terminal: pick('terminal'), files: pick('files'), screen: pick('screen'), probe: pick('probe'), input: pick('input'), browser: pick('browser'), desk: pick('desk'),
waiting: Number.isInteger(sensors.computer_waiting) ? sensors.computer_waiting : null,
++ // Desks running now (the Node's telemetry): where an agent's next desk has room (Desks plan D6, placement).
++ desks_running: Number.isInteger(sensors.computer_desks) ? sensors.computer_desks : null,
} : null,
};
};
ddiff --git a/test/machine-computer.test.js b/test/machine-computer.test.js
iindex a7cba05..fa4ddfb 100644
---- a/test/machine-computer.test.js
++++ b/test/machine-computer.test.js
@@@ -362,10 +362,14 @@ const { boot, check, done } = require('./helpers/app');
await check('a machine\'s desks page: its running desks to watch, take over or stop, for its owner only; stop is same-site only', async () => {
const cookie = (user) => ({ Cookie: `ov_token=${t.network.signUser(user)}` });
const host = await machine(alex, { ...COMPUTER, desk: { level: 'trusted', window_manager: 'openbox', input: true, screen: true, named: true, max_desks: 4, kinds: ['desktop', 'browser'] } });
++ // Telemetry samples are kept at most twice a second: this one comes after the machine's first.
++ await t.wait(600);
host.c.send(frame('telemetry', { sensors: { computer_level: 'trusted', computer_waiting: 0, computer_running: 0, computer_desks: 2 } }));
-- await poll(async () => (await (await fetch(`${t.base}/machines`, { headers: cookie(alex) })).text()).includes('2 desks running'));
++ assert.ok(await poll(async () => (await (await fetch(`${t.base}/machines`, { headers: cookie(alex) })).text()).includes('2 desks running')), 'the card says how many run');
const list = await (await fetch(`${t.base}/machines`, { headers: cookie(alex) })).text();
assert.ok(list.includes(`href="/machines/${host.deviceId}/desks"`), 'the card links its desks');
++ const api = await t.call('GET', '/api/v1/machines', { user: alex });
++ assert.strictEqual(api.json.machines.find((m) => m.id === host.deviceId).computer.desks_running, 2, 'the API says how many run, for placement');
const page = await fetch(`${t.base}/machines/${host.deviceId}/desks`, { headers: cookie(alex) });
assert.strictEqual(page.status, 200);
const html = await page.text();