diff options
author | Andreas Schneider <asn@samba.org> | 2016-12-15 10:33:59 +0100 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2016-12-16 05:43:10 +0100 |
commit | 7585aa6c8f225a7aed51520a2af15f0037cd37f6 (patch) | |
tree | 7503ab719c6a32dde4ed1c04726db28a00496deb | |
parent | 494482c65493b3ec2532af52a3ad0a4adfef4416 (diff) | |
download | samba-7585aa6c8f225a7aed51520a2af15f0037cd37f6.tar.gz |
testsuite: Add cmocka unit test for smb_krb5_kt_open()
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Fri Dec 16 05:43:12 CET 2016 on sn-devel-144
-rw-r--r-- | selftest/tests.py | 15 | ||||
-rw-r--r-- | testsuite/unittests/test_krb5_samba.c | 145 | ||||
-rw-r--r-- | testsuite/unittests/wscript | 15 | ||||
-rw-r--r-- | wscript | 1 | ||||
-rw-r--r-- | wscript_build | 1 |
5 files changed, 175 insertions, 2 deletions
diff --git a/selftest/tests.py b/selftest/tests.py index 04a8df2d950..eabe71401fc 100644 --- a/selftest/tests.py +++ b/selftest/tests.py @@ -26,13 +26,20 @@ except KeyError: samba4bindir = bindir() config_h = os.path.join(samba4bindir, "default/include/config.h") -# define here var to check what we support +# check available features +config_hash = dict() f = open(config_h, 'r') try: - have_man_pages_support = ("XSLTPROC_MANPAGES 1" in f.read()) + lines = f.readlines() + config_hash = dict((x[0], ' '.join(x[1:])) + for x in map(lambda line: line.strip().split(' ')[1:], + filter(lambda line: (line[0:7] == '#define') and (len(line.split(' ')) > 2), lines))) finally: f.close() +have_man_pages_support = ("XSLTPROC_MANPAGES" in config_hash) +with_cmocka = ("HAVE_CMOCKA" in config_hash) + planpythontestsuite("none", "samba.tests.source") if have_man_pages_support: planpythontestsuite("none", "samba.tests.docs") @@ -123,3 +130,7 @@ planpythontestsuite("none", "samba.tests.kcc.graph_utils") planpythontestsuite("none", "samba.tests.kcc.kcc_utils") planpythontestsuite("none", "samba.tests.kcc.ldif_import_export") plantestsuite("wafsamba.duplicate_symbols", "none", [os.path.join(srcdir(), "buildtools/wafsamba/test_duplicate_symbol.sh")]) + +if with_cmocka: + plantestsuite("samba.unittests.krb5samba", "none", + [os.path.join(bindir(), "default/testsuite/unittests/test_krb5samba")]) 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 <stdarg.h> +#include <stddef.h> +#include <setjmp.h> +#include <cmocka.h> + +#include <krb5.h> + +#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') @@ -188,6 +188,7 @@ def configure(conf): if conf.env.with_ctdb: conf.RECURSE('ctdb') conf.RECURSE('lib/socket') + conf.RECURSE('testsuite/unittests') conf.SAMBA_CHECK_UNDEFINED_SYMBOL_FLAGS() diff --git a/wscript_build b/wscript_build index 93b1832cf90..0c3a2aee864 100644 --- a/wscript_build +++ b/wscript_build @@ -122,6 +122,7 @@ bld.RECURSE('libcli/samsync') bld.RECURSE('libcli/registry') bld.RECURSE('source4/lib/policy') bld.RECURSE('libcli/named_pipe_auth') +bld.RECURSE('testsuite/unittests') if bld.CONFIG_GET('KRB5_VENDOR') in (None, 'heimdal'): if bld.CONFIG_GET("HEIMDAL_KRB5_CONFIG") and bld.CONFIG_GET("USING_SYSTEM_KRB5"): |