Cygwin: testsuite: Drop using DejaGnu to run tests

A more sophisticated (and modern) test harness would probably be useful,
but switching to Automake's built-in test harness gets us parallel test
execution, colourization of failures, simplifies matters, seems adequate
for the current testuite, and means we don't need to write any icky Tcl.

Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
This commit is contained in:
Jon Turney 2022-08-24 18:21:18 +01:00
parent 971d2dffea
commit a1ee8a0f05
No known key found for this signature in database
GPG Key ID: C7C86F0370285C81
10 changed files with 47 additions and 149 deletions

View File

@ -119,5 +119,5 @@ jobs:
export MAKEFLAGS=-j$(nproc) &&
cd build &&
(export PATH=${{ matrix.target }}/winsup/testsuite/testinst/bin:${PATH} && cmd /c $(cygpath -wa ${{ matrix.target }}/winsup/cygserver/cygserver) &) &&
(cd ${{ matrix.target }}/winsup; make check || true)
(cd ${{ matrix.target }}/winsup; make check AM_COLOR_TESTS=always || true)
shell: C:\cygwin\bin\bash.exe --noprofile --norc -eo pipefail '{0}'

View File

@ -12,7 +12,7 @@ AC_PREREQ([2.59])
AC_INIT([Cygwin],[0],[cygwin@cygwin.com],[cygwin],[https://cygwin.com])
AC_CONFIG_AUX_DIR(..)
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([dejagnu foreign no-define no-dist subdir-objects -Wall -Wno-portability -Wno-extra-portability])
AM_INIT_AUTOMAKE([foreign no-define no-dist subdir-objects -Wall -Wno-portability -Wno-extra-portability])
AM_SILENT_RULES([yes])
realdirpath() {

View File

@ -697,9 +697,8 @@ Building these programs can be disabled with the <literal>--without-cross-bootst
option to <literal>configure</literal>.
</para>
<!-- If you want to run the tests, <literal>dejagnu</literal>,
<literal>busybox</literal> and <literal>cygutils-extra<literal> are also
required. -->
<!-- If you want to run the tests <literal>busybox</literal> and
<literal>cygutils-extra<literal> are also required. -->
<para>
Building the documentation also requires the <literal>dblatex</literal>,

View File

@ -328,19 +328,23 @@ LDADD = $(builddir)/libltp.a $(builddir)/../cygwin/binmode.o $(LDADD_FOR_TESTDLL
# additional flags for specific test executables
winsup_api_devdsp_LDADD = -lwinmm $(LDADD)
DEJATOOL = winsup
# all tests
TESTS = $(check_PROGRAMS) \
mingw/cygload
# Add '-v' to RUNTESTFLAGS if V=1
RUNTESTFLAGS_1 = -v
RUNTESTFLAGS = $(RUNTESTFLAGS_$(V))
# expected fail tests
XFAIL_TESTS = \
winsup.api/ltp/setgroups01 \
winsup.api/ltp/setuid02 \
winsup.api/ltp/ulimit01 \
winsup.api/ltp/unlink08 \
winsup.api/samples/sample-fail
site-extra.exp: ../config.status Makefile
@rm -f ./tmp0
@echo "set runtime_root \"`pwd`/testinst/bin\"" >> ./tmp0
@echo "set cygrun \"`pwd`/mingw/cygrun\"" >> ./tmp0
@mv ./tmp0 site-extra.exp
# cygrun.sh test-runner script, and variables used by it:
LOG_COMPILER = $(srcdir)/cygrun.sh
EXTRA_DEJAGNU_SITE_CONFIG = site-extra.exp
export runtime_root=$(abs_builddir)/testinst/bin
export cygrun=$(builddir)/mingw/cygrun
# Set up things in the Cygwin 'installation' at testsuite/testinst/ to provide
# things which tests need to work
@ -369,7 +373,8 @@ check-local:
check_programs: $(check_PROGRAMS)
clean-local:
rm -f *.log *.exe *.exp *.bak *.stackdump winsup.sum
rm -f *.stackdump
rm -rf ${builddir}/testinst/tmp
if CROSS_BOOTSTRAP
SUBDIRS = mingw

View File

@ -1,5 +1,3 @@
1999-12-23 DJ Delorie <dj@cygnus.com>
Here are some notes about adding and using this testsuite.
The testsuite adds a directory containing the just built cygwin1.dll to the PATH
@ -20,18 +18,18 @@ The testsuite/winsup.api subdirectory is for testing the API to
cygwin1.dll ONLY. Create other subdirs under testsuite/ for other
classes of testing.
Tests in winsup.api/*.c or winsup.api/*/*.c (only one subdirectory
level is allowed) either run, and exit(0) or they fail.
Either abort or exit with a non-zero code to indicate failure. Don't
print anything to the screen if you can avoid it (except for failure
reasons, of course). One .c file per test, no compile options are
allowed (we're testing the api, not the compiler).
Tests under winsup.api/ either run successfully and exit(0), exit(77) to
indicate a skipped test, or any other exit status to indicate a failure.
Tests whose filename is mentioned in known-bugs.tcl will be *expected*
to fail, and will "fail" if they compile, run, and return zero.
Don't print anything to the screen if you can avoid it (except for failure
reasons, of course). One .c file per test, no compile options are allowed
(we're testing the api, not the compiler).
Tests whose filename is mentioned in XFAIL_TESTS are expected to fail,
effectively reversing the result of those.
"make check" will only work if you run it *on* an NT machine.
Cross-checking is not supported.
To test a subset of the test-suite, use
$ make check CYGWIN_TESTSUITE_TESTS=regexp
To run selected tests, use e.g:
$ make check TESTS="winsup.api/ltp/umask03 winsup.api/ltp/stat06"

View File

@ -1,13 +0,0 @@
proc winsup_version {} {
global env
global runtime_root
clone_output "\n[exec grep -a ^%%% $runtime_root/cygwin1.dll]\n"
if { [info exists env(CYGWIN)] } {
clone_output "CYGWIN=$env(CYGWIN)\n"
} else {
clone_output "CYGWIN=\n"
}
}
proc winsup_exit {} {
}

17
winsup/testsuite/cygrun.sh Executable file
View File

@ -0,0 +1,17 @@
#!/bin/dash
#
# test driver to run $1 in the appropriate environment
#
# $1 = test executable to run
exe=$1
export PATH="$runtime_root:${PATH}"
if [ "$1" = "./mingw/cygload" ]
then
windows_runtime_root=$(cygpath -m $runtime_root)
$exe -v -cygwin $windows_runtime_root/cygwin1.dll
else
cygdrop $cygrun $exe
fi

View File

@ -1,30 +0,0 @@
source "site.exp"
if { ! [isnative] } {
verbose "skipping cygload because it's not native \"$target_triplet\" != \"$build_triplet\""
return
}
proc ws_spawn {cmd args} {
global rv
verbose "running $cmd\n"
set rv {}
# First item in rv is the return code, second item is the message
lappend rv [catch "exec $cmd" message] $message
verbose send "catchCode = $rv\n"
}
if { $verbose } {
set redirect_output "./mingw-cygwin.log"
} else {
set redirect_output /dev/null
}
set windows_runtime_root [exec cygpath -m $runtime_root]
ws_spawn "./mingw/cygload.exe -cygwin $windows_runtime_root/cygwin1.dll > $redirect_output"
if { $rv != {0 {}} } {
verbose -log "cygload: $rv"
fail "cygload"
} else {
pass "cygload"
}

View File

@ -1,4 +0,0 @@
set xfail_list [list \
setgroups01 setuid02 \
ulimit01 unlink08 \
sample-fail sample-miscompile]

View File

@ -1,74 +0,0 @@
source "site.exp"
source "$srcdir/winsup.api/known_bugs.tcl"
if { ! [isnative] } {
verbose "skipping winsup.api because it's not native"
return
}
set rv ""
set orig_path "$env(PATH)"
set test_filter ""
if { [info exists env(CYGWIN_TESTSUITE_TESTS)] } {
set test_filter "$env(CYGWIN_TESTSUITE_TESTS)"
}
proc ws_spawn {cmd} {
global rv
verbose "running $cmd\n"
try {
set msg [exec -ignorestderr {*}$cmd "2>@1"]
set rv 0
} trap CHILDSTATUS {results options} {
verbose "returned $::errorCode\n"
set msg $results
set rv 1
}
verbose -log "$msg"
return $rv
}
verbose "Filter: $test_filter"
foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c $srcdir/$subdir/*/*.{cc,c}]] {
if { $test_filter != "" && ! [regexp $test_filter $src] } {
verbose -log "Skipping $src"
continue
}
regsub "^$srcdir/$subdir/" $src "" testcase
regsub ".c$" $testcase "" base
regsub ".*/" $base "" basename
regsub "/" $base "-" tmpfile
set exec "./winsup.api/$base.exe"
if { [lsearch -exact $xfail_list $basename] >= 0 } {
set xfail_expected 1
setup_xfail "*-*-*"
} else {
set xfail_expected 0
clear_xfail
}
if [ file exists "$srcdir/$subdir/$basename.exp" ] then {
source "$srcdir/$subdir/$basename.exp"
} else {
if { $verbose } {
set redirect_output "./$tmpfile.log"
} else {
set redirect_output /dev/null
}
set env(PATH) "$runtime_root:$env(PATH)"
ws_spawn "cygdrop $cygrun $exec > $redirect_output"
set env(PATH) "$orig_path"
if { $rv } {
fail "$testcase"
} else {
pass "$testcase"
}
}
}