fix(postinstall): persist default sandbox url

This commit is contained in:
Guillaume ARM 2026-06-15 01:59:15 +02:00
parent 84c901f77a
commit 196152921b
4 changed files with 24 additions and 20 deletions

View File

@ -1,6 +1,6 @@
{ {
"packages": { "packages": {
"trapos-core": "0.6.2", "trapos-core": "0.6.3",
"trapos-test": "0.2.1", "trapos-test": "0.2.1",
"trapos-boot": "0.3.3", "trapos-boot": "0.3.3",
"trapos-net": "0.3.0", "trapos-net": "0.3.0",

View File

@ -1,6 +1,6 @@
{ {
"name": "trapos-core", "name": "trapos-core",
"version": "0.6.2", "version": "0.6.3",
"description": "TrapOS base: package manager, event loop, upgrade and event tools", "description": "TrapOS base: package manager, event loop, upgrade and event tools",
"dependencies": [], "dependencies": [],
"files": [ "files": [

View File

@ -47,8 +47,7 @@ local version = readManifestVersion();
local configuredSandboxUrl = false; local configuredSandboxUrl = false;
if isBlank(settings.get(SANDBOX_URL_SETTING)) then if isBlank(settings.get(SANDBOX_URL_SETTING)) then
settings.set(SANDBOX_URL_SETTING, DEFAULT_SANDBOX_URL); shell.run('set', SANDBOX_URL_SETTING, DEFAULT_SANDBOX_URL);
settings.save();
configuredSandboxUrl = true; configuredSandboxUrl = true;
end end

View File

@ -7,27 +7,29 @@ local DEFAULT_SANDBOX_URL = 'wss://trapos.trapcloud.fr';
local function fakeSettings(values) local function fakeSettings(values)
return { return {
values = values or {}, values = values or {},
saved = 0,
get = function(self, key) get = function(self, key)
return self.values[key]; return self.values[key];
end, end,
set = function(self, key, value)
self.values[key] = value;
end,
save = function(self)
self.saved = self.saved + 1;
end,
}; };
end end
local function runPostinstall(settingsLib) local function runPostinstall(settingsLib)
local lines = {}; local lines = {};
local shellRuns = {};
local env = setmetatable({ local env = setmetatable({
require = require, require = require,
settings = { settings = {
get = function(key) return settingsLib:get(key); end, get = function(key) return settingsLib:get(key); end,
set = function(key, value) settingsLib:set(key, value); end, },
save = function() settingsLib:save(); end, shell = {
run = function(...)
local args = { ... };
shellRuns[#shellRuns + 1] = args;
if args[1] == 'set' and args[2] then
settingsLib.values[args[2]] = args[3];
end
return true;
end,
}, },
print = function(line) print = function(line)
lines[#lines + 1] = line or ''; lines[#lines + 1] = line or '';
@ -38,7 +40,7 @@ local function runPostinstall(settingsLib)
if not chunk then error(loadErr, 0); end if not chunk then error(loadErr, 0); end
local ok, err = pcall(chunk); local ok, err = pcall(chunk);
if not ok then error(err, 0); end if not ok then error(err, 0); end
return lines; return lines, shellRuns;
end end
local function containsLine(lines, expected) local function containsLine(lines, expected)
@ -50,20 +52,23 @@ end
testlib.test('postinstall defaults missing sandbox url', function() testlib.test('postinstall defaults missing sandbox url', function()
local settingsLib = fakeSettings(); local settingsLib = fakeSettings();
local lines = runPostinstall(settingsLib); local lines, shellRuns = runPostinstall(settingsLib);
testlib.assertEquals(settingsLib.values['sandbox.url'], DEFAULT_SANDBOX_URL); testlib.assertEquals(settingsLib.values['sandbox.url'], DEFAULT_SANDBOX_URL);
testlib.assertEquals(settingsLib.saved, 1); testlib.assertEquals(#shellRuns, 1);
testlib.assertEquals(shellRuns[1][1], 'set');
testlib.assertEquals(shellRuns[1][2], 'sandbox.url');
testlib.assertEquals(shellRuns[1][3], DEFAULT_SANDBOX_URL);
testlib.assertTrue(containsLine(lines, '=> Configured sandbox.url to ' .. DEFAULT_SANDBOX_URL .. '.')); testlib.assertTrue(containsLine(lines, '=> Configured sandbox.url to ' .. DEFAULT_SANDBOX_URL .. '.'));
testlib.assertTrue(containsLine(lines, '=> Sandbox password not set.')); testlib.assertTrue(containsLine(lines, '=> Sandbox password not set.'));
end); end);
testlib.test('postinstall treats empty sandbox url as missing', function() testlib.test('postinstall treats empty sandbox url as missing', function()
local settingsLib = fakeSettings({ ['sandbox.url'] = '' }); local settingsLib = fakeSettings({ ['sandbox.url'] = '' });
runPostinstall(settingsLib); local _, shellRuns = runPostinstall(settingsLib);
testlib.assertEquals(settingsLib.values['sandbox.url'], DEFAULT_SANDBOX_URL); testlib.assertEquals(settingsLib.values['sandbox.url'], DEFAULT_SANDBOX_URL);
testlib.assertEquals(settingsLib.saved, 1); testlib.assertEquals(#shellRuns, 1);
end); end);
testlib.test('postinstall preserves existing sandbox url and password', function() testlib.test('postinstall preserves existing sandbox url and password', function()
@ -71,10 +76,10 @@ testlib.test('postinstall preserves existing sandbox url and password', function
['sandbox.url'] = 'wss://custom.example', ['sandbox.url'] = 'wss://custom.example',
['sandbox.password'] = 'secret', ['sandbox.password'] = 'secret',
}); });
local lines = runPostinstall(settingsLib); local lines, shellRuns = runPostinstall(settingsLib);
testlib.assertEquals(settingsLib.values['sandbox.url'], 'wss://custom.example'); testlib.assertEquals(settingsLib.values['sandbox.url'], 'wss://custom.example');
testlib.assertEquals(settingsLib.saved, 0); testlib.assertEquals(#shellRuns, 0);
testlib.assertTrue(containsLine(lines, '=> Keeping existing sandbox.url.')); testlib.assertTrue(containsLine(lines, '=> Keeping existing sandbox.url.'));
testlib.assertTrue(containsLine(lines, '=> Sandbox password already configured.')); testlib.assertTrue(containsLine(lines, '=> Sandbox password already configured.'));
end); end);