X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Ftest%2Ftest-util.c;h=1a5997873c577300a3d863d2d08260ef6c77557f;hb=e801700e9acdde60078eb1d41b41b06369b83541;hp=3f1b5487f01050f27ecd28866a6d91c1323c2727;hpb=180a60bc879ab0554297bc08a7a0b9274b119b55;p=elogind.git diff --git a/src/test/test-util.c b/src/test/test-util.c index 3f1b5487f..1a5997873 100644 --- a/src/test/test-util.c +++ b/src/test/test-util.c @@ -1207,23 +1207,28 @@ static void test_glob_exists(void) { } static void test_execute_directory(void) { - char name[] = "/tmp/test-execute_directory/script1"; - char name2[] = "/tmp/test-execute_directory/script2"; - char name3[] = "/tmp/test-execute_directory/useless"; - char tempdir[] = "/tmp/test-execute_directory/"; + char template[] = "/tmp/test-readlink_and_make_absolute.XXXXXXX"; + const char const* dirs[] = {template, NULL}; + const char *name, *name2, *name3; - assert_se(mkdir_safe(tempdir, 0755, getuid(), getgid()) >= 0); - assert_se(write_string_file(name, "#!/bin/sh\necho 'Executing '$0\ntouch /tmp/test-execute_directory/it_works") == 0); - assert_se(write_string_file(name2, "#!/bin/sh\necho 'Executing '$0\ntouch /tmp/test-execute_directory/it_works2") == 0); + assert_se(mkdtemp(template)); + + name = strappenda(template, "/script"); + name2 = strappenda(template, "/script2"); + name3 = strappenda(template, "/useless"); + + assert_se(write_string_file(name, "#!/bin/sh\necho 'Executing '$0\ntouch $(dirname $0)/it_works") == 0); + assert_se(write_string_file(name2, "#!/bin/sh\necho 'Executing '$0\ntouch $(dirname $0)/it_works2") == 0); assert_se(chmod(name, 0755) == 0); assert_se(chmod(name2, 0755) == 0); assert_se(touch(name3) >= 0); - execute_directory(tempdir, NULL, DEFAULT_TIMEOUT_USEC, NULL); - assert_se(access("/tmp/test-execute_directory/it_works", F_OK) >= 0); - assert_se(access("/tmp/test-execute_directory/it_works2", F_OK) >= 0); + assert(chdir(template) == 0); + execute_directories(dirs, DEFAULT_TIMEOUT_USEC, NULL); + assert_se(access("it_works", F_OK) >= 0); + assert_se(access("it_works2", F_OK) >= 0); - rm_rf_dangerous(tempdir, false, true, false); + rm_rf_dangerous(template, false, true, false); } static void test_unquote_first_word(void) { @@ -1381,6 +1386,49 @@ static void test_raw_clone(void) { } } +static void test_same_fd(void) { + _cleanup_close_pair_ int p[2] = { -1, -1 }; + _cleanup_close_ int a = -1, b = -1, c = -1; + + assert_se(pipe2(p, O_CLOEXEC) >= 0); + assert_se((a = dup(p[0])) >= 0); + assert_se((b = open("/dev/null", O_RDONLY|O_CLOEXEC)) >= 0); + assert_se((c = dup(a)) >= 0); + + assert_se(same_fd(p[0], p[0]) > 0); + assert_se(same_fd(p[1], p[1]) > 0); + assert_se(same_fd(a, a) > 0); + assert_se(same_fd(b, b) > 0); + + assert_se(same_fd(a, p[0]) > 0); + assert_se(same_fd(p[0], a) > 0); + assert_se(same_fd(c, p[0]) > 0); + assert_se(same_fd(p[0], c) > 0); + assert_se(same_fd(a, c) > 0); + assert_se(same_fd(c, a) > 0); + + assert_se(same_fd(p[0], p[1]) == 0); + assert_se(same_fd(p[1], p[0]) == 0); + assert_se(same_fd(p[0], b) == 0); + assert_se(same_fd(b, p[0]) == 0); + assert_se(same_fd(p[1], a) == 0); + assert_se(same_fd(a, p[1]) == 0); + assert_se(same_fd(p[1], b) == 0); + assert_se(same_fd(b, p[1]) == 0); + + assert_se(same_fd(a, b) == 0); + assert_se(same_fd(b, a) == 0); +} + +static void test_uid_ptr(void) { + + assert_se(UID_TO_PTR(0) != NULL); + assert_se(UID_TO_PTR(1000) != NULL); + + assert_se(PTR_TO_UID(UID_TO_PTR(0)) == 0); + assert_se(PTR_TO_UID(UID_TO_PTR(1000)) == 1000); +} + int main(int argc, char *argv[]) { log_parse_environment(); log_open(); @@ -1455,6 +1503,8 @@ int main(int argc, char *argv[]) { test_unquote_many_words(); test_parse_proc_cmdline(); test_raw_clone(); + test_same_fd(); + test_uid_ptr(); return 0; }