X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=src%2Ftest%2Ftest-unit-file.c;h=40eeba6af5c07d513ecc413c4a0a2e1e9fb41122;hb=53e1b683907c2f12330f00feb9630150196f064d;hp=07f21d0d3db1161a06523436b958985dcae57a44;hpb=e65270ad1227e07659803acfba502a10d73d0ca9;p=thirdparty%2Fsystemd.git diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c index 07f21d0d3db..40eeba6af5c 100644 --- a/src/test/test-unit-file.c +++ b/src/test/test-unit-file.c @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ /*** This file is part of systemd. @@ -445,6 +446,73 @@ static void test_config_parse_exec(void) { manager_free(m); } +static void test_config_parse_log_extra_fields(void) { + /* int config_parse_log_extra_fields( + const char *unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) */ + + int r; + + Manager *m = NULL; + Unit *u = NULL; + ExecContext c = {}; + + r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m); + if (MANAGER_SKIP_TEST(r)) { + log_notice_errno(r, "Skipping test: manager_new: %m"); + return; + } + + assert_se(r >= 0); + assert_se(manager_startup(m, NULL, NULL) >= 0); + + assert_se(u = unit_new(m, sizeof(Service))); + + log_info("/* %s – basic test */", __func__); + r = config_parse_log_extra_fields(NULL, "fake", 1, "section", 1, + "LValue", 0, "FOO=BAR \"QOOF=quux ' ' \"", + &c, u); + assert_se(r >= 0); + assert_se(c.n_log_extra_fields == 2); + assert_se(strneq(c.log_extra_fields[0].iov_base, "FOO=BAR", c.log_extra_fields[0].iov_len)); + assert_se(strneq(c.log_extra_fields[1].iov_base, "QOOF=quux ' ' ", c.log_extra_fields[1].iov_len)); + + log_info("/* %s – add some */", __func__); + r = config_parse_log_extra_fields(NULL, "fake", 1, "section", 1, + "LValue", 0, "FOO2=BAR2 QOOF2=quux ' '", + &c, u); + assert_se(r >= 0); + assert_se(c.n_log_extra_fields == 4); + assert_se(strneq(c.log_extra_fields[0].iov_base, "FOO=BAR", c.log_extra_fields[0].iov_len)); + assert_se(strneq(c.log_extra_fields[1].iov_base, "QOOF=quux ' ' ", c.log_extra_fields[1].iov_len)); + assert_se(strneq(c.log_extra_fields[2].iov_base, "FOO2=BAR2", c.log_extra_fields[2].iov_len)); + assert_se(strneq(c.log_extra_fields[3].iov_base, "QOOF2=quux", c.log_extra_fields[3].iov_len)); + + exec_context_dump(&c, stdout, " --> "); + + log_info("/* %s – reset */", __func__); + r = config_parse_log_extra_fields(NULL, "fake", 1, "section", 1, + "LValue", 0, "", + &c, u); + assert_se(r >= 0); + assert_se(c.n_log_extra_fields == 0); + + exec_context_free_log_extra_fields(&c); + + unit_free(u); + manager_free(m); + + log_info("/* %s – bye */", __func__); +} + #define env_file_1 \ "a=a\n" \ "b=b\\\n" \ @@ -858,12 +926,17 @@ int main(int argc, char *argv[]) { log_parse_environment(); log_open(); - enter_cgroup_subroot(); + r = enter_cgroup_subroot(); + if (r == -ENOMEDIUM) { + log_notice_errno(r, "Skipping test: cgroupfs not available"); + return EXIT_TEST_SKIP; + } assert_se(runtime_dir = setup_fake_runtime_dir()); r = test_unit_file_get_set(); test_config_parse_exec(); + test_config_parse_log_extra_fields(); test_config_parse_capability_set(); test_config_parse_rlimit(); test_config_parse_pass_environ();