]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: drop TEST_DATA_DIR, fold into get_testdata_dir()
authorMartin Pitt <martin@piware.de>
Wed, 15 Feb 2017 22:37:25 +0000 (23:37 +0100)
committerMartin Pitt <martin@piware.de>
Thu, 16 Feb 2017 20:45:57 +0000 (21:45 +0100)
Drop the TEST_DATA_DIR macro as this was using alloca() within a
function call which is allegedly unsafe. So add a "suffix" argument to
get_testdata_dir() instead and call that directly.

src/resolve/test-dns-packet.c
src/shared/tests.c
src/shared/tests.h
src/test/test-cgroup-mask.c
src/test/test-engine.c
src/test/test-execute.c
src/test/test-helper.h
src/test/test-journal-importer.c
src/test/test-path.c
src/test/test-sched-prio.c

index 3ca7e7849560a3191efa62ddec3a45b2515a3b57..8cbe492526ed650c2dc2c62935da2a72529a38e8 100644 (file)
 #include "resolved-dns-rr.h"
 #include "string-util.h"
 #include "strv.h"
+#include "tests.h"
 #include "unaligned.h"
 
-#include "test-helper.h"
-
 #define HASH_KEY SD_ID128_MAKE(d3,1e,48,90,4b,fa,4c,fe,af,9d,d5,a1,d7,2e,8a,b1)
 
 static void verify_rr_copy(DnsResourceRecord *rr) {
@@ -117,7 +116,7 @@ int main(int argc, char **argv) {
                 N = argc - 1;
                 fnames = argv + 1;
         } else {
-                assert_se(glob(TEST_DATA_DIR("/test-resolve/*.pkts"), GLOB_NOSORT, NULL, &g) == 0);
+                assert_se(glob(get_testdata_dir("/test-resolve/*.pkts"), GLOB_NOSORT, NULL, &g) == 0);
                 N = g.gl_pathc;
                 fnames = g.gl_pathv;
         }
index be098b304cbb05c777828b4ff6675d754249a9e6..f300bbc66f3e80b57e46d8b74dc24c8ff9e7d105 100644 (file)
@@ -36,33 +36,38 @@ char* setup_fake_runtime_dir(void) {
         return p;
 }
 
-const char* get_testdata_dir(void) {
+const char* get_testdata_dir(const char *suffix) {
         const char *env;
-        _cleanup_free_ char *exedir = NULL;
         /* convenience: caller does not need to free result */
         static char testdir[PATH_MAX];
 
         /* 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)
-                        return env;
-
-                fputs("ERROR: $SYSTEMD_TEST_DATA directory does not exist\n", stderr);
-                exit(1);
+                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))
+                        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);
+
+                /* 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);
+                }
         }
 
-        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";
-
-        /* 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;
-
-        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;
 }
index 927b9fc2bb7d78e28a9e6fe4ab0136e33402abfe..705512499081c2e39456bb799948c24b694625c8 100644 (file)
@@ -20,4 +20,4 @@
 ***/
 
 char* setup_fake_runtime_dir(void);
-const char* get_testdata_dir(void);
+const char* get_testdata_dir(const char *suffix);
index adcff56bffe0051bb3169e86ca6c652dadd3c216..b42088c680a68515566cc38dd02d0a2401a7ce5c 100644 (file)
@@ -35,7 +35,7 @@ static int test_cgroup_mask(void) {
         int r;
 
         /* Prepare the manager. */
-        assert_se(set_unit_path(TEST_DATA_DIR("")) >= 0);
+        assert_se(set_unit_path(get_testdata_dir("")) >= 0);
         assert_se(runtime_dir = setup_fake_runtime_dir());
         r = manager_new(UNIT_FILE_USER, true, &m);
         if (r == -EPERM || r == -EACCES) {
index 3c0c18b188d973c2b73ea36d539dfaddb8a137fe..8133343fb379a78804b5036445f52d135ced9a2b 100644 (file)
@@ -38,7 +38,7 @@ int main(int argc, char *argv[]) {
         int r;
 
         /* prepare the test */
-        assert_se(set_unit_path(TEST_DATA_DIR("")) >= 0);
+        assert_se(set_unit_path(get_testdata_dir("")) >= 0);
         assert_se(runtime_dir = setup_fake_runtime_dir());
         r = manager_new(UNIT_FILE_USER, true, &m);
         if (MANAGER_SKIP_TEST(r)) {
index 145aa37a668606101aa5356211ed9fa1464a6fda..90540b884bf8ef78df6064d1baf9ac7145e5ddfb 100644 (file)
@@ -35,6 +35,7 @@
 #endif
 #include "stat-util.h"
 #include "test-helper.h"
+#include "tests.h"
 #include "unit.h"
 #include "util.h"
 #include "virt.h"
@@ -516,7 +517,7 @@ int main(int argc, char *argv[]) {
         }
 
         assert_se(setenv("XDG_RUNTIME_DIR", "/tmp/", 1) == 0);
-        assert_se(set_unit_path(TEST_DATA_DIR("/test-execute/")) >= 0);
+        assert_se(set_unit_path(get_testdata_dir("/test-execute")) >= 0);
 
         /* Unset VAR1, VAR2 and VAR3 which are used in the PassEnvironment test
          * cases, otherwise (and if they are present in the environment),
index 7c9eff248358147048df56b586fe92bf6f54d15f..ddb10f88fd1956010a6cc411b89f9073d6d3bf77 100644 (file)
@@ -20,8 +20,6 @@
 ***/
 
 #include "sd-daemon.h"
-#include "string-util.h"
-#include "tests.h"
 
 #include "macro.h"
 
@@ -41,6 +39,3 @@
                -ENOENT,                                         \
                -ENOMEDIUM /* cannot determine cgroup */         \
                )
-
-#define TEST_DATA_DIR(subdir)                                   \
-        strjoina(get_testdata_dir(), subdir)
index 1f0684863e991bed0dc1a739a381d2bdb222b040..a61212ce7b7e334b92b6ae266d0d4f8124d264c9 100644 (file)
@@ -24,7 +24,7 @@
 #include "log.h"
 #include "journal-importer.h"
 #include "string-util.h"
-#include "test-helper.h"
+#include "tests.h"
 
 static void assert_iovec_entry(const struct iovec *iovec, const char* content) {
         assert_se(strlen(content) == iovec->iov_len);
@@ -39,7 +39,7 @@ static void test_basic_parsing(void) {
         _cleanup_(journal_importer_cleanup) JournalImporter imp = {};
         int r;
 
-        imp.fd = open(TEST_DATA_DIR("/journal-data/journal-1.txt"), O_RDONLY|O_CLOEXEC);
+        imp.fd = open(get_testdata_dir("/journal-data/journal-1.txt"), O_RDONLY|O_CLOEXEC);
         assert_se(imp.fd >= 0);
 
         do
@@ -68,7 +68,7 @@ static void test_bad_input(void) {
         _cleanup_(journal_importer_cleanup) JournalImporter imp = {};
         int r;
 
-        imp.fd = open(TEST_DATA_DIR("/journal-data/journal-2.txt"), O_RDONLY|O_CLOEXEC);
+        imp.fd = open(get_testdata_dir("/journal-data/journal-2.txt"), O_RDONLY|O_CLOEXEC);
         assert_se(imp.fd >= 0);
 
         do
index 7f108440b1df85979b9c745e263da28ea27fb128..70ac6b3df355e12d7565fe5eff3b2450db053299 100644 (file)
@@ -262,7 +262,7 @@ int main(int argc, char *argv[]) {
         log_parse_environment();
         log_open();
 
-        assert_se(set_unit_path(TEST_DATA_DIR("/test-path/")) >= 0);
+        assert_se(set_unit_path(get_testdata_dir("/test-path")) >= 0);
         assert_se(runtime_dir = setup_fake_runtime_dir());
 
         for (test = tests; test && *test; test++) {
index 9a918cde20bd9452248e2954b362f5b9aaac9808..81d9abc2d51d7d26d9b6aee4c005af04e7433f88 100644 (file)
@@ -35,7 +35,7 @@ int main(int argc, char *argv[]) {
         int r;
 
         /* prepare the test */
-        assert_se(set_unit_path(TEST_DATA_DIR("")) >= 0);
+        assert_se(set_unit_path(get_testdata_dir("")) >= 0);
         assert_se(runtime_dir = setup_fake_runtime_dir());
         r = manager_new(UNIT_FILE_USER, true, &m);
         if (MANAGER_SKIP_TEST(r)) {