Branch data Line data Source code
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 : 4 : static void test_load_env_file_1(void) { 45 : 4 : _cleanup_strv_free_ char **data = NULL; 46 : : int r; 47 : : 48 : 4 : _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX"; 49 : 4 : _cleanup_close_ int fd; 50 : : 51 : 4 : fd = mkostemp_safe(name); 52 [ - + ]: 4 : assert_se(fd >= 0); 53 [ - + ]: 4 : assert_se(write(fd, env_file_1, strlen(env_file_1)) == strlen(env_file_1)); 54 : : 55 : 4 : r = load_env_file(NULL, name, &data); 56 [ - + ]: 4 : assert_se(r == 0); 57 [ - + ]: 4 : assert_se(streq(data[0], "a=a")); 58 [ - + ]: 4 : assert_se(streq(data[1], "b=bc")); 59 [ - + ]: 4 : assert_se(streq(data[2], "d=def")); 60 [ - + ]: 4 : assert_se(streq(data[3], "g=g ")); 61 [ - + ]: 4 : assert_se(streq(data[4], "h=h")); 62 [ - + ]: 4 : assert_se(streq(data[5], "i=i")); 63 [ - + ]: 4 : assert_se(data[6] == NULL); 64 : 4 : } 65 : : 66 : 4 : static void test_load_env_file_2(void) { 67 : 4 : _cleanup_strv_free_ char **data = NULL; 68 : : int r; 69 : : 70 : 4 : _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX"; 71 : 4 : _cleanup_close_ int fd; 72 : : 73 : 4 : fd = mkostemp_safe(name); 74 [ - + ]: 4 : assert_se(fd >= 0); 75 [ - + ]: 4 : assert_se(write(fd, env_file_2, strlen(env_file_2)) == strlen(env_file_2)); 76 : : 77 : 4 : r = load_env_file(NULL, name, &data); 78 [ - + ]: 4 : assert_se(r == 0); 79 [ - + ]: 4 : assert_se(streq(data[0], "a=a")); 80 [ - + ]: 4 : assert_se(data[1] == NULL); 81 : 4 : } 82 : : 83 : 4 : static void test_load_env_file_3(void) { 84 : 4 : _cleanup_strv_free_ char **data = NULL; 85 : : int r; 86 : : 87 : 4 : _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX"; 88 : 4 : _cleanup_close_ int fd; 89 : : 90 : 4 : fd = mkostemp_safe(name); 91 [ - + ]: 4 : assert_se(fd >= 0); 92 [ - + ]: 4 : assert_se(write(fd, env_file_3, strlen(env_file_3)) == strlen(env_file_3)); 93 : : 94 : 4 : r = load_env_file(NULL, name, &data); 95 [ - + ]: 4 : assert_se(r == 0); 96 [ - + ]: 4 : assert_se(data == NULL); 97 : 4 : } 98 : : 99 : 4 : static void test_load_env_file_4(void) { 100 : 4 : _cleanup_strv_free_ char **data = NULL; 101 : 4 : _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX"; 102 : 4 : _cleanup_close_ int fd; 103 : : int r; 104 : : 105 : 4 : fd = mkostemp_safe(name); 106 [ - + ]: 4 : assert_se(fd >= 0); 107 [ - + ]: 4 : assert_se(write(fd, env_file_4, strlen(env_file_4)) == strlen(env_file_4)); 108 : : 109 : 4 : r = load_env_file(NULL, name, &data); 110 [ - + ]: 4 : assert_se(r == 0); 111 [ - + ]: 4 : assert_se(streq(data[0], "HWMON_MODULES=coretemp f71882fg")); 112 [ - + ]: 4 : assert_se(streq(data[1], "MODULE_0=coretemp")); 113 [ - + ]: 4 : assert_se(streq(data[2], "MODULE_1=f71882fg")); 114 [ - + ]: 4 : assert_se(data[3] == NULL); 115 : 4 : } 116 : : 117 : 4 : static void test_load_env_file_5(void) { 118 : 4 : _cleanup_strv_free_ char **data = NULL; 119 : : int r; 120 : : 121 : 4 : _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX"; 122 : 4 : _cleanup_close_ int fd; 123 : : 124 : 4 : fd = mkostemp_safe(name); 125 [ - + ]: 4 : assert_se(fd >= 0); 126 [ - + ]: 4 : assert_se(write(fd, env_file_5, strlen(env_file_5)) == strlen(env_file_5)); 127 : : 128 : 4 : r = load_env_file(NULL, name, &data); 129 [ - + ]: 4 : assert_se(r == 0); 130 [ - + ]: 4 : assert_se(streq(data[0], "a=")); 131 [ - + ]: 4 : assert_se(streq(data[1], "b=")); 132 [ - + ]: 4 : assert_se(data[2] == NULL); 133 : 4 : } 134 : : 135 : 4 : int main(int argc, char *argv[]) { 136 : 4 : test_setup_logging(LOG_INFO); 137 : : 138 : 4 : test_load_env_file_1(); 139 : 4 : test_load_env_file_2(); 140 : 4 : test_load_env_file_3(); 141 : 4 : test_load_env_file_4(); 142 : 4 : test_load_env_file_5(); 143 : : }