[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