void debuglogger(void) { cp_context_t *ctx; struct log_count_t lc = { CP_LOG_DEBUG, 0, 0 }; ctx = init_context(CP_LOG_INFO, NULL); check(cp_register_logger(ctx, counting_logger, &lc, CP_LOG_DEBUG) == CP_OK); cp_destroy(); check(lc.count_max > 0 && lc.count_above_max == 0); }
CP_HIDDEN cp_context_t *init_context(cp_log_severity_t min_disp_sev, int *error_counter) { cp_context_t *ctx; cp_status_t status; check(cp_init() == CP_OK); check((ctx = cp_create_context(&status)) != NULL && status == CP_OK); if (error_counter != NULL) { *error_counter = 0; } if (error_counter != NULL || min_disp_sev <= CP_LOG_ERROR) { if (min_disp_sev <= CP_LOG_ERROR) { check(cp_register_logger(ctx, full_logger, error_counter, min_disp_sev) == CP_OK); } else { check(cp_register_logger(ctx, counting_logger, error_counter, CP_LOG_ERROR) == CP_OK); } } return ctx; }
void warninglogger(void) { cp_context_t *ctx; struct log_count_t lc = { CP_LOG_WARNING, 0, 0 }; ctx = init_context(CP_LOG_ERROR, NULL); check(cp_register_logger(ctx, counting_logger, &lc, CP_LOG_WARNING) == CP_OK); check(cp_start_plugin(ctx, "nonexisting") == CP_ERR_UNKNOWN); cp_destroy(); check(lc.count_max > 0 && lc.count_above_max == 0); }
void twologgers(void) { cp_context_t *ctx; cp_plugin_info_t *plugin; cp_status_t status; struct log_count_t lc = { CP_LOG_DEBUG, 0, 0 }; int count = 0; int errors; ctx = init_context(CP_LOG_ERROR, &errors); check(cp_register_logger(ctx, counting_logger, &lc, CP_LOG_DEBUG) == CP_OK); check(count == 0 && lc.count_max > 0 && lc.count_above_max == 0); check(cp_register_logger(ctx, increment_logger, &count, CP_LOG_INFO) == CP_OK); check(count == 0 && lc.count_max > 0 && lc.count_above_max == 0); check((plugin = cp_load_plugin_descriptor(ctx, plugindir("minimal"), &status)) != NULL && status == CP_OK); check(cp_install_plugin(ctx, plugin) == CP_OK); cp_release_info(ctx, plugin); check(count > 0 && lc.count_max > 0 && lc.count_above_max > 0); cp_destroy(); check(errors == 0); }
static void logmsg_sev(cp_context_t *ctx, cp_log_severity_t severity, const char *msg) { struct log_info_t li = { -1, NULL, NULL }; check(cp_register_logger(ctx, store_logger, &li, CP_LOG_DEBUG) == CP_OK); cp_log(ctx, severity, msg); check(li.severity == severity); check(li.msg != NULL && !strcmp(li.msg, msg)); check(li.apid == NULL); free(li.msg); li.msg = NULL; cp_unregister_logger(ctx, store_logger); }
void infologger(void) { cp_context_t *ctx; cp_plugin_info_t *plugin; cp_status_t status; struct log_count_t lc = { CP_LOG_INFO, 0, 0 }; ctx = init_context(CP_LOG_WARNING, NULL); check(cp_register_logger(ctx, counting_logger, &lc, CP_LOG_INFO) == CP_OK); check((plugin = cp_load_plugin_descriptor(ctx, plugindir("minimal"), &status)) != NULL && status == CP_OK); check(cp_install_plugin(ctx, plugin) == CP_OK); cp_release_info(ctx, plugin); cp_destroy(); check(lc.count_max > 0 && lc.count_above_max == 0); }
static int start(void *d) { struct runtime_data *data = d; char **argv; data->counters->start++; argv = cp_get_context_args(data->ctx, NULL); if (argv != NULL && argv[0] != NULL) { if ((data->counters->context_arg_0 = strdup(argv[0])) == NULL) { return CP_ERR_RESOURCE; } } if (cp_define_symbol(data->ctx, "cbc_counters", data->counters) != CP_OK || cp_register_logger(data->ctx, logger, data, CP_LOG_WARNING) != CP_OK || cp_register_plistener(data->ctx, listener, data) != CP_OK || cp_run_function(data->ctx, run) != CP_OK) { return CP_ERR_RUNTIME; } else { return CP_OK; } }
static void islogged_sev(cp_context_t *ctx, cp_log_severity_t severity) { int count = 0; check(!cp_is_logged(ctx, severity)); check(cp_register_logger(ctx, increment_logger, &count, severity) == CP_OK); check(cp_is_logged(ctx, CP_LOG_ERROR)); check(cp_is_logged(ctx, severity)); switch (severity) { case CP_LOG_DEBUG: break; case CP_LOG_INFO: check(!cp_is_logged(ctx, CP_LOG_DEBUG)); break; case CP_LOG_WARNING: check(!cp_is_logged(ctx, CP_LOG_INFO)); break; case CP_LOG_ERROR: check(!cp_is_logged(ctx, CP_LOG_WARNING)); break; } cp_unregister_logger(ctx, increment_logger); }