46 Commits

Author SHA1 Message Date
Klement Sekera
fc000f0e1d tests: support setting random seed
Log the random seed used when running tests and provide means to re-use
it in a later run.

Type: feature

Change-Id: I18d2a36ee802b901d4cca5577df41cec07f09cc0
Signed-off-by: Klement Sekera <ksekera@cisco.com>
(cherry picked from commit 45a95dd782b91e9ae5665b5f95be4b6d7f99b879)
2019-11-18 13:17:57 +00:00
Andrew Yourtchenko
7f9603d90a tests: avoid test runner hanging on child test process join
In parallel test, the single process is spawning
a bunch of child processes running the tests,
and communicates to them. When the child process
signals that it has finished, the parent calls
child.join(). Sometimes this join never returns.
The result is a lot of defunct python processes,
and the test run just hangs.

I have seen this failure intermittently a fair bit
in a busy containerized environment, and by chance,
consistently reproduced it on a Thinkpad X280
with 8G of RAM and Ubuntu 19.04, which allowed
to diagnose it.

Type: test
Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
Change-Id: If0a3110fc2d23e73d77c310d61c3ea90a2b53610
(cherry picked from commit 42693521f6046997133c8f63bcfc9d615d96f69d)
2019-11-18 13:17:27 +00:00
Paul Vinciguerra
025cd9c867 tests: add cpu/shm info to test runner output
Type: test
Depends-on: https://gerrit.fd.io/r/#/c/20484/

Change-Id: I140132cfcc4347035fe2bb9919f8e7923342940f
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2019-07-24 17:41:42 +00:00
Paul Vinciguerra
0cbc71d783 tests: treat all truthy env vars the same way
Introduce a new class, that returns the truthiness of a env var.
Since an environment variable is just a string, it would normally
be true if not unset. The new class returns true when the env var is
set to a string that would be considered true.

Type: test
Depends-on: https://gerrit.fd.io/r/20484

Change-Id: I90ef010156f6fec246bde5c0e208ced1869b180f
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2019-07-09 07:16:16 +00:00
juraj.linkes
b5ef26d1ed tests: fix FORCE_FOREGROUND
Type: fix

Change-Id: I145f9984c1d944d5b7de0487e8b41ae4fdb95b6d
Signed-off-by: juraj.linkes <juraj.linkes@pantheon.tech>
2019-07-03 11:40:58 +02:00
Klement Sekera
f40ee3a206 make test: introduce COREDUMP_COMPRESS option
setting COREDUMP_COMPRESS=y (or =1) indicates that any core file
is to be compressed by the test framework unless DEBUG=core is set.

Change-Id: Ib0d6d30a7398dbeb6ab5e5dbb411bf5c641b5206
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2019-05-08 22:14:44 +00:00
Paul Vinciguerra
c0692a4496 tests: Speedup tests by 30%.
Baseline:
  2598325153 function calls (2598296959 primitive calls) in 2257.698 seconds

Post-changeset:
 1495427 function calls (1467233 primitive calls) in 1572.080 seconds

Change-Id: I191b68b29c9e0f19964bf0b8879ddf357c9cbd5c
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2019-03-18 14:08:34 +00:00
Naveen Joy
2cbf2fb05e make-test: Python pep8 compliance for sequences
For sequences, (strings, lists, tuples), use the fact that
empty sequences are false. A tiny change towards getting
full pep8 compliance, which will look good.
Yes: if not seq:
     if seq:
No:  if len(seq):
     if not len(seq):
