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