summaryrefslogtreecommitdiff
path: root/tests/HOWTO-unit-test
diff options
context:
space:
mode:
Diffstat (limited to 'tests/HOWTO-unit-test')
-rw-r--r--tests/HOWTO-unit-test148
1 files changed, 29 insertions, 119 deletions
diff --git a/tests/HOWTO-unit-test b/tests/HOWTO-unit-test
index b38185c9..b84beba3 100644
--- a/tests/HOWTO-unit-test
+++ b/tests/HOWTO-unit-test
@@ -1,153 +1,63 @@
Introduction
------------
+That is only a brief overview of tests in ISC DHCP. For more thorough
+description, see ISC DHCP Developer's Guide. You can generate it, by
+having Doxygen installed and doing:
+
+ cd doc
+ make devel
+
+and then opening doc/html/index.html
+
+Tests Overview
+--------------
+
In DHCP, a unit test exercises a particular piece of code in
isolation. There is a separate unit test per module or API. Each unit
test lives in a directory beneath the code it is designed to exercise.
-So, we have:
+So, we (will eventually) have:
+ server/tests/
client/tests/
common/tests/
dhcpctl/tests/
And so on.
-Ideally each function would be invoked with every possible type of
-input, and each branch of every function would be checked. In practice
-we try to be a bit more pragmatic, and target the most basic
-operations, as well tricky code, and areas we have seen bugs in the
-past.
-
+We are using ATF (Automated Test Framework) as a framework to run our
+unittests. See ISC DHCP Developer's Guide for much more thorough
+description of unit-test and ATF framework in general.
Running Unit Tests
------------------
-In order to run the unit tests for DHCP, use:
+In order to run the unit tests for DHCP, enable ATF support during configure:
+
+$ ./configure --with-atf
+
+And then use:
$ make check
-This will run all of the unit tests.
+This will run all of the unit tests. Make sure that ATF is actually
+installed and that you have atf-run and atf-report tool in your PATH.
You can run a single test by going to the appropriate test directory
and invoking the test directly:
-$ cd common/tests
-$ make test_alloc
-$ ./test_alloc
+$ cd server/tests
+$ atf-run | atf-report
There are also a number of options that you can use when running a
-test. To see these, use the "-u" flag on the program.
-
+test. See atf-run and atf-report documentation.
Adding a New Unit Test
----------------------
-To add an additional test to an existing test program, you must create
-a function for the new test in the C source file:
-
-static void
-mynewtest(void) {
- static const char *test_desc = "describe the test";
-
- t_assert("mynewtest", 1, T_REQUIRED, test_desc);
-
- /* ... test code ... */
-
- t_result(T_PASS);
-}
-
-Then add this function to the T_testlist[] array in the file:
-
-testspec_t T_testlist[] = {
- ...
- { mynewtest, "some new test" },
- { NULL, NULL }
-};
-
-Then you should be able to compile and run your new test.
-
+See ISC DHCP Developer's Guide.
Adding a New Unit Test Program
------------------------------
-To add a new program, such as when a new module is added, you can copy
-the "unit_test_sample.c" file (in this directory) to a new name, add
-the new file as a target in Makefile.am, and begin adding tests. Do
-not forget to add it to CVS via "cvs add".
-
-If there is no "tests" directory for a given subdirectory, then one
-must be created. This can be done by:
-
-1. Creating the directory:
-
- $ mkdir $subdir/tests
- $ cvs add tests
-
-2. Adding the subdirectory to the build system:
-
- Add to $subdir/Makefile.am:
-
- SUBDIRS = tests
-
- Add to the AC_OUTPUT macro in configure.ac:
-
- $subdir/tests/Makefile
-
-3. Create a Makefile.am in the new directory, something like this:
-
- AM_CPPFLAGS = -I../..
-
- check_PROGRAMS = test_foo
-
- TESTS = test_foo
-
- test_foo_SOURCES = test_foo.c
- test_foo_LDADD = ../../tests/libt_api.a # plus others...
-
-
-See existing Makefile.am for examples, and the Automake documentation:
-
- http://www.gnu.org/software/automake/manual/html_node/Tests.html
-
-
-Support Functions
------------------
-
-Here are a few of the most useful functions defined in t_api that you
-can use in testing:
-
- void
- t_assert(const char *component, int anum, int class,
- const char *what, ...);
-
- The name of this function is slightly misleading. It
- actually just prints out an error message in the test
- output.
-
- void
- t_info(const char *format, ...);
-
- Prints out a message in the test output. You should
- include "\n" at the end.
-
- void
- t_result(int result);
-
- Prints out the result in the test output. You should
- use one of the constants for this:
-
- T_PASS
- T_FAIL
- T_UNRESOLVED
- T_UNSUPPORTED
- T_UNTESTED
- T_THREADONLY
-
-Additional Testing
-------------------
-
-Other static or runtime testing is always an option. For instance, you
-can use valgrind to check for memory leaks.
-
-
-$Id: HOWTO-unit-test,v 1.2 2007/11/16 11:04:12 shane Exp $
+See ISC DHCP Developer's Guide.