(https://www.python.org/dev/peps/pep-0008/)

Change-Id: I6b565bef424f81afc66aba3b0041a5029a9f8954
Signed-off-by: Naveen Joy <najoy@cisco.com>
2019-03-07 19:40:04 +00:00
Paul Vinciguerra
38a4ec7342 make test: Add exception handling around subprocess.
This cleans up exception catching to identify oserrors.  By raising the
specific exception closer to the offending call, we get additional stack history
and can add clearer error logging to assist in troubleshooting.

Change-Id: I592e4d46844b822a816485bf54910f8daed92088
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2019-02-26 09:39:00 +00:00
juraj.linkes
46e8e91bca Fix interactive tests
When running tests interactively (i.e. not using child process) the
tests are split into small suites each containing tests from a
VPPTestCase, but only the first suite is run. Fix this by creatin a new
suite with all of these small suites in it and running that suite.

Change-Id: I0236f4a980d01765eb993f41d54d98640bb2cd39
Signed-off-by: juraj.linkes <juraj.linkes@pantheon.tech>
2019-01-11 18:18:48 +00:00
Paul Vinciguerra
defde0f870 Tests: Cleanup @skip decorator.
The runnning environment is static as of module load time,
so only evalute the conditions once at module load time.

Track-by: VPP-1518

Change-Id: I73b0d17ae1ff90789e70307f168d43921829aec8
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2018-12-20 12:43:38 +00:00
juraj.linkes
2eca70db95 Fix test results
In a rare case a failure can occur in a VppTestCase which hasn't been
part of the original TestSuite, such as in memif testcases. Fix the
reporting after test run in these cases.

Change-Id: Ib2a34fc195179605c22b95bd0e2c7cebca17012f
Signed-off-by: juraj.linkes <juraj.linkes@pantheon.tech>
2018-12-14 19:46:42 +00:00
Ole Troan
7f99183a20 Test framework: StringIO fixes for Python3
Add 2/3 support to binarytomac and mactobinary and move to vpp_mac.py

Change-Id: I3dc7e4a24486aee22140c781aae7e44e58935877
Signed-off-by: Ole Troan <ot@cisco.com>
2018-12-10 08:01:56 +00:00
juraj.linkes
e6b58cf86a Test reader thread hardening
The test reader thread could get stuck in case an unexpected Exception
was raised during test runs in parent thread. Catch the Exception, close
the thread and raise the Exception to avoid this.

Change-Id: I3a9298d593c334d96d04b6207d604b684572a2ac
Signed-off-by: juraj.linkes <juraj.linkes@pantheon.tech>
2018-12-07 10:45:09 +00:00
Klement Sekera
33177d698e make test: print TEST= values for failed tests
This prints the format strings required to rerun the failed test next to
the failures.

Change-Id: I973d8ae025f026129826356bce265b1e70086d2f
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2018-11-30 17:01:59 +00:00
Klement Sekera
b8c72a4a8d make test: create virtualenv under /test/
instead of using build-root, use /test/venv directory for virtualenv
similarly, don't pollute build-root with test-built binaries

Change-Id: I1e63c04037eaee718b27b34ef16c9eb0252afa53
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2018-11-29 08:22:10 +00:00
juraj.linkes
abec0129b1 Split non-parallel testsuite
Split one big suite into smaller suites when not running tests in
parallel. This results in all tests being executed in one iteration.

Change-Id: I0d3d357a95d9cc596b606d5911a5819e8ffdeee5
Signed-off-by: juraj.linkes <juraj.linkes@pantheon.tech>
2018-11-26 19:54:25 +00:00
Ole Trøan
5ba9159a15 Revert "Fix instance method call in test/framework.py"
This reverts commit c32023b9fd6970ed1cac1b3c7f36233b536d9968.

Change-Id: Ic934d223b10028093b0262e28515bde3ae1ccb71
Signed-off-by: Ole Troan <ot@cisco.com>
2018-11-22 10:01:09 +00:00
Paul Vinciguerra
c32023b9fd Fix instance method call in test/framework.py
Instance method breaking encapsulation by calling a global fn.

Change-Id: Ifde2a207951143764aed75f1b191aed0bac83704
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2018-11-22 06:59:19 +00:00
juraj.linkes
dfb5f2aff3 Fix logging into multiple files
When running tests in one process, only one logger was used and each
testcase added its own file handler, which resulted in logs appearing in
multiple files. Fix this by restoring the creation of new loggers
for each testcase and only reuse the stream handler from parent process.

Change-Id: I5b8471e041dc769128fddb433d33812bfcb5ecf6
Signed-off-by: juraj.linkes <juraj.linkes@pantheon.tech>
2018-11-09 23:33:59 +00:00
juraj.linkes
40dd73bcfa Setup, teardown, DEBUG=core, FAILFAST fixes
- Fixed a bug when an error occuring in tearDownClass would not result in
test being marked as failed
- Improved test results reporting in cases when an error occurs in setUpClass
and tearDownClass
- Fixed DEBUG=core when the core is produced in setUpClass or
tearDownClass
- Reworked DEBUG=core to always be handled after all tests have been
executed
- Fixed FAILFAST=1 for parallel test runs

Change-Id: I3e9cd3b97ba6fa802fa0aa2dd7678ff82eee09ec
Signed-off-by: juraj.linkes <juraj.linkes@pantheon.tech>
2018-10-10 16:05:37 +00:00
Andrew Yourtchenko
d760f79cb8 test framework: add shell-style wildcard matching to filenames
Currently, one can either use "*" to denote all filenames,
or to give the specific file name to run the tests in.
This commit adds the possibility to run all tests
matching the shell wildcard, e.g. TEST="test_acl_plugin*"
will execute all ACL plugin testcases.

Change-Id: I9048a601958947c7b757c3dfd57b19cdd8a1e3c0
Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
2018-10-03 17:39:21 +00:00
juraj.linkes
cae64f896d VPP-1421: Reworked results gathering
The previous version sent the whole VPPTestResult object through pipe,
which uses pickle to transfer objects. Pickle does not support sending
any arbitrary objects and was causing issues. Now just a tuple of
(test_id, result) is sent.

Change-Id: I3a3a9e6f1b9ac9b05889babfc1f7560c7ac4471c
Signed-off-by: juraj.linkes <juraj.linkes@pantheon.tech>
2018-09-20 02:42:53 +00:00
Klement Sekera
6c7bda9112 fix TEST_JOBS=auto max jobs detection
Change-Id: I63f747e92d239e878550392df24fb7aac2b5a3e3
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2018-09-18 19:37:47 +00:00
juraj.linkes
721872e051 Fix test summary and retries
There was an issue when tests crashed and weren't properly retried.

Change-Id: Id5ef828ecc9a8dc0f08c50183721db06e162e6c3
Signed-off-by: juraj.linkes <juraj.linkes@pantheon.tech>
2018-09-06 00:13:21 +00:00
juraj.linkes
5e2c54d029 Fix hanging test runner when child process dies
When fixing the test summary after a test run doesn't finish properly I
introduced a bug where child process which died would leave the whole
run hanging. This patch fixed the bug while still having the correct
test summary.

Change-Id: I206b1a7dab4032d24cbc50667b8dd0bdcebb67a6
Signed-off-by: juraj.linkes <juraj.linkes@pantheon.tech>
2018-08-30 13:57:39 +00:00
juraj.linkes
0219b8dfbf Fix logging to file and summary for crashed tests
Logging was not being logged to log.txt
Crashed tests were not reported properly when running tests in one
process

Change-Id: Ica2d703d88351cc8a94bad86764ae4376dc79590
Signed-off-by: juraj.linkes <juraj.linkes@pantheon.tech>
2018-08-25 00:40:54 +00:00
juraj.linkes
184870ac5a CSIT-1139: Implement parallel test execution
The implementation of parallel test execution in VPP Test Framework.
- VPPTestCase test methods are grouped together
- tests are running in separate processes
- VPP instances spawned by tests are assigned to different cores
- output from these processes is redirected through pipes and printed
out testcase by testcase
- TEST_JOBS env var is used to specify the number of parallel processes
- improved test summary
- a bit of code cleanup

Change-Id: I9ca93904d9fe2c3daf980500c64a8611838ae28c
Signed-off-by: juraj.linkes <juraj.linkes@pantheon.tech>
2018-08-23 14:19:35 +00:00
Klement Sekera
bbfa5fdf52 make test: easy profiling via make test PROFILE=1
Change-Id: Ib845578485f523b7f14e98c83d05f78db382ecde
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2018-06-27 13:37:32 +00:00
Klement Sekera
4c5422ee52 make test: fix RETRIES when setUpClass throws
This change adds handling of special case when setUpClass throws. In
this case TestResults receives a mock object called _ErrorHolder.
By parsing its description, we find test class name and use it to lookup
the test class in test suite to be able to add it to the list of failures
for re-running.

Change-Id: I656f21e38aa450fc567cdcbcf6e586967f947a64
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2018-06-25 14:19:57 +02:00
Andrew Yourtchenko
57612ebcf3 make test: print a warning in case a core_pattern contains a filter program
The default config on Ubuntu 16.04.4 desktop results in truncated cores
when running make test which coredumps. Uninstalling the filter program
(apport) makes the corefiles normal size. Print a warning about that fact,
so the others potentially affected didn't have to wonder.

Change-Id: Iba4b0a2765a25100d6e24fd7f4de0e0339efd835
Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
2018-03-31 12:49:40 +00:00
Klement Sekera
9b6ece7952 make test: enhance core-file information
Change-Id: I1283960a9a49f6d70b9d7b7793cfb345c22ccdea
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2018-03-24 15:17:30 +00:00
Klement Sekera
13a83ef4d4 make test: code cleanup
Change-Id: Ic689de569e5b6e6209d16d6acdb13c489daca1f5
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2018-03-23 12:57:41 +00:00
Klement Sekera
05742265d4 make test: early core detection, code cleanup
Change-Id: I503d69f902f1c8d3107fb3f2b9f31b0083ebb747
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2018-03-14 19:14:54 +00:00
Klement Sekera
833e76151f make test: handle multiple failures in one case
Change-Id: I5451ddec4bfdede12653415f90bf991e81494033
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2018-03-14 13:33:45 +00:00
Klement Sekera
545be52c79 make test: detect child crash
This change causes parent process to detect child crash in seconds
instead of waiting for timeout to pass.

Change-Id: Ib45e86b7fc97e687d99c554be4212aaeea781dcc
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2018-02-17 20:42:49 +00:00
Klement Sekera
df2b980daf make test: add RETRIES option
Change-Id: Ibe31e932bc997f0101a8947e01df90a90d1f100f
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2017-10-10 16:48:38 +00:00
Dave Wallace
e2efd12b84 make test: Copy api_post_mortem.$$ file tmp test dir for archiving.
Change-Id: I4baf89ef383dbc2f309081a6b56b13ebcb8fc2df
Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
2017-10-03 03:06:12 +00:00
Dave Wallace
981fadf928 make test: Create link to failed test dir on timeout.
- Also change default coredump configuration from
  "coredump-size unlimited" to "full-coredump"

Change-Id: Iefedc2636f2d9696b7575b34e91dd7be49f601fa
Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
2017-09-30 19:54:54 -04:00
Klement Sekera
fcbf44448b make test: separate test discovery code
Separating test discovery code to it's own script file has the
advantage of easily doing e.g. listing of all existing tests.

Change-Id: I80dc280263cc7e33e7e13cb0d48b39bf08ece24d
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2017-08-25 18:05:17 +00:00
Klement Sekera
3f6ff19a30 make test: fix broken DEBUG=gdb* options
Change-Id: I5d80982eeab78a629760f567eda3b1539d96e3a8
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2017-08-12 09:19:34 +00:00
Klement Sekera
fa3eb7a993 make test: bump default test timeout to 10 minutes
Change-Id: I25d88966376d712ff61f29227a45880a59e8ecf2
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2017-08-10 06:50:50 +02:00
Klement Sekera
909a6a1eb9 make test: detect hung tests
Run tests in a forked process with a set of pipes to communicate
keep-alives and overall result. This allows us to detect when e.g.
vpp dies mid-API call causing the test to hang waiting for response
(which will never come since vpp died).

Support setting a (per test case) TIMEOUT make test option to set timeout,
with a default timeout of 120 seconds.

Example - fail the test suite if any test-case fails to finish within
300s:

make TIMEOUT=300 test

Change-Id: I0d04f26a7232968f4bf043adf5d5b508f5018717
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2017-08-10 00:14:59 +00:00
Klement Sekera
0c8ad446db make test: properly propagate exit status
Change-Id: Ie9f48a0d5e0a9cd08eb8f07d49149eee40f04131
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2017-03-27 17:57:41 +00:00
Klement Sekera
993e0edf4e make test: support out-of-tree tests
env EXTERN_TESTS="/path/to/extra/tests" make test

causes to run the default test set and tests collected from
test_*.py files under subtree specified in EXTERN_TESTS.

Change-Id: I58c5471dd6010730278a5b47d4318737d920bc28
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2017-03-22 10:48:26 +00:00
Damjan Marion
f56b77a076 test: new test infrastructure
Change-Id: I73ca19c431743f6b39669c583d9222a6559346ef
Signed-off-by: Jan Gelety <jgelety@cisco.com>
Signed-off-by: Juraj Sloboda <jsloboda@cisco.com>
Signed-off-by: Stefan Kobza <skobza@cisco.com>
Signed-off-by: Matej Klotton <mklotton@cisco.com>
Signed-off-by: Maciek Konstantynowicz <mkonstan@cisco.com>
Signed-off-by: Damjan Marion <damarion@cisco.com>
2016-10-03 19:58:19 +00:00