]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test-loopback: run test in network + user namespace 27860/head
authorLennart Poettering <lennart@poettering.net>
Wed, 31 May 2023 07:41:26 +0000 (09:41 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 31 May 2023 09:11:45 +0000 (11:11 +0200)
This way it can actually do useful testing even when unprivileged.

src/test/test-loopback.c

index 58d8c29dbb0b49006efccb8f5c3d43c1782388ca..c18f07cfed57b0fa924f6de06e7a48eb9ffb7665 100644 (file)
@@ -1,20 +1,44 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <sched.h>
 #include <stdio.h>
 #include <string.h>
 
+#include "errno-util.h"
 #include "log.h"
 #include "loopback-setup.h"
 #include "tests.h"
 
-int main(int argc, char* argv[]) {
+TEST_RET(loopback_setup) {
         int r;
 
-        test_setup_logging(LOG_DEBUG);
+        if (unshare(CLONE_NEWUSER | CLONE_NEWNET) < 0) {
+                if (ERRNO_IS_PRIVILEGE(errno) || ERRNO_IS_NOT_SUPPORTED(errno)) {
+                        log_notice("Skipping test, lacking privileges or namespaces not supported");
+                        return EXIT_TEST_SKIP;
+                }
+                return log_error_errno(errno, "Failed to create user+network namespace: %m");
+        }
 
         r = loopback_setup();
         if (r < 0)
-                log_error_errno(r, "loopback: %m");
+                return log_error_errno(r, "loopback: %m");
 
-        return r >= 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+        log_info("> ipv6 main");
+        system("ip -6 route show table main");
+        log_info("> ipv6 local");
+        system("ip -6 route show table local");
+        log_info("> ipv4 main");
+        system("ip -4 route show table main");
+        log_info("> ipv4 local");
+        system("ip -4 route show table local");
+
+        return EXIT_SUCCESS;
+}
+
+static int intro(void) {
+        log_show_color(true);
+        return EXIT_SUCCESS;
 }
+
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);