76b903ee19
Add the beginnings of a testsuite for tc functionality in the kernel. These are a series of unit tests that use the tc executable and verify the success of those commands by checking both the exit codes and the output from tc's 'show' operation. To run the tests: # cd tools/testing/selftests/tc-testing # sudo ./tdc.py You can specify the tc executable to use with the -p argument on the command line or editing the 'TC' variable in tdc_config.py. Refer to the README for full details on how to run. The initial complement of test cases are limited mostly to tc actions. Test cases are most welcome; see the creating-testcases subdirectory for help in creating them. Signed-off-by: Lucas Bates <lucasb@mojatatu.com> Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com> Signed-off-by: David S. Miller <davem@davemloft.net>
103 lines
3.4 KiB
Plaintext
103 lines
3.4 KiB
Plaintext
tdc - Linux Traffic Control (tc) unit testing suite
|
|
|
|
Author: Lucas Bates - lucasb@mojatatu.com
|
|
|
|
tdc is a Python script to load tc unit tests from a separate JSON file and
|
|
execute them inside a network namespace dedicated to the task.
|
|
|
|
|
|
REQUIREMENTS
|
|
------------
|
|
|
|
* Minimum Python version of 3.4. Earlier 3.X versions may work but are not
|
|
guaranteed.
|
|
|
|
* The kernel must have network namespace support
|
|
|
|
* The kernel must have veth support available, as a veth pair is created
|
|
prior to running the tests.
|
|
|
|
* All tc-related features must be built in or available as modules.
|
|
To check what is required in current setup run:
|
|
./tdc.py -c
|
|
|
|
Note:
|
|
In the current release, tdc run will abort due to a failure in setup or
|
|
teardown commands - which includes not being able to run a test simply
|
|
because the kernel did not support a specific feature. (This will be
|
|
handled in a future version - the current workaround is to run the tests
|
|
on specific test categories that your kernel supports)
|
|
|
|
|
|
BEFORE YOU RUN
|
|
--------------
|
|
|
|
The path to the tc executable that will be most commonly tested can be defined
|
|
in the tdc_config.py file. Find the 'TC' entry in the NAMES dictionary and
|
|
define the path.
|
|
|
|
If you need to test a different tc executable on the fly, you can do so by
|
|
using the -p option when running tdc:
|
|
./tdc.py -p /path/to/tc
|
|
|
|
|
|
RUNNING TDC
|
|
-----------
|
|
|
|
To use tdc, root privileges are required. tdc will not run otherwise.
|
|
|
|
All tests are executed inside a network namespace to prevent conflicts
|
|
within the host.
|
|
|
|
Running tdc without any arguments will run all tests. Refer to the section
|
|
on command line arguments for more information, or run:
|
|
./tdc.py -h
|
|
|
|
tdc will list the test names as they are being run, and print a summary in
|
|
TAP (Test Anything Protocol) format when they are done. If tests fail,
|
|
output captured from the failing test will be printed immediately following
|
|
the failed test in the TAP output.
|
|
|
|
|
|
USER-DEFINED CONSTANTS
|
|
----------------------
|
|
|
|
The tdc_config.py file contains multiple values that can be altered to suit
|
|
your needs. Any value in the NAMES dictionary can be altered without affecting
|
|
the tests to be run. These values are used in the tc commands that will be
|
|
executed as part of the test. More will be added as test cases require.
|
|
|
|
Example:
|
|
$TC qdisc add dev $DEV1 ingress
|
|
|
|
|
|
COMMAND LINE ARGUMENTS
|
|
----------------------
|
|
|
|
Run tdc.py -h to see the full list of available arguments.
|
|
|
|
-p PATH Specify the tc executable located at PATH to be used on this
|
|
test run
|
|
-c Show the available test case categories in this test file
|
|
-c CATEGORY Run only tests that belong to CATEGORY
|
|
-f FILE Read test cases from the JSON file named FILE
|
|
-l [CATEGORY] List all test cases in the JSON file. If CATEGORY is
|
|
specified, list test cases matching that category.
|
|
-s ID Show the test case matching ID
|
|
-e ID Execute the test case identified by ID
|
|
-i Generate unique ID numbers for test cases with no existing
|
|
ID number
|
|
|
|
|
|
ACKNOWLEDGEMENTS
|
|
----------------
|
|
|
|
Thanks to:
|
|
|
|
Jamal Hadi Salim, for providing valuable test cases
|
|
Keara Leibovitz, who wrote the CLI test driver that I used as a base for the
|
|
first version of the tc testing suite. This work was presented at
|
|
Netdev 1.2 Tokyo in October 2016.
|
|
Samir Hussain, for providing help while I dove into Python for the first time
|
|
and being a second eye for this code.
|