]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
tests: happy path for active_sessions_count()
authorIker Pedrosa <ipedrosa@redhat.com>
Thu, 14 Sep 2023 10:47:04 +0000 (12:47 +0200)
committerIker Pedrosa <ikerpedrosam@gmail.com>
Fri, 29 Sep 2023 07:24:01 +0000 (09:24 +0200)
Simple test to check the recently implemented logind functionality. It
also contains the changes to the build infrastructure, and the
gitignore.

Resolves: https://github.com/shadow-maint/shadow/issues/790

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
Makefile.am
tests/unit/.gitignore [new file with mode: 0644]
tests/unit/Makefile.am [new file with mode: 0644]
tests/unit/test_logind.c [new file with mode: 0644]

index d8dfc3bf7db7f56b6cd0beed8857456bf236b098..31554e715fec6caa5e551d88b6ad6f948568e0ce 100644 (file)
@@ -8,7 +8,7 @@ if ENABLE_SUBIDS
 SUBDIRS += libsubid
 endif
 
-SUBDIRS += src po contrib doc etc
+SUBDIRS += src po contrib doc etc tests/unit
 
 if ENABLE_REGENERATE_MAN
 SUBDIRS += man
diff --git a/tests/unit/.gitignore b/tests/unit/.gitignore
new file mode 100644 (file)
index 0000000..f331069
--- /dev/null
@@ -0,0 +1,6 @@
+# General files applicable to all test files
+*.log
+*.trs
+
+# Specific files to be added each time a new file is included
+test_logind
\ No newline at end of file
diff --git a/tests/unit/Makefile.am b/tests/unit/Makefile.am
new file mode 100644 (file)
index 0000000..30277b6
--- /dev/null
@@ -0,0 +1,32 @@
+AM_CPPFLAGS = -I$(top_srcdir)/lib -I$(top_srcdir)
+
+if HAVE_CMOCKA
+TESTS = $(check_PROGRAMS)
+
+check_PROGRAMS =
+
+if ENABLE_LOGIND
+check_PROGRAMS += \
+    test_logind
+endif # ENABLE_LOGIND
+
+check_PROGRAMS += \
+    $(NULL)
+
+test_logind_SOURCES = \
+    ../../lib/logind.c \
+    test_logind.c \
+    $(NULL)
+test_logind_CFLAGS = \
+    $(AM_CFLAGS) \
+    -lsystemd \
+    $(NULL)
+test_logind_LDFLAGS = \
+    -Wl,-wrap,prefix_getpwnam \
+    -Wl,-wrap,sd_uid_get_sessions \
+    $(NULL)
+test_logind_LDADD = \
+    $(CMOCKA_LIBS) \
+    $(LIBSYSTEMD) \
+    $(NULL)
+endif # HAVE_CMOCKA
diff --git a/tests/unit/test_logind.c b/tests/unit/test_logind.c
new file mode 100644 (file)
index 0000000..f91782c
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * SPDX-FileCopyrightText:  2023, Iker Pedrosa <ipedrosa@redhat.com>
+ *
+ * SPDX-License-Identifier:  BSD-3-Clause
+ */
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <pwd.h>
+#include <stdlib.h>
+#include <sys/types.h>
+
+#include "prototypes.h"
+
+/***********************
+ * WRAPPERS
+ **********************/
+struct passwd *
+__wrap_prefix_getpwnam(uid_t uid)
+{
+    return (struct passwd*) mock();
+}
+
+int
+__wrap_sd_uid_get_sessions(uid_t uid, int require_active, char ***sessions)
+{
+    return mock();
+}
+
+/***********************
+ * TEST
+ **********************/
+static void test_active_sessions_count_return_ok(void **state)
+{
+    int count;
+    struct passwd *pw = malloc(sizeof(struct passwd));
+
+    will_return(__wrap_prefix_getpwnam, pw);
+    will_return(__wrap_sd_uid_get_sessions, 1);
+
+    count = active_sessions_count("testuser", 0);
+
+    assert_int_equal(count, 1);
+}
+
+static void test_active_sessions_count_prefix_getpwnam_failure(void **state)
+{
+    int count;
+    struct passwd *pw = NULL;
+
+    will_return(__wrap_prefix_getpwnam, pw);
+
+    count = active_sessions_count("testuser", 0);
+
+    assert_int_equal(count, 0);
+}
+
+int main(void)
+{
+    const struct CMUnitTest tests[] = {
+        cmocka_unit_test(test_active_sessions_count_return_ok),
+        cmocka_unit_test(test_active_sessions_count_prefix_getpwnam_failure),
+    };
+
+    return cmocka_run_group_tests(tests, NULL, NULL);
+}