Add a test option to help finding memory leaks.
authorWerner Koch <wk@gnupg.org>
Mon, 4 Apr 2011 14:26:41 +0000 (16:26 +0200)
committerWerner Koch <wk@gnupg.org>
Mon, 4 Apr 2011 14:26:41 +0000 (16:26 +0200)
tests/ChangeLog
tests/keygrip.c

index e25f134..0f5918a 100644 (file)
@@ -1,3 +1,8 @@
+2011-04-04  Werner Koch  <wk@g10code.com>
+
+       * keygrip.c (main): Add option --repetitions.
+       (check): Make use of it.
+
 2011-03-28  Werner Koch  <wk@g10code.com>
 
        * random.c (readn): Remove used var P.
index a33053f..adc72e7 100644 (file)
@@ -31,6 +31,7 @@
 #include "../src/gcrypt.h"
 
 static int verbose;
+static int repetitions;
 
 \f
 
@@ -143,6 +144,7 @@ check (void)
   gcry_error_t err;
   gcry_sexp_t sexp;
   unsigned int i;
+  int repn;
 
   for (i = 0; i < (sizeof (key_grips) / sizeof (*key_grips)); i++)
     {
@@ -157,14 +159,18 @@ check (void)
                             strlen (key_grips[i].key));
       if (err)
         die ("scanning data %d failed: %s\n", i, gpg_strerror (err));
-      ret = gcry_pk_get_keygrip (sexp, buf);
-      if (!ret)
-        die ("gcry_pk_get_keygrip failed for %d\n", i);
 
-      if ( memcmp (key_grips[i].grip, buf, sizeof (buf)) )
+      for (repn=0; repn < repetitions; repn++)
         {
-          print_hex ("keygrip: ", buf, sizeof buf);
-          die ("keygrip for %d does not match\n", i);
+          ret = gcry_pk_get_keygrip (sexp, buf);
+          if (!ret)
+            die ("gcry_pk_get_keygrip failed for %d\n", i);
+
+          if ( memcmp (key_grips[i].grip, buf, sizeof (buf)) )
+            {
+              print_hex ("keygrip: ", buf, sizeof buf);
+              die ("keygrip for %d does not match\n", i);
+            }
         }
 
       gcry_sexp_release (sexp);
@@ -188,12 +194,44 @@ progress_handler (void *cb_data, const char *what, int printchar,
 int
 main (int argc, char **argv)
 {
+  int last_argc = -1;
   int debug = 0;
 
-  if (argc > 1 && !strcmp (argv[1], "--verbose"))
-    verbose = 1;
-  else if (argc > 1 && !strcmp (argv[1], "--debug"))
-    verbose = debug = 1;
+  if (argc)
+    { argc--; argv++; }
+
+  while (argc && last_argc != argc )
+    {
+      last_argc = argc;
+      if (!strcmp (*argv, "--"))
+        {
+          argc--; argv++;
+          break;
+        }
+      else if (!strcmp (*argv, "--verbose"))
+        {
+          verbose = 1;
+          argc--; argv++;
+        }
+      else if (!strcmp (*argv, "--debug"))
+        {
+          verbose = 1;
+          debug = 1;
+          argc--; argv++;
+        }
+      else if (!strcmp (*argv, "--repetitions"))
+        {
+          argc--; argv++;
+          if (argc)
+            {
+              repetitions = atoi(*argv);
+              argc--; argv++;
+            }
+        }
+    }
+
+  if (repetitions < 1)
+    repetitions = 1;
 
   if (!gcry_check_version (GCRYPT_VERSION))
     die ("version mismatch\n");