Add additional unit test options (#2961)
This commit is contained in:
parent
a5fa35305a
commit
668a828631
|
@ -68,3 +68,5 @@ tests/pjsua/wavs/tmp*.wav
|
|||
tests/pjsua/tools/cmp_wav
|
||||
tests/pjsua/tools/cmp_wav.dSYM
|
||||
tests/pjsua/logs
|
||||
# benchmark output
|
||||
*bench*.htm
|
||||
|
|
|
@ -51,7 +51,7 @@ static void print_stack(int sig)
|
|||
exit(1);
|
||||
}
|
||||
|
||||
static void init_signals()
|
||||
static void init_signals(void)
|
||||
{
|
||||
signal(SIGSEGV, &print_stack);
|
||||
signal(SIGABRT, &print_stack);
|
||||
|
@ -68,20 +68,33 @@ static void init_signals()
|
|||
int main(int argc, char *argv[])
|
||||
{
|
||||
int rc;
|
||||
|
||||
PJ_UNUSED_ARG(argc);
|
||||
PJ_UNUSED_ARG(argv);
|
||||
int interractive = 0;
|
||||
int no_trap = 0;
|
||||
|
||||
boost();
|
||||
init_signals();
|
||||
|
||||
while (argc > 1) {
|
||||
char *arg = argv[--argc];
|
||||
|
||||
if (*arg=='-' && *(arg+1)=='i') {
|
||||
interractive = 1;
|
||||
|
||||
} else if (*arg=='-' && *(arg+1)=='n') {
|
||||
no_trap = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (!no_trap) {
|
||||
init_signals();
|
||||
}
|
||||
|
||||
rc = test_main();
|
||||
|
||||
if (argc==2 && pj_ansi_strcmp(argv[1], "-i")==0) {
|
||||
if (interractive) {
|
||||
char s[10];
|
||||
|
||||
puts("Press ENTER to quit");
|
||||
if (fgets(s, sizeof(s), stdin) == NULL)
|
||||
puts("");
|
||||
puts("Press <ENTER> to exit");
|
||||
if (!fgets(s, sizeof(s), stdin))
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
|
@ -72,7 +72,7 @@ static void print_stack(int sig)
|
|||
exit(1);
|
||||
}
|
||||
|
||||
static void init_signals()
|
||||
static void init_signals(void)
|
||||
{
|
||||
signal(SIGSEGV, &print_stack);
|
||||
signal(SIGABRT, &print_stack);
|
||||
|
@ -86,9 +86,9 @@ int main(int argc, char *argv[])
|
|||
{
|
||||
int rc;
|
||||
int interractive = 0;
|
||||
int no_trap = 0;
|
||||
|
||||
boost();
|
||||
init_signals();
|
||||
|
||||
while (argc > 1) {
|
||||
char *arg = argv[--argc];
|
||||
|
@ -96,6 +96,8 @@ int main(int argc, char *argv[])
|
|||
if (*arg=='-' && *(arg+1)=='i') {
|
||||
interractive = 1;
|
||||
|
||||
} else if (*arg=='-' && *(arg+1)=='n') {
|
||||
no_trap = 1;
|
||||
} else if (*arg=='-' && *(arg+1)=='p') {
|
||||
pj_str_t port = pj_str(argv[--argc]);
|
||||
|
||||
|
@ -118,6 +120,10 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
}
|
||||
|
||||
if (!no_trap) {
|
||||
init_signals();
|
||||
}
|
||||
|
||||
rc = test_main();
|
||||
|
||||
if (interractive) {
|
||||
|
|
|
@ -50,7 +50,7 @@ static void print_stack(int sig)
|
|||
exit(1);
|
||||
}
|
||||
|
||||
static void init_signals()
|
||||
static void init_signals(void)
|
||||
{
|
||||
signal(SIGSEGV, &print_stack);
|
||||
signal(SIGABRT, &print_stack);
|
||||
|
@ -64,13 +64,31 @@ static void init_signals()
|
|||
static int main_func(int argc, char *argv[])
|
||||
{
|
||||
int rc;
|
||||
char s[10];
|
||||
int interractive = 0;
|
||||
int no_trap = 0;
|
||||
|
||||
while (argc > 1) {
|
||||
char *arg = argv[--argc];
|
||||
|
||||
if (*arg=='-' && *(arg+1)=='i') {
|
||||
interractive = 1;
|
||||
|
||||
} else if (*arg=='-' && *(arg+1)=='n') {
|
||||
no_trap = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (!no_trap) {
|
||||
init_signals();
|
||||
}
|
||||
|
||||
rc = test_main();
|
||||
|
||||
if (argc == 2 && argv[1][0]=='-' && argv[1][1]=='i') {
|
||||
puts("\nPress <ENTER> to quit");
|
||||
if (fgets(s, sizeof(s), stdin) == NULL)
|
||||
if (interractive) {
|
||||
char s[10];
|
||||
puts("");
|
||||
puts("Press <ENTER> to exit");
|
||||
if (!fgets(s, sizeof(s), stdin))
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -79,6 +97,5 @@ static int main_func(int argc, char *argv[])
|
|||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
init_signals();
|
||||
return pj_run_app(&main_func, argc, argv, 0);
|
||||
}
|
||||
|
|
|
@ -50,7 +50,7 @@ static void print_stack(int sig)
|
|||
exit(1);
|
||||
}
|
||||
|
||||
static void init_signals()
|
||||
static void init_signals(void)
|
||||
{
|
||||
signal(SIGSEGV, &print_stack);
|
||||
signal(SIGABRT, &print_stack);
|
||||
|
@ -65,20 +65,33 @@ static void init_signals()
|
|||
int main(int argc, char *argv[])
|
||||
{
|
||||
int rc;
|
||||
|
||||
PJ_UNUSED_ARG(argc);
|
||||
PJ_UNUSED_ARG(argv);
|
||||
int interractive = 0;
|
||||
int no_trap = 0;
|
||||
|
||||
boost();
|
||||
init_signals();
|
||||
|
||||
while (argc > 1) {
|
||||
char *arg = argv[--argc];
|
||||
|
||||
if (*arg=='-' && *(arg+1)=='i') {
|
||||
interractive = 1;
|
||||
|
||||
} else if (*arg=='-' && *(arg+1)=='n') {
|
||||
no_trap = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (!no_trap) {
|
||||
init_signals();
|
||||
}
|
||||
|
||||
rc = test_main();
|
||||
|
||||
if (argc == 2 && pj_ansi_strcmp(argv[1], "-i")==0) {
|
||||
char buf[10];
|
||||
|
||||
if (interractive) {
|
||||
char s[10];
|
||||
puts("");
|
||||
puts("Press <ENTER> to exit");
|
||||
if (fgets(buf, sizeof(buf), stdin) == NULL)
|
||||
if (!fgets(s, sizeof(s), stdin))
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
|
@ -24,13 +24,16 @@
|
|||
|
||||
extern const char *system_name;
|
||||
|
||||
static void usage()
|
||||
static void usage(void)
|
||||
{
|
||||
puts("Usage: test-pjsip");
|
||||
puts("Options:");
|
||||
puts(" -i,--interractive Key input at the end.");
|
||||
puts(" -h,--help Show this screen");
|
||||
puts(" -l,--log-level N Set log level (0-6)");
|
||||
puts(" -i,--interractive Key input at the end.");
|
||||
puts(" -h,--help Show this screen");
|
||||
puts(" -l,--log-level N Set log level (0-6)");
|
||||
puts(" -n,--no-trap Let signals be handled by the OS");
|
||||
puts(" -t,--tests testname,... Comma separated list of test to run");
|
||||
list_tests();
|
||||
}
|
||||
|
||||
#if PJ_LINUX || PJ_DARWINOS
|
||||
|
@ -51,7 +54,7 @@ static void print_stack(int sig)
|
|||
exit(1);
|
||||
}
|
||||
|
||||
static void init_signals()
|
||||
static void init_signals(void)
|
||||
{
|
||||
signal(SIGSEGV, &print_stack);
|
||||
signal(SIGABRT, &print_stack);
|
||||
|
@ -66,11 +69,11 @@ int main(int argc, char *argv[])
|
|||
int interractive = 0;
|
||||
int retval;
|
||||
char **opt_arg;
|
||||
int no_trap = 0;
|
||||
char *testlist = NULL;
|
||||
|
||||
PJ_UNUSED_ARG(argc);
|
||||
|
||||
init_signals();
|
||||
|
||||
/* Parse arguments. */
|
||||
opt_arg = argv+1;
|
||||
while (*opt_arg) {
|
||||
|
@ -78,6 +81,10 @@ int main(int argc, char *argv[])
|
|||
strcmp(*opt_arg, "--interractive") == 0)
|
||||
{
|
||||
interractive = 1;
|
||||
} else if (strcmp(*opt_arg, "-n") == 0 ||
|
||||
strcmp(*opt_arg, "--no-trap") == 0)
|
||||
{
|
||||
no_trap = 1;
|
||||
} else if (strcmp(*opt_arg, "-h") == 0 ||
|
||||
strcmp(*opt_arg, "--help") == 0)
|
||||
{
|
||||
|
@ -101,6 +108,15 @@ int main(int argc, char *argv[])
|
|||
return 1;
|
||||
}
|
||||
system_name = *opt_arg;
|
||||
} else if (strcmp(*opt_arg, "-t") == 0 ||
|
||||
strcmp(*opt_arg, "--tests") == 0)
|
||||
{
|
||||
++opt_arg;
|
||||
if (!opt_arg) {
|
||||
usage();
|
||||
return 1;
|
||||
}
|
||||
testlist = *opt_arg;
|
||||
} else {
|
||||
usage();
|
||||
return 1;
|
||||
|
@ -109,7 +125,11 @@ int main(int argc, char *argv[])
|
|||
++opt_arg;
|
||||
}
|
||||
|
||||
retval = test_main();
|
||||
if (!no_trap) {
|
||||
init_signals();
|
||||
}
|
||||
|
||||
retval = test_main(testlist);
|
||||
|
||||
if (interractive) {
|
||||
char s[10];
|
||||
|
|
|
@ -45,6 +45,9 @@
|
|||
if (rc!=0) goto on_return; \
|
||||
} while (0)
|
||||
|
||||
#ifdef _MSC_VER
|
||||
# define strtok_r strtok_s
|
||||
#endif
|
||||
|
||||
pjsip_endpoint *endpt;
|
||||
pj_caching_pool caching_pool;
|
||||
|
@ -56,6 +59,85 @@ static pj_oshandle_t fd_report;
|
|||
const char *system_name = "Unknown";
|
||||
static char buf[1024];
|
||||
|
||||
static struct {
|
||||
const char *name;
|
||||
int run_test;
|
||||
} test_list[] = {
|
||||
{ "uri", 0},
|
||||
{ "msg", 0},
|
||||
{ "multipart", 0},
|
||||
{ "txdata", 0},
|
||||
{ "tsx_bench", 0},
|
||||
{ "udp", 0},
|
||||
{ "loop", 0},
|
||||
{ "tcp", 0},
|
||||
{ "resolve", 0},
|
||||
{ "tsx", 0},
|
||||
{ "tsx_destroy", 0},
|
||||
{ "inv_oa", 0},
|
||||
{ "regc", 0},
|
||||
};
|
||||
enum tests_to_run {
|
||||
include_uri_test = 0,
|
||||
include_msg_test,
|
||||
include_multipart_test,
|
||||
include_txdata_test,
|
||||
include_tsx_bench,
|
||||
include_udp_test,
|
||||
include_loop_test,
|
||||
include_tcp_test,
|
||||
include_resolve_test,
|
||||
include_tsx_test,
|
||||
include_tsx_destroy_test,
|
||||
include_inv_oa_test,
|
||||
include_regc_test,
|
||||
};
|
||||
static int run_all_tests = 1;
|
||||
|
||||
static pj_status_t select_tests(char *testlist)
|
||||
{
|
||||
char *token;
|
||||
char *saveptr;
|
||||
int maxtok = PJ_ARRAY_SIZE(test_list);
|
||||
int i, j;
|
||||
|
||||
if (!testlist) {
|
||||
return PJ_SUCCESS;
|
||||
}
|
||||
run_all_tests = 0;
|
||||
|
||||
for (token = strtok_r(testlist, ",", &saveptr); token != NULL;
|
||||
token = strtok_r(NULL, ",", &saveptr)) {
|
||||
|
||||
int found = 0;
|
||||
for (j = 0; j < maxtok; j++) {
|
||||
if (strcmp(token, test_list[j].name) == 0) {
|
||||
test_list[j].run_test = 1;
|
||||
found = 1;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
fprintf(stderr, "Test '%s' is not valid\n", token);
|
||||
return PJ_ENOTFOUND;
|
||||
}
|
||||
}
|
||||
|
||||
return PJ_SUCCESS;
|
||||
}
|
||||
|
||||
void list_tests(void) {
|
||||
int maxtok = PJ_ARRAY_SIZE(test_list);
|
||||
int j;
|
||||
|
||||
fprintf(stderr, "Valid tests:\n");
|
||||
|
||||
for (j = 0; j < maxtok; j++) {
|
||||
fprintf(stderr, " %s\n", test_list[j].name);
|
||||
}
|
||||
}
|
||||
|
||||
#define SHOULD_RUN_TEST(ix) (run_all_tests || test_list[ix].run_test)
|
||||
|
||||
void app_perror(const char *msg, pj_status_t rc)
|
||||
{
|
||||
char errbuf[256];
|
||||
|
@ -221,7 +303,7 @@ static void close_report(void)
|
|||
}
|
||||
|
||||
|
||||
int test_main(void)
|
||||
int test_main(char *testlist)
|
||||
{
|
||||
pj_status_t rc;
|
||||
const char *filename;
|
||||
|
@ -237,6 +319,12 @@ int test_main(void)
|
|||
#endif /* INCLUDE_TSX_TEST */
|
||||
int line;
|
||||
|
||||
rc = select_tests(testlist);
|
||||
if (rc != PJ_SUCCESS) {
|
||||
list_tests();
|
||||
return rc;
|
||||
}
|
||||
|
||||
pj_log_set_level(log_level);
|
||||
pj_log_set_decor(param_log_decor);
|
||||
|
||||
|
@ -293,87 +381,112 @@ int test_main(void)
|
|||
|
||||
|
||||
#if INCLUDE_URI_TEST
|
||||
DO_TEST(uri_test());
|
||||
if (SHOULD_RUN_TEST(include_uri_test)) {
|
||||
DO_TEST(uri_test());
|
||||
}
|
||||
#endif
|
||||
|
||||
#if INCLUDE_MSG_TEST
|
||||
DO_TEST(msg_test());
|
||||
DO_TEST(msg_err_test());
|
||||
if (SHOULD_RUN_TEST(include_msg_test)) {
|
||||
DO_TEST(msg_test());
|
||||
DO_TEST(msg_err_test());
|
||||
}
|
||||
#endif
|
||||
|
||||
#if INCLUDE_MULTIPART_TEST
|
||||
DO_TEST(multipart_test());
|
||||
if (SHOULD_RUN_TEST(include_multipart_test)) {
|
||||
DO_TEST(multipart_test());
|
||||
}
|
||||
#endif
|
||||
|
||||
#if INCLUDE_TXDATA_TEST
|
||||
DO_TEST(txdata_test());
|
||||
if (SHOULD_RUN_TEST(include_txdata_test)) {
|
||||
DO_TEST(txdata_test());
|
||||
}
|
||||
#endif
|
||||
|
||||
#if INCLUDE_TSX_BENCH
|
||||
DO_TEST(tsx_bench());
|
||||
if (SHOULD_RUN_TEST(include_tsx_bench)) {
|
||||
DO_TEST(tsx_bench());
|
||||
}
|
||||
#endif
|
||||
|
||||
#if INCLUDE_UDP_TEST
|
||||
DO_TEST(transport_udp_test());
|
||||
if (SHOULD_RUN_TEST(include_udp_test)) {
|
||||
DO_TEST(transport_udp_test());
|
||||
}
|
||||
#endif
|
||||
|
||||
#if INCLUDE_LOOP_TEST
|
||||
DO_TEST(transport_loop_test());
|
||||
if (SHOULD_RUN_TEST(include_loop_test)) {
|
||||
DO_TEST(transport_loop_test());
|
||||
}
|
||||
#endif
|
||||
|
||||
#if INCLUDE_TCP_TEST
|
||||
DO_TEST(transport_tcp_test());
|
||||
if (SHOULD_RUN_TEST(include_tcp_test)) {
|
||||
DO_TEST(transport_tcp_test());
|
||||
}
|
||||
#endif
|
||||
|
||||
#if INCLUDE_RESOLVE_TEST
|
||||
DO_TEST(resolve_test());
|
||||
if (SHOULD_RUN_TEST(include_resolve_test)) {
|
||||
DO_TEST(resolve_test());
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#if INCLUDE_TSX_TEST
|
||||
status = pjsip_udp_transport_start(endpt, NULL, NULL, 1, &tp);
|
||||
if (status == PJ_SUCCESS) {
|
||||
tsx_test[tsx_test_cnt].port = tp->local_name.port;
|
||||
tsx_test[tsx_test_cnt].tp_type = "udp";
|
||||
tsx_test[tsx_test_cnt].type = PJSIP_TRANSPORT_UDP;
|
||||
++tsx_test_cnt;
|
||||
}
|
||||
if (SHOULD_RUN_TEST(include_tsx_test)) {
|
||||
status = pjsip_udp_transport_start(endpt, NULL, NULL, 1, &tp);
|
||||
if (status == PJ_SUCCESS) {
|
||||
tsx_test[tsx_test_cnt].port = tp->local_name.port;
|
||||
tsx_test[tsx_test_cnt].tp_type = "udp";
|
||||
tsx_test[tsx_test_cnt].type = PJSIP_TRANSPORT_UDP;
|
||||
++tsx_test_cnt;
|
||||
}
|
||||
|
||||
#if PJ_HAS_TCP
|
||||
status = pjsip_tcp_transport_start(endpt, NULL, 1, &tpfactory);
|
||||
if (status == PJ_SUCCESS) {
|
||||
tsx_test[tsx_test_cnt].port = tpfactory->addr_name.port;
|
||||
tsx_test[tsx_test_cnt].tp_type = "tcp";
|
||||
tsx_test[tsx_test_cnt].type = PJSIP_TRANSPORT_TCP;
|
||||
++tsx_test_cnt;
|
||||
} else {
|
||||
app_perror("Unable to create TCP", status);
|
||||
rc = -4;
|
||||
goto on_return;
|
||||
}
|
||||
status = pjsip_tcp_transport_start(endpt, NULL, 1, &tpfactory);
|
||||
if (status == PJ_SUCCESS) {
|
||||
tsx_test[tsx_test_cnt].port = tpfactory->addr_name.port;
|
||||
tsx_test[tsx_test_cnt].tp_type = "tcp";
|
||||
tsx_test[tsx_test_cnt].type = PJSIP_TRANSPORT_TCP;
|
||||
++tsx_test_cnt;
|
||||
} else {
|
||||
app_perror("Unable to create TCP", status);
|
||||
rc = -4;
|
||||
goto on_return;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
for (i=0; i<tsx_test_cnt; ++i) {
|
||||
DO_TSX_TEST(tsx_basic_test, &tsx_test[i]);
|
||||
DO_TSX_TEST(tsx_uac_test, &tsx_test[i]);
|
||||
DO_TSX_TEST(tsx_uas_test, &tsx_test[i]);
|
||||
for (i = 0; i < tsx_test_cnt; ++i) {
|
||||
DO_TSX_TEST(tsx_basic_test, &tsx_test[i]);
|
||||
DO_TSX_TEST(tsx_uac_test, &tsx_test[i]);
|
||||
DO_TSX_TEST(tsx_uas_test, &tsx_test[i]);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if INCLUDE_INV_OA_TEST
|
||||
DO_TEST(inv_offer_answer_test());
|
||||
if (SHOULD_RUN_TEST(include_inv_oa_test)) {
|
||||
DO_TEST(inv_offer_answer_test());
|
||||
}
|
||||
#endif
|
||||
|
||||
#if INCLUDE_REGC_TEST
|
||||
DO_TEST(regc_test());
|
||||
if (SHOULD_RUN_TEST(include_regc_test)) {
|
||||
DO_TEST(regc_test());
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Better be last because it recreates the endpt
|
||||
*/
|
||||
#if INCLUDE_TSX_DESTROY_TEST
|
||||
DO_TEST(tsx_destroy_test());
|
||||
if (SHOULD_RUN_TEST(include_tsx_destroy_test)) {
|
||||
DO_TEST(tsx_destroy_test());
|
||||
}
|
||||
#endif
|
||||
|
||||
on_return:
|
||||
|
|
|
@ -115,9 +115,10 @@ int transport_load_test(char *target_url);
|
|||
int inv_offer_answer_test(void);
|
||||
|
||||
/* Test main entry */
|
||||
int test_main(void);
|
||||
int test_main(char *testlist);
|
||||
|
||||
/* Test utilities. */
|
||||
void list_tests(void);
|
||||
void app_perror(const char *msg, pj_status_t status);
|
||||
int init_msg_logger(void);
|
||||
int msg_logger_set_enabled(pj_bool_t enabled);
|
||||
|
|
Loading…
Reference in New Issue