]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tests: add helper for creating tempfiles with content
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 7 Mar 2022 14:06:57 +0000 (15:06 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 29 Mar 2022 14:17:56 +0000 (16:17 +0200)
I put it in tests because I think we're most likely to use it in tests.
If necessary, it can be moved somewhere else later.

src/shared/tests.c
src/shared/tests.h
src/test/test-env-file.c
src/test/test-socket-util.c

index a624fd7d10c2e84ff8ce2df53c3505ef00d53f9d..70fbbb45a5495f812b6bd340f9dd74a2bd9539ee 100644 (file)
@@ -25,6 +25,7 @@
 #include "cgroup-util.h"
 #include "env-file.h"
 #include "env-util.h"
+#include "fd-util.h"
 #include "fs-util.h"
 #include "log.h"
 #include "namespace-util.h"
@@ -33,6 +34,7 @@
 #include "random-util.h"
 #include "strv.h"
 #include "tests.h"
+#include "tmpfile-util.h"
 
 char* setup_fake_runtime_dir(void) {
         char t[] = "/tmp/fake-xdg-runtime-XXXXXX", *p;
@@ -132,6 +134,23 @@ int log_tests_skipped_errno(int r, const char *message) {
         return EXIT_TEST_SKIP;
 }
 
+int write_tmpfile(char *pattern, const char *contents) {
+        _cleanup_close_ int fd = -1;
+
+        assert(pattern);
+        assert(contents);
+
+        fd = mkostemp_safe(pattern);
+        if (fd < 0)
+                return fd;
+
+        ssize_t l = strlen(contents);
+        errno = 0;
+        if (write(fd, contents, l) != l)
+                return errno_or_else(EIO);
+        return 0;
+}
+
 bool have_namespaces(void) {
         siginfo_t si = {};
         pid_t pid;
index ef6acd368e57d6ea725db6af1b22d7838bef6a5d..ade527590bc50d0b1b4346af7e6805126ffff608 100644 (file)
@@ -30,6 +30,8 @@ void test_setup_logging(int level);
 int log_tests_skipped(const char *message);
 int log_tests_skipped_errno(int r, const char *message);
 
+int write_tmpfile(char *pattern, const char *contents);
+
 bool have_namespaces(void);
 
 /* We use the small but non-trivial limit here */
index f97206b4d6508fda1449f80753b0607d7826f78c..886a8e4bc85787da95bc27451e67938eea126674 100644 (file)
 
 
 TEST(load_env_file_1) {
-        _cleanup_strv_free_ char **data = NULL;
-        int r;
-
         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
-        _cleanup_close_ int fd;
-
-        fd = mkostemp_safe(name);
-        assert_se(fd >= 0);
-        assert_se(write(fd, env_file_1, strlen(env_file_1)) == strlen(env_file_1));
+        assert_se(write_tmpfile(name, env_file_1) == 0);
 
-        r = load_env_file(NULL, name, &data);
-        assert_se(r == 0);
+        _cleanup_strv_free_ char **data = NULL;
+        assert_se(load_env_file(NULL, name, &data) == 0);
         assert_se(streq(data[0], "a=a"));
         assert_se(streq(data[1], "b=bc"));
         assert_se(streq(data[2], "d=de  f"));
@@ -77,50 +70,30 @@ TEST(load_env_file_1) {
 }
 
 TEST(load_env_file_2) {
-        _cleanup_strv_free_ char **data = NULL;
-        int r;
-
         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
-        _cleanup_close_ int fd;
+        assert_se(write_tmpfile(name, env_file_2) == 0);
 
-        fd = mkostemp_safe(name);
-        assert_se(fd >= 0);
-        assert_se(write(fd, env_file_2, strlen(env_file_2)) == strlen(env_file_2));
-
-        r = load_env_file(NULL, name, &data);
-        assert_se(r == 0);
+        _cleanup_strv_free_ char **data = NULL;
+        assert_se(load_env_file(NULL, name, &data) == 0);
         assert_se(streq(data[0], "a=a"));
         assert_se(data[1] == NULL);
 }
 
 TEST(load_env_file_3) {
-        _cleanup_strv_free_ char **data = NULL;
-        int r;
-
         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
-        _cleanup_close_ int fd;
-
-        fd = mkostemp_safe(name);
-        assert_se(fd >= 0);
-        assert_se(write(fd, env_file_3, strlen(env_file_3)) == strlen(env_file_3));
+        assert_se(write_tmpfile(name, env_file_3) == 0);
 
-        r = load_env_file(NULL, name, &data);
-        assert_se(r == 0);
+        _cleanup_strv_free_ char **data = NULL;
+        assert_se(load_env_file(NULL, name, &data) == 0);
         assert_se(data == NULL);
 }
 
 TEST(load_env_file_4) {
-        _cleanup_strv_free_ char **data = NULL;
         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
-        _cleanup_close_ int fd;
-        int r;
-
-        fd = mkostemp_safe(name);
-        assert_se(fd >= 0);
-        assert_se(write(fd, env_file_4, strlen(env_file_4)) == strlen(env_file_4));
+        assert_se(write_tmpfile(name, env_file_4) == 0);
 
-        r = load_env_file(NULL, name, &data);
-        assert_se(r == 0);
+        _cleanup_strv_free_ char **data = NULL;
+        assert_se(load_env_file(NULL, name, &data) == 0);
         assert_se(streq(data[0], "HWMON_MODULES=coretemp f71882fg"));
         assert_se(streq(data[1], "MODULE_0=coretemp"));
         assert_se(streq(data[2], "MODULE_1=f71882fg"));
@@ -128,36 +101,22 @@ TEST(load_env_file_4) {
 }
 
 TEST(load_env_file_5) {
-        _cleanup_strv_free_ char **data = NULL;
-        int r;
-
         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
-        _cleanup_close_ int fd;
-
-        fd = mkostemp_safe(name);
-        assert_se(fd >= 0);
-        assert_se(write(fd, env_file_5, strlen(env_file_5)) == strlen(env_file_5));
+        assert_se(write_tmpfile(name, env_file_5) == 0);
 
-        r = load_env_file(NULL, name, &data);
-        assert_se(r == 0);
+        _cleanup_strv_free_ char **data = NULL;
+        assert_se(load_env_file(NULL, name, &data) == 0);
         assert_se(streq(data[0], "a="));
         assert_se(streq(data[1], "b="));
         assert_se(data[2] == NULL);
 }
 
 TEST(load_env_file_6) {
-        _cleanup_strv_free_ char **data = NULL;
-        int r;
-
         _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
-        _cleanup_close_ int fd;
+        assert_se(write_tmpfile(name, env_file_6) == 0);
 
-        fd = mkostemp_safe(name);
-        assert_se(fd >= 0);
-        assert_se(write(fd, env_file_6, strlen(env_file_6)) == strlen(env_file_6));
-
-        r = load_env_file(NULL, name, &data);
-        assert_se(r == 0);
+        _cleanup_strv_free_ char **data = NULL;
+        assert_se(load_env_file(NULL, name, &data) == 0);
         assert_se(streq(data[0], "a= n t x y '"));
         assert_se(streq(data[1], "b=$'"));
         assert_se(streq(data[2], "c= \\n\\t\\$\\`\\\\\n"));
index 9ee651a5fa655b9954ee39deffe943e279928be5..3245516f9a7800ef593fd06ec62d0df9a6f92b59 100644 (file)
@@ -228,17 +228,12 @@ TEST(passfd_read) {
 
         if (r == 0) {
                 /* Child */
-                char tmpfile[] = "/tmp/test-socket-util-passfd-read-XXXXXX";
-                _cleanup_close_ int tmpfd = -1;
-
                 pair[0] = safe_close(pair[0]);
 
-                tmpfd = mkostemp_safe(tmpfile);
-                assert_se(tmpfd >= 0);
-                assert_se(write(tmpfd, file_contents, strlen(file_contents)) == (ssize_t) strlen(file_contents));
-                tmpfd = safe_close(tmpfd);
+                char tmpfile[] = "/tmp/test-socket-util-passfd-read-XXXXXX";
+                assert_se(write_tmpfile(tmpfile, file_contents) == 0);
 
-                tmpfd = open(tmpfile, O_RDONLY);
+                _cleanup_close_ int tmpfd = open(tmpfile, O_RDONLY);
                 assert_se(tmpfd >= 0);
                 assert_se(unlink(tmpfile) == 0);
 
@@ -277,16 +272,12 @@ TEST(passfd_contents_read) {
                 /* Child */
                 struct iovec iov = IOVEC_INIT_STRING(wire_contents);
                 char tmpfile[] = "/tmp/test-socket-util-passfd-contents-read-XXXXXX";
-                _cleanup_close_ int tmpfd = -1;
 
                 pair[0] = safe_close(pair[0]);
 
-                tmpfd = mkostemp_safe(tmpfile);
-                assert_se(tmpfd >= 0);
-                assert_se(write(tmpfd, file_contents, strlen(file_contents)) == (ssize_t) strlen(file_contents));
-                tmpfd = safe_close(tmpfd);
+                assert_se(write_tmpfile(tmpfile, file_contents) == 0);
 
-                tmpfd = open(tmpfile, O_RDONLY);
+                _cleanup_close_ int tmpfd = open(tmpfile, O_RDONLY);
                 assert_se(tmpfd >= 0);
                 assert_se(unlink(tmpfile) == 0);