mirror of
https://github.com/containers/podman.git
synced 2026-01-30 08:51:53 -05:00
When I originally wrote this code I had no idea what POST
would look like so I did a sloppy job, deferring making it
usable. Now that we have some real-world examples in place,
I have a better understanding of what params look like and
how to make tests more readable/maintainable. (Deferring isn't
always bad: one of my early ideas was to separate params using
commas; that would've been a disaster because some JSON values,
such as arrays, include commas).
This commit implements a better way of dealing with POST:
* The main concept is still 'key=value'
* When value is a JSON object (dictionary, array), it
can be quoted.
* Multiple params are simply separated by spaces.
The 3-digit HTTP code is a prominent, readable separator
between POST params and expected results. The parsing
code is a little uglier, but test developers need
never see that. The important thing is that writing
tests is now easier.
* POST params can be empty (this removes the need for a
useless '')
I snuck in one unrelated change: one of the newly-added
tests, .NetworkSettings, was failing when run rootless
(which is how I test on my setup). I made it conditional.
Signed-off-by: Ed Santiago <santiago@redhat.com>
89 lines
2.6 KiB
Bash
89 lines
2.6 KiB
Bash
# -*- sh -*-
|
|
#
|
|
# The earliest most basic tests. If any of these fail, life is bad
|
|
#
|
|
|
|
# NOTE: paths with a leading slash will be interpreted as-is;
|
|
# paths without will have '/v1.40/' prepended.
|
|
t GET /_ping 200 OK
|
|
t HEAD /_ping 200
|
|
t GET /libpod/_ping 200 OK
|
|
t HEAD /libpod/_ping 200
|
|
|
|
t GET _ping 200 OK
|
|
t HEAD _ping 200
|
|
t GET libpod/_ping 200 OK
|
|
t HEAD libpod/_ping 200
|
|
|
|
for i in /version version; do
|
|
t GET $i 200 \
|
|
.Components[0].Name="Podman Engine" \
|
|
.Components[0].Details.APIVersion=3.1.0-dev \
|
|
.Components[0].Details.MinAPIVersion=3.0.0 \
|
|
.Components[0].Details.Os=linux \
|
|
.ApiVersion=1.40 \
|
|
.MinAPIVersion=1.24 \
|
|
.Os=linux
|
|
done
|
|
|
|
#
|
|
# Garbage tests - requests that should yield errors
|
|
#
|
|
t GET /nonesuch 404
|
|
t POST /nonesuch 404
|
|
t GET container/nonesuch/json 404
|
|
t GET libpod/containers/nonesuch/json 404
|
|
|
|
#### FIXME: maybe someday: t GET 'libpod/containers/json?a=b' 400
|
|
|
|
# Method not allowed
|
|
t POST /_ping 405
|
|
t DELETE /_ping 405
|
|
t POST libpod/containers/json 405
|
|
t POST libpod/pods/abc 405
|
|
t POST info 405
|
|
t GET libpod/containers/create 405
|
|
|
|
#
|
|
# system info
|
|
#
|
|
# Some day perhaps it will always be runc; for now, cgroupsv2 requires crun
|
|
#
|
|
# FIXME: run 'podman info --format=json', and compare select fields
|
|
runtime=runc
|
|
if have_cgroupsv2; then
|
|
runtime=crun
|
|
fi
|
|
t GET info 200 \
|
|
.OSType=linux \
|
|
.DefaultRuntime~.*$runtime \
|
|
.MemTotal~[0-9]\\+
|
|
|
|
# Timing: make sure server stays responsive.
|
|
# Because /info may need to check storage, it may be slow the first time.
|
|
# Let's invoke it once to prime caches, then run ten queries in a timed loop.
|
|
t GET info 200
|
|
t0=$SECONDS
|
|
for i in $(seq 1 10); do
|
|
# FIXME: someday: refactor t(), separate out the 'curl' logic so we
|
|
# can call it directly. Then we won't get ten annoying 'ok' lines.
|
|
t GET info 200
|
|
done
|
|
t1=$SECONDS
|
|
delta_t=$((t1 - t2))
|
|
|
|
# Desired number of seconds in which we expect to run.
|
|
# FIXME: 10 seconds is a lot! PR #8076 opened to investigate why.
|
|
want=10
|
|
if [ $delta_t -le $want ]; then
|
|
_show_ok 1 "Time for ten /info requests ($delta_t seconds) <= ${want}s"
|
|
else
|
|
_show_ok 0 "Time for ten /info requests" "<= $want seconds" "$delta_t seconds"
|
|
fi
|
|
|
|
# Simple events test (see #7078)
|
|
t GET "events?stream=false" 200
|
|
t GET "libpod/events?stream=false" 200
|
|
|
|
# vim: filetype=sh
|