mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-18 18:40:47 -04:00
64 lines
2.3 KiB
JavaScript
64 lines
2.3 KiB
JavaScript
// Video Auth HTTP Route Tests
|
|
// Purpose: Verifies credential-free LAN RTSP publishing without weakening browser read authorization.
|
|
// Scope: Invokes the registered route with lightweight request/response doubles.
|
|
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const { registerVideoAuthRoute } = require('./httpRoute');
|
|
|
|
function createHarness({ requestIp = '127.0.0.1' } = {}) {
|
|
let handler;
|
|
const app = { post: (_path, fn) => { handler = fn; } };
|
|
registerVideoAuthRoute({
|
|
app,
|
|
io: { sockets: { sockets: new Map() } },
|
|
logger: { info() {}, warn() {} },
|
|
videoSessions: { getSession: () => null, revokeSession() {} },
|
|
getRequestIp: () => requestIp,
|
|
logAdminEvent() {},
|
|
extractStreamInfoFromBody: (body) => ({ type: 'rover', id: body.path, baseId: body.path }),
|
|
canAccessStream: () => false,
|
|
});
|
|
|
|
function request(body) {
|
|
const result = { statusCode: null };
|
|
const response = {
|
|
status(code) {
|
|
result.statusCode = code;
|
|
return response;
|
|
},
|
|
end() {
|
|
return response;
|
|
},
|
|
};
|
|
handler({ body }, response);
|
|
return result.statusCode;
|
|
}
|
|
|
|
return { request };
|
|
}
|
|
|
|
test('allows an RTSP rover publisher without a browser session', () => {
|
|
const { request } = createHarness();
|
|
assert.equal(request({ protocol: 'rtsp', action: 'publish', path: 'rover-one' }), 200);
|
|
});
|
|
|
|
test('allows server-local RTSP replay and snapshot readers without a browser session', () => {
|
|
const { request } = createHarness();
|
|
assert.equal(request({ protocol: 'rtsp', action: 'read', path: 'rover-one' }), 200);
|
|
});
|
|
|
|
test('continues rejecting an unauthenticated remote RTSP reader', () => {
|
|
const { request } = createHarness({ requestIp: '192.0.2.10' });
|
|
assert.equal(request({ protocol: 'rtsp', action: 'read', path: 'rover-one' }), 401);
|
|
});
|
|
|
|
test('allows a rover to read its RTSP speaker-forward stream without a browser session', () => {
|
|
const { request } = createHarness({ requestIp: '192.0.2.10' });
|
|
assert.equal(request({ protocol: 'rtsp', action: 'read', path: 'rover-one-fwd' }), 200);
|
|
});
|
|
|
|
test('continues rejecting an unauthenticated WebRTC read', () => {
|
|
const { request } = createHarness();
|
|
assert.equal(request({ protocol: 'webrtc', action: 'read', path: 'rover-one' }), 401);
|
|
});
|