X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Ftest%2Ftest-util.c;h=f2b7038a4db2c9fac9bd66a9ca999c17c7e2ac0a;hb=caac2704d57ef6d95f7053456479353bae3638de;hp=1e50a29f79db2df6d90bc83c107e9698484b3f25;hpb=aac7766c107273abdc5d6f52f9a9f88d18cb14b3;p=elogind.git diff --git a/src/test/test-util.c b/src/test/test-util.c index 1e50a29f7..f2b7038a4 100644 --- a/src/test/test-util.c +++ b/src/test/test-util.c @@ -416,8 +416,24 @@ static void test_cescape(void) { static void test_cunescape(void) { _cleanup_free_ char *unescaped; - assert_se(unescaped = cunescape("abc\\\\\\\"\\b\\f\\a\\n\\r\\t\\v\\003\\177\\234\\313\\000\\x00")); - assert_se(streq(unescaped, "abc\\\"\b\f\a\n\r\t\v\003\177\234\313\\000\\x00")); + unescaped = cunescape("abc\\\\\\\"\\b\\f\\a\\n\\r\\t\\v\\003\\177\\234\\313\\000\\x00"); + assert_se(streq_ptr(unescaped, "abc\\\"\b\f\a\n\r\t\v\003\177\234\313\\000\\x00")); + + /* incomplete sequences */ + unescaped = cunescape("\\x0"); + assert_se(streq_ptr(unescaped, "\\x0")); + + unescaped = cunescape("\\x"); + assert_se(streq_ptr(unescaped, "\\x")); + + unescaped = cunescape("\\"); + assert_se(streq_ptr(unescaped, "\\")); + + unescaped = cunescape("\\11"); + assert_se(streq_ptr(unescaped, "\\11")); + + unescaped = cunescape("\\1"); + assert_se(streq_ptr(unescaped, "\\1")); } static void test_foreach_word(void) { @@ -587,7 +603,7 @@ static void test_get_process_comm(void) { r = get_process_environ(me, &env); assert_se(r >= 0 || r == -EACCES); - log_info("self strlen(environ): '%zd'", strlen(env)); + log_info("self strlen(environ): '%zu'", strlen(env)); if (!detect_container(NULL)) assert_se(get_ctty_devnr(1, &h) == -ENOENT); @@ -902,15 +918,15 @@ static void test_files_same(void) { } static void test_is_valid_documentation_url(void) { - assert_se(is_valid_documentation_url("http://www.freedesktop.org/wiki/Software/systemd")); - assert_se(is_valid_documentation_url("https://www.kernel.org/doc/Documentation/binfmt_misc.txt")); - assert_se(is_valid_documentation_url("file:foo")); - assert_se(is_valid_documentation_url("man:systemd.special(7)")); - assert_se(is_valid_documentation_url("info:bar")); + assert_se(documentation_url_is_valid("http://www.freedesktop.org/wiki/Software/systemd")); + assert_se(documentation_url_is_valid("https://www.kernel.org/doc/Documentation/binfmt_misc.txt")); + assert_se(documentation_url_is_valid("file:/foo/foo")); + assert_se(documentation_url_is_valid("man:systemd.special(7)")); + assert_se(documentation_url_is_valid("info:bar")); - assert_se(!is_valid_documentation_url("foo:")); - assert_se(!is_valid_documentation_url("info:")); - assert_se(!is_valid_documentation_url("")); + assert_se(!documentation_url_is_valid("foo:")); + assert_se(!documentation_url_is_valid("info:")); + assert_se(!documentation_url_is_valid("")); } static void test_file_in_same_dir(void) { @@ -1238,11 +1254,11 @@ static void test_execute_directory(void) { execute_directories(dirs, DEFAULT_TIMEOUT_USEC, NULL); - assert(chdir(template_lo) == 0); + assert_se(chdir(template_lo) == 0); assert_se(access("it_works", F_OK) >= 0); assert_se(access("failed", F_OK) < 0); - assert(chdir(template_hi) == 0); + assert_se(chdir(template_hi) == 0); assert_se(access("it_works2", F_OK) >= 0); assert_se(access("failed", F_OK) < 0); @@ -1448,6 +1464,42 @@ static void test_uid_ptr(void) { assert_se(PTR_TO_UID(UID_TO_PTR(1000)) == 1000); } +static void test_sparse_write_one(int fd, const char *buffer, size_t n) { + char check[n]; + + assert_se(lseek(fd, 0, SEEK_SET) == 0); + assert_se(ftruncate(fd, 0) >= 0); + assert_se(sparse_write(fd, buffer, n, 4) == (ssize_t) n); + + assert_se(lseek(fd, 0, SEEK_CUR) == (off_t) n); + assert_se(ftruncate(fd, n) >= 0); + + assert_se(lseek(fd, 0, SEEK_SET) == 0); + assert_se(read(fd, check, n) == (ssize_t) n); + + assert_se(memcmp(buffer, check, n) == 0); +} + +static void test_sparse_write(void) { + const char test_a[] = "test"; + const char test_b[] = "\0\0\0\0test\0\0\0\0"; + const char test_c[] = "\0\0test\0\0\0\0"; + const char test_d[] = "\0\0test\0\0\0test\0\0\0\0test\0\0\0\0\0test\0\0\0test\0\0\0\0test\0\0\0\0\0\0\0\0"; + const char test_e[] = "test\0\0\0\0test"; + _cleanup_close_ int fd = -1; + char fn[] = "/tmp/sparseXXXXXX"; + + fd = mkostemp(fn, O_CLOEXEC); + assert_se(fd >= 0); + unlink(fn); + + test_sparse_write_one(fd, test_a, sizeof(test_a)); + test_sparse_write_one(fd, test_b, sizeof(test_b)); + test_sparse_write_one(fd, test_c, sizeof(test_c)); + test_sparse_write_one(fd, test_d, sizeof(test_d)); + test_sparse_write_one(fd, test_e, sizeof(test_e)); +} + int main(int argc, char *argv[]) { log_parse_environment(); log_open(); @@ -1524,6 +1576,7 @@ int main(int argc, char *argv[]) { test_raw_clone(); test_same_fd(); test_uid_ptr(); + test_sparse_write(); return 0; }