From 8a17d92e544e7842a5740d7a66e0ef93daca18e6 Mon Sep 17 00:00:00 2001 From: Sven Eden Date: Tue, 13 Mar 2018 19:19:10 +0100 Subject: Prep v236 : Add missing SPDX-License-Identifier (8/9) src/test --- src/test/test-parse-util.c | 128 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) (limited to 'src/test/test-parse-util.c') diff --git a/src/test/test-parse-util.c b/src/test/test-parse-util.c index 120a8b103..241145806 100644 --- a/src/test/test-parse-util.c +++ b/src/test/test-parse-util.c @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ /*** This file is part of systemd. @@ -21,8 +22,11 @@ #include #include +#include "alloc-util.h" +#include "errno-list.h" #include "log.h" #include "parse-util.h" +#include "string-util.h" static void test_parse_boolean(void) { assert_se(parse_boolean("1") == 1); @@ -79,6 +83,9 @@ static void test_parse_pid(void) { r = parse_pid("junk", &pid); assert_se(r == -EINVAL); + + r = parse_pid("", &pid); + assert_se(r == -EINVAL); } static void test_parse_mode(void) { @@ -98,6 +105,8 @@ static void test_parse_mode(void) { static void test_parse_size(void) { uint64_t bytes; + assert_se(parse_size("", 1024, &bytes) == -EINVAL); + assert_se(parse_size("111", 1024, &bytes) == 0); assert_se(bytes == 111); @@ -258,6 +267,10 @@ static void test_parse_range(void) { assert_se(lower == 9999); assert_se(upper == 9999); + assert_se(parse_range("-123", &lower, &upper) == -EINVAL); + assert_se(lower == 9999); + assert_se(upper == 9999); + assert_se(parse_range("-111-123", &lower, &upper) == -EINVAL); assert_se(lower == 9999); assert_se(upper == 9999); @@ -372,6 +385,15 @@ static void test_safe_atolli(void) { r = safe_atolli("junk", &l); assert_se(r == -EINVAL); + + r = safe_atolli("123x", &l); + assert_se(r == -EINVAL); + + r = safe_atolli("12.3", &l); + assert_se(r == -EINVAL); + + r = safe_atolli("", &l); + assert_se(r == -EINVAL); } static void test_safe_atou16(void) { @@ -400,6 +422,12 @@ static void test_safe_atou16(void) { r = safe_atou16("123x", &l); assert_se(r == -EINVAL); + + r = safe_atou16("12.3", &l); + assert_se(r == -EINVAL); + + r = safe_atou16("", &l); + assert_se(r == -EINVAL); } static void test_safe_atoi16(void) { @@ -433,6 +461,12 @@ static void test_safe_atoi16(void) { r = safe_atoi16("123x", &l); assert_se(r == -EINVAL); + + r = safe_atoi16("12.3", &l); + assert_se(r == -EINVAL); + + r = safe_atoi16("", &l); + assert_se(r == -EINVAL); } static void test_safe_atou64(void) { @@ -461,6 +495,12 @@ static void test_safe_atou64(void) { r = safe_atou64("123x", &l); assert_se(r == -EINVAL); + + r = safe_atou64("12.3", &l); + assert_se(r == -EINVAL); + + r = safe_atou64("", &l); + assert_se(r == -EINVAL); } static void test_safe_atoi64(void) { @@ -494,6 +534,12 @@ static void test_safe_atoi64(void) { r = safe_atoi64("123x", &l); assert_se(r == -EINVAL); + + r = safe_atoi64("12.3", &l); + assert_se(r == -EINVAL); + + r = safe_atoi64("", &l); + assert_se(r == -EINVAL); } static void test_safe_atod(void) { @@ -515,6 +561,9 @@ static void test_safe_atod(void) { strtod("0,5", &e); assert_se(*e == ','); + r = safe_atod("", &d); + assert_se(r == -EINVAL); + /* Check if this really is locale independent */ if (setlocale(LC_NUMERIC, "de_DE.utf8")) { @@ -530,6 +579,9 @@ static void test_safe_atod(void) { #if defined(__GLIBC__) assert_se(fabs(strtod("0,5", &e) - 0.5) < 0.00001); #endif // __GLIBC__ + + r = safe_atod("", &d); + assert_se(r == -EINVAL); } /* And check again, reset */ @@ -545,6 +597,9 @@ static void test_safe_atod(void) { errno = 0; strtod("0,5", &e); assert_se(*e == ','); + + r = safe_atod("", &d); + assert_se(r == -EINVAL); } static void test_parse_percent(void) { @@ -563,6 +618,7 @@ static void test_parse_percent(void) { assert_se(parse_percent("%%") == -EINVAL); assert_se(parse_percent("%1") == -EINVAL); assert_se(parse_percent("1%%") == -EINVAL); + assert_se(parse_percent("3.2%") == -EINVAL); } static void test_parse_percent_unbounded(void) { @@ -603,6 +659,8 @@ static void test_parse_nice(void) { static void test_parse_dev(void) { dev_t dev; + assert_se(parse_dev("", &dev) == -EINVAL); + assert_se(parse_dev("junk", &dev) == -EINVAL); assert_se(parse_dev("0", &dev) == -EINVAL); assert_se(parse_dev("5", &dev) == -EINVAL); assert_se(parse_dev("5:", &dev) == -EINVAL); @@ -613,6 +671,74 @@ static void test_parse_dev(void) { assert_se(parse_dev("8:11", &dev) >= 0 && major(dev) == 8 && minor(dev) == 11); } +static void test_parse_errno(void) { + assert_se(parse_errno("EILSEQ") == EILSEQ); + assert_se(parse_errno("EINVAL") == EINVAL); + assert_se(parse_errno("0") == 0); + assert_se(parse_errno("1") == 1); + assert_se(parse_errno("4095") == 4095); + + assert_se(parse_errno("-1") == -ERANGE); + assert_se(parse_errno("-3") == -ERANGE); + assert_se(parse_errno("4096") == -ERANGE); + + assert_se(parse_errno("") == -EINVAL); + assert_se(parse_errno("12.3") == -EINVAL); + assert_se(parse_errno("123junk") == -EINVAL); + assert_se(parse_errno("junk123") == -EINVAL); + assert_se(parse_errno("255EILSEQ") == -EINVAL); + assert_se(parse_errno("EINVAL12") == -EINVAL); + assert_se(parse_errno("-EINVAL") == -EINVAL); + assert_se(parse_errno("EINVALaaa") == -EINVAL); +} + +static void test_parse_syscall_and_errno(void) { + _cleanup_free_ char *n = NULL; + int e; + + assert_se(parse_syscall_and_errno("uname:EILSEQ", &n, &e) >= 0); + assert_se(streq(n, "uname")); + assert_se(e == errno_from_name("EILSEQ") && e >= 0); + n = mfree(n); + + assert_se(parse_syscall_and_errno("uname:EINVAL", &n, &e) >= 0); + assert_se(streq(n, "uname")); + assert_se(e == errno_from_name("EINVAL") && e >= 0); + n = mfree(n); + + assert_se(parse_syscall_and_errno("@sync:4095", &n, &e) >= 0); + assert_se(streq(n, "@sync")); + assert_se(e == 4095); + n = mfree(n); + + /* If errno is omitted, then e is set to -1 */ + assert_se(parse_syscall_and_errno("mount", &n, &e) >= 0); + assert_se(streq(n, "mount")); + assert_se(e == -1); + n = mfree(n); + + /* parse_syscall_and_errno() does not check the syscall name is valid or not. */ + assert_se(parse_syscall_and_errno("hoge:255", &n, &e) >= 0); + assert_se(streq(n, "hoge")); + assert_se(e == 255); + n = mfree(n); + + /* The function checks the syscall name is empty or not. */ + assert_se(parse_syscall_and_errno("", &n, &e) == -EINVAL); + assert_se(parse_syscall_and_errno(":255", &n, &e) == -EINVAL); + + /* errno must be a valid errno name or number between 0 and ERRNO_MAX == 4095 */ + assert_se(parse_syscall_and_errno("hoge:4096", &n, &e) == -ERANGE); + assert_se(parse_syscall_and_errno("hoge:-3", &n, &e) == -ERANGE); + assert_se(parse_syscall_and_errno("hoge:12.3", &n, &e) == -EINVAL); + assert_se(parse_syscall_and_errno("hoge:123junk", &n, &e) == -EINVAL); + assert_se(parse_syscall_and_errno("hoge:junk123", &n, &e) == -EINVAL); + assert_se(parse_syscall_and_errno("hoge:255:EILSEQ", &n, &e) == -EINVAL); + assert_se(parse_syscall_and_errno("hoge:-EINVAL", &n, &e) == -EINVAL); + assert_se(parse_syscall_and_errno("hoge:EINVALaaa", &n, &e) == -EINVAL); + assert_se(parse_syscall_and_errno("hoge:", &n, &e) == -EINVAL); +} + int main(int argc, char *argv[]) { log_parse_environment(); log_open(); @@ -636,6 +762,8 @@ int main(int argc, char *argv[]) { test_parse_nice(); #endif // 0 test_parse_dev(); + test_parse_errno(); + test_parse_syscall_and_errno(); return 0; } -- cgit v1.2.3