Notes on tests
============================
The semanage_access_check test in the semanage_store suite simulates a
read-only filesystem by using DAC permissions. Consequently, these tests
will fail if run as root, as root can override DAC permissions.


How to add and use unit tests 
=============================

We are using the CUnit unit testing framework.  This framework--and the
official documentation of the framework--may be found here:

http://cunit.sourceforge.net/

If you have not yet installed CUnit, first do that.  (There is an RPM,
or you can compile from source.)  Once installed, follow these steps to
add unit tests for your code:

1. Create a .h and .c file corresponding to the .c file you want to test.
   For example, test_semanage_store.c provides tests of the functions in
   semanage_store.c.   Your new .h/.c files represent a suite of related
   tests.

2. Write or add new tests to a suite.  Tests are simply functions that 
   take the form:

	void test_my_function(void)

   These tests are where you will make calls to the CUnit assertions.
 
   If you are making a new test suite, also add the suite init/cleanup
   functions.  These take the form:

   	int <suite_name>_test_init(void)
    int <suite_name>_cleanup(void)

   These functions will be called before and after the test functions
   in your suite, respectively.  They return 0 on success, 1 on failure.

3. Update libsemanage-tests.c to add your new suite and/or your new tests
   using the DECLARE_SUITE macro in do_tests().

4. Update the Makefile:
     + Make sure that the TESTSRC variable is set to the location
	   of the libsemanage source code you want to test.

5. Compile the libsemanage source code you will be testing, to ensure
   the object files are available and up to date.

6. Run your tests.  Rejoice or despair, as appropriate.


A note on the the utilities.c: Add functions that can be commonly used 
here.  For example, it is handy to have a dummy message callback 
function to silence error messages produced by libsemanage and keep 
your output pretty.  To do this, include utilities.h and specify the
callback like so:

        semanage_handle_t *sh;
        sh = semanage_handle_create();
        sh->msg_callback = test_msg_handler;

Feel free to add other such functions here as well.
