]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/test/test-env-file.c
test-ordered-set: add a case where we get 0 for duplicate entries
[thirdparty/systemd.git] / src / test / test-env-file.c
CommitLineData
cf95bc1d
ZJS
1/* SPDX-License-Identifier: LGPL-2.1+ */
2
3#include "env-file.h"
4#include "fd-util.h"
5#include "fs-util.h"
6#include "macro.h"
7#include "strv.h"
8#include "tests.h"
9#include "tmpfile-util.h"
10
11#define env_file_1 \
12 "a=a\n" \
13 "b=b\\\n" \
14 "c\n" \
15 "d=d\\\n" \
16 "e\\\n" \
17 "f\n" \
18 "g=g\\ \n" \
19 "h=h\n" \
20 "i=i\\"
21
22#define env_file_2 \
23 "a=a\\\n"
24
25#define env_file_3 \
26 "#SPAMD_ARGS=\"-d --socketpath=/var/lib/bulwark/spamd \\\n" \
27 "#--nouser-config \\\n" \
28 "normal=line"
29
30#define env_file_4 \
31 "# Generated\n" \
32 "\n" \
33 "HWMON_MODULES=\"coretemp f71882fg\"\n" \
34 "\n" \
35 "# For compatibility reasons\n" \
36 "\n" \
37 "MODULE_0=coretemp\n" \
38 "MODULE_1=f71882fg"
39
40#define env_file_5 \
41 "a=\n" \
42 "b="
43
44static void test_load_env_file_1(void) {
45 _cleanup_strv_free_ char **data = NULL;
46 int r;
47
48 _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
49 _cleanup_close_ int fd;
50
51 fd = mkostemp_safe(name);
52 assert_se(fd >= 0);
53 assert_se(write(fd, env_file_1, strlen(env_file_1)) == strlen(env_file_1));
54
55 r = load_env_file(NULL, name, &data);
56 assert_se(r == 0);
57 assert_se(streq(data[0], "a=a"));
58 assert_se(streq(data[1], "b=bc"));
59 assert_se(streq(data[2], "d=def"));
60 assert_se(streq(data[3], "g=g "));
61 assert_se(streq(data[4], "h=h"));
62 assert_se(streq(data[5], "i=i"));
63 assert_se(data[6] == NULL);
64}
65
66static void test_load_env_file_2(void) {
67 _cleanup_strv_free_ char **data = NULL;
68 int r;
69
70 _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
71 _cleanup_close_ int fd;
72
73 fd = mkostemp_safe(name);
74 assert_se(fd >= 0);
75 assert_se(write(fd, env_file_2, strlen(env_file_2)) == strlen(env_file_2));
76
77 r = load_env_file(NULL, name, &data);
78 assert_se(r == 0);
79 assert_se(streq(data[0], "a=a"));
80 assert_se(data[1] == NULL);
81}
82
83static void test_load_env_file_3(void) {
84 _cleanup_strv_free_ char **data = NULL;
85 int r;
86
87 _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
88 _cleanup_close_ int fd;
89
90 fd = mkostemp_safe(name);
91 assert_se(fd >= 0);
92 assert_se(write(fd, env_file_3, strlen(env_file_3)) == strlen(env_file_3));
93
94 r = load_env_file(NULL, name, &data);
95 assert_se(r == 0);
96 assert_se(data == NULL);
97}
98
99static void test_load_env_file_4(void) {
100 _cleanup_strv_free_ char **data = NULL;
101 _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
102 _cleanup_close_ int fd;
103 int r;
104
105 fd = mkostemp_safe(name);
106 assert_se(fd >= 0);
107 assert_se(write(fd, env_file_4, strlen(env_file_4)) == strlen(env_file_4));
108
109 r = load_env_file(NULL, name, &data);
110 assert_se(r == 0);
111 assert_se(streq(data[0], "HWMON_MODULES=coretemp f71882fg"));
112 assert_se(streq(data[1], "MODULE_0=coretemp"));
113 assert_se(streq(data[2], "MODULE_1=f71882fg"));
114 assert_se(data[3] == NULL);
115}
116
117static void test_load_env_file_5(void) {
118 _cleanup_strv_free_ char **data = NULL;
119 int r;
120
121 _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
122 _cleanup_close_ int fd;
123
124 fd = mkostemp_safe(name);
125 assert_se(fd >= 0);
126 assert_se(write(fd, env_file_5, strlen(env_file_5)) == strlen(env_file_5));
127
128 r = load_env_file(NULL, name, &data);
129 assert_se(r == 0);
130 assert_se(streq(data[0], "a="));
131 assert_se(streq(data[1], "b="));
132 assert_se(data[2] == NULL);
133}
134
135int main(int argc, char *argv[]) {
136 test_setup_logging(LOG_INFO);
137
138 test_load_env_file_1();
139 test_load_env_file_2();
140 test_load_env_file_3();
141 test_load_env_file_4();
142 test_load_env_file_5();
143}