diff options
Diffstat (limited to 'tests/util')
| -rw-r--r-- | tests/util/messages-krb5-t.c | 26 | ||||
| -rw-r--r-- | tests/util/messages-t.c | 4 | ||||
| -rwxr-xr-x | tests/util/xmalloc-t | 123 | ||||
| -rw-r--r-- | tests/util/xmalloc.c | 45 | 
4 files changed, 130 insertions, 68 deletions
| diff --git a/tests/util/messages-krb5-t.c b/tests/util/messages-krb5-t.c index e3ffe75..c6de5a5 100644 --- a/tests/util/messages-krb5-t.c +++ b/tests/util/messages-krb5-t.c @@ -4,8 +4,8 @@   * The canonical version of this file is maintained in the rra-c-util package,   * which can be found at <http://www.eyrie.org/~eagle/software/rra-c-util/>.   * - * Written by Russ Allbery <rra@stanford.edu> - * Copyright 2010, 2011 + * Written by Russ Allbery <eagle@eyrie.org> + * Copyright 2010, 2011, 2013, 2014   *     The Board of Trustees of the Leland Stanford Junior University   *   * Permission is hereby granted, free of charge, to any person obtaining a @@ -28,17 +28,31 @@   */  #include <config.h> -#include <portable/krb5.h> +#ifdef HAVE_KRB5 +# include <portable/krb5.h> +#endif  #include <portable/system.h>  #include <tests/tap/basic.h>  #include <tests/tap/process.h>  #include <util/macros.h> -#include <util/messages-krb5.h> +#ifdef HAVE_KRB5 +# include <util/messages-krb5.h> +#endif  #include <util/messages.h>  #include <util/xmalloc.h> +/* Skip the whole test if not built with Kerberos support. */ +#ifndef HAVE_KRB5 +int +main(void) +{ +    skip_all("not built with Kerberos support"); +    return 0; +} +#else +  /*   * Test functions.   */ @@ -116,5 +130,9 @@ main(void)      message_handlers_die(0);      is_function_output(test_die, NULL, 1, "", "warn_krb5 with no handlers"); +    krb5_free_error_message(ctx, message); +    krb5_free_context(ctx);      return 0;  } + +#endif /* HAVE_KRB5 */ diff --git a/tests/util/messages-t.c b/tests/util/messages-t.c index 54f1cf1..f60fa6a 100644 --- a/tests/util/messages-t.c +++ b/tests/util/messages-t.c @@ -4,8 +4,8 @@   * The canonical version of this file is maintained in the rra-c-util package,   * which can be found at <http://www.eyrie.org/~eagle/software/rra-c-util/>.   * - * Written by Russ Allbery <rra@stanford.edu> - * Copyright 2002, 2004, 2005 Russ Allbery <rra@stanford.edu> + * Written by Russ Allbery <eagle@eyrie.org> + * Copyright 2002, 2004, 2005 Russ Allbery <eagle@eyrie.org>   * Copyright 2009, 2010, 2011, 2012   *     The Board of Trustees of the Leland Stanford Junior University   * diff --git a/tests/util/xmalloc-t b/tests/util/xmalloc-t index b6c6dfd..d52c448 100755 --- a/tests/util/xmalloc-t +++ b/tests/util/xmalloc-t @@ -5,8 +5,8 @@  # The canonical version of this file is maintained in the rra-c-util package,  # which can be found at <http://www.eyrie.org/~eagle/software/rra-c-util/>.  # -# Written by Russ Allbery <rra@stanford.edu> -# Copyright 2000, 2001, 2006 Russ Allbery <rra@stanford.edu> +# Written by Russ Allbery <eagle@eyrie.org> +# Copyright 2000, 2001, 2006, 2014 Russ Allbery <eagle@eyrie.org>  # Copyright 2008, 2009, 2010, 2012  #     The Board of Trustees of the Leland Stanford Junior University  # @@ -59,31 +59,33 @@ ok_xmalloc () {  # failures in automated testing have been problems with the assumptions around  # memory allocation or problems with the test suite, not problems with the  # underlying xmalloc code. -if [ -z "$RRA_MAINTAINER_TESTS" ] ; then -    skip_all 'xmalloc tests only run for maintainer' +if [ -z "$AUTHOR_TESTING" ] ; then +    skip_all 'xmalloc tests only run for author'  fi  # Total tests. -plan 36 +plan 41  # First run the tests expected to succeed. -ok_xmalloc "malloc small"    0 "" "m" "21"      "0" -ok_xmalloc "malloc large"    0 "" "m" "5500000" "0" -ok_xmalloc "malloc zero"     0 "" "m" "0"       "0" -ok_xmalloc "realloc small"   0 "" "r" "21"      "0" -ok_xmalloc "realloc large"   0 "" "r" "5500000" "0" -ok_xmalloc "strdup small"    0 "" "s" "21"      "0" -ok_xmalloc "strdup large"    0 "" "s" "5500000" "0" -ok_xmalloc "strndup small"   0 "" "n" "21"      "0" -ok_xmalloc "strndup large"   0 "" "n" "5500000" "0" -ok_xmalloc "calloc small"    0 "" "c" "24"      "0" -ok_xmalloc "calloc large"    0 "" "c" "5500000" "0" -ok_xmalloc "asprintf small"  0 "" "a" "24"      "0" -ok_xmalloc "asprintf large"  0 "" "a" "5500000" "0" -ok_xmalloc "vasprintf small" 0 "" "v" "24"      "0" -ok_xmalloc "vasprintf large" 0 "" "v" "5500000" "0" +ok_xmalloc "malloc small"       0 "" "m" "21"       "0" +ok_xmalloc "malloc large"       0 "" "m" "30000000" "0" +ok_xmalloc "malloc zero"        0 "" "m" "0"        "0" +ok_xmalloc "realloc small"      0 "" "r" "21"       "0" +ok_xmalloc "realloc large"      0 "" "r" "30000000" "0" +ok_xmalloc "reallocarray small" 0 "" "y" "20"       "0" +ok_xmalloc "reallocarray large" 0 "" "y" "30000000" "0" +ok_xmalloc "strdup small"       0 "" "s" "21"       "0" +ok_xmalloc "strdup large"       0 "" "s" "30000000" "0" +ok_xmalloc "strndup small"      0 "" "n" "21"       "0" +ok_xmalloc "strndup large"      0 "" "n" "30000000" "0" +ok_xmalloc "calloc small"       0 "" "c" "24"       "0" +ok_xmalloc "calloc large"       0 "" "c" "30000000" "0" +ok_xmalloc "asprintf small"     0 "" "a" "24"       "0" +ok_xmalloc "asprintf large"     0 "" "a" "30000000" "0" +ok_xmalloc "vasprintf small"    0 "" "v" "24"       "0" +ok_xmalloc "vasprintf large"    0 "" "v" "30000000" "0" -# Now limit our memory to 5.5MB and then try the large ones again, all of +# Now limit our memory to 30MB and then try the large ones again, all of  # which should fail.  #  # The exact memory limits used here are essentially black magic.  They need to @@ -91,53 +93,60 @@ ok_xmalloc "vasprintf large" 0 "" "v" "5500000" "0"  # but not so large that we can't reasonably expect to allocate that much  # memory normally.  The amount of memory required varies a lot based on what  # shared libraries are loaded, and if it's too small, all memory allocations -# fail.  5.5MB seems to work reasonably well on both Solaris and Linux. +# fail.  30MB seems to work reasonably well on both Solaris and Linux, even +# when the program is linked with additional libraries.  #  # We assume that there are enough miscellaneous allocations that an allocation  # exactly as large as the limit will always fail.  ok_xmalloc "malloc fail" 1 \ -    "failed to malloc 5500000 bytes at xmalloc.c line 38" \ -    "m" "5500000" "5500000" +    "failed to malloc 30000000 bytes at xmalloc.c line 38" \ +    "m" "30000000" "30000000"  ok_xmalloc "realloc fail" 1 \ -    "failed to realloc 5500000 bytes at xmalloc.c line 66" \ -    "r" "5500000" "5500000" +    "failed to realloc 30000000 bytes at xmalloc.c line 66" \ +    "r" "30000000" "30000000" +ok_xmalloc "reallocarray fail" 1 \ +    "failed to reallocarray 30000000 bytes at xmalloc.c line 96" \ +    "y" "30000000" "30000000"  ok_xmalloc "strdup fail" 1 \ -    "failed to strdup 5500000 bytes at xmalloc.c line 97" \ -    "s" "5500000" "5500000" +    "failed to strdup 30000000 bytes at xmalloc.c line 127" \ +    "s" "30000000" "30000000"  ok_xmalloc "strndup fail" 1 \ -    "failed to strndup 5500000 bytes at xmalloc.c line 143" \ -    "n" "5500000" "5500000" +    "failed to strndup 30000000 bytes at xmalloc.c line 173" \ +    "n" "30000000" "30000000"  ok_xmalloc "calloc fail" 1 \ -    "failed to calloc 5500000 bytes at xmalloc.c line 167" \ -    "c" "5500000" "5500000" +    "failed to calloc 30000000 bytes at xmalloc.c line 197" \ +    "c" "30000000" "30000000"  ok_xmalloc "asprintf fail" 1 \ -    "failed to asprintf 5500000 bytes at xmalloc.c line 191" \ -    "a" "5500000" "5500000" +    "failed to asprintf 30000000 bytes at xmalloc.c line 221" \ +    "a" "30000000" "30000000"  ok_xmalloc "vasprintf fail" 1 \ -    "failed to vasprintf 5500000 bytes at xmalloc.c line 210" \ -    "v" "5500000" "5500000" +    "failed to vasprintf 30000000 bytes at xmalloc.c line 240" \ +    "v" "30000000" "30000000"  # Check our custom error handler. -ok_xmalloc "malloc custom"    1 "malloc 5500000 xmalloc.c 38" \ -    "M" "5500000" "5500000" -ok_xmalloc "realloc custom"   1 "realloc 5500000 xmalloc.c 66" \ -    "R" "5500000" "5500000" -ok_xmalloc "strdup custom"    1 "strdup 5500000 xmalloc.c 97" \ -    "S" "5500000" "5500000" -ok_xmalloc "strndup custom"   1 "strndup 5500000 xmalloc.c 143" \ -    "N" "5500000" "5500000" -ok_xmalloc "calloc custom"    1 "calloc 5500000 xmalloc.c 167" \ -    "C" "5500000" "5500000" -ok_xmalloc "asprintf custom"  1 "asprintf 5500000 xmalloc.c 191" \ -    "A" "5500000" "5500000" -ok_xmalloc "vasprintf custom" 1 "vasprintf 5500000 xmalloc.c 210" \ -    "V" "5500000" "5500000" +ok_xmalloc "malloc custom"       1 "malloc 30000000 xmalloc.c 38" \ +    "M" "30000000" "30000000" +ok_xmalloc "realloc custom"      1 "realloc 30000000 xmalloc.c 66" \ +    "R" "30000000" "30000000" +ok_xmalloc "reallocarray custom" 1 "reallocarray 30000000 xmalloc.c 96" \ +    "Y" "30000000" "30000000" +ok_xmalloc "strdup custom"       1 "strdup 30000000 xmalloc.c 127" \ +    "S" "30000000" "30000000" +ok_xmalloc "strndup custom"      1 "strndup 30000000 xmalloc.c 173" \ +    "N" "30000000" "30000000" +ok_xmalloc "calloc custom"       1 "calloc 30000000 xmalloc.c 197" \ +    "C" "30000000" "30000000" +ok_xmalloc "asprintf custom"     1 "asprintf 30000000 xmalloc.c 221" \ +    "A" "30000000" "30000000" +ok_xmalloc "vasprintf custom"    1 "vasprintf 30000000 xmalloc.c 240" \ +    "V" "30000000" "30000000"  # Check the smaller ones again just for grins. -ok_xmalloc "malloc retry"    0 "" "m" "21" "5500000" -ok_xmalloc "realloc retry"   0 "" "r" "32" "5500000" -ok_xmalloc "strdup retry"    0 "" "s" "64" "5500000" -ok_xmalloc "strndup retry"   0 "" "n" "20" "5500000" -ok_xmalloc "calloc retry"    0 "" "c" "24" "5500000" -ok_xmalloc "asprintf retry"  0 "" "a" "30" "5500000" -ok_xmalloc "vasprintf retry" 0 "" "v" "35" "5500000" +ok_xmalloc "malloc retry"       0 "" "m" "21" "30000000" +ok_xmalloc "realloc retry"      0 "" "r" "32" "30000000" +ok_xmalloc "reallocarray retry" 0 "" "y" "32" "30000000" +ok_xmalloc "strdup retry"       0 "" "s" "64" "30000000" +ok_xmalloc "strndup retry"      0 "" "n" "20" "30000000" +ok_xmalloc "calloc retry"       0 "" "c" "24" "30000000" +ok_xmalloc "asprintf retry"     0 "" "a" "30" "30000000" +ok_xmalloc "vasprintf retry"    0 "" "v" "35" "30000000" diff --git a/tests/util/xmalloc.c b/tests/util/xmalloc.c index 394cab5..e222612 100644 --- a/tests/util/xmalloc.c +++ b/tests/util/xmalloc.c @@ -4,8 +4,8 @@   * The canonical version of this file is maintained in the rra-c-util package,   * which can be found at <http://www.eyrie.org/~eagle/software/rra-c-util/>.   * - * Copyright 2000, 2001, 2006 Russ Allbery <rra@stanford.edu> - * Copyright 2008, 2012 + * Copyright 2000, 2001, 2006 Russ Allbery <eagle@eyrie.org> + * Copyright 2008, 2012, 2013, 2014   *     The Board of Trustees of the Leland Stanford Junior University   *   * Permission is hereby granted, free of charge, to any person obtaining a @@ -110,6 +110,36 @@ test_realloc(size_t size)  /* + * Like test_realloc, but test allocating an array instead.  Returns true on + * success, false on any failure. + */ +static int +test_reallocarray(size_t n, size_t size) +{ +    char *buffer; +    size_t i; + +    buffer = xmalloc(10); +    if (buffer == NULL) +        return 0; +    memset(buffer, 1, 10); +    buffer = xreallocarray(buffer, n, size); +    if (buffer == NULL) +        return 0; +    if (n > 0 && size > 0) +        memset(buffer + 10, 2, (n * size) - 10); +    for (i = 0; i < 10; i++) +        if (buffer[i] != 1) +            return 0; +    for (i = 10; i < n * size; i++) +        if (buffer[i] != 2) +            return 0; +    free(buffer); +    return 1; +} + + +/*   * Generate a string of the size indicated, call xstrdup on it, and then   * ensure the result matches.  Returns true on success, false on any failure.   */ @@ -322,6 +352,7 @@ main(int argc, char *argv[])  #if HAVE_SETRLIMIT && defined(RLIMIT_AS)          struct rlimit rl;          void *tmp; +        size_t test_size;          rl.rlim_cur = limit;          rl.rlim_max = limit; @@ -329,11 +360,14 @@ main(int argc, char *argv[])              syswarn("Can't set data limit to %lu", (unsigned long) limit);              exit(2);          } -        if (size < limit || code == 'r') { -            tmp = malloc(code == 'r' ? 10 : size); +        if (size < limit || code == 'r' || code == 'y') { +            test_size = (code == 'r' || code == 'y') ? 10 : size; +            if (test_size == 0) +                test_size = 1; +            tmp = malloc(test_size);              if (tmp == NULL) {                  syswarn("Can't allocate initial memory of %lu (limit %lu)", -                        (unsigned long) size, (unsigned long) limit); +                        (unsigned long) test_size, (unsigned long) limit);                  exit(2);              }              free(tmp); @@ -348,6 +382,7 @@ main(int argc, char *argv[])      case 'c': exit(test_calloc(size) ? willfail : 1);      case 'm': exit(test_malloc(size) ? willfail : 1);      case 'r': exit(test_realloc(size) ? willfail : 1); +    case 'y': exit(test_reallocarray(4, size / 4) ? willfail : 1);      case 's': exit(test_strdup(size) ? willfail : 1);      case 'n': exit(test_strndup(size) ? willfail : 1);      case 'a': exit(test_asprintf(size) ? willfail : 1); | 
