                     README for ltrace testsuite
              18, October, 2005 by Yao Qi  <qiyao@cn.ibm.com>

This is the README file for ltrace testsuite.

Quick Overview
==============

   This testsuite is based on the dejagnu framework, which is again 
dependent on Expect and Tcl.  So all these three package (tcl, expect
and dejagnu) should be installed on your system before running these 
tests.

   After unpacking file ltrace-0.3.36.tar.gz:

	tar -zxvfm ltrace-0.3.36.tar.gz

   you'll find a directory named ltrace-0.3.36, which contains:

 debian etc testsuite sysdeps

you can first build this package, then run the testsuite in the 
following steps:

	1 cd ltrace-0.3.36

	2 Confiugre ltrace for 32-bit mode or 64-bit mode.
	./configure
	 OR CC='gcc -m64' ./configure

	3 Build ltace
	make

	4 Run all the test in default mode.
	make check

	The default is to test the ltrace just built, using the default
compiler options.  You can control this by adding a symbol to 'make check':

	To test the shipped ltrace tool (as opposed to the just built by "make")

	   --tool_exec=/usr/bin/ltrace

	To change compiler switches for the target test cases

	   CFLAGS_FOR_TARGET=-m64

    	To change the target compiler (instead of shipped gcc)

           CC_FOR_TARGET=/opt/gcc-4.0/bin/gcc


	You can run all the tests in different mode respectively as follows,
 
	(1) ./run-my-tests.sh -m32
	OR make check

	(test ltrace in build tree and compile test cases in 32-bit mode)

	(2) ./run-my-tests.sh -m64
	OR make check RUNTESTFLAGS="CFLAGS_FOR_TARGET=-m64"

	(test ltrace in build tree and compile test cases in 64-bit mode)

	(3) ./run-my-tests.sh -m32 /usr/bin/ltrace
	OR make check RUNTESTFLAGS="--tool_exec=/usr/bin/ltrace"

	(test shipped ltrace and compile test cases in 32-bit mode)

	(4) ./run-my-tests.sh -m64 /usr/bin/ltrace
	OR make check RUNTESTFLAGS="--tool_exec=/usr/bin/ltrace CFLAGS_FOR_TARGET=-m64"

	(run shipped ltrace and compile test cases in 64-bit mode)

	(5) cd testsuite; make test

	(run ltrace in build tree and compile test cases same as ltrace itself)


	(6) make check RUNTESTFLAGS="--tool_exec=/usr/bin/ltrace CFLAGS_FOR_TARGET=-m64 CC_FOR_TARGET=/opt/gcc-4.0/bin/gcc"

	(run shipped ltrace and compile test cases in 64 bit mode by /opt/gcc-4.0/bin/gcc)
Ltrace Testsuite
================

   This testsuite for ltrace is a DejaGNU based testsuite that can 
either be used to test your newly built ltrace, or for regression 
testing a ltrace with local modifications.

   Running the testsuite requires the prior installation of DejaGNU.
The directory ftp://sources.redhat.com/pub/dejagnu/ will contain a 
recent snapshot.  Once DejaGNU is installed or built and add the 
location of runtest into $PATH, you can run the tests in one of the 
four ways it mentioned in Quick Overview.  The DejaGNU framework could
be built in following steps:

    1 Uppack these three packages.
    tar zxvf dejagnu-1.4.4.tar.gz
    tar zxvf tcl8.4.9-src.tar.gz
    tar zxvf expect-5.43.0.tar.gz

    2 Build them and install.
    cd dejagnu-1.4.4
    ./configure
    make
    make install
    cd ..

    cd tcl8.4.9/unix
    ./configure
    make
    make install
    cd ..

    cd expect-5.43
    ./configure
    make
    make install
    cd .. 

   See the DejaGNU documentation and dejagnu-1.4.4/README for further 
details.


Componets in ltrace testsuite
=============================

   This testsuite include all the source code you need for ltrace
test in a single directory, which is "ltrace-0.3.36/testsuite".
This directory includes the following files and sub-directories:

`config/unix.exp`
   configuration file for dejagnu-based test.

`lib/ltrace.exp`
   some basic functions used in all the test cases.

`ltrace.main/`
   some basic tests for major fetures of ltrace.

   (1) ltrace.main/main.exp does tests on tracing a function 
implemented in a shared library.

   (2) ltrace.main/main-internal.exp does tests on tracing a function
implemented in main executable.

   (3) ltrace.main/signals.exp do test on tracing user-defined signals
sent by program to itself.

   (4) ltrace.main/system_calls.exp do test on tracing all the system 
calls in program.

`ltrace.minor/`
   some tests for minor fetures of ltrace.
   
   (1) ltrace.minor/attach-process.exp do test on attching a process.

   (2) ltrace.minor/count-record.exp do test on counting time and 
calls.

   (3) ltrace.minor/demangle.exp do test on demangling the C++ symbols.

   (4) ltrace.minor/time-record-T.exp do test on showing the time spent
inside each call.

   (5) ltrace.minor/time-record-tt.exp
   (6) ltrace.minor/time-record-ttt.exp  do test on printing absolute 
timestamps in different format.

   (7) ltrace.minor/trace-clone.exp do test on following clone to child
process.

   (8) ltrace.minor/trace-fork.exp do test on following fork to child
process.

`ltrace.torture/`
   some tests in extreme condations.

   (1) ltrace.torture/signals.exp do test on tracing flooded signals
send to program itself.
	
Trouble shootings
=================

   (1) Running ltrace with -u option requires the superuser privilege. 
You must make sure you are root or have already got root's password.

   (2) Check the *.ltrace files in each ltrace.* directories if there are
some FAILs in the output.  They are informative. 

    (3) Add --verbose option in RUNTESTFLAGS when 'make check' if you want
to see more details of these tests.

Test case extension
===================

   Current testsuite is quite basic.  The framework of testsuite is 
extendable and scalealbe, so you can add new testcases into it easily.
I will describe how to do that in different ways.

   (1) Add new test case in an existed testcase directory.

    It is simple.  Just add a foo.exp script and a relevant foo.c if 
necessary.  The dejagnu framework can run that script automatically when 
you run "make check".  The executable and object file would be generate 
in the test, please add them in 'clean' entry in Makefile.in to ensure
that they could be cleaned up automatically when run 'make clean'.

   (2) Add new test case in a new testcase directory.

   It is a little complicated.  Fisrt create a new directory in 
testsuite/ with the same pattern as others, for example ltrace.bar, 
and then create a Makefile.in, an Expect script foo.exp, and relative 
foo.c if necessary.  Then modify the configure.ac in ltrace-0.3.36/, 
and add "testsuite/ltrace.bar/Makefile" into macro AC_OUTPUT,
testsuite/ltrace.bar/Makefile will be generated when you configure 
this package.

   Adding Makefile.in in the new directroy is just to remove 
intermediate files and log files automatically later, such as foo.ltrace,
object files and executables.  For example, if you want to remove A.ltrace,
B.ltrace, A and B at the time of cleanup, you can write Makefile.in 
like this:

   clean:
        -rm -f A B
        -rm -f *.o
        -rm -f *.ltrace
   distclean: clean
        -rm -f Makefile

   At last add the new directory 'ltrace.bar' into the macro SUBDIRS 
in testsuite/Makefile.in.

   Rerun the autoconf and ./configure in ./ltrace-0.3.36, the Makefile 
will be updated.



^L
(this is for editing this file with GNU emacs)
Local Variables:
mode: text
End:
