fix(postinstall): configure default sandbox url
This commit is contained in:
parent
ac1a7385e9
commit
84c901f77a
@ -1,6 +1,6 @@
|
||||
{
|
||||
"packages": {
|
||||
"trapos-core": "0.6.1",
|
||||
"trapos-core": "0.6.2",
|
||||
"trapos-test": "0.2.1",
|
||||
"trapos-boot": "0.3.3",
|
||||
"trapos-net": "0.3.0",
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "trapos-core",
|
||||
"version": "0.6.1",
|
||||
"version": "0.6.2",
|
||||
"description": "TrapOS base: package manager, event loop, upgrade and event tools",
|
||||
"dependencies": [],
|
||||
"files": [
|
||||
|
||||
@ -1,5 +1,13 @@
|
||||
local createVersion = require('/apis/libversion');
|
||||
|
||||
local DEFAULT_SANDBOX_URL = 'wss://trapos.trapcloud.fr';
|
||||
local SANDBOX_URL_SETTING = 'sandbox.url';
|
||||
local SANDBOX_PASSWORD_SETTING = 'sandbox.password';
|
||||
|
||||
local function isBlank(value)
|
||||
return type(value) ~= 'string' or value == '';
|
||||
end
|
||||
|
||||
local function printUsage()
|
||||
print('trapos-postinstall usage:');
|
||||
print();
|
||||
@ -36,6 +44,15 @@ local function readManifestVersion()
|
||||
end
|
||||
|
||||
local version = readManifestVersion();
|
||||
local configuredSandboxUrl = false;
|
||||
|
||||
if isBlank(settings.get(SANDBOX_URL_SETTING)) then
|
||||
settings.set(SANDBOX_URL_SETTING, DEFAULT_SANDBOX_URL);
|
||||
settings.save();
|
||||
configuredSandboxUrl = true;
|
||||
end
|
||||
|
||||
local hasSandboxPassword = not isBlank(settings.get(SANDBOX_PASSWORD_SETTING));
|
||||
|
||||
print();
|
||||
if version then
|
||||
@ -43,6 +60,16 @@ if version then
|
||||
else
|
||||
print('=> TrapOS installed.');
|
||||
end
|
||||
if configuredSandboxUrl then
|
||||
print('=> Configured sandbox.url to ' .. DEFAULT_SANDBOX_URL .. '.');
|
||||
else
|
||||
print('=> Keeping existing sandbox.url.');
|
||||
end
|
||||
if hasSandboxPassword then
|
||||
print('=> Sandbox password already configured.');
|
||||
else
|
||||
print('=> Sandbox password not set.');
|
||||
end
|
||||
print();
|
||||
print('Get started:');
|
||||
print(' sandbox --help -- open the sandbox help');
|
||||
|
||||
92
tests/postinstall.lua
Normal file
92
tests/postinstall.lua
Normal file
@ -0,0 +1,92 @@
|
||||
local createLibTest = require('/apis/libtest');
|
||||
|
||||
local testlib = createLibTest({ ... });
|
||||
|
||||
local DEFAULT_SANDBOX_URL = 'wss://trapos.trapcloud.fr';
|
||||
|
||||
local function fakeSettings(values)
|
||||
return {
|
||||
values = values or {},
|
||||
saved = 0,
|
||||
get = function(self, key)
|
||||
return self.values[key];
|
||||
end,
|
||||
set = function(self, key, value)
|
||||
self.values[key] = value;
|
||||
end,
|
||||
save = function(self)
|
||||
self.saved = self.saved + 1;
|
||||
end,
|
||||
};
|
||||
end
|
||||
|
||||
local function runPostinstall(settingsLib)
|
||||
local lines = {};
|
||||
local env = setmetatable({
|
||||
require = require,
|
||||
settings = {
|
||||
get = function(key) return settingsLib:get(key); end,
|
||||
set = function(key, value) settingsLib:set(key, value); end,
|
||||
save = function() settingsLib:save(); end,
|
||||
},
|
||||
print = function(line)
|
||||
lines[#lines + 1] = line or '';
|
||||
end,
|
||||
}, { __index = _G });
|
||||
|
||||
local chunk, loadErr = loadfile('/trapos/programs/trapos-postinstall.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 lines;
|
||||
end
|
||||
|
||||
local function containsLine(lines, expected)
|
||||
for _, line in ipairs(lines) do
|
||||
if line == expected then return true; end
|
||||
end
|
||||
return false;
|
||||
end
|
||||
|
||||
testlib.test('postinstall defaults missing sandbox url', function()
|
||||
local settingsLib = fakeSettings();
|
||||
local lines = runPostinstall(settingsLib);
|
||||
|
||||
testlib.assertEquals(settingsLib.values['sandbox.url'], DEFAULT_SANDBOX_URL);
|
||||
testlib.assertEquals(settingsLib.saved, 1);
|
||||
testlib.assertTrue(containsLine(lines, '=> Configured sandbox.url to ' .. DEFAULT_SANDBOX_URL .. '.'));
|
||||
testlib.assertTrue(containsLine(lines, '=> Sandbox password not set.'));
|
||||
end);
|
||||
|
||||
testlib.test('postinstall treats empty sandbox url as missing', function()
|
||||
local settingsLib = fakeSettings({ ['sandbox.url'] = '' });
|
||||
runPostinstall(settingsLib);
|
||||
|
||||
testlib.assertEquals(settingsLib.values['sandbox.url'], DEFAULT_SANDBOX_URL);
|
||||
testlib.assertEquals(settingsLib.saved, 1);
|
||||
end);
|
||||
|
||||
testlib.test('postinstall preserves existing sandbox url and password', function()
|
||||
local settingsLib = fakeSettings({
|
||||
['sandbox.url'] = 'wss://custom.example',
|
||||
['sandbox.password'] = 'secret',
|
||||
});
|
||||
local lines = runPostinstall(settingsLib);
|
||||
|
||||
testlib.assertEquals(settingsLib.values['sandbox.url'], 'wss://custom.example');
|
||||
testlib.assertEquals(settingsLib.saved, 0);
|
||||
testlib.assertTrue(containsLine(lines, '=> Keeping existing sandbox.url.'));
|
||||
testlib.assertTrue(containsLine(lines, '=> Sandbox password already configured.'));
|
||||
end);
|
||||
|
||||
testlib.test('postinstall treats empty sandbox password as missing', function()
|
||||
local settingsLib = fakeSettings({
|
||||
['sandbox.url'] = 'wss://custom.example',
|
||||
['sandbox.password'] = '',
|
||||
});
|
||||
local lines = runPostinstall(settingsLib);
|
||||
|
||||
testlib.assertTrue(containsLine(lines, '=> Sandbox password not set.'));
|
||||
end);
|
||||
|
||||
testlib.run();
|
||||
Loading…
Reference in New Issue
Block a user