summaryrefslogtreecommitdiff
path: root/testsuite
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2016-12-15 10:33:59 +0100
committerJeremy Allison <jra@samba.org>2016-12-16 05:43:10 +0100
commit7585aa6c8f225a7aed51520a2af15f0037cd37f6 (patch)
tree7503ab719c6a32dde4ed1c04726db28a00496deb /testsuite
parent494482c65493b3ec2532af52a3ad0a4adfef4416 (diff)
downloadsamba-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
Diffstat (limited to 'testsuite')
-rw-r--r--testsuite/unittests/test_krb5_samba.c145
-rw-r--r--testsuite/unittests/wscript15
2 files changed, 160 insertions, 0 deletions
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')