Commit 9422eec
committed
cmd/runtimetest/main: Use TAP diagnostics for errors
This lets us print SHOULD violations even if they're non-fatal. It
also gets us back to consumable TAP output. I added a /foo entry to
defaultFS for testing, and before this commit:
$ ./runtimetest
TAP version 13
not ok 1 - root filesystem
ok 2 - hostname
not ok 3 - process
not ok 4 - mounts
not ok 5 - user
ok 6 - rlimits
ok 7 - capabilities
ok 8 - default symlinks
ok 9 - default file system
ok 10 - default devices
ok 11 - linux devices
not ok 12 - linux process
ok 13 - masked paths
ok 14 - oom score adj
ok 15 - read only paths
ok 16 - rootfs propagation
ok 17 - sysctls
ok 18 - uid mappings
ok 19 - gid mappings
1..19
6 errors occurred:
* rootfs must not be readonly
Refer to: https://github.com/opencontainers/runtime-spec/blob/v1.0.0/config.md#root
* Cwd expected: /, actual: /home/wking/.local/lib/go/src/github.com/opencontainers/runtime-tools
* mounts[1] {/tmp tmpfs none []} does not exist
Refer to: https://github.com/opencontainers/runtime-spec/blob/v1.0.0/config.md#mounts
* mounts[2] {/dev devtmpfs devtmpfs []} mounted before mounts[0] {/tmp tmpfs none []}
Refer to: https://github.com/opencontainers/runtime-spec/blob/v1.0.0/config.md#mounts
* UID expected: 1, actual: 1000
* Process arguments expected: ./runtimetest, actual: sh
$ echo $?
1
The TAP 13 spec doesn't cover script exit-code handling [1], but that
exit code confuses prove unless you set --ignore-exit:
$ prove ./runtimetest
./runtimetest .. 1/? 6 errors occurred:
* rootfs must not be readonly
Refer to: https://github.com/opencontainers/runtime-spec/blob/v1.0.0/config.md#root
* Cwd expected: /, actual: /home/wking/.local/lib/go/src/github.com/opencontainers/runtime-tools
* mounts[1] {/tmp tmpfs none []} does not exist
Refer to: https://github.com/opencontainers/runtime-spec/blob/v1.0.0/config.md#mounts
* mounts[2] {/dev devtmpfs devtmpfs []} mounted before mounts[0] {/tmp tmpfs none []}
Refer to: https://github.com/opencontainers/runtime-spec/blob/v1.0.0/config.md#mounts
* UID expected: 1, actual: 1000
* Process arguments expected: ./runtimetest, actual: sh
./runtimetest .. Dubious, test returned 1 (wstat 256, 0x100)
Failed 5/19 subtests
Test Summary Report
-------------------
./runtimetest (Wstat: 256 Tests: 19 Failed: 5)
Failed tests: 1, 3-5, 12
Non-zero exit status: 1
Files=1, Tests=19, 0 wallclock secs ( 0.02 usr + 0.00 sys = 0.02 CPU)
Result: FAIL
Note the "Dubious, test returned 1". And with the diagnostics written
to stderr, there's no way to have prove catch that.
With this commit, we're back to TAP-compatible output and exit codes,
using TAP's diagnostics [2] to share the failure details.
$ ./runtimetest
TAP version 13
not ok 1 - root filesystem
# rootfs must not be readonly
# Refer to: https://github.com/opencontainers/runtime-spec/blob/v1.0.0/config.md#root
ok 2 - hostname
not ok 3 - process
# Cwd expected: /, actual: /home/wking/.local/lib/go/src/github.com/opencontainers/runtime-tools
not ok 4 - mounts
# mounts[1] {/tmp tmpfs none []} does not exist
# Refer to: https://github.com/opencontainers/runtime-spec/blob/v1.0.0/config.md#mounts
not ok 5 - mounts
# mounts[2] {/dev devtmpfs devtmpfs []} mounted before mounts[0] {/tmp tmpfs none []}
# Refer to: https://github.com/opencontainers/runtime-spec/blob/v1.0.0/config.md#mounts
not ok 6 - user
# UID expected: 1, actual: 1000
ok 7 - rlimits
ok 8 - capabilities
ok 9 - default symlinks
ok 10 - default file system
ok 11 - default devices
ok 12 - linux devices
not ok 13 - linux process
# Process arguments expected: ./runtimetest, actual: sh
ok 14 - masked paths
ok 15 - oom score adj
ok 16 - read only paths
ok 17 - rootfs propagation
ok 18 - sysctls
ok 19 - uid mappings
ok 20 - gid mappings
1..20
$ echo $?
0
You can use prove without --ignore-edit to summarize:
$ prove ./runtimetest
./runtimetest .. Failed 6/20 subtests
Test Summary Report
-------------------
./runtimetest (Wstat: 0 Tests: 20 Failed: 6)
Failed tests: 1, 3-6, 13
Files=1, Tests=20, 0 wallclock secs ( 0.03 usr + 0.00 sys = 0.03 CPU)
Result: FAIL
And prove knows that the tests failed from TAP, with the script exit
code saying "we were able to run the tests" and not speaking to
pass/fail:
$ echo $?
1
If that's too compact, you can ask prove to show failures and
comments:
$ prove -fo ./runtimetest
./runtimetest .. 1/?
not ok 1 - root filesystem
# rootfs must not be readonly
# Refer to: https://github.com/opencontainers/runtime-spec/blob/v1.0.0/config.md#root
not ok 3 - process
# Cwd expected: /, actual: /home/wking/.local/lib/go/src/github.com/opencontainers/runtime-tools
not ok 4 - mounts
# mounts[1] {/tmp tmpfs none []} does not exist
# Refer to: https://github.com/opencontainers/runtime-spec/blob/v1.0.0/config.md#mounts
not ok 5 - mounts
# mounts[2] {/dev devtmpfs devtmpfs []} mounted before mounts[0] {/tmp tmpfs none []}
# Refer to: https://github.com/opencontainers/runtime-spec/blob/v1.0.0/config.md#mounts
not ok 6 - user
# UID expected: 1, actual: 1000
not ok 13 - linux process
# Process arguments expected: ./runtimetest, actual: sh
./runtimetest .. Failed 6/20 subtests
Test Summary Report
-------------------
./runtimetest (Wstat: 0 Tests: 20 Failed: 6)
Failed tests: 1, 3-6, 13
Files=1, Tests=20, 0 wallclock secs ( 0.03 usr + 0.00 sys = 0.03 CPU)
Result: FAIL
You can also turn that SHOULD error into a failure by cranking up the
compliance level:
$ prove -fo ./runtimetest :: --compliance-level SHOULD
although I don't have any interesting SHOULD violations between my
test config.json and my host system.
[1]: https://testanything.org/tap-version-13-specification.html#todo
[2]: https://testanything.org/tap-version-13-specification.html#diagnostics
Signed-off-by: W. Trevor King <wking@tremily.us>1 parent 8e3ecf4 commit 9422eec
1 file changed
+28
-31
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
891 | 891 | | |
892 | 892 | | |
893 | 893 | | |
894 | | - | |
895 | | - | |
896 | | - | |
897 | | - | |
898 | | - | |
899 | | - | |
900 | | - | |
901 | | - | |
902 | | - | |
903 | | - | |
904 | | - | |
905 | 894 | | |
906 | | - | |
907 | | - | |
908 | | - | |
909 | | - | |
910 | | - | |
911 | | - | |
912 | | - | |
913 | | - | |
914 | | - | |
915 | | - | |
916 | | - | |
| 895 | + | |
| 896 | + | |
| 897 | + | |
| 898 | + | |
| 899 | + | |
| 900 | + | |
917 | 901 | | |
918 | 902 | | |
919 | | - | |
920 | | - | |
921 | | - | |
922 | | - | |
923 | | - | |
924 | | - | |
925 | | - | |
| 903 | + | |
| 904 | + | |
| 905 | + | |
| 906 | + | |
| 907 | + | |
| 908 | + | |
| 909 | + | |
| 910 | + | |
| 911 | + | |
| 912 | + | |
| 913 | + | |
| 914 | + | |
| 915 | + | |
| 916 | + | |
| 917 | + | |
| 918 | + | |
| 919 | + | |
| 920 | + | |
| 921 | + | |
| 922 | + | |
926 | 923 | | |
927 | | - | |
| 924 | + | |
928 | 925 | | |
929 | 926 | | |
930 | 927 | | |
931 | 928 | | |
932 | 929 | | |
933 | | - | |
| 930 | + | |
934 | 931 | | |
935 | 932 | | |
936 | 933 | | |
| |||
0 commit comments