From 7585aa6c8f225a7aed51520a2af15f0037cd37f6 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Thu, 15 Dec 2016 10:33:59 +0100 Subject: testsuite: Add cmocka unit test for smb_krb5_kt_open() Signed-off-by: Andreas Schneider Reviewed-by: Jeremy Allison Autobuild-User(master): Jeremy Allison Autobuild-Date(master): Fri Dec 16 05:43:12 CET 2016 on sn-devel-144 --- testsuite/unittests/test_krb5_samba.c | 145 ++++++++++++++++++++++++++++++++++ testsuite/unittests/wscript | 15 ++++ 2 files changed, 160 insertions(+) create mode 100644 testsuite/unittests/test_krb5_samba.c create mode 100644 testsuite/unittests/wscript (limited to 'testsuite') diff --git a/testsuite/unittests/test_krb5_samba.c b/testsuite/unittests/test_krb5_samba.c new file mode 100644 index 00000000000..8b7e843b85f --- /dev/null +++ b/testsuite/unittests/test_krb5_samba.c @@ -0,0 +1,145 @@ +#include +#include +#include +#include + +#include + +#include "includes.h" +#include "lib/krb5_wrap/krb5_samba.h" + + +static int setup_krb5_context(void **state) +{ + krb5_context context = NULL; + krb5_error_code code; + + code = krb5_init_context(&context); + assert_return_code(code, code); + + *state = context; + + return 0; +} + +static int teardown_krb5_context(void **state) +{ + krb5_context context = *state; + + if (context != NULL) { + krb5_free_context(context); + } + return 0; +} + +static void test_smb_krb5_kt_open(void **state) +{ + krb5_context context = *state; + krb5_keytab keytab = NULL; + krb5_error_code code; + char keytab_template[] = "/tmp/keytab.XXXXXX"; + int fd; + + fd = mkstemp(keytab_template); + assert_return_code(fd, errno); + unlink(keytab_template); + + code = smb_krb5_kt_open(context, + keytab_template, + false, + &keytab); + assert_int_equal(code, 0); + + krb5_kt_close(context, keytab); + close(fd); +} + +static void test_smb_krb5_kt_open_file(void **state) +{ + krb5_context context = *state; + krb5_keytab keytab = NULL; + krb5_error_code code; + char keytab_template[] = "/tmp/keytab.XXXXXX"; + char keytab_file[6 + strlen(keytab_template)]; + int fd; + + fd = mkstemp(keytab_template); + assert_return_code(fd, errno); + unlink(keytab_template); + + snprintf(keytab_file, sizeof(keytab_file), "FILE:%s", keytab_template); + + code = smb_krb5_kt_open(context, + keytab_file, + false, + &keytab); + assert_int_equal(code, 0); + + krb5_kt_close(context, keytab); + close(fd); +} + +static void test_smb_krb5_kt_open_fail(void **state) +{ + krb5_context context = *state; + krb5_keytab keytab = NULL; + krb5_error_code code; + + code = smb_krb5_kt_open(context, + NULL, + false, + &keytab); + assert_int_equal(code, KRB5_KT_BADNAME); + code = smb_krb5_kt_open(context, + "wurst", + false, + &keytab); + assert_int_equal(code, KRB5_KT_BADNAME); + + code = smb_krb5_kt_open(context, + "FILE:wurst", + false, + &keytab); + assert_int_equal(code, KRB5_KT_BADNAME); + + code = smb_krb5_kt_open(context, + "WRFILE:wurst", + false, + &keytab); + assert_int_equal(code, KRB5_KT_BADNAME); +} + +static void test_smb_krb5_kt_open_relative_memory(void **state) +{ + krb5_context context = *state; + krb5_keytab keytab = NULL; + krb5_error_code code; + + code = smb_krb5_kt_open_relative(context, + NULL, + true, + &keytab); + assert_int_equal(code, 0); + + krb5_kt_close(context, keytab); +} + +int main(void) { + const struct CMUnitTest tests[] = { + cmocka_unit_test_setup_teardown(test_smb_krb5_kt_open, + setup_krb5_context, + teardown_krb5_context), + cmocka_unit_test_setup_teardown(test_smb_krb5_kt_open_file, + setup_krb5_context, + teardown_krb5_context), + cmocka_unit_test_setup_teardown(test_smb_krb5_kt_open_fail, + setup_krb5_context, + teardown_krb5_context), + cmocka_unit_test_setup_teardown(test_smb_krb5_kt_open_relative_memory, + setup_krb5_context, + teardown_krb5_context), + }; + + cmocka_set_message_output(CM_OUTPUT_SUBUNIT); + return cmocka_run_group_tests(tests, NULL, NULL); +} diff --git a/testsuite/unittests/wscript b/testsuite/unittests/wscript new file mode 100644 index 00000000000..ea4af07799f --- /dev/null +++ b/testsuite/unittests/wscript @@ -0,0 +1,15 @@ +#!/usr/bin/env python + +import os + +def configure(conf): + pkg_name = 'cmocka' + pkg_minversion = '1.0' + + conf.CHECK_BUNDLED_SYSTEM_PKG(pkg_name, minversion=pkg_minversion) + +def build(bld): + if bld.CONFIG_SET('HAVE_CMOCKA'): + bld.SAMBA_BINARY('test_krb5samba', + source='test_krb5_samba.c', + deps='krb5samba cmocka') -- cgit v1.2.1