X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Ftest%2Ftest-unit-file.c;h=bb5cbdf9d7212852e7b129aebdeaf2e5733cd381;hp=b390c44b059e87e2d64c2e0b2e99ea8e21802bf9;hb=2c5417ade0d137f811e4fcc1b099f963e6d5a820;hpb=b5b46d599524341ddd7407e5dff1021af8ff5089 diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c index b390c44b0..bb5cbdf9d 100644 --- a/src/test/test-unit-file.c +++ b/src/test/test-unit-file.c @@ -28,9 +28,9 @@ #include "util.h" #include "macro.h" #include "hashmap.h" +#include "load-fragment.h" -int main(int argc, char *argv[]) { - +static void test_unit_file_get_set(void) { int r; Hashmap *h; Iterator i; @@ -40,13 +40,111 @@ int main(int argc, char *argv[]) { assert(h); r = unit_file_get_list(UNIT_FILE_SYSTEM, NULL, h); - log_info("%s", strerror(-r)); + log_info("unit_file_get_list: %s", strerror(-r)); assert(r >= 0); HASHMAP_FOREACH(p, h, i) printf("%s = %s\n", p->path, unit_file_state_to_string(p->state)); unit_file_list_free(h); +} + +static void check_execcommand(ExecCommand *c, + const char* path, + const char* argv0, + const char* argv1, + bool ignore) { + assert_se(c); + log_info("%s %s %s %s", + c->path, c->argv[0], c->argv[1], c->argv[2]); + assert_se(streq(c->path, path)); + assert_se(streq(c->argv[0], argv0)); + assert_se(streq(c->argv[1], argv1)); + assert_se(c->argv[2] == NULL); + assert_se(c->ignore == ignore); +} + +static void test_config_parse_exec(void) { + /* int config_parse_exec( */ + /* const char *filename, */ + /* unsigned line, */ + /* const char *section, */ + /* const char *lvalue, */ + /* int ltype, */ + /* const char *rvalue, */ + /* void *data, */ + /* void *userdata) */ + int r; + + ExecCommand *c = NULL, *c1; + + /* basic test */ + r = config_parse_exec("fake", 1, "section", + "LValue", 0, "/RValue r1", + &c, NULL); + assert_se(r >= 0); + check_execcommand(c, "/RValue", "/RValue", "r1", false); + + r = config_parse_exec("fake", 2, "section", + "LValue", 0, "/RValue///slashes/// r1", + &c, NULL); + /* test slashes */ + assert_se(r >= 0); + c1 = c->command_next; + check_execcommand(c1, "/RValue/slashes", "/RValue///slashes///", + "r1", false); + + /* honour_argv0 */ + r = config_parse_exec("fake", 3, "section", + "LValue", 0, "@/RValue///slashes2/// argv0 r1", + &c, NULL); + assert_se(r >= 0); + c1 = c1->command_next; + check_execcommand(c1, "/RValue/slashes2", "argv0", "r1", false); + + /* ignore && honour_argv0 */ + r = config_parse_exec("fake", 4, "section", + "LValue", 0, "-@/RValue///slashes3/// argv0a r1", + &c, NULL); + assert_se(r >= 0); + c1 = c1->command_next; + check_execcommand(c1, + "/RValue/slashes3", "argv0a", "r1", true); + + /* semicolon */ + r = config_parse_exec("fake", 5, "section", + "LValue", 0, + "-@/RValue argv0 r1 ; " + "/goo/goo boo", + &c, NULL); + assert_se(r >= 0); + c1 = c1->command_next; + check_execcommand(c1, + "/RValue", "argv0", "r1", true); + + c1 = c1->command_next; + check_execcommand(c1, + "/goo/goo", "/goo/goo", "boo", false); + + /* trailing semicolon */ + r = config_parse_exec("fake", 5, "section", + "LValue", 0, + "-@/RValue argv0 r1 ; ", + &c, NULL); + assert_se(r >= 0); + c1 = c1->command_next; + check_execcommand(c1, + "/RValue", "argv0", "r1", true); + + assert_se(c1->command_next == NULL); + + exec_command_free_list(c); +} + +int main(int argc, char *argv[]) { + + test_unit_file_get_set(); + test_config_parse_exec(); return 0; }