diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_logger.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/tests/test_logger.c b/tests/test_logger.c index 07a4c369b..59ee3e6c1 100644 --- a/tests/test_logger.c +++ b/tests/test_logger.c @@ -188,9 +188,76 @@ static char *handle_cli_performance_test(struct ast_cli_entry *e, int cmd, struc return CLI_SUCCESS; } +static char *handle_cli_queue_test(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) +{ + unsigned int level; + int current_queue_limit; + unsigned int x; + struct timeval start, end; + int elapsed; + char tmppath[] = "/tmp/asterisk_logger_queue.XXXXXX"; + int fd; + + switch (cmd) { + case CLI_INIT: + e->command = "logger test queue"; + e->usage = "" + "Usage: logger test queue\n" + ""; + return NULL; + case CLI_GENERATE: + return NULL; + } + + fd = mkstemp(tmppath); + if (fd < 0) { + ast_cli(a->fd, "Test: Failed, could not create temporary log file '%s'.\n", tmppath); + return CLI_SUCCESS; + } + + level = ast_logger_register_level("queuetest"); + if (level < 0) { + ast_cli(a->fd, "Test: Failed, could not register level 'queuetest'.\n"); + return CLI_SUCCESS; + } + ast_cli(a->fd, "Test: got level %u for 'queuetest'.\n", level); + + if (ast_logger_create_channel(tmppath, "queuetest") != AST_LOGGER_SUCCESS) { + ast_cli(a->fd, "Test: Unable to create logger channel '%s'\n", tmppath); + goto error; + } + + current_queue_limit = ast_logger_get_queue_limit(); + ast_cli(a->fd, "Test: Current queue limit: %d. Setting to 100 for test.\n", current_queue_limit); + ast_logger_set_queue_limit(100); + + ast_cli(a->fd, "Test: You should see SOME 'exceeded' and 'resumed' messages after the test " + "is completed. How many is dependent on system resources.\n"); + + start = ast_tvnow(); + for (x = 0; x < 10000; x++) { + ast_log_dynamic_level(level, "Performance test log message %2d\n", x); + } + end = ast_tvnow(); + elapsed = ast_tvdiff_ms(end, start); + ast_cli(a->fd, "Test: 10,000 messages in %f seconds.\n", (float) elapsed / 1000); + ast_cli(a->fd, "Test: Completed. Resetting queue limit to %d.\n", current_queue_limit); + ast_logger_set_queue_limit(current_queue_limit); + +error: + + ast_logger_remove_channel(tmppath); + ast_logger_unregister_level("queuetest"); + close(fd); + unlink(tmppath); + + return CLI_SUCCESS; +} + static struct ast_cli_entry cli_logger[] = { AST_CLI_DEFINE(handle_cli_dynamic_level_test, "Test the dynamic logger level implementation"), AST_CLI_DEFINE(handle_cli_performance_test, "Test the logger performance"), + AST_CLI_DEFINE(handle_cli_queue_test, "Test the logger queue"), }; static int unload_module(void) |