介子:以 root 身份确定 运行 个测试
meson: determine running tests as root
在 ping
from iputils 的测试中,某些测试对于非 root 应该 失败 但对于 root 应该 通过 。因此我需要检测用户 运行 tests 是否是 root 用户。当前代码:
run_as_root = false
r = run_command('id', '-u')
if r.stdout().strip().to_int() == 0
message('running as root')
run_as_root = true
else
message('running as normal user')
endif
...
test(name, cmd, args : args, should_fail : not run_as_root)
不工作,因为测试是在构建阶段完成的:
$ meson builddir
The Meson build system
Version: 0.59.4
...
Program xsltproc found: YES (/usr/bin/xsltproc)
Message: running as normal user
而不是 运行 测试,因为未正确检测到 root 用户:
# cd builddir/ && meson test
[21/21] Linking target ninfod/ninfod
1/36 arping -V OK 0.03s
...
32/36 ping -c1 -i0.001 127.0.0.1 UNEXPECTEDPASS 0.02s
>>> ./builddir/ping/ping -c1 -i0.001 127.0.0.1
33/36 ping -c1 -i0.001 __1 UNEXPECTEDPASS 0.02s
运行 测试时如何评估用户?
这确实是一个跳过而不是预期失败的案例。将测试包装在一个小的 shell 或 python 脚本中会很容易,该脚本检查有效的 UID 和 returns 神奇的退出代码 77(介子解释为跳过)
类似于:
#!/bin/bash
if [ "$(id -u)" -ne 0 ]; then
echo "User does not have root, cannot run"
exit 77
fi
exec "$@"
如果测试不是 运行 作为根用户,这将导致 meson test
到 return 状态 SKIP
。
在 ping
from iputils 的测试中,某些测试对于非 root 应该 失败 但对于 root 应该 通过 。因此我需要检测用户 运行 tests 是否是 root 用户。当前代码:
run_as_root = false
r = run_command('id', '-u')
if r.stdout().strip().to_int() == 0
message('running as root')
run_as_root = true
else
message('running as normal user')
endif
...
test(name, cmd, args : args, should_fail : not run_as_root)
不工作,因为测试是在构建阶段完成的:
$ meson builddir
The Meson build system
Version: 0.59.4
...
Program xsltproc found: YES (/usr/bin/xsltproc)
Message: running as normal user
而不是 运行 测试,因为未正确检测到 root 用户:
# cd builddir/ && meson test
[21/21] Linking target ninfod/ninfod
1/36 arping -V OK 0.03s
...
32/36 ping -c1 -i0.001 127.0.0.1 UNEXPECTEDPASS 0.02s
>>> ./builddir/ping/ping -c1 -i0.001 127.0.0.1
33/36 ping -c1 -i0.001 __1 UNEXPECTEDPASS 0.02s
运行 测试时如何评估用户?
这确实是一个跳过而不是预期失败的案例。将测试包装在一个小的 shell 或 python 脚本中会很容易,该脚本检查有效的 UID 和 returns 神奇的退出代码 77(介子解释为跳过)
类似于:
#!/bin/bash
if [ "$(id -u)" -ne 0 ]; then
echo "User does not have root, cannot run"
exit 77
fi
exec "$@"
如果测试不是 运行 作为根用户,这将导致 meson test
到 return 状态 SKIP
。