]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - src/shared/tests.c
Add SPDX license identifiers to source files under the LGPL
[thirdparty/systemd.git] / src / shared / tests.c
index f11b93bee72567237b638d2511a33a593d75ed83..d78ab7b0690773f8f2baaf2a5ce3c1823d4aca88 100644 (file)
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: LGPL-2.1+ */
 /***
   This file is part of systemd.
 
@@ -36,22 +37,38 @@ char* setup_fake_runtime_dir(void) {
         return p;
 }
 
-const char* get_exe_relative_testdata_dir(void) {
-        _cleanup_free_ char *exedir = NULL;
+const char* get_testdata_dir(const char *suffix) {
+        const char *env;
         /* convenience: caller does not need to free result */
         static char testdir[PATH_MAX];
 
-        assert_se(readlink_and_make_absolute("/proc/self/exe", &exedir) >= 0);
+        /* if the env var is set, use that */
+        env = getenv("SYSTEMD_TEST_DATA");
+        testdir[sizeof(testdir) - 1] = '\0';
+        if (env) {
+                if (access(env, F_OK) < 0) {
+                        fputs("ERROR: $SYSTEMD_TEST_DATA directory does not exist\n", stderr);
+                        exit(1);
+                }
+                strncpy(testdir, env, sizeof(testdir) - 1);
+        } else {
+                _cleanup_free_ char *exedir = NULL;
+                assert_se(readlink_and_make_absolute("/proc/self/exe", &exedir) >= 0);
 
-        /* Check if we're running from the builddir. If so, use the compiled in path. */
-        if (path_startswith(exedir, ABS_BUILD_DIR))
-                return ABS_SRC_DIR "/test";
+                /* Check if we're running from the builddir. If so, use the compiled in path. */
+                if (path_startswith(exedir, ABS_BUILD_DIR))
+                        assert_se(snprintf(testdir, sizeof(testdir), "%s/test", ABS_SRC_DIR) > 0);
+                else
+                        /* Try relative path, according to the install-test layout */
+                        assert_se(snprintf(testdir, sizeof(testdir), "%s/testdata", dirname(exedir)) > 0);
 
-        /* Try relative path, according to the install-test layout */
-        assert_se(snprintf(testdir, sizeof(testdir), "%s/testdata", dirname(exedir)) > 0);
-        if (access(testdir, F_OK) >= 0)
-                return testdir;
+                /* test this without the suffix, as it may contain a glob */
+                if (access(testdir, F_OK) < 0) {
+                        fputs("ERROR: Cannot find testdata directory, set $SYSTEMD_TEST_DATA\n", stderr);
+                        exit(1);
+                }
+        }
 
-        fputs("ERROR: Cannot find testdata directory, set $SYSTEMD_TEST_DATA\n", stderr);
-        exit(1);
+        strncpy(testdir + strlen(testdir), suffix, sizeof(testdir) - strlen(testdir) - 1);
+        return testdir;
 }