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)
Changes
@@@ -429,6 +429,8 @@ function v1Router({ domain, apiAuth, limits, hub, jobs: jobService, config, submlevel: 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,};};@@@ -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();
@@ -429,6 +429,8 @@ function v1Router({ domain, apiAuth, limits, hub, jobs: jobService, config, subm
@@ -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),
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'),
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,
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,
} : null,
};
};
};
};
@@ -362,10 +362,14 @@ const { boot, check, done } = require('./helpers/app');
@@ -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 () => {
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 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'] } });
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 } }));
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();
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');
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) });
const page = await fetch(`${t.base}/machines/${host.deviceId}/desks`, { headers: cookie(alex) });
assert.strictEqual(page.status, 200);
assert.strictEqual(page.status, 200);
const html = await page.text();
const html = await page.text();