static void test_strv_env_merge(void) { _cleanup_strv_free_ char **a = NULL, **b = NULL, **r = NULL; a = strv_new("FOO=BAR", "WALDO=WALDO", "WALDO=", "PIEP", "SCHLUMPF=SMURF", NULL); assert_se(a); b = strv_new("FOO=KKK", "FOO=", "PIEP=", "SCHLUMPF=SMURFF", "NANANANA=YES", NULL); assert_se(b); r = strv_env_merge(2, a, b); assert_se(r); assert_se(streq(r[0], "FOO=")); assert_se(streq(r[1], "WALDO=")); assert_se(streq(r[2], "PIEP")); assert_se(streq(r[3], "SCHLUMPF=SMURFF")); assert_se(streq(r[4], "PIEP=")); assert_se(streq(r[5], "NANANANA=YES")); assert_se(strv_length(r) == 6); assert_se(strv_env_clean(r) == r); assert_se(streq(r[0], "FOO=")); assert_se(streq(r[1], "WALDO=")); assert_se(streq(r[2], "SCHLUMPF=SMURFF")); assert_se(streq(r[3], "PIEP=")); assert_se(streq(r[4], "NANANANA=YES")); assert_se(strv_length(r) == 5); }
static void test_env_clean(void) { _cleanup_strv_free_ char **e; e = strv_new("FOOBAR=WALDO", "FOOBAR=WALDO", "FOOBAR", "F", "X=", "F=F", "=", "=F", "", "0000=000", "äöüß=abcd", "abcd=äöüß", "xyz\n=xyz", "xyz=xyz\n", "another=one", "another=final one", NULL); assert_se(e); assert_se(!strv_env_is_valid(e)); assert_se(strv_env_clean(e) == e); assert_se(strv_env_is_valid(e)); assert_se(streq(e[0], "FOOBAR=WALDO")); assert_se(streq(e[1], "X=")); assert_se(streq(e[2], "F=F")); assert_se(streq(e[3], "abcd=äöüß")); assert_se(streq(e[4], "another=final one")); assert_se(e[5] == NULL); }
static void test_parse_env_file(void) { char t[] = "/tmp/test-fileio-in-XXXXXX", p[] = "/tmp/test-fileio-out-XXXXXX"; int fd, r; FILE *f; _cleanup_free_ char *one = NULL, *two = NULL, *three = NULL, *four = NULL, *five = NULL, *six = NULL, *seven = NULL, *eight = NULL, *nine = NULL, *ten = NULL; _cleanup_strv_free_ char **a = NULL, **b = NULL; char **i; unsigned k; fd = mkostemp_safe(p, O_RDWR|O_CLOEXEC); assert_se(fd >= 0); close(fd); fd = mkostemp_safe(t, O_RDWR|O_CLOEXEC); assert_se(fd >= 0); f = fdopen(fd, "w"); assert_se(f); fputs("one=BAR \n" "# comment\n" " # comment \n" " ; comment \n" " two = bar \n" "invalid line\n" "invalid line #comment\n" "three = \"333\n" "xxxx\"\n" "four = \'44\\\"44\'\n" "five = \'55\\\'55\' \"FIVE\" cinco \n" "six = seis sechs\\\n" " sis\n" "seven=\"sevenval\" #nocomment\n" "eight=eightval #nocomment\n" "export nine=nineval\n" "ten=", f); fflush(f); fclose(f); r = load_env_file(NULL, t, NULL, &a); assert_se(r >= 0); STRV_FOREACH(i, a) log_info("Got: <%s>", *i); assert_se(streq_ptr(a[0], "one=BAR")); assert_se(streq_ptr(a[1], "two=bar")); assert_se(streq_ptr(a[2], "three=333\nxxxx")); assert_se(streq_ptr(a[3], "four=44\"44")); assert_se(streq_ptr(a[4], "five=55\'55FIVEcinco")); assert_se(streq_ptr(a[5], "six=seis sechs sis")); assert_se(streq_ptr(a[6], "seven=sevenval#nocomment")); assert_se(streq_ptr(a[7], "eight=eightval #nocomment")); assert_se(streq_ptr(a[8], "export nine=nineval")); assert_se(streq_ptr(a[9], "ten=")); assert_se(a[10] == NULL); strv_env_clean(a); k = 0; STRV_FOREACH(i, b) { log_info("Got2: <%s>", *i); assert_se(streq(*i, a[k++])); }