tests: Allow use of random.c under Windows.
authorWerner Koch <wk@gnupg.org>
Mon, 3 Dec 2012 15:18:56 +0000 (16:18 +0100)
committerWerner Koch <wk@gnupg.org>
Mon, 3 Dec 2012 19:47:38 +0000 (20:47 +0100)
* tests/Makefile.am (TESTS): Always include random.c
* tests/random.c [!W32]: Include sys/wait.h.
(inf): New.
(check_forking, check_nonce_forking): Print a notice what will be done.
(main) [W32]: Do not call signal.
--

This change help to run future tests under Windows.  The current two
tests are not applicable to Windows.

tests/Makefile.am
tests/random.c

index f1f9e6f..d337840 100644 (file)
 
 TESTS = version t-mpi-bit prime basic \
         mpitests tsexp keygen pubkey hmac keygrip fips186-dsa aeswrap \
-       curves t-kdf pkcs1v2
+       curves t-kdf pkcs1v2 random
 
 
-# random.c uses fork() thus a test for W32 does not make any sense.
-if !HAVE_W32_SYSTEM
-TESTS += random
-endif
-
 # The last test to run.
 TESTS += benchmark
 
index a243529..3e25363 100644 (file)
 #include <string.h>
 #include <stdlib.h>
 #include <errno.h>
-#include <signal.h>
-#include <unistd.h>
-#include <sys/wait.h>
+#ifndef HAVE_W32_SYSTEM
+# include <signal.h>
+# include <unistd.h>
+# include <sys/wait.h>
+#endif
 
 #include "../src/gcrypt.h"
 
@@ -45,6 +47,17 @@ die (const char *format, ...)
 
 
 static void
+inf (const char *format, ...)
+{
+  va_list arg_ptr;
+
+  va_start (arg_ptr, format);
+  vfprintf (stderr, format, arg_ptr);
+  va_end (arg_ptr);
+}
+
+
+static void
 print_hex (const char *text, const void *buf, size_t n)
 {
   const unsigned char *p = buf;
@@ -111,12 +124,19 @@ readn (int fd, void *buf, size_t buflen, size_t *ret_nread)
 static void
 check_forking (void)
 {
+#ifdef HAVE_W32_SYSTEM
+  if (verbose)
+    inf ("check_forking skipped: not applicable on Windows\n");
+#else /*!HAVE_W32_SYSTEM*/
   pid_t pid;
   int rp[2];
   int i, status;
   size_t nread;
   char tmp1[16], tmp1c[16], tmp1p[16];
 
+  if (verbose)
+    inf ("checking that a fork won't cause the same random output\n");
+
   /* We better make sure that the RNG has been initialzied. */
   gcry_randomize (tmp1, sizeof tmp1, GCRY_STRONG_RANDOM);
   if (verbose)
@@ -160,6 +180,7 @@ check_forking (void)
 
   if (!memcmp (tmp1p, tmp1c, sizeof tmp1c))
     die ("parent and child got the same random number\n");
+#endif  /*!HAVE_W32_SYSTEM*/
 }
 
 
@@ -168,12 +189,19 @@ check_forking (void)
 static void
 check_nonce_forking (void)
 {
+#ifdef HAVE_W32_SYSTEM
+  if (verbose)
+    inf ("check_nonce_forking skipped: not applicable on Windows\n");
+#else /*!HAVE_W32_SYSTEM*/
   pid_t pid;
   int rp[2];
   int i, status;
   size_t nread;
   char nonce1[10], nonce1c[10], nonce1p[10];
 
+  if (verbose)
+    inf ("checking that a fork won't cause the same nonce output\n");
+
   /* We won't get the same nonce back if we never initialized the
      nonce subsystem, thus we get one nonce here and forget about
      it. */
@@ -219,6 +247,7 @@ check_nonce_forking (void)
 
   if (!memcmp (nonce1p, nonce1c, sizeof nonce1c))
     die ("parent and child got the same nonce\n");
+#endif  /*!HAVE_W32_SYSTEM*/
 }
 
 
@@ -236,7 +265,9 @@ main (int argc, char **argv)
   else if ((argc > 1) && (! strcmp (argv[1], "--debug")))
     verbose = debug = 1;
 
+#ifndef HAVE_W32_SYSTEM
   signal (SIGPIPE, SIG_IGN);
+#endif
 
   gcry_control (GCRYCTL_DISABLE_SECMEM, 0);
   if (!gcry_check_version (GCRYPT_VERSION))