diff options
Diffstat (limited to 'pjsip/src/test-pjsip/test.c')
-rw-r--r-- | pjsip/src/test-pjsip/test.c | 195 |
1 files changed, 191 insertions, 4 deletions
diff --git a/pjsip/src/test-pjsip/test.c b/pjsip/src/test-pjsip/test.c index b8707332..3ae58daa 100644 --- a/pjsip/src/test-pjsip/test.c +++ b/pjsip/src/test-pjsip/test.c @@ -33,11 +33,24 @@ if (rc!=0) goto on_return; \ } while (0) +#define DO_TSX_TEST(test, param) \ + do { \ + PJ_LOG(3, (THIS_FILE, "Running %s(%s)...", #test, (param)->tp_type)); \ + rc = test(param); \ + PJ_LOG(3, (THIS_FILE, \ + "%s(%d)", \ + (rc ? "..ERROR" : "..success"), rc)); \ + if (rc!=0) goto on_return; \ + } while (0) pjsip_endpoint *endpt; int log_level = 3; +static pj_oshandle_t fd_report; +const char *system_name = "Unknown"; +static char buf[1024]; + void app_perror(const char *msg, pj_status_t rc) { char errbuf[256]; @@ -75,11 +88,142 @@ pj_status_t register_static_modules(pj_size_t *count, pjsip_module **modules) return PJ_SUCCESS; } +static pj_status_t init_report(void) +{ + char tmp[80]; + pj_time_val timestamp; + pj_parsed_time date_time; + pj_ssize_t len; + pj_status_t status; + + pj_ansi_sprintf(tmp, "pjsip-static-bench-%s-%s.htm", PJ_OS_NAME, PJ_CC_NAME); + + status = pj_file_open(NULL, tmp, PJ_O_WRONLY, &fd_report); + if (status != PJ_SUCCESS) + return status; + + /* Title */ + len = pj_ansi_sprintf(buf, "<HTML>\n" + " <HEAD>\n" + " <TITLE>PJSIP %s (%s) - Static Benchmark</TITLE>\n" + " </HEAD>\n" + "<BODY>\n" + "\n", + PJ_VERSION, + (PJ_DEBUG ? "Debug" : "Release")); + pj_file_write(fd_report, buf, &len); + + + /* Title */ + len = pj_ansi_sprintf(buf, "<H1>PJSIP %s (%s) - Static Benchmark</H1>\n", + PJ_VERSION, + (PJ_DEBUG ? "Debug" : "Release")); + pj_file_write(fd_report, buf, &len); + + len = pj_ansi_sprintf(buf, "<P>Below is the benchmark result generated " + "by <b>test-pjsip</b> program. The program " + "is single-threaded only.</P>\n"); + pj_file_write(fd_report, buf, &len); + + + /* Write table heading */ + len = pj_ansi_sprintf(buf, "<TABLE border=\"1\" cellpadding=\"4\">\n" + " <TR><TD bgColor=\"aqua\" align=\"center\">Variable</TD>\n" + " <TD bgColor=\"aqua\" align=\"center\">Value</TD>\n" + " <TD bgColor=\"aqua\" align=\"center\">Description</TD>\n" + " </TR>\n"); + pj_file_write(fd_report, buf, &len); + + + /* Write version */ + report_sval("version", PJ_VERSION, "", "PJLIB/PJSIP version"); + + + /* Debug or release */ + report_sval("build-type", (PJ_DEBUG ? "Debug" : "Release"), "", "Build type"); + + + /* Write timestamp */ + pj_gettimeofday(×tamp); + report_ival("timestamp", timestamp.sec, "", "System timestamp of the test"); + + + /* Write time of day */ + pj_time_decode(×tamp, &date_time); + len = pj_ansi_sprintf(tmp, "%04d-%02d-%02d %02d:%02d:%02d", + date_time.year, date_time.mon+1, date_time.day, + date_time.hour, date_time.min, date_time.sec); + report_sval("date-time", tmp, "", "Date/time of the test"); + + + /* Write System */ + report_sval("system", system_name, "", "System description"); + + + /* Write OS type */ + report_sval("os-family", PJ_OS_NAME, "", "Operating system family"); + + + /* Write CC name */ + len = pj_ansi_sprintf(tmp, "%s-%d.%d.%d", PJ_CC_NAME, + PJ_CC_VER_1, PJ_CC_VER_2, PJ_CC_VER_2); + report_sval("cc-name", tmp, "", "Compiler name and version"); + + + return PJ_SUCCESS; +} + +void report_sval(const char *name, const char* value, const char *valname, + const char *desc) +{ + pj_ssize_t len; + + len = pj_ansi_sprintf(buf, " <TR><TD><TT>%s</TT></TD>\n" + " <TD align=\"right\"><B>%s %s</B></TD>\n" + " <TD>%s</TD>\n" + " </TR>\n", + name, value, valname, desc); + pj_file_write(fd_report, buf, &len); +} + + +void report_ival(const char *name, int value, const char *valname, + const char *desc) +{ + pj_ssize_t len; + + len = pj_ansi_sprintf(buf, " <TR><TD><TT>%s</TT></TD>\n" + " <TD align=\"right\"><B>%d %s</B></TD>\n" + " <TD>%s</TD>\n" + " </TR>\n", + name, value, valname, desc); + pj_file_write(fd_report, buf, &len); + +} + +static void close_report(void) +{ + pj_ssize_t len; + + if (fd_report) { + len = pj_ansi_sprintf(buf, "</TABLE>\n</BODY>\n</HTML>\n"); + pj_file_write(fd_report, buf, &len); + + pj_file_close(fd_report); + } +} + + int test_main(void) { pj_status_t rc; pj_caching_pool caching_pool; const char *filename; + unsigned i, tsx_test_cnt=0; + struct tsx_test_param tsx_test[10]; + pj_status_t status; + pjsip_transport *tp; + pjsip_tpfactory *tpfactory; int line; pj_log_set_level(log_level); @@ -93,6 +237,10 @@ int test_main(void) return rc; } + status = init_report(); + if (status != PJ_SUCCESS) + return status; + pj_dump_config(); pj_caching_pool_init( &caching_pool, &pj_pool_factory_default_policy, 0 ); @@ -124,6 +272,11 @@ int test_main(void) rc); goto on_return; } + tsx_test[tsx_test_cnt].port = 5060; + tsx_test[tsx_test_cnt].tp_type = "loop-dgram"; + tsx_test[tsx_test_cnt].type = PJSIP_TRANSPORT_LOOP_DGRAM; + ++tsx_test_cnt; + #if INCLUDE_URI_TEST DO_TEST(uri_test()); @@ -138,6 +291,10 @@ int test_main(void) DO_TEST(txdata_test()); #endif +#if INCLUDE_TSX_BENCH + DO_TEST(tsx_bench()); +#endif + #if INCLUDE_UDP_TEST DO_TEST(transport_udp_test()); #endif @@ -146,15 +303,43 @@ int test_main(void) DO_TEST(transport_loop_test()); #endif +#if INCLUDE_TCP_TEST + DO_TEST(transport_tcp_test()); +#endif + + #if INCLUDE_TSX_TEST - DO_TEST(tsx_basic_test()); - DO_TEST(tsx_uac_test()); - DO_TEST(tsx_uas_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; + } + + 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; + } + + + 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 on_return: - + flush_events(500); pjsip_endpt_destroy(endpt); pj_caching_pool_destroy(&caching_pool); @@ -169,6 +354,8 @@ on_return: else PJ_LOG(3,(THIS_FILE, "Test completed with error(s)")); + report_ival("test-status", rc, "", "Overall test status/result (0==success)"); + close_report(); return rc; } |