[LTP] Test library API changes
Cyril Hrubis
chrubis@suse.cz
Thu Feb 11 17:03:13 CET 2016
Hi!
I've redone the child handling and now it does:
* If test sets forks_child flag in test structure pipe is opened at the
start of the test which is used to propagate test results from a child
to parent
* Child processes are created via SAFE_FORK(), which flushes stdout,
just in case there is something there, checks for for fork() failure
and clears the result structure.
* After each test run (call to test() function), wait() is called until
it returns ECHILD.
If child was succesfully waited(), pipe is examined and if it contains
test results, these are added to parent results.
We look into the pipe after each sucessful wait() in order not to fill
up the pipe capacity with many children.
* If child calls tst_brk(), exit() with non-zero value is called which is
handled in parent wait() and the parent exits with tst_brk() as well.
Techincaly any child that does not exit with 0 cause main test process
to report TCONF/TBROK.
At the moment the tst_brk() semantics is to exit the whole test since
something unexpected happened. Which seems to be right course of
action since failing SAFE_MACRO() in child should really cause main
test process to exit.
So if tst_brk() stays as it is we would need to add another call that
can exit the child (would do the same action as returning from the
test() function, i.e. write results and do exit(0)).
The code is at the same place at:
https://github.com/metan-ucw/ltp
Few test/example programs:
https://github.com/metan-ucw/ltp/blob/master/lib/newlib_tests/test05.c
https://github.com/metan-ucw/ltp/blob/master/lib/newlib_tests/test06.c
https://github.com/metan-ucw/ltp/blob/master/lib/newlib_tests/test07.c
There are probably stil a few rough edges: children forked from
children, waiting for rest of the children after one of them called
tst_brk(), etc. But the basic functionality seems to work fine.
As usuall comments are welcome.
--
Cyril Hrubis
chrubis@suse.cz
More information about the Ltp
mailing list