]>
Commit | Line | Data |
---|---|---|
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 | ||
44 | static 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 | ||
66 | static 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 | ||
83 | static 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 | ||
99 | static 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 | ||
117 | static 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 | ||
135 | int 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 | } |