pjsip-pjproject/pjlib-util
Benny Prijono 0408536ef7
Refactor test apps to use unit-test framework (#4014)
* Initial work on unittest framework, tested

* Finished reorganizing pjlib-test to use unit-test framework

* Fix big problem where performance improvement is not observed with the new framework (reason: because parallel flag is not set, doh!)

* Tidying up global vars in pjlib-test. Add test options: stop on error, skip essential tests, list tests

* Change the PJ_TEST_XX() signature to be more generic and does not force returning value

* Modifications to some existing tests to use unit-test test macros

* Updated VS projects with argparse.h and unittest.h

* Fix warnings on Windows

* Disable parallel unit-testing for ioqueue stress test on Windows because of errors when running on Windows virtual machine

* Non-parallel test case will now run exclusively (previously it did not wait the previous test to complete)

* Add pjlib-test/test_util.h for common utilities for parsing, configuring, and running unit test. This can be used by all test apps. pjlib-util-test has been ported to use this utilities

* Dirty hack to fix error message being displayed when user selected essential test because it does not exist in features test (in pjlib-test)

* Replace PJ_TEST_PARALLEL with PJ_TEST_EXCLUSIVE

* Ported pjnath-test to use unit-testing framework, with limited speed-up from 45m originally to 15m using 10 worker threads

* Large modifications in pjnath-test to speed-up test. It is fast now (4:30 minutes with 10 worker threads, from 45:42m originally)

* Ported pjmedia-test to use unit-test

* Porting of pjsip test to unit testing framework. Not much of speed improvements due to exclusive tests

* Modifications in pj_argparse API (changed get() to get_bool() and add automatic error reporting) hopefully make it easier to use

* Refactor tsx_uas_test() to allow parallel testing

* Parallelize tsx_uac_test()

* Further effort to parallize tests in pjsip-test. Discoverd major issue with unit-test logging (see unittest.md)

* Showing PJLIB config is optional with cmd line option

* Bug fixing failed pjsip tests when running in parallel mode

* Finished paralleizing all pjsip tests except one

* Continuing correcting errors

* Add test shuffle feature

* Modify CI workflows to use standard arguments: -w 3 --shuffle. These args are set in GitHub action variables

* Updated due to change in argparse API signature (swap arg order)

* Removed unittest.md (it was draft for the PR)

* Fix the use of GitHub repository vars

* Tidying up minor conflicting merge in VC projects and pjlib.h

* Attempt to fix assertion failure when tdata is being accessed after reference counter goes to zero in regc_test

* Fixing failure in transport_loop_test(), first in loop_resolve_error(), presumably because there are other loop transport around when the test is run. Solution are: 1) make the test exclusive for now, 2) fix the cleanup of loop transport in other tests. Then there is failure in transport_rt_test(), because it gets loop transport from other test that is being shutdown. Sneakily add pjsip_tpmgr_get_transport_count_by_type() that's useful for debugging.

* Attempt to fix unresolved winmm.lib API (e.g. timeKillEvent, timeGetTime) called from BaseClasses

* Split exclusive part of transport_loop_test

* CI mods: split steps, envs, shorten job names

* Fix failed tsx_basic_test

* Restore previously shortened job names

* Replace assertion with PJ_TEST_XX in resolver_test

* Add --stdout-buf and --stderr-buf options in test apps to control stdout/stderr buffering

* Fix missing sipp exe on Windows CI

* Fix wrong CI args on Mac. Use -j for faster make

* Replace pj_rand() with own rand in unittest because rand() yields different sequence on different platform even with the same srand, making it hard to reproduce test sequence

* Fix swig make error on Linux and runall.py error reading log file on Windows

* Attempt to fix test repeatability by 1) delete all calls to pj_srand() except in pj_test_suite_shuffle(), 2) unit test PRNG explicitly uses pj_uint32_t instead of int. Also disable windows python tests since it is unreliable

* Fixed inexistant function

* Relaxing the strictness of the test since sometimes it raises error

* Set regc_test() exclusive because it crashes sometimes, probably concurrency issue

* Modified thread counter to unsigned long (from pj_uint32_t) since the counter value is 2*1e9 and is overflow during diff calculation

* Fixed port double destruction in mips_test() and include benchmark tests in pj/config_site_test.h

* Use any port since sometimes test fails with address in use error

* Fix conflicted return value in udp_ioqueue_test() and let it immediately exit on error so that we can see correlated error log

* Restore sleep(0) in thread test since without it the test may occasionally fail on Linux

* Various attempt to fix fluke error in resolve_test.c: 1) servers use random port numbers, 2) increase delay waiting for various DNS timers, 3) reset global vars to zero because test may be repeated for IPv6

* More relaxed packet count tests in resolver_test

* Use any port instead of hardcoded one in udp ioqueue unregister_test since binding fails occasionally

* Rollback previous changes in resolver_test that relaxed packet count test

* Protect access to pool from worker thread with mutex in resolver_test

* Faster resolver_test time by reducing timeout

* Use high number port to make it less prone to bind error

* Remove hardcoded port number, replace with bind to any

* Fix SSL to continue decrypting data after renego completes

* Fixed race condition when registering SIP module in transport test

* Disable loading TLS cert in TURN sock test if SChannel is used

* Add (missing!) pjnath-test in Windows CI

* Fix syntax error in ci-win.yml and renamed lin->ubuntu in ci-linux

* Temporary workaround for MacOS rwmutex deadlock issue

* More jobs/tests in CI Mac, and changed names

* Fix silly typo in config_site_test.h

* Prettyfy CI job names, added more test steps

* Fix CI: ffmpeg lib path, faster git clone

* CI: simplify job names, add some audio checking

* CI: Disable SDL check because vid renderer is not available on CI machine

* Fixed missing ffmpeg shared lib when running pjmedia test

* CI Mac: install gnutls

* Lookup renderer in video codec test

* CI MacOS: attempt to fix failed OpenSSL test

* CI Mac: better test split to make duration more uniform across jobs

* Replace deprecated egrep with grep -E

---------

Co-authored-by: Nanang Izzuddin <nanang@teluu.com>
Co-authored-by: sauwming <ming@teluu.com>
2025-01-08 11:01:26 +07:00
..
build Move UPnP to PJNATH (#3195) 2022-07-29 17:05:28 +08:00
docs Docs: more fixes on sample/source links (#3675) 2023-09-06 09:56:26 +07:00
include Add API to retrieve DNS server bound address to allow specifying zero as port number (#3999) 2024-06-24 12:48:15 +07:00
src Refactor test apps to use unit-test framework (#4014) 2025-01-08 11:01:26 +07:00