diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/rspamd_cxx_unit.cxx | 58 |
1 files changed, 47 insertions, 11 deletions
diff --git a/test/rspamd_cxx_unit.cxx b/test/rspamd_cxx_unit.cxx index fedf453c3..9d37ff56a 100644 --- a/test/rspamd_cxx_unit.cxx +++ b/test/rspamd_cxx_unit.cxx @@ -17,31 +17,67 @@ #include "config.h" #include "rspamd.h" #include <memory> + #define DOCTEST_CONFIG_IMPLEMENTATION_IN_DLL + #include "doctest/doctest.h" +static gboolean verbose = false; +static const GOptionEntry entries[] = + { + {"verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, + "Enable verbose logging", NULL}, + {NULL, 0, 0, G_OPTION_ARG_NONE, NULL, NULL, NULL} + }; + + int -main(int argc, char** argv) -{ - std::unique_ptr<struct rspamd_main> rspamd_main{new struct rspamd_main}; +main(int argc, char **argv) { + struct rspamd_main *rspamd_main; + rspamd_mempool_t *pool; struct rspamd_config *cfg; + GOptionContext *options_context; - rspamd_main->server_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL, 0); - cfg = rspamd_config_new (RSPAMD_CONFIG_INIT_DEFAULT); - cfg->libs_ctx = rspamd_init_libs (); + pool = rspamd_mempool_new(rspamd_mempool_suggest_size(), NULL, 0); + rspamd_main = (struct rspamd_main *) rspamd_mempool_alloc0(pool, sizeof(*rspamd_main)); + rspamd_main->server_pool = pool; + cfg = rspamd_config_new(RSPAMD_CONFIG_INIT_DEFAULT); + cfg->libs_ctx = rspamd_init_libs(); rspamd_main->cfg = cfg; - cfg->cfg_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL, 0); + cfg->cfg_pool = pool; + + options_context = g_option_context_new("- run rspamd cxx test"); + g_option_context_add_main_entries(options_context, entries, NULL); + g_option_context_set_ignore_unknown_options(options_context, true); + + GError *error = NULL; - rspamd_main->logger = rspamd_log_open_emergency (rspamd_main->server_pool, - RSPAMD_LOG_FLAG_RSPAMADM); - rspamd_log_set_log_level (rspamd_main->logger, G_LOG_LEVEL_MESSAGE); + if (!g_option_context_parse(options_context, &argc, &argv, &error)) { + fprintf(stderr, "option parsing failed: %s\n", error->message); + g_option_context_free(options_context); + exit(1); + } + + if (verbose) { + rspamd_main->logger = rspamd_log_open_emergency(rspamd_main->server_pool, + RSPAMD_LOG_FLAG_USEC | RSPAMD_LOG_FLAG_ENFORCED | RSPAMD_LOG_FLAG_RSPAMADM); + + rspamd_log_set_log_level(rspamd_main->logger, G_LOG_LEVEL_DEBUG); + } + else { + rspamd_main->logger = rspamd_log_open_emergency(rspamd_main->server_pool, + RSPAMD_LOG_FLAG_RSPAMADM); + rspamd_log_set_log_level(rspamd_main->logger, G_LOG_LEVEL_MESSAGE); + } doctest::Context context(argc, argv); int res = context.run(); - if(context.shouldExit()) { + if (context.shouldExit()) { return res; } + rspamd_mempool_delete(pool); + return res; }
\ No newline at end of file |