rewrite tests (#515)

* rewrite tests to work with meson

This ports our tests to meson and makes them able to be run in parallel.

* add tests to ci

* rewrite test/check-trailing-newlines in bash

This test was using a GNU sed command which does not work on Alpine Linux.
This commit is contained in:
William Hubbs 2022-04-16 15:13:08 -05:00 committed by GitHub
parent 0b3f8750e7
commit fdfa6dbb0e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 143 additions and 114 deletions

View File

@ -23,6 +23,9 @@ jobs:
- run: meson setup builddir/ - run: meson setup builddir/
env: env:
CC: gcc CC: gcc
- run: ninja -C builddir - run: meson compile -C builddir
env:
CC: gcc
- run: meson test --verbose -C builddir
env: env:
CC: gcc CC: gcc

View File

@ -16,6 +16,9 @@ jobs:
- run: ninja -C builddir - run: ninja -C builddir
env: env:
CC: gcc CC: gcc
- run: ninja test --verbose -C builddir
env:
CC: gcc
clang-glibc: clang-glibc:
@ -30,3 +33,6 @@ jobs:
- run: ninja -C builddir - run: ninja -C builddir
env: env:
CC: clang CC: clang
- run: ninja test --verbose -C builddir
env:
CC: clang

View File

@ -18,4 +18,4 @@ set -x
meson build meson build
meson compile -C build meson compile -C build
# gmake test meson test --verbose -C build

View File

@ -6,7 +6,7 @@ project('OpenRC', 'c',
'prefix=/usr', 'prefix=/usr',
'warning_level=3', 'warning_level=3',
], ],
meson_version : '>=0.53.0') meson_version : '>=0.53.2')
cc = meson.get_compiler('c') cc = meson.get_compiler('c')
fs = import('fs') fs = import('fs')
@ -205,6 +205,7 @@ subdir('sh')
subdir('src') subdir('src')
subdir('support') subdir('support')
subdir('sysctl.d') subdir('sysctl.d')
subdir('test')
subdir('zsh-completion') subdir('zsh-completion')
meson.add_install_script('tools/meson_runlevels.sh', meson.add_install_script('tools/meson_runlevels.sh',

View File

@ -0,0 +1,11 @@
#!/bin/sh
top_srcdir=${SOURCE_ROOT:-..}
. ${top_srcdir}/test/setup_env.sh
ebegin "Checking for obsolete functions"
out=$(cd ${top_srcdir}; find src -name '*.[ch]' \
! -name queue.h \
-exec grep -n -E '\<(malloc|memory|sys/(errno|fcntl|signal|stropts|termios|unistd))\.h\>' {} +)
[ -z "${out}" ]
eend $? "Avoid these obsolete functions:"$'\n'"${out}"

View File

@ -0,0 +1,18 @@
#!/bin/sh
top_srcdir=${SOURCE_ROOT:-..}
. ${top_srcdir}/test/setup_env.sh
ebegin "Checking spacing style"
out=$(cd ${top_srcdir}; find src -name '*.[ch]' \
! -name queue.h \
-exec grep -n -E \
-e '\<(for|if|switch|while)\(' \
-e '\<(for|if|switch|while) \( ' \
-e ' ;' \
-e '[[:space:]]$' \
-e '\){' \
-e '(^|[^:])//' \
{} +)
[ -z "${out}" ]
eend $? "These lines violate style rules:"$'\n'"${out}"

19
test/check-trailing-newlines.sh Executable file
View File

@ -0,0 +1,19 @@
#!/bin/sh
top_srcdir=${SOURCE_ROOT:-..}
. ${top_srcdir}/test/setup_env.sh
ebegin "Checking trailing newlines in code"
out=$(cd ${top_srcdir};
for f in $(find */ -name '*.[ch]') ; do
while read -r line; do
if [ -n "${line}" ]; then
blankline=
else
blankline=1
fi
done < "${f}"
[ -n "${blankline}" ] && printf "%s\n" "${f}"
done)
[ -z "${out}" ]
eend $? "Trailing newlines need to be deleted:"$'\n'"${out}"

View File

@ -0,0 +1,12 @@
#!/bin/sh
top_srcdir=${SOURCE_ROOT:-..}
. ${top_srcdir}/test/setup_env.sh
ebegin "Checking trailing whitespace in code"
# XXX: Should we check man pages too ?
out=$(cd ${top_srcdir}; find */ \
'(' -name '*.[ch]' -o -name '*.in' -o -name '*.sh' ')' \
-exec grep -n -E '[[:space:]]+$' {} +)
[ -z "${out}" ]
eend $? "Trailing whitespace needs to be deleted:"$'\n'"${out}"

15
test/check-xfunc-usage.sh Executable file
View File

@ -0,0 +1,15 @@
#!/bin/sh
top_srcdir=${SOURCE_ROOT:-..}
. ${top_srcdir}/test/setup_env.sh
ebegin "Checking for x* func usage"
out=$(cd ${top_srcdir}; find src -name '*.[ch]' \
! -name queue.h \
-exec grep -n -E '\<(malloc|strdup)[[:space:]]*\(' {} + \
| grep -v \
-e src/shared/helpers.h \
-e src/libeinfo/libeinfo.c)
[ -z "${out}" ]
eend $? "These need to be using the x* variant:"$'\n'"${out}"

26
test/meson.build Normal file
View File

@ -0,0 +1,26 @@
if meson.version().version_compare('>=0.56.0')
build_root = meson.project_build_root()
source_root = meson.project_source_root()
else
build_root = meson.build_root()
source_root = meson.source_root()
endif
test_env = [
'BUILD_ROOT=' + build_root,
'SOURCE_ROOT=' + source_root
]
check_obsolete_functions = find_program('check-obsolete-functions.sh')
check_spacing_style = find_program('check-spacing-style.sh')
check_trailing_newlines = find_program('check-trailing-newlines.sh')
check_trailing_whitespace = find_program('check-trailing-whitespace.sh')
check_xfunc_usage = find_program('check-xfunc-usage.sh')
test('check for obsolete functions', check_obsolete_functions, env : test_env)
test('check spacing style', check_spacing_style, env : test_env)
test('check trailing newlines', check_trailing_newlines, env : test_env)
test('check trailing whitespace', check_trailing_whitespace, env : test_env)
test('check xfunc usage', check_xfunc_usage, env : test_env)
subdir('units')

View File

@ -1,92 +0,0 @@
#!/bin/sh
top_srcdir=${top_srcdir:-..}
. ${top_srcdir}/test/setup_env.sh
libeinfo_srcdir="${srcdir}/../libeinfo"
libeinfo_builddir="${builddir}/../libeinfo"
librc_srcdir="${srcdir}/../librc"
librc_builddir="${builddir}/../librc"
rc_srcdir="${srcdir}/../rc"
rc_builddir="${builddir}/../rc"
checkit() {
local base=$1; shift
echo "$@" | tr ' ' '\n' > ${base}.out
diff -u ${base}.list ${base}.out
eend $?
: $(( ret += $? ))
}
ret=0
fail_on_out() {
if [ -n "${out}" ]; then
eerror "Last command failed; failing"
exit 1
fi
}
ebegin "Checking trailing whitespace in code"
# XXX: Should we check man pages too ?
out=$(cd ${top_srcdir}; find */ \
'(' -name '*.[ch]' -o -name '*.in' -o -name '*.sh' ')' \
-exec grep -n -E '[[:space:]]+$' {} +)
[ -z "${out}" ]
eend $? "Trailing whitespace needs to be deleted:"$'\n'"${out}"
fail_on_out
ebegin "Checking trailing newlines in code"
out=$(cd ${top_srcdir};
for f in `find */ -name '*.[ch]'` ; do
sed -n -e :a -e '/^\n*$/{$q1;N;ba' -e '}' $f || echo $f
done)
[ -z "${out}" ]
eend $? "Trailing newlines need to be deleted:"$'\n'"${out}"
fail_on_out
ebegin "Checking for obsolete functions"
out=$(cd ${top_srcdir}; find src -name '*.[ch]' \
! -name queue.h \
-exec grep -n -E '\<(malloc|memory|sys/(errno|fcntl|signal|stropts|termios|unistd))\.h\>' {} +)
[ -z "${out}" ]
eend $? "Avoid these obsolete functions:"$'\n'"${out}"
fail_on_out
ebegin "Checking for x* func usage"
out=$(cd ${top_srcdir}; find src -name '*.[ch]' \
! -name queue.h \
-exec grep -n -E '\<(malloc|strdup)[[:space:]]*\(' {} + \
| grep -v \
-e src/includes/helpers.h \
-e src/libeinfo/libeinfo.c)
[ -z "${out}" ]
eend $? "These need to be using the x* variant:"$'\n'"${out}"
fail_on_out
ebegin "Checking spacing style"
out=$(cd ${top_srcdir}; find src -name '*.[ch]' \
! -name queue.h \
-exec grep -n -E \
-e '\<(for|if|switch|while)\(' \
-e '\<(for|if|switch|while) \( ' \
-e ' ;' \
-e '[[:space:]]$' \
-e '\){' \
-e '(^|[^:])//' \
{} +)
[ -z "${out}" ]
eend $? "These lines violate style rules:"$'\n'"${out}"
fail_on_out
einfo "Running unit tests"
eindent
for u in units/*; do
[ -x "${u}" -a -f "${u}" ] || continue
ebegin "$(basename "${u}")"
./"${u}"
eend $?
: $(( ret += $? ))
done
exit ${ret}

View File

@ -1,23 +1,21 @@
#!/bin/sh #!/bin/sh
if [ -z "${top_srcdir}" ] ; then if [ -z "${BUILD_ROOT}" ] ; then
echo "You must set top_srcdir before sourcing this file" 1>&2 printf "%s\n" "You must export BUILD_ROOT before sourcing this file" >&2
exit 1 exit 1
fi fi
srcdir=${srcdir:-.} if [ -z "${SOURCE_ROOT}" ] ; then
top_builddir=${top_builddir:-${top_srcdir}} printf "%s\n" "You must export SOURCE_ROOT before sourcing this file" >&2
builddir=${builddir:-${srcdir}}
LD_LIBRARY_PATH=${top_builddir}/src/libeinfo:${top_builddir}/src/librc:${LD_LIBRARY_PATH}
PATH=${top_builddir}/src/rc:${PATH}
export LD_LIBRARY_PATH PATH
if [ ! -f ${top_srcdir}/sh/functions.sh ] ; then
echo "functions.sh not yet created !?" 1>&2
exit 1
elif ! . ${top_srcdir}/sh/functions.sh; then
echo "Sourcing functions.sh failed !?" 1>&2
exit 1 exit 1
fi fi
if [ ! -f ${BUILD_ROOT}/sh/functions.sh ] ; then
printf "%s\n" "functions.sh not yet created !?" >&2
exit 1
elif ! . ${BUILD_ROOT}/sh/functions.sh; then
printf "%s\n" "Sourcing functions.sh failed !?" >&2
exit 1
fi
PATH="${BUILD_ROOT}"/src/einfo:${PATH}

View File

@ -2,7 +2,13 @@
# unit test for is_older_than code of baselayout (2008/06/19) # unit test for is_older_than code of baselayout (2008/06/19)
# Author: Matthias Schwarzott <zzam@gentoo.org> # Author: Matthias Schwarzott <zzam@gentoo.org>
TMPDIR=tmp-"$(basename "$0")" if [ -z "${BUILD_ROOT}" ]; then
printf "%s\n" "BUILD_ROOT must be defined" >&2
exit 1
fi
PATH="${BUILD_ROOT}"/src/is_older_than:${PATH}
TMPDIR="${BUILD_ROOT}"/tmp-"$(basename "$0")"
# Please note that we added this unit test because the function # Please note that we added this unit test because the function
# should really be called is_newer_than as it's what it's really testing. # should really be called is_newer_than as it's what it's really testing.
@ -37,13 +43,14 @@ do_test()
is_older_than "$@" is_older_than "$@"
r2=$? r2=$?
[ -n "${VERBOSE}" ] && echo "reference = $r1 | OpenRC = $r2" [ -n "${VERBOSE}" ] &&
printf "reference = %s | OpenRC = %s\n" "$r1" "$r2"
[ $r1 = $r2 ] [ $r1 = $r2 ]
} }
echo_cmd() echo_cmd()
{ {
[ -n "${VERBOSE}" ] && echo "$@" [ -n "${VERBOSE}" ] && printf "%s\n" "$@"
"$@" "$@"
} }

View File

@ -9,7 +9,7 @@
# This file may not be copied, modified, propagated, or distributed # This file may not be copied, modified, propagated, or distributed
# except according to the terms contained in the LICENSE file. # except according to the terms contained in the LICENSE file.
: ${top_srcdir:=..} top_srcdir=${SOURCE_ROOT:-..}
. $top_srcdir/test/setup_env.sh . $top_srcdir/test/setup_env.sh
ret=0 ret=0

5
test/units/meson.build Normal file
View File

@ -0,0 +1,5 @@
is_older_than = find_program('check-is-older-than.sh')
sh_yesno = find_program('check-sh-yesno.sh')
test('is_older_than', is_older_than, env : test_env)
test('sh_yesno', sh_yesno, env : test_env)