Files
chimera-Public/test/server/remote-play-worker.test.js
T

68 lines
2.9 KiB
JavaScript

'use strict';
const test = require('node:test');
const assert = require('node:assert/strict');
const {
VERSION, compareVersions, parseChiakiLog, validateArchiveEntries, validateReleaseMetadata,
} = require('../../remote-play-worker/worker');
function releaseFixture(overrides = {}) {
const name = 'chiaki-ng-win_x64-MSYS2-Release-portable.zip';
return {
tag_name: 'v1.10.0', draft: false, prerelease: false,
assets: [{
name, size: 101_237_965,
digest: `sha256:${'ab'.repeat(32)}`,
browser_download_url: `https://github.com/streetpea/chiaki-ng/releases/download/v1.10.0/${name}`,
}],
...overrides,
};
}
test('Remote Play worker validates only the expected stable upstream portable asset', () => {
const release = validateReleaseMetadata(releaseFixture(), 'x64');
assert.equal(release.version, '1.10.0');
assert.equal(release.size, 101_237_965);
assert.match(release.sha256, /^[a-f0-9]{64}$/);
assert.throws(() => validateReleaseMetadata(releaseFixture({ prerelease: true }), 'x64'), /stabiele/);
const wrongHost = releaseFixture();
wrongHost.assets[0].browser_download_url = wrongHost.assets[0].browser_download_url.replace('github.com', 'example.test');
assert.throws(() => validateReleaseMetadata(wrongHost, 'x64'), /officiële releasepad/);
const noDigest = releaseFixture();
noDigest.assets[0].digest = null;
assert.throws(() => validateReleaseMetadata(noDigest, 'x64'), /SHA-256/);
});
test('Remote Play worker rejects archive traversal before extraction', () => {
assert.deepEqual(validateArchiveEntries('chiaki-ng-Win/\nchiaki-ng-Win/chiaki.exe\n'), ['chiaki-ng-Win/', 'chiaki-ng-Win/chiaki.exe']);
assert.throws(() => validateArchiveEntries('../outside.exe\n'), /onveilig pad/);
assert.throws(() => validateArchiveEntries('C:\\Windows\\outside.exe\n'), /onveilig pad/);
assert.throws(() => validateArchiveEntries('/absolute/outside.exe\n'), /onveilig pad/);
});
test('Remote Play worker reports only aggregate non-secret stream health', () => {
const health = parseChiakiLog(`
Using hardware decoder "vulkan" with pix_fmt=vulkan
Switched to profile 0, resolution: 1920x1080
Senkusha determined average RTT = 5.602 ms
Detected missing or corrupt frame(s)
FEC failed
Missing unit
Received duplicate unit
AVCodec internal buffer is full removing frames before pushing
AVCodec internal buffer is full removing frames before pushing
`, 1234);
assert.deepEqual(health, {
checkedAt: 1234, resolution: '1920x1080', rttMs: 5.6, decoder: 'vulkan',
packetErrors: 3, duplicateUnits: 1, decoderDrops: 2, status: 'degraded',
});
assert.doesNotMatch(JSON.stringify(health), /account|regist|192\.168\./i);
});
test('Remote Play worker uses semantic client versions', () => {
assert.equal(VERSION, '1.1.0');
assert.equal(compareVersions('1.10.0', '1.9.9'), 1);
assert.equal(compareVersions('1.10.0.0', 'v1.10.0'), 0);
assert.equal(compareVersions('invalid', '1.10.0'), null);
});