78 lines
2.6 KiB
Lua
78 lines
2.6 KiB
Lua
-- Integration-test driver: exercises the REAL trapos-sandbox client (libsandbox)
|
|
-- against a real gateway. Reuses startSession/request/onMessage so the test covers
|
|
-- production client code + CraftOS JSON serialization quirks.
|
|
--
|
|
-- Args (via shell.run): url, secret, scenario.
|
|
-- url gateway origin, e.g. ws://127.0.0.1:PORT (daemon appends /gateway)
|
|
-- secret shared secret ('' => none)
|
|
-- scenario health | auth | idle (default: health)
|
|
--
|
|
-- Each scenario prints a single sentinel line the TS test asserts on.
|
|
-- NOTE: shell.run re-tokenizes its arguments, so empty-string args are dropped and
|
|
-- positions shift. The harness passes '-' as the "no secret" sentinel instead of ''.
|
|
local args = { ... };
|
|
local url = args[1];
|
|
local secret = args[2];
|
|
if secret == '' or secret == '-' then secret = nil; end
|
|
local scenario = args[3] or 'health';
|
|
|
|
local createSandbox = require('/apis/libsandbox');
|
|
local createEventLoop = require('/apis/eventloop');
|
|
|
|
_G.bootEventLoop = createEventLoop();
|
|
local sandbox = createSandbox();
|
|
local session = sandbox.startSession({
|
|
eventloop = _G.bootEventLoop,
|
|
url = url,
|
|
secret = secret,
|
|
os = os,
|
|
});
|
|
|
|
-- Connect, probe the gateway, report opencodeOk.
|
|
local function runHealth()
|
|
os.pullEvent('trapos_sandbox_connected');
|
|
local ok, payload = sandbox.request('probe_gateway');
|
|
if ok then
|
|
print('__SANDBOX_HEALTH__ sandboxOk=' .. tostring(payload.sandboxOk)
|
|
.. ' opencodeOk=' .. tostring(payload.opencodeOk));
|
|
else
|
|
print('__SANDBOX_HEALTH__ error=' .. tostring(type(payload) == 'table' and payload.code));
|
|
end
|
|
end
|
|
|
|
-- Poll the hello outcome: ready => ok:true, terminal lastError => ok:false code.
|
|
local function runAuth()
|
|
local deadline = os.epoch('utc') + 8000;
|
|
while os.epoch('utc') < deadline do
|
|
if session.isReady() then
|
|
print('__SANDBOX_HELLO__ ok=true');
|
|
return;
|
|
end
|
|
local err = session.lastError();
|
|
if err then
|
|
print('__SANDBOX_HELLO__ ok=false code=' .. tostring(err));
|
|
return;
|
|
end
|
|
os.sleep(0.1);
|
|
end
|
|
print('__SANDBOX_HELLO__ ok=false code=timeout');
|
|
end
|
|
|
|
-- Connect and stay registered so the TS side can drive the gateway->computer
|
|
-- direction (reverse ping) or assert registry state (duplicate newest-wins).
|
|
local function runIdle()
|
|
os.pullEvent('trapos_sandbox_connected');
|
|
print('__SANDBOX_READY__ ' .. sandbox.traposId(os));
|
|
os.sleep(10);
|
|
end
|
|
|
|
local scenarios = { health = runHealth, auth = runAuth, idle = runIdle };
|
|
local run = scenarios[scenario] or runHealth;
|
|
|
|
parallel.waitForAny(
|
|
function() _G.bootEventLoop.runLoop(true); end,
|
|
run
|
|
);
|
|
|
|
os.shutdown();
|