36 lines
1.9 KiB
Nu
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'
|
|
}
|