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=9396aebd63f3afd91e97301215342827b748e742;hp=66a10ead461489cc628fb070dd42c7b8e0ef1975;hb=b32ff512191bf873266ee8067f6f6c8a30c96a5e;hpb=d6dd604b551987b411ec8930c23bd5c9c93ef864 diff --git a/src/test/test-util.c b/src/test/test-util.c index 66a10ead4..9396aebd6 100644 --- a/src/test/test-util.c +++ b/src/test/test-util.c @@ -24,6 +24,7 @@ #include #include #include +#include #include "util.h" @@ -429,6 +430,53 @@ static void test_get_process_comm(void) { log_info("pid1 $PATH: '%s'", strna(i)); } +static void test_protect_errno(void) { + errno = 12; + { + PROTECT_ERRNO; + errno = 11; + } + assert(errno == 12); +} + +static void test_parse_bytes(void) { + off_t bytes; + + assert_se(parse_bytes("111", &bytes) == 0); + assert_se(bytes == 111); + + assert_se(parse_bytes(" 112 B", &bytes) == 0); + assert_se(bytes == 112); + + assert_se(parse_bytes("3 K", &bytes) == 0); + assert_se(bytes == 3*1024); + + assert_se(parse_bytes(" 4 M 11K", &bytes) == 0); + assert_se(bytes == 4*1024*1024 + 11 * 1024); + + assert_se(parse_bytes("3B3G", &bytes) == 0); + assert_se(bytes == 3ULL*1024*1024*1024 + 3); + + assert_se(parse_bytes("3B3G4T", &bytes) == 0); + assert_se(bytes == (4ULL*1024 + 3)*1024*1024*1024 + 3); + + assert_se(parse_bytes("12P", &bytes) == 0); + assert_se(bytes == 12ULL * 1024*1024*1024*1024*1024); + + assert_se(parse_bytes("3E 2P", &bytes) == 0); + assert_se(bytes == (3 * 1024 + 2ULL) * 1024*1024*1024*1024*1024); + + assert_se(parse_bytes("12X", &bytes) == -EINVAL); + + assert_se(parse_bytes("1024E", &bytes) == -ERANGE); + assert_se(parse_bytes("-1", &bytes) == -ERANGE); + assert_se(parse_bytes("-1024E", &bytes) == -ERANGE); + + assert_se(parse_bytes("-1024P", &bytes) == -ERANGE); + + assert_se(parse_bytes("-10B 20K", &bytes) == -ERANGE); +} + int main(int argc, char *argv[]) { test_streq_ptr(); test_first_word(); @@ -456,6 +504,8 @@ int main(int argc, char *argv[]) { test_hostname_is_valid(); test_u64log2(); test_get_process_comm(); + test_protect_errno(); + test_parse_bytes(); return 0; }