Files
sausage/userland/web/seed-check.nu
T

36 lines
1.9 KiB
Nu

#!/usr/bin/env nu
# Check the packaged seed through its web service without configured providers.
def main [host: path, bundle: path] {
let world = ($env.TMPDIR | path join web-world)
^$host init $world
if $env.LAST_EXIT_CODE != 0 { error make {msg: 'seed init failed'} }
'providers: {}' | save --force ($world | path join world etc sausage config.yaml)
let server = (job spawn {
'' | ^$host run $world out> server.stdout err> server.stderr
})
try {
let deadline = (date now) + 60sec
loop {
let response = (^curl --silent --show-error --noproxy '*' --max-time 2 --output whoami.json --write-out '%{http_code}' http://127.0.0.1:8080/api/whoami | complete)
if $response.exit_code == 0 and $response.stdout == '200' { break }
if (date now) >= $deadline { error make {msg: $'GET /api/whoami did not return 200: ($response)'} }
}
let response = (^curl --silent --show-error --noproxy '*' --max-time 5 --output page.html --write-out '%{http_code}' http://127.0.0.1:8080/ | complete)
if $response.exit_code != 0 or $response.stdout != '200' {
error make {msg: $'GET / expected 200, received ($response.stdout): ($response.stderr)'}
}
if not (open --raw page.html | str contains 'Sausage chat') { error make {msg: 'GET / did not return the chat page'} }
let paths = (^find $bundle -printf '%P\n' | complete)
if $paths.exit_code != 0 { error make {msg: $paths.stderr} }
if ($paths.stdout | lines | any {|path| $path =~ '(^|/)[0-9a-z]{32}-' }) {
error make {msg: 'a bundle path has a Nix store hash prefix'}
}
} catch {|err|
job kill $server
print --stderr (open --raw server.stderr)
error make {msg: $err.msg}
}
job kill $server
print 'PASS packaged seed: GET /, GET /api/whoami, and unprefixed paths'
}