diff options
Diffstat (limited to '')
-rw-r--r-- | test/rspamd_cxx_unit.cxx | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/test/rspamd_cxx_unit.cxx b/test/rspamd_cxx_unit.cxx new file mode 100644 index 0000000..3dde89d --- /dev/null +++ b/test/rspamd_cxx_unit.cxx @@ -0,0 +1,86 @@ +/*- + * Copyright 2021 Vsevolod Stakhov + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "config.h" +#include "rspamd.h" +#include <memory> + +#define DOCTEST_CONFIG_IMPLEMENTATION_IN_DLL +#include "doctest/doctest.h" + +#include "rspamd_cxx_unit_utils.hxx" +#include "rspamd_cxx_local_ptr.hxx" +#include "rspamd_cxx_unit_dkim.hxx" + +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) +{ + struct rspamd_main *rspamd_main; + rspamd_mempool_t *pool; + struct rspamd_config *cfg; + GOptionContext *options_context; + + 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 = 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); + g_option_context_set_help_enabled(options_context, false); + + GError *error = NULL; + + 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()) { + return res; + } + + rspamd_mempool_delete(pool); + + return res; +}
\ No newline at end of file |