mirror of
https://github.com/OpenVPN/openvpn.git
synced 2026-04-21 06:07:32 -04:00
cmocka [1,2] is a testing framework for C. Adding unit test capabilities to the openvpn repository will greatly ease the task of writing correct code. cmocka source code is added as git submodule in ./vendor. A submodule approach has been chosen over a classical library dependency because libcmocka is not available, or only available in very old versions (e.g. on Ubuntu). cmocka is build during 'make check' and installed in vendor/dist/. [1] https://cmocka.org/ [2] https://lwn.net/Articles/558106/ Signed-off-by: Jens Neuhalfen <jens@neuhalfen.name> Acked-by: Steffan Karger <steffan@karger.me> Message-Id: <20160525175756.56186-2-openvpn-devel@neuhalfen.name> URL: http://article.gmane.org/gmane.network.openvpn.devel/11725 Signed-off-by: David Sommerseth <dazo@privateinternetaccess.com>
40 lines
1.9 KiB
Markdown
40 lines
1.9 KiB
Markdown
Unit Tests
|
|
===========
|
|
|
|
This directory contains unit tests for openvpn. New features/bugfixes should be written in a test friendly way and come with corresponding tests.
|
|
|
|
Run tests
|
|
----------
|
|
|
|
Tests are run by `make check`. A failed tests stops test execution. To run all
|
|
tests regardless of errors call `make -k check`.
|
|
|
|
Add new tests to existing test suite
|
|
-------------------------------------
|
|
|
|
Test suites are organized in directories. [example_test/](example_test/) is an example
|
|
for a test suite with two test executables. Feel free to use it as a template for new tests.
|
|
|
|
Test suites
|
|
--------------------
|
|
|
|
Test suites live inside a subdirectory of `$ROOT/tests/unit_tests`, e.g. `$ROOT/tests/unit_tests/my_feature`.
|
|
|
|
Test suites are configured by a `Makefile.am`. Tests are executed by testdrivers. One testsuite can contain more than one testdriver.
|
|
|
|
### Hints
|
|
* Name suites & testdrivers in a way that the name of the driver says something about which component/feature is tested
|
|
* Name the testdriver executable `*_testdriver`. This way it gets picked up by the default `.gitignore`
|
|
* If this is not feasible: Add all output to a `.gitignore`* Use descriptive test names: `coffee_brewing__with_no_beans__fails` vs. `test34`
|
|
* Testing a configurable feature? Wrap test execution with a conditional (see [auth_pam](plugins/auth-pam/Makefile.am) for an example)
|
|
* Add multiple test-drivers when one testdriver looks crowded with tests
|
|
|
|
### New Test Suites
|
|
1. Organize tests in folders for features.
|
|
2. Add the new test directory to `SUBDIRS` in `Makefile.am`
|
|
3. Edit `configure.ac` and add the new `Makefile` to `AC_CONFIG_FILES`
|
|
4. Run `./configure`, and *enable* the feature you'd like to test
|
|
5. Make sure that `make check` runs your tests
|
|
6. Check: Would a stranger be able to easily find your tests by you looking at the test output?
|
|
7. Run `./configure`, and *disable* the feature you'd like to test
|
|
8. Make sure that `make check` does *not run* your tests
|