unittest: Add testsuite for smb_probe_module()
authorAndreas Schneider <asn@samba.org>
Fri, 12 May 2017 12:13:42 +0000 (14:13 +0200)
committerJeremy Allison <jra@samba.org>
Tue, 6 Jun 2017 16:36:07 +0000 (18:36 +0200)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=12780

Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
selftest/tests.py
testsuite/unittests/test_lib_util_modules.c [new file with mode: 0644]
testsuite/unittests/wscript

index 9f298a6f73409d2ecb829625189ec44edd50be05..b9c470c557a765f4b357ee980b02c89795ea8a6b 100644 (file)
@@ -147,3 +147,5 @@ if with_cmocka:
                   [os.path.join(bindir(), "default/testsuite/unittests/test_krb5samba")])
     plantestsuite("samba.unittests.sambafs_srv_pipe", "none",
                   [os.path.join(bindir(), "default/testsuite/unittests/test_sambafs_srv_pipe")])
+    plantestsuite("samba.unittests.lib_util_modules", "none",
+                  [os.path.join(bindir(), "default/testsuite/unittests/test_lib_util_modules")])
diff --git a/testsuite/unittests/test_lib_util_modules.c b/testsuite/unittests/test_lib_util_modules.c
new file mode 100644 (file)
index 0000000..c92dafd
--- /dev/null
@@ -0,0 +1,76 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <talloc.h>
+
+#include "include/config.h"
+#include "libcli/util/ntstatus.h"
+#include "lib/util/samba_modules.h"
+
+static int teardown(void **state)
+{
+       unsetenv("UNITTEST_DUMMY_MODULE_LOADED");
+
+       return 0;
+}
+
+static void test_samba_module_probe(void **state)
+{
+       NTSTATUS status;
+
+       status = smb_probe_module("auth", "unix");
+       assert_true(NT_STATUS_IS_OK(status));
+}
+
+static void test_samba_module_probe_dummy(void **state)
+{
+       const char *module_env;
+       NTSTATUS status;
+
+       status = smb_probe_module("rpc", "test_dummy_module");
+       assert_true(NT_STATUS_IS_OK(status));
+
+       module_env = getenv("UNITTEST_DUMMY_MODULE_LOADED");
+       assert_non_null(module_env);
+       assert_string_equal(module_env, "TRUE");
+}
+
+static void test_samba_module_probe_slash(void **state)
+{
+       char dummy_module_path[4096] = {0};
+       const char *module_env;
+       NTSTATUS status;
+
+       snprintf(dummy_module_path,
+                sizeof(dummy_module_path),
+                "%s/bin/modules/rpc/test_dummy_module.so",
+                SRCDIR);
+
+       status = smb_probe_module("rpc", dummy_module_path);
+       assert_true(NT_STATUS_IS_ERR(status));
+
+       module_env = getenv("UNITTEST_DUMMY_MODULE_LOADED");
+       assert_null(module_env);
+}
+
+int main(void) {
+       const struct CMUnitTest tests[] = {
+               cmocka_unit_test_teardown(test_samba_module_probe,
+                                         teardown),
+               cmocka_unit_test_teardown(test_samba_module_probe_dummy,
+                                         teardown),
+               cmocka_unit_test_teardown(test_samba_module_probe_slash,
+                                         teardown),
+       };
+
+       cmocka_set_message_output(CM_OUTPUT_SUBUNIT);
+       return cmocka_run_group_tests(tests, NULL, NULL);
+}
index bb29fd8cba26f21f7b9963a62b857f1fe2058224..ba6ad3cbed9ffed0d3e3f03657c333643d7b3c8d 100644 (file)
@@ -20,6 +20,14 @@ def build(bld):
                           ''',
                      install=False)
 
+    bld.SAMBA_BINARY('test_lib_util_modules',
+                     source='test_lib_util_modules.c',
+                     deps='''
+                          samba-modules
+                          cmocka
+                          ''',
+                     install=False)
+
     bld.SAMBA_MODULE('rpc_test_dummy_module',
                      source='rpc_test_dummy_module.c',
                      deps='ndr',