]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-env-file.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
10 #include "tmpfile-util.h"
27 "#SPAMD_ARGS=\"-d --socketpath=/var/lib/bulwark/spamd \\\n" \
28 "#--nouser-config \\\n" \
34 "HWMON_MODULES=\"coretemp f71882fg\"\n" \
36 "# For compatibility reasons\n" \
38 "MODULE_0=coretemp\n" \
45 static void test_load_env_file_1(void) {
46 _cleanup_strv_free_
char **data
= NULL
;
49 _cleanup_(unlink_tempfilep
) char name
[] = "/tmp/test-load-env-file.XXXXXX";
50 _cleanup_close_
int fd
;
52 fd
= mkostemp_safe(name
);
54 assert_se(write(fd
, env_file_1
, strlen(env_file_1
)) == strlen(env_file_1
));
56 r
= load_env_file(NULL
, name
, &data
);
58 assert_se(streq(data
[0], "a=a"));
59 assert_se(streq(data
[1], "b=bc"));
60 assert_se(streq(data
[2], "d=def"));
61 assert_se(streq(data
[3], "g=g "));
62 assert_se(streq(data
[4], "h=h"));
63 assert_se(streq(data
[5], "i=i"));
64 assert_se(data
[6] == NULL
);
67 static void test_load_env_file_2(void) {
68 _cleanup_strv_free_
char **data
= NULL
;
71 _cleanup_(unlink_tempfilep
) char name
[] = "/tmp/test-load-env-file.XXXXXX";
72 _cleanup_close_
int fd
;
74 fd
= mkostemp_safe(name
);
76 assert_se(write(fd
, env_file_2
, strlen(env_file_2
)) == strlen(env_file_2
));
78 r
= load_env_file(NULL
, name
, &data
);
80 assert_se(streq(data
[0], "a=a"));
81 assert_se(data
[1] == NULL
);
84 static void test_load_env_file_3(void) {
85 _cleanup_strv_free_
char **data
= NULL
;
88 _cleanup_(unlink_tempfilep
) char name
[] = "/tmp/test-load-env-file.XXXXXX";
89 _cleanup_close_
int fd
;
91 fd
= mkostemp_safe(name
);
93 assert_se(write(fd
, env_file_3
, strlen(env_file_3
)) == strlen(env_file_3
));
95 r
= load_env_file(NULL
, name
, &data
);
97 assert_se(data
== NULL
);
100 static void test_load_env_file_4(void) {
101 _cleanup_strv_free_
char **data
= NULL
;
102 _cleanup_(unlink_tempfilep
) char name
[] = "/tmp/test-load-env-file.XXXXXX";
103 _cleanup_close_
int fd
;
106 fd
= mkostemp_safe(name
);
108 assert_se(write(fd
, env_file_4
, strlen(env_file_4
)) == strlen(env_file_4
));
110 r
= load_env_file(NULL
, name
, &data
);
112 assert_se(streq(data
[0], "HWMON_MODULES=coretemp f71882fg"));
113 assert_se(streq(data
[1], "MODULE_0=coretemp"));
114 assert_se(streq(data
[2], "MODULE_1=f71882fg"));
115 assert_se(data
[3] == NULL
);
118 static void test_load_env_file_5(void) {
119 _cleanup_strv_free_
char **data
= NULL
;
122 _cleanup_(unlink_tempfilep
) char name
[] = "/tmp/test-load-env-file.XXXXXX";
123 _cleanup_close_
int fd
;
125 fd
= mkostemp_safe(name
);
127 assert_se(write(fd
, env_file_5
, strlen(env_file_5
)) == strlen(env_file_5
));
129 r
= load_env_file(NULL
, name
, &data
);
131 assert_se(streq(data
[0], "a="));
132 assert_se(streq(data
[1], "b="));
133 assert_se(data
[2] == NULL
);
136 static void test_write_and_load_env_file(void) {
139 /* Make sure that our writer, parser and the shell agree on what our env var files mean */
146 "obbardc-lap\\\\top",
150 "newline\nnewline") {
151 _cleanup_(unlink_and_freep
) char *p
= NULL
;
152 _cleanup_strv_free_
char **l
= NULL
;
153 _cleanup_free_
char *j
= NULL
, *w
= NULL
, *cmd
= NULL
, *from_shell
= NULL
;
154 _cleanup_pclose_
FILE *f
= NULL
;
157 assert_se(tempfn_random_child(NULL
, NULL
, &p
) >= 0);
159 assert_se(j
= strjoin("TEST=", v
));
160 assert_se(write_env_file(p
, STRV_MAKE(j
)) >= 0);
162 assert_se(cmd
= strjoin(". ", p
, " && /bin/echo -n \"$TEST\""));
163 assert_se(f
= popen(cmd
, "re"));
164 assert_se(read_full_stream(f
, &from_shell
, &sz
) >= 0);
165 assert_se(sz
== strlen(v
));
166 assert_se(streq(from_shell
, v
));
168 assert_se(load_env_file(NULL
, p
, &l
) >= 0);
169 assert_se(strv_equal(l
, STRV_MAKE(j
)));
171 assert_se(parse_env_file(NULL
, p
, "TEST", &w
) >= 0);
172 assert_se(streq_ptr(w
, v
));
176 int main(int argc
, char *argv
[]) {
177 test_setup_logging(LOG_INFO
);
179 test_load_env_file_1();
180 test_load_env_file_2();
181 test_load_env_file_3();
182 test_load_env_file_4();
183 test_load_env_file_5();
185 test_write_and_load_env_file();