Browse Source

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>
users/vapier/wip
Jon Turney 4 years ago
parent
commit
a1ee8a0f05
No known key found for this signature in database GPG Key ID: C7C86F0370285C81
  1. 2
      .github/workflows/cygwin.yml
  2. 2
      winsup/configure.ac
  3. 5
      winsup/doc/faq-programming.xml
  4. 27
      winsup/testsuite/Makefile.am
  5. 22
      winsup/testsuite/README
  6. 13
      winsup/testsuite/config/default.exp
  7. 17
      winsup/testsuite/cygrun.sh
  8. 30
      winsup/testsuite/winsup.api/cygload.exp
  9. 4
      winsup/testsuite/winsup.api/known_bugs.tcl
  10. 74
      winsup/testsuite/winsup.api/winsup.exp

2
.github/workflows/cygwin.yml

@ -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}'

2
winsup/configure.ac

@ -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() {

5
winsup/doc/faq-programming.xml

@ -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>,

27
winsup/testsuite/Makefile.am

@ -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

22
winsup/testsuite/README

@ -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.
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 known-bugs.tcl will be *expected*
to fail, and will "fail" if they compile, run, and return zero.
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"

13
winsup/testsuite/config/default.exp

@ -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

@ -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

30
winsup/testsuite/winsup.api/cygload.exp

@ -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"
}

4
winsup/testsuite/winsup.api/known_bugs.tcl

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

74
winsup/testsuite/winsup.api/winsup.exp

@ -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"
}
}
}
Loading…
Cancel
Save