介子:以 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