cc-libs/packages/trapos-boot/tests/boot.lua
2026-06-16 22:16:58 +02:00

111 lines
2.9 KiB
Lua

local createLibTest = require('/apis/libtest');
local testlib = createLibTest({ ... });
local function runStartupWithStubs(settingValues)
settingValues = settingValues or {};
local settingIndex = 0;
local calls = {
rebooted = false,
shutdown = false,
shellRuns = {},
prints = {},
};
local env = setmetatable({
require = require,
fs = {
exists = function(path)
return path ~= '/trapos/manifest.json' and fs.exists(path);
end,
delete = function() end,
},
os = {
reboot = function()
calls.rebooted = true;
end,
shutdown = function()
calls.shutdown = true;
end,
sleep = function() end,
},
settings = {
get = function(key)
if key ~= 'trapos.on_session_end' then return nil; end
settingIndex = settingIndex + 1;
if type(settingValues) == 'table' then
return settingValues[settingIndex] or settingValues[#settingValues];
end
return settingValues;
end,
},
parallel = {
waitForAny = function(firstFn)
firstFn();
end,
},
print = function(message)
calls.prints[#calls.prints + 1] = tostring(message);
end,
shell = {
path = function()
return '/rom/programs';
end,
run = function(program)
calls.shellRuns[#calls.shellRuns + 1] = program;
return true;
end,
setPath = function() end,
},
}, { __index = _G });
env._G = env;
local chunk, loadErr = loadfile('/startup/boot.lua', 't', env);
if not chunk then
error(loadErr, 0);
end
local ok, err = pcall(chunk);
if not ok then
error(err, 0);
end
return calls;
end
testlib.test('shell exit shuts down by default', function()
local calls = runStartupWithStubs();
testlib.assertEquals(calls.shellRuns[1], '/programs/motd.lua');
testlib.assertEquals(calls.shellRuns[2], 'shell');
testlib.assertEquals(calls.shutdown, true);
testlib.assertEquals(calls.rebooted, false);
for _, message in ipairs(calls.prints) do
testlib.assertTrue(
not string.find(message, 'Servers stopped', 1, true),
'startup should not print a forced reboot message'
);
end
end);
testlib.test('shell exit reboots when policy is reboot', function()
local calls = runStartupWithStubs('reboot');
testlib.assertEquals(calls.shellRuns[1], '/programs/motd.lua');
testlib.assertEquals(calls.shellRuns[2], 'shell');
testlib.assertEquals(calls.shutdown, false);
testlib.assertEquals(calls.rebooted, true);
end);
testlib.test('shell exit relaunches until policy changes', function()
local calls = runStartupWithStubs({ 'relaunch', 'shutdown' });
testlib.assertEquals(calls.shellRuns[1], '/programs/motd.lua');
testlib.assertEquals(calls.shellRuns[2], 'shell');
testlib.assertEquals(calls.shellRuns[3], 'shell');
testlib.assertEquals(calls.shutdown, true);
testlib.assertEquals(calls.rebooted, false);
end);
testlib.run();