summaryrefslogtreecommitdiffstats
path: root/libseaudit/tests/filters.c
diff options
context:
space:
mode:
Diffstat (limited to 'libseaudit/tests/filters.c')
-rw-r--r--libseaudit/tests/filters.c114
1 files changed, 114 insertions, 0 deletions
diff --git a/libseaudit/tests/filters.c b/libseaudit/tests/filters.c
new file mode 100644
index 0000000..4279173
--- /dev/null
+++ b/libseaudit/tests/filters.c
@@ -0,0 +1,114 @@
+/**
+ * @file
+ *
+ * Test libseaudit's filtering capabilities.
+ *
+ * @author Jeremy A. Mowery jmowery@tresys.com
+ * @author Jason Tang jtang@tresys.com
+ *
+ * Copyright (C) 2007 Tresys Technology, LLC
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <config.h>
+
+#include <CUnit/CUnit.h>
+#include <apol/util.h>
+#include <seaudit/log.h>
+#include <seaudit/message.h>
+#include <seaudit/model.h>
+#include <seaudit/parse.h>
+
+#include <stdbool.h>
+#include <stdio.h>
+
+#define MESSAGES_NOWARNS TEST_POLICIES "/setools-3.1/seaudit/messages-nowarns"
+
+static seaudit_log_t *l = NULL;
+static seaudit_model_t *m = NULL;
+
+static void filters_simple()
+{
+ seaudit_filter_t *f = seaudit_filter_create("simple filter");
+ CU_ASSERT_PTR_NOT_NULL_FATAL(f);
+
+ int retval;
+ apol_vector_t *v = apol_str_split("system_u", ":");
+ CU_ASSERT_PTR_NOT_NULL_FATAL(v);
+ retval = seaudit_filter_set_source_user(f, v);
+ CU_ASSERT(retval == 0);
+ apol_vector_destroy(&v);
+
+ retval = seaudit_model_append_filter(m, f);
+ CU_ASSERT(retval == 0);
+
+ v = seaudit_model_get_messages(l, m);
+ CU_ASSERT_PTR_NOT_NULL_FATAL(v);
+ CU_ASSERT(apol_vector_get_size(v) == 5 + 5);
+ apol_vector_destroy(&v);
+
+ retval = seaudit_filter_set_strict(f, true);
+ CU_ASSERT(retval == 0);
+ v = seaudit_model_get_messages(l, m);
+ CU_ASSERT_PTR_NOT_NULL_FATAL(v);
+ CU_ASSERT(apol_vector_get_size(v) == 5);
+ apol_vector_destroy(&v);
+
+ retval = seaudit_filter_set_strict(f, false);
+ CU_ASSERT(retval == 0);
+ v = seaudit_model_get_messages(l, m);
+ CU_ASSERT_PTR_NOT_NULL_FATAL(v);
+ CU_ASSERT(apol_vector_get_size(v) == 5 + 5);
+ apol_vector_destroy(&v);
+}
+
+CU_TestInfo filters_tests[] = {
+ {"simple filter", filters_simple},
+ CU_TEST_INFO_NULL
+};
+
+int filters_init()
+{
+ l = seaudit_log_create(NULL, NULL);
+ if (l == NULL) {
+ return 1;
+ }
+ m = seaudit_model_create("filters", l);
+ if (m == NULL) {
+ return 1;
+ }
+
+ FILE *f = fopen(MESSAGES_NOWARNS, "r");
+ if (f == NULL) {
+ return 1;
+ }
+ int retval;
+ retval = seaudit_log_parse(l, f);
+ if (retval != 0) {
+ fclose(f);
+ return 1;
+ }
+
+ fclose(f);
+ return 0;
+}
+
+int filters_cleanup()
+{
+ seaudit_log_destroy(&l);
+ seaudit_model_destroy(&m);
+ return 0;
+}