After addition of SEEK_HOLE, the whence of *4* is not an invalid
argument, causing the test to FAIL.
See ltp commit 423e636a4c8f ("lseek03: change to fix with the lseek syscall")
Avoid transient failures by adding a small delay after fork()-ing to
allow the child to get into a state where it can recieve signals.
Also add same small delay to kill03 and kill04. kill02 has a more
elaborate setup where child processes write to a pipe to indicate they
have started.
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>
Drop setting TDIRECTORY, just use /tmp in the 'test installation' now
that we have it.
This effectively reverts f3ed5f2fe0
Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
Despite our efforts, sometimes the async cancellation gets deferred.
Notice this by calling pthread_testcancel(), and then try to work out if
async cancellation was ever successful by checking if all threads ran
for the full expected time, or if some were stopped early.
Also, increase the time we allow for the async cancellation to get
delivered to 30 seconds.
Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
Test access05 and symlink03 expect operations to fail which succeed when
we have Adminstrator privileges.
There's perhaps a bit of incoherency here: some XFAILed tests expect to
run as root (so maybe we need the ability to selectively cygdrop?).
Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
Change TCIDs to they match the filename
Fix use of "%0" rather than "%o"
Record failure on mismatched permissions, rather than immediately breaking
See ltp commits fa31d55d, 923b23ff and b846e7bb
fa31d55d34923b23ff1fb846e7bb9c
Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
full_path needs to hold a overlong pathname of length PATH_MAX+1, plus a
terminating null.
See ltp commit 44d51c3f
44d51c3f06
Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
These tests async thread cancellation of a thread that doesn't have any
cancellation points.
Unfortunately, since 2b165a45 the async cancellation silently fails when
the thread is inside the kernel function Sleep(), so it just exits
normally after 10 seconds. (See the commentary in pthread::cancel() in
thread.cc, where it checks if the target thread is inside the kernel,
and silently converts the cancellation into a deferred one)
Work around this by busy-waiting rather than Sleep()ing for 10 seconds.
This is still somewhat fragile: the async cancel could still fail, if it
happens to occur while we're inside the kernel function that time()
calls.
v2:
Do nothing more efficiently
Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
Since commit 4b51e4c1, we return the actual thread priority, not what we
originally stored in the thread attributes.
Windows only supports 7 thread priority levels, which we map onto the 32
required by POSIX. So, only a subset of values will be returned exactly
by by pthread_getschedparam() after pthread_setschedparam().
Adjust tests priority1, priority2 and inherit1 so they only check for
round-tripping priority values which can be exactly represented.
For CI, this needs to handle process priority class "below normal
priority" as well.
Also check that the range of priority values is at least 32, as required
by POSIX.
Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
Check direct call to system(), as well as one in a subprocess.
(This is a lot easier to debug when it's completely broken by the
environment the test is running in)
Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
Astonishingly, we don't have this already, so tests which hang just stop
the testsuite dead in it's tracks...
Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
Do some setup in the Cygwin 'installation' at testsuite/testinst/:
* Ensure /tmp exists
* Use BusyBox to provide executables needed by tests which use system()
(sh, sleep, ls)
This enables tests which use system(), or require /tmp to exist to pass.
Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
Default mutex type is PTHREAD_MUTEX_NORMAL.
Attempting to unlock an unowned mutex of that type is specified as
undefined behaviour, not returning EPERM.
mutex7e verfies that attempting to unlock an unowned mutex of type
PTHREAD_MUTEX_ERRORCHECK returns EPERM.
Build all the testcase executables directly using automake, rather than
passing the compiler information into DejaGnu to have it build them.
(This means you get build avoidance for these executables, so they only
get built once, rather than every time you run the test, and makes it
much easier to run them in isolatation against the installed Cygwin,
which is really nice to have when trying to fix broken tests...)
Rename the 'cygrun' subdirectory to 'mingw', and build all the testsuite
MinGW executables there.
Drop sample-miscompile.c (testing that compile failure is detected is
perhaps useful, but not here...)
objdir isn't a predefined output variable in Automake (any more?), so
this was just using the absolute path /testsuite as the test's temporary
directory. Use builddir instead.
Since 4e7817498e, we're just running the tests against the installed
DLL. We're arranging to put the build directory on the path, but since
it doesn't contain cygwin1.dll (since it's built with a different name
and renamed on installation), that doesn't have any effect.
Arrange to place the just-built DLL into a directory which the testsuite
can place on it's path (while running the test, but not while compiling
it).
Also fix any remaining references to cygwin0.dll in testsuite,
documentation and comments.
Fixes: 4e7817498e ("Cygwin: Makefile: Drop all the "test dll" considerations")
After 90236c3a2c, the testsuite is failing, as the cygwin0.dll
referenced by the implib that testsuite programs are linked with doesn't
exist anymore.
We don't need to make and link the testsuite with a specially named DLL,
as the cygwin DLL (since 526b0fbca3) takes into consideration the path
it's executing from to define separate "Cygwin installations", which
don't interact.
Fixes: 90236c3a2c ("Cygwin: Makefile: build new-cygwin1.dll in a single step")
v2:
* Include tzmap.h in BUILT_SOURCES
* Make per-file flags appear after user-supplied CXXFLAGS, so they can
override optimization level.
* Correct .o files used to define symbols exported by libm.a
* Drop gcrt0.o mistakenly included in libgmon.a
* Add missing line continuations in GMON_FILES value
v3:
* use per-file flags for .c compilation
* override C{XX,}FLAGS, as they are set on the command line by top-level make
v4:
* Drop -Wno-error=write-strings from path_testsuite CXXFLAGS
v5:
* Update for changes in master
- Add -fno-threadsafe-statics to CXX flags
- Add hypotl.cc
- Remove fenv.cc (in favour of newlib), add fenv.c stub
- Add proc.5 manpage rules
This libltp is old as old dirt and still using K&R style.
If it's really to be used again at all, it needs a serious
refresh.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
There's doesn't seem to be much use in independently distributing these
subdirectories, so allowing them to be independently configured seems
pointless and overcomplicated.
The order in which the subdirectories are built is still a little odd,
as cygwin is linked with libcygserver, and cygserver is then linked with
cygwin. So, we build the cygwin directory first, which invokes a build
of libcygserver in the cygserver directory, and then build in the
cygserver directory to build the cygserver executable.
Drop AC_CONFIGURE_ARGS, since we don't need to recursively call
configure with the same arguments anymore.
Slightly refine when we build utils: Previously we didn't build any
utils if MinGW compiler use was avoided, now we just avoid building
those utils which require that compiler.
Greatly simplify how winsup_srcdir and target_builddir are set, since
we're only configuring from one directory. (These are still kept
absolute, since we don't adjust them where used for being used in a
subdirectory).
Remove configure.cygwin and put it's (greatly reduced) contents inline
in the one place it's used now.
Remove generated configure and aclocal.m4 in subdirectories.
Invoke grep in text mode when looking for version strings inside the
cygwin DLL, so it outputs something more informative than:
Binary file ../cygwin/cygwin0.dll matches
By default, libltp tests will create temporary files in a subdirectory
of /tmp, which will (nowadays) be located relative to the test DLL (by
assuming that it is in /bin). This will evaluate to the directory
$target_builddir/winsup/tmp, which doesn't exist.
The location used for these temporary files can be explicitly controlled
by setting the TDIRECTORY env var. Arrange to set that env var to the
/cygdrive path of a tmp subdirectory of the build directory.
Unfortunately, libltp doesn't clean the temporary directory if
TDIRECTORY is set, and some tests assume they are started in a clean
directory, so we need to do that in tcl.
Set the PATH so that tests can pick up cygwin0.dll. Looks like this was
dropped by accident in 2e488e95 ("Don't rely on in-build tools"), so
restore it as it was prior to 9d89f634.