summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>2019-07-25 12:09:16 +1200
committerKarolin Seeger <kseeger@samba.org>2019-09-04 08:31:25 +0000
commit0f993c094ea242934766761389cecd5ecfd14a37 (patch)
treee392f21eeb4d177b14046503e58048dbd08ec7d5 /lib
parentc71c51dda004a617eaeccb0819b70310de1ebd14 (diff)
downloadsamba-0f993c094ea242934766761389cecd5ecfd14a37.tar.gz
ldb: add some dn explode tests
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14049 Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Gary Lockyer <gary@catalyst.net.nz> (cherry picked from commit a097ddf65ce56dcd2e0b072b6dd78f512a77a9da)
Diffstat (limited to 'lib')
-rw-r--r--lib/ldb/tests/test_ldb_dn.c70
1 files changed, 70 insertions, 0 deletions
diff --git a/lib/ldb/tests/test_ldb_dn.c b/lib/ldb/tests/test_ldb_dn.c
index 4965dcef575..7c202399a21 100644
--- a/lib/ldb/tests/test_ldb_dn.c
+++ b/lib/ldb/tests/test_ldb_dn.c
@@ -23,6 +23,7 @@
#include <cmocka.h>
#include <ldb.h>
+#include "ldb_private.h"
static void test_ldb_dn_add_child_fmt(void **state)
{
@@ -105,12 +106,81 @@ static void test_ldb_dn_add_child_val2(void **state)
}
+struct explode_test {
+ const char *strdn;
+ int comp_num;
+ int ext_comp_num;
+ bool special;
+ bool invalid;
+ const char *linearized;
+ const char *ext_linearized;
+ bool explode_result;
+};
+
+static void test_ldb_dn_explode(void **state)
+{
+ size_t i;
+ struct ldb_context *ldb = ldb_init(NULL, NULL);
+ struct explode_test tests[] = {
+ {"A=B", 1, 0, false, false, "A=B", "A=B", true},
+ {"", 0, 0, false, false, "", "", true},
+ {" ", -1, -1, false, false, " ", " ", false},
+ {"<>", 0, 0, false, false, "", NULL, true},
+ {"<", 0, 0, false, false, "", NULL, true},
+ {"<><", 0, 0, false, false, "", NULL, true},
+ {"<><>", 0, 0, false, false, "", NULL, true},
+ {"A=B,C=D", 2, 0, false, false, "A=B,C=D", "A=B,C=D", true},
+ {"x=🔥", 1, 0, false, false, "x=🔥", "x=🔥", true},
+ };
+
+
+ for (i = 0; i < ARRAY_SIZE(tests); i++) {
+ bool result;
+ const char *linear;
+ const char *ext_linear;
+ struct ldb_dn *dn = ldb_dn_new(ldb, ldb, tests[i].strdn);
+
+ /*
+ * special, invalid, linear, and ext_linear are set before
+ * explode
+ */
+ fprintf(stderr, "%zu «%s»: ", i, tests[i].strdn);
+ linear = ldb_dn_get_linearized(dn);
+ assert_true((linear == NULL) == (tests[i].linearized == NULL));
+ assert_string_equal(linear,
+ tests[i].linearized);
+
+ ext_linear = ldb_dn_get_extended_linearized(ldb, dn, 1);
+ assert_true((ext_linear == NULL) ==
+ (tests[i].ext_linearized == NULL));
+
+ if (tests[i].ext_linearized != NULL) {
+ assert_string_equal(ext_linear,
+ tests[i].ext_linearized);
+ }
+ assert_true(ldb_dn_is_special(dn) == tests[i].special);
+ assert_true(ldb_dn_is_valid(dn) != tests[i].invalid);
+
+ /* comp nums are set by explode */
+ result = ldb_dn_validate(dn);
+ fprintf(stderr, "res %i lin «%s» ext «%s»\n",
+ result, linear, ext_linear);
+
+ assert_true(result == tests[i].explode_result);
+ assert_int_equal(ldb_dn_get_comp_num(dn),
+ tests[i].comp_num);
+ assert_int_equal(ldb_dn_get_extended_comp_num(dn),
+ tests[i].ext_comp_num);
+ }
+}
+
int main(void) {
const struct CMUnitTest tests[] = {
cmocka_unit_test(test_ldb_dn_add_child_fmt),
cmocka_unit_test(test_ldb_dn_add_child_fmt2),
cmocka_unit_test(test_ldb_dn_add_child_val),
cmocka_unit_test(test_ldb_dn_add_child_val2),
+ cmocka_unit_test(test_ldb_dn_explode),
};
return cmocka_run_group_tests(tests, NULL, NULL);