diff options
Diffstat (limited to 'src/plugins/acl/test-acl.c')
-rw-r--r-- | src/plugins/acl/test-acl.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/plugins/acl/test-acl.c b/src/plugins/acl/test-acl.c new file mode 100644 index 0000000..1fafd7a --- /dev/null +++ b/src/plugins/acl/test-acl.c @@ -0,0 +1,66 @@ +/* Copyright (c) 2020 Dovecot authors, see the included COPYING file */ + +#include "lib.h" +#include "array.h" +#include "test-common.h" +#include "acl-api-private.h" + +static void test_acl_rights_sort(void) +{ + struct acl_rights rights1 = { + .rights = t_strsplit("a b a c d b", " "), + .neg_rights = t_strsplit("e d c a a d b e", " "), + }; + struct acl_rights rights2 = { + .rights = t_strsplit("a c x", " "), + .neg_rights = t_strsplit("b c y", " "), + }; + struct acl_object obj = { + .rights_pool = pool_alloconly_create("acl rights", 256) + }; + const struct acl_rights *rights; + + test_begin("acl_rights_sort"); + t_array_init(&obj.rights, 8); + + /* try with zero rights */ + acl_rights_sort(&obj); + test_assert(array_count(&obj.rights) == 0); + + /* try with just one right */ + array_push_back(&obj.rights, &rights1); + acl_rights_sort(&obj); + test_assert(array_count(&obj.rights) == 1); + rights = array_idx(&obj.rights, 0); + test_assert(acl_rights_cmp(rights, &rights1) == 0); + + /* try with two rights that don't have equal ID */ + struct acl_rights rights1_id2 = rights1; + rights1_id2.identifier = "id2"; + array_push_back(&obj.rights, &rights1_id2); + acl_rights_sort(&obj); + test_assert(array_count(&obj.rights) == 2); + rights = array_idx(&obj.rights, 0); + test_assert(acl_rights_cmp(&rights[0], &rights1) == 0); + test_assert(acl_rights_cmp(&rights[1], &rights1_id2) == 0); + + /* try with 3 rights where first has equal ID */ + array_push_back(&obj.rights, &rights2); + acl_rights_sort(&obj); + test_assert(array_count(&obj.rights) == 2); + rights = array_idx(&obj.rights, 0); + test_assert_strcmp(t_strarray_join(rights[0].rights, " "), "a b c d x"); + test_assert_strcmp(t_strarray_join(rights[0].neg_rights, " "), "a b c d e y"); + + pool_unref(&obj.rights_pool); + test_end(); +} + +int main(void) +{ + static void (*const test_functions[])(void) = { + test_acl_rights_sort, + NULL + }; + return test_run(test_functions); +} |