summaryrefslogtreecommitdiffstats
path: root/test/rspamd_cxx_unit.cxx
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--test/rspamd_cxx_unit.cxx86
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