diff --git a/tests/unit/.gitignore b/tests/unit/.gitignore new file mode 100644 index 0000000000..653a998769 --- /dev/null +++ b/tests/unit/.gitignore @@ -0,0 +1,12 @@ +* +!/**/ +!/*.* + +*.o +*~ +\#* +*.log +*.trs +perf.data +perf.data.old +Makefile.in diff --git a/tests/unit/switch_event.c b/tests/unit/switch_event.c index bfef0cb9f6..9b19879d67 100644 --- a/tests/unit/switch_event.c +++ b/tests/unit/switch_event.c @@ -2,42 +2,103 @@ #include #include -int main () { +// #define BENCHMARK 1 +int main () { switch_event_t *event = NULL; switch_bool_t verbose = SWITCH_TRUE; const char *err = NULL; switch_time_t start_ts, end_ts; - int rc = 0, loops = 1000; + int rc = 0, loops = 10; switch_status_t status = SWITCH_STATUS_SUCCESS; + char **index = NULL; + unsigned long long micro_total = 0; + double micro_per = 0; + double rate_per_sec = 0; - plan(1 + ( 3 * loops)); +#ifdef BENCHMARK + switch_time_t small_start_ts, small_end_ts; + + plan(2); +#else + plan(2 + ( 2 * loops)); +#endif - status = switch_core_init(SCF_MINIMAL, verbose, &err); if ( !ok( status == SWITCH_STATUS_SUCCESS, "Initialize FreeSWITCH core\n")) { bail_out(0, "Bail due to failure to initialize FreeSWITCH[%s]", err); } + index = calloc(loops, sizeof(char *)); + for ( int x = 0; x < loops; x++) { + index[x] = switch_mprintf("%d", x); + } + /* START LOOPS */ start_ts = switch_time_now(); + status = switch_event_create(&event, SWITCH_EVENT_MESSAGE); + ok( status == SWITCH_STATUS_SUCCESS,"Create Event"); + +#ifndef BENCHMARK for ( int x = 0; x < loops; x++) { - status = switch_event_create(&event, SWITCH_EVENT_MESSAGE); - ok( status == SWITCH_STATUS_SUCCESS,"Create Event"); - - status = switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "testing", "event_create"); + status = switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, index[x], index[x]); ok( status == SWITCH_STATUS_SUCCESS,"Add header to event"); - - is(switch_event_get_header(event, "testing"), "event_create", "correct header value returned"); - - switch_event_destroy(&event); - } /* END LOOPS */ + } +#else + small_start_ts = switch_time_now(); + for ( int x = 0; x < loops; x++) { + if ( switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, index[x], index[x]) != SWITCH_STATUS_SUCCESS) { + fail("Failed to add header to event"); + } + } + small_end_ts = switch_time_now(); + + micro_total = small_end_ts - small_start_ts; + micro_per = micro_total / (double) loops; + rate_per_sec = 1000000 / micro_per; + note("switch_event add_header: Total %ldus / %ld loops, %.2f us per loop, %.0f loops per second\n", + micro_total, loops, micro_per, rate_per_sec); +#endif + + +#ifndef BENCHMARK + for ( int x = 0; x < loops; x++) { + is(switch_event_get_header(event, index[x]), index[x], "correct header value returned"); + } +#else + small_start_ts = switch_time_now(); + for ( int x = 0; x < loops; x++) { + if ( !switch_event_get_header(event, index[x])) { + fail("Failed to lookup event header value"); + } + } + small_end_ts = switch_time_now(); + + micro_total = small_end_ts - small_start_ts; + micro_per = micro_total / (double) loops; + rate_per_sec = 1000000 / micro_per; + note("switch_event get_header: Total %ldus / %ld loops, %.2f us per loop, %.0f loops per second\n", + micro_total, loops, micro_per, rate_per_sec); +#endif + + + switch_event_destroy(&event); + /* END LOOPS */ end_ts = switch_time_now(); - note("Total %ldus, %ldus per loop, %ld loops per second\n", end_ts - start_ts,(end_ts - start_ts) / loops, 1000000/ ((end_ts - start_ts) / loops)); + for ( int x = 0; x < loops; x++) { + free(index[x]); + } + free(index); + + micro_total = end_ts - start_ts; + micro_per = micro_total / (double) loops; + rate_per_sec = 1000000 / micro_per; + note("switch_event Total %ldus / %d loops, %.2f us per loop, %.0f loops per second\n", + micro_total, loops, micro_per, rate_per_sec); switch_core_destroy();