Line data Source code
1 : /* 2 : * from cmocka.c: 3 : * These headers or their equivalents should be included prior to 4 : * including 5 : * this header file. 6 : * 7 : * #include <stdarg.h> 8 : * #include <stddef.h> 9 : * #include <setjmp.h> 10 : * 11 : * This allows test applications to use custom definitions of C standard 12 : * library functions and types. 13 : */ 14 : #include <stdarg.h> 15 : #include <stddef.h> 16 : #include <stdint.h> 17 : #include <setjmp.h> 18 : #include <cmocka.h> 19 : 20 : #include <errno.h> 21 : #include <unistd.h> 22 : #include <talloc.h> 23 : 24 : #include <ldb.h> 25 : #include <ldb_private.h> 26 : #include <string.h> 27 : #include <ctype.h> 28 : 29 : int ldb_ldap_init(const char *version); 30 : 31 : #include "ldb_ldap/ldb_ldap.c" 32 : 33 : struct test_ctx { 34 : struct tevent_context *ev; 35 : struct ldb_context *ldb; 36 : struct ldb_message *msg; 37 : }; 38 : 39 1 : static int lldb_msg_setup(void **state) 40 : { 41 1 : struct test_ctx *test_ctx; 42 : 43 1 : test_ctx = talloc_zero(NULL, struct test_ctx); 44 1 : assert_non_null(test_ctx); 45 : 46 1 : test_ctx->ev = tevent_context_init(test_ctx); 47 1 : assert_non_null(test_ctx->ev); 48 : 49 1 : test_ctx->ldb = ldb_init(test_ctx, test_ctx->ev); 50 1 : assert_non_null(test_ctx->ldb); 51 : 52 1 : test_ctx->msg = ldb_msg_new(test_ctx); 53 1 : assert_non_null(test_ctx->msg); 54 : 55 1 : *state = test_ctx; 56 1 : return 0; 57 : } 58 : 59 1 : static int lldb_msg_teardown(void **state) 60 : { 61 1 : struct test_ctx *test_ctx = talloc_get_type_abort(*state, 62 : struct test_ctx); 63 : 64 1 : talloc_free(test_ctx); 65 1 : return 0; 66 : } 67 : 68 1 : static void test_lldb_add_msg_attr(void **state) 69 : { 70 1 : struct test_ctx *test_ctx = talloc_get_type_abort(*state, 71 : struct test_ctx); 72 1 : struct ldb_message *msg = test_ctx->msg; 73 1 : int ret; 74 1 : unsigned int num_elements = 0; 75 1 : struct berval **v = NULL; 76 : 77 1 : v = talloc_zero_array(test_ctx, struct berval *, 2); 78 1 : assert_non_null(v); 79 : 80 1 : v[0] = talloc_zero(v, struct berval); 81 1 : assert_non_null(v[0]); 82 : 83 1 : v[0]->bv_val = talloc_strdup(msg, "dc=example,dc=test"); 84 1 : assert_non_null(v[0]->bv_val); 85 : 86 1 : v[0]->bv_len = strlen(v[0]->bv_val); 87 : 88 1 : num_elements = msg->num_elements; 89 : 90 1 : ret = lldb_add_msg_attr(test_ctx->ldb, msg, "defaultNamingContext", v); 91 1 : assert_int_equal(ret, LDB_SUCCESS); 92 1 : assert_int_equal(msg->num_elements, num_elements + 1); 93 1 : } 94 : 95 : 96 1 : int main(int argc, const char **argv) 97 : { 98 1 : const struct CMUnitTest tests[] = { 99 : cmocka_unit_test_setup_teardown(test_lldb_add_msg_attr, 100 : lldb_msg_setup, 101 : lldb_msg_teardown), 102 : }; 103 : 104 1 : cmocka_set_message_output(CM_OUTPUT_SUBUNIT); 105 : 106 1 : return cmocka_run_group_tests(tests, NULL, NULL); 107 : }