X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Ftest%2Ftest-util.c;h=08310c83ca4a754cd06df49a0df154a8e1506d07;hp=c15f19df8edfa4e542394d098416a787e78994d1;hb=aa3c5cf8eefa36a3ae727fe136587381e590d333;hpb=1ef04f0b14a5e48a822683a9e3a19233b42aecb2 diff --git a/src/test/test-util.c b/src/test/test-util.c index c15f19df8..08310c83c 100644 --- a/src/test/test-util.c +++ b/src/test/test-util.c @@ -21,6 +21,8 @@ ***/ #include +#include +#include #include "util.h" @@ -43,6 +45,29 @@ static void test_first_word(void) { assert_se(!first_word("Hellooo", "Hello")); } +static void test_close_many(void) { + int fds[3]; + char name0[] = "/tmp/test-close-many.XXXXXX"; + char name1[] = "/tmp/test-close-many.XXXXXX"; + char name2[] = "/tmp/test-close-many.XXXXXX"; + + fds[0] = mkstemp(name0); + fds[1] = mkstemp(name1); + fds[2] = mkstemp(name2); + + close_many(fds, 2); + + assert_se(fcntl(fds[0], F_GETFD) == -1); + assert_se(fcntl(fds[1], F_GETFD) == -1); + assert_se(fcntl(fds[2], F_GETFD) >= 0); + + close_nointr_nofail(fds[2]); + + unlink(name0); + unlink(name1); + unlink(name2); +} + static void test_parse_boolean(void) { assert_se(parse_boolean("1") == 1); assert_se(parse_boolean("y") == 1); @@ -129,6 +154,22 @@ static void test_safe_atod(void) { assert_se(r == -EINVAL); } +static void test_strappend(void) { + _cleanup_free_ char *t1, *t2, *t3, *t4; + + t1 = strappend(NULL, NULL); + assert_se(streq(t1, "")); + + t2 = strappend(NULL, "suf"); + assert_se(streq(t2, "suf")); + + t3 = strappend("pre", NULL); + assert_se(streq(t3, "pre")); + + t4 = strappend("pre", "suf"); + assert_se(streq(t4, "presuf")); +} + static void test_strstrip(void) { char *r; char input[] = " hello, waldo. "; @@ -151,6 +192,37 @@ static void test_in_charset(void) { assert_se(!in_charset("dddaaabbbcccc", "abc f")); } +static void test_hexchar(void) { + assert_se(hexchar(0xa) == 'a'); + assert_se(hexchar(0x0) == '0'); +} + +static void test_unhexchar(void) { + assert_se(unhexchar('a') == 0xA); + assert_se(unhexchar('A') == 0xA); + assert_se(unhexchar('0') == 0x0); +} + +static void test_octchar(void) { + assert_se(octchar(00) == '0'); + assert_se(octchar(07) == '7'); +} + +static void test_unoctchar(void) { + assert_se(unoctchar('0') == 00); + assert_se(unoctchar('7') == 07); +} + +static void test_decchar(void) { + assert_se(decchar(0) == '0'); + assert_se(decchar(9) == '9'); +} + +static void test_undecchar(void) { + assert_se(undecchar('0') == 0); + assert_se(undecchar('9') == 9); +} + static void test_foreach_word(void) { char *w, *state; size_t l; @@ -230,21 +302,67 @@ static void test_memdup_multiply(void) { free(dup); } +static void test_bus_path_escape_one(const char *a, const char *b) { + _cleanup_free_ char *t = NULL, *x = NULL, *y = NULL; + + assert_se(t = bus_path_escape(a)); + assert_se(streq(t, b)); + + assert_se(x = bus_path_unescape(t)); + assert_se(streq(a, x)); + + assert_se(y = bus_path_unescape(b)); + assert_se(streq(a, y)); +} + +static void test_bus_path_escape(void) { + test_bus_path_escape_one("foo123bar", "foo123bar"); + test_bus_path_escape_one("foo.bar", "foo_2ebar"); + test_bus_path_escape_one("foo_2ebar", "foo_5f2ebar"); + test_bus_path_escape_one("", "_"); + test_bus_path_escape_one("_", "_5f"); + test_bus_path_escape_one("1", "_31"); + test_bus_path_escape_one(":1", "_3a1"); +} + +static void test_hostname_is_valid(void) { + assert(hostname_is_valid("foobar")); + assert(hostname_is_valid("foobar.com")); + assert(!hostname_is_valid("fööbar")); + assert(!hostname_is_valid("")); + assert(!hostname_is_valid(".")); + assert(!hostname_is_valid("..")); + assert(!hostname_is_valid("foobar.")); + assert(!hostname_is_valid(".foobar")); + assert(!hostname_is_valid("foo..bar")); + assert(!hostname_is_valid("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")); +} + int main(int argc, char *argv[]) { test_streq_ptr(); test_first_word(); + test_close_many(); test_parse_boolean(); test_parse_pid(); test_parse_uid(); test_safe_atolli(); test_safe_atod(); + test_strappend(); test_strstrip(); test_delete_chars(); test_in_charset(); + test_hexchar(); + test_unhexchar(); + test_octchar(); + test_unoctchar(); + test_decchar(); + test_undecchar(); test_foreach_word(); test_foreach_word_quoted(); test_default_term_for_tty(); test_memdup_multiply(); + test_bus_path_escape(); + test_hostname_is_valid(); return 0; }