diff options
Diffstat (limited to 'tests/helpers')
-rw-r--r-- | tests/helpers/Makemodule.am | 12 | ||||
-rw-r--r-- | tests/helpers/test_byteswap.c | 114 | ||||
-rw-r--r-- | tests/helpers/test_md5.c | 29 | ||||
-rw-r--r-- | tests/helpers/test_pathnames.c | 100 | ||||
-rw-r--r-- | tests/helpers/test_sysinfo.c | 129 |
5 files changed, 384 insertions, 0 deletions
diff --git a/tests/helpers/Makemodule.am b/tests/helpers/Makemodule.am new file mode 100644 index 0000000..9724dae --- /dev/null +++ b/tests/helpers/Makemodule.am @@ -0,0 +1,12 @@ + +check_PROGRAMS += test_byteswap +test_byteswap_SOURCES = tests/helpers/test_byteswap.c + +check_PROGRAMS += test_md5 +test_md5_SOURCES = tests/helpers/test_md5.c lib/md5.c + +check_PROGRAMS += test_pathnames +test_pathnames_SOURCES = tests/helpers/test_pathnames.c + +check_PROGRAMS += test_sysinfo +test_sysinfo_SOURCES = tests/helpers/test_sysinfo.c diff --git a/tests/helpers/test_byteswap.c b/tests/helpers/test_byteswap.c new file mode 100644 index 0000000..7467ed2 --- /dev/null +++ b/tests/helpers/test_byteswap.c @@ -0,0 +1,114 @@ +/* + * This testing program makes sure the byteswap functions work + * + * Copyright (C) 2000 by Theodore Ts'o. + * Copyright (C) 2008 Karel Zak <kzak@redhat.com> + * + * This file may be redistributed under the terms of the GNU Public + * License. + */ +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include <fcntl.h> +#include <time.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <errno.h> +#include <inttypes.h> + +#include "bitops.h" + +uint16_t ary16[] = { + 0x0001, 0x0100, + 0x1234, 0x3412, + 0xff00, 0x00ff, + 0x4000, 0x0040, + 0xfeff, 0xfffe, + 0x0000, 0x0000 + }; + +uint32_t ary32[] = { + 0x00000001, 0x01000000, + 0x80000000, 0x00000080, + 0x12345678, 0x78563412, + 0xffff0000, 0x0000ffff, + 0x00ff0000, 0x0000ff00, + 0xff000000, 0x000000ff, + 0x00000000, 0x00000000 + }; + +uint64_t ary64[] = { + 0x0000000000000001, 0x0100000000000000, + 0x8000000000000000, 0x0000000000000080, + 0x1234567812345678, 0x7856341278563412, + 0xffffffff00000000, 0x00000000ffffffff, + 0x00ff000000000000, 0x000000000000ff00, + 0xff00000000000000, 0x00000000000000ff, + 0x0000000000000000, 0x0000000000000000 + }; + +int main() +{ + int i; + int errors = 0; + + printf("Testing swab16\n"); + i=0; + do { + printf("swab16(0x%04"PRIx16") = 0x%04"PRIx16"\n", + ary16[i], swab16(ary16[i])); + if (swab16(ary16[i]) != ary16[i+1]) { + printf("Error!!! %04"PRIx16" != %04"PRIx16"\n", + swab16(ary16[i]), ary16[i+1]); + errors++; + } + if (swab16(ary16[i+1]) != ary16[i]) { + printf("Error!!! %04"PRIx16" != %04"PRIx16"\n", + swab16(ary16[i+1]), ary16[i]); + errors++; + } + i += 2; + } while (ary16[i] != 0); + + printf("Testing swab32\n"); + i = 0; + do { + printf("swab32(0x%08"PRIx32") = 0x%08"PRIx32"\n", + ary32[i], swab32(ary32[i])); + if (swab32(ary32[i]) != ary32[i+1]) { + printf("Error!!! %04"PRIx32" != %04"PRIx32"\n", + swab32(ary32[i]), ary32[i+1]); + errors++; + } + if (swab32(ary32[i+1]) != ary32[i]) { + printf("Error!!! %04"PRIx32" != %04"PRIx32"\n", + swab32(ary32[i+1]), ary32[i]); + errors++; + } + i += 2; + } while (ary32[i] != 0); + + printf("Testing swab64\n"); + i = 0; + do { + printf("swab64(0x%016"PRIx64") = 0x%016"PRIx64"\n", + ary64[i], swab64(ary64[i])); + if (swab64(ary64[i]) != ary64[i+1]) { + printf("Error!!! %016"PRIx64" != %016"PRIx64"\n", + swab64(ary64[i]), ary64[i+1]); + errors++; + } + if (swab64(ary64[i+1]) != ary64[i]) { + printf("Error!!! %016"PRIx64" != %016"PRIx64"\n", + swab64(ary64[i+1]), ary64[i]); + errors++; + } + i += 2; + } while (ary64[i] != 0); + + if (!errors) + printf("No errors found in the byteswap implementation\n"); + + return errors; +} diff --git a/tests/helpers/test_md5.c b/tests/helpers/test_md5.c new file mode 100644 index 0000000..0f37afd --- /dev/null +++ b/tests/helpers/test_md5.c @@ -0,0 +1,29 @@ + +#include <stdio.h> +#include <unistd.h> + +#include "md5.h" + +int main() +{ + int i, ret; + struct MD5Context ctx; + unsigned char digest[MD5LENGTH]; + unsigned char buf[BUFSIZ]; + + MD5Init( &ctx ); + + while(!feof(stdin) && !ferror(stdin)) { + ret = fread(buf, 1, sizeof(buf), stdin); + if (ret) + MD5Update( &ctx, buf, ret ); + } + + fclose(stdin); + MD5Final( digest, &ctx ); + + for (i = 0; i < MD5LENGTH; i++) + printf( "%02x", digest[i] ); + printf(" -\n"); + return 0; +} diff --git a/tests/helpers/test_pathnames.c b/tests/helpers/test_pathnames.c new file mode 100644 index 0000000..ebd5249 --- /dev/null +++ b/tests/helpers/test_pathnames.c @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2007 Karel Zak <kzak@redhat.com> + * + * This file is part of util-linux. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include "pathnames.h" + +struct hlpPath +{ + const char *name; + const char *path; +}; + +#define DEF_HLPPATH(_p) { #_p, _p } + +struct hlpPath paths[] = +{ + DEF_HLPPATH(_PATH_DEFPATH), + DEF_HLPPATH(_PATH_DEFPATH_ROOT), + DEF_HLPPATH(_PATH_DEV_TTY), + DEF_HLPPATH(_PATH_DEV_LOOP), + DEF_HLPPATH(_PATH_SECURETTY), + DEF_HLPPATH(_PATH_WTMPLOCK), + DEF_HLPPATH(_PATH_HUSHLOGIN), + DEF_HLPPATH(_PATH_MAILDIR), + DEF_HLPPATH(_PATH_MOTDFILE), + DEF_HLPPATH(_PATH_NOLOGIN), + DEF_HLPPATH(_PATH_LOGIN), + DEF_HLPPATH(_PATH_INITTAB), + DEF_HLPPATH(_PATH_RC), + DEF_HLPPATH(_PATH_REBOOT), + DEF_HLPPATH(_PATH_SINGLE), + DEF_HLPPATH(_PATH_SHUTDOWN_CONF), + DEF_HLPPATH(_PATH_SECURE), + DEF_HLPPATH(_PATH_USERTTY), + DEF_HLPPATH(_PATH_UMOUNT), + DEF_HLPPATH(_PATH_PASSWD), + DEF_HLPPATH(_PATH_GSHADOW), + DEF_HLPPATH(_PATH_GROUP), + DEF_HLPPATH(_PATH_SHADOW_PASSWD), + DEF_HLPPATH(_PATH_WORDS), + DEF_HLPPATH(_PATH_WORDS_ALT), + DEF_HLPPATH(_PATH_UMOUNT), + DEF_HLPPATH(_PATH_FILESYSTEMS), + DEF_HLPPATH(_PATH_PROC_SWAPS), + DEF_HLPPATH(_PATH_PROC_FILESYSTEMS), + DEF_HLPPATH(_PATH_MOUNTED), + DEF_HLPPATH(_PATH_MNTTAB), + DEF_HLPPATH(_PATH_MOUNTED_LOCK), + DEF_HLPPATH(_PATH_MOUNTED_TMP), + DEF_HLPPATH(_PATH_DEV_BYLABEL), + DEF_HLPPATH(_PATH_DEV_BYUUID), + { NULL, NULL } +}; + +int +main(int argc, char **argv) +{ + struct hlpPath *p; + + if (argc == 1) { + for (p = paths; p->name; p++) + printf("%20s %s\n", p->name, p->path); + exit(EXIT_SUCCESS); + } else { + if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0) { + printf("%s <option>\n", argv[0]); + fputs("options:\n", stdout); + for (p = paths; p->name; p++) + printf("\t%s\n", p->name); + exit(EXIT_SUCCESS); + } + + for (p = paths; p->name; p++) { + if (strcmp(p->name, argv[1]) == 0) { + printf("%s\n", p->path); + exit(EXIT_SUCCESS); + } + } + } + + exit(EXIT_FAILURE); +} + diff --git a/tests/helpers/test_sysinfo.c b/tests/helpers/test_sysinfo.c new file mode 100644 index 0000000..3983f28 --- /dev/null +++ b/tests/helpers/test_sysinfo.c @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2007 Karel Zak <kzak@redhat.com> + * + * This file is part of util-linux. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <limits.h> + +typedef struct { + const char *name; + int (*fnc)(void); +} mntHlpfnc; + +static int hlp_wordsize(void) +{ + printf("%lu\n", CHAR_BIT * sizeof(void*)); + return 0; +} + +static int hlp_endianness(void) +{ +#if !defined(WORDS_BIGENDIAN) + printf("LE\n"); +#else + printf("BE\n"); +#endif + return 0; +} + + +static int hlp_pagesize(void) +{ + printf("%d\n", getpagesize()); + return 0; +} + +static int hlp_int_max(void) +{ + printf("%d\n", INT_MAX); + return 0; +} + +static int hlp_uint_max(void) +{ + printf("%u\n", UINT_MAX); + return 0; +} + +static int hlp_long_max(void) +{ + printf("%ld\n", LONG_MAX); + return 0; +} + +static int hlp_ulong_max(void) +{ + printf("%lu\n", ULONG_MAX); + return 0; +} + +static int hlp_ulong_max32(void) +{ +#if __WORDSIZE == 64 + printf("%lu\n", ULONG_MAX >> 32); +#else + printf("%lu\n", ULONG_MAX); +#endif + return 0; +} + +static mntHlpfnc hlps[] = +{ + { "WORDSIZE", hlp_wordsize }, + { "pagesize", hlp_pagesize }, + { "INT_MAX", hlp_int_max }, + { "UINT_MAX", hlp_uint_max }, + { "LONG_MAX", hlp_long_max }, + { "ULONG_MAX", hlp_ulong_max }, + { "ULONG_MAX32",hlp_ulong_max32 }, + { "byte-order", hlp_endianness }, + { NULL, NULL } +}; + +int main(int argc, char **argv) +{ + int re = 0; + mntHlpfnc *fn; + + if (argc == 1) { + for (fn = hlps; fn->name; fn++) { + printf("%15s: ", fn->name); + re += fn->fnc(); + } + } else { + int i; + + if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0) { + printf("%s <option>\n", argv[0]); + fputs("options:\n", stdout); + for (fn = hlps; fn->name; fn++) + printf("\t%s\n", fn->name); + exit(EXIT_SUCCESS); + } + + for (i=1; i < argc; i++) { + for (fn = hlps; fn->name; fn++) { + if (strcmp(fn->name, argv[i]) == 0) + re += fn->fnc(); + } + } + } + + exit(re ? EXIT_FAILURE : EXIT_SUCCESS); +} + |