Another bunch of tests refactored

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
diff --git a/tests/inproc_shutdown.c b/tests/inproc_shutdown.c
index 0f426d1..f35429c 100644
--- a/tests/inproc_shutdown.c
+++ b/tests/inproc_shutdown.c
@@ -25,7 +25,7 @@
 #include "../src/pubsub.h"
 #include "../src/inproc.h"
 
-#include "../src/utils/err.c"
+#include "testutil.h"
 #include "../src/utils/thread.c"
 
 /*  Stress test the inproc transport. */
@@ -38,14 +38,12 @@
     int rc;
     int s;
 
-    s = nn_socket (AF_SP, NN_SUB);
+    s = test_socket (AF_SP, NN_SUB);
     if (s < 0 && nn_errno () == EMFILE)
         return;
     errno_assert (s >= 0);
-    rc = nn_connect (s, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    rc = nn_close (s);
-    errno_assert (rc == 0);
+    test_connect (s, SOCKET_ADDRESS);
+    test_close (s);
 }
 
 int main ()
@@ -58,10 +56,8 @@
 
     /*  Stress the shutdown algorithm. */
 
-    sb = nn_socket (AF_SP, NN_PUB);
-    errno_assert (sb >= 0);
-    rc = nn_bind (sb, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
+    sb = test_socket (AF_SP, NN_PUB);
+    test_bind (sb, SOCKET_ADDRESS);
 
     for (j = 0; j != 10; ++j) {
         for (i = 0; i != THREAD_COUNT; ++i)
@@ -70,8 +66,7 @@
             nn_thread_term (&threads [i]);
     }
 
-    rc = nn_close (sb);
-    errno_assert (rc == 0);
+    test_close (sb);
 
     return 0;
 }
diff --git a/tests/iovec.c b/tests/iovec.c
index 5298d3f..31eeef1 100644
--- a/tests/iovec.c
+++ b/tests/iovec.c
@@ -23,7 +23,7 @@
 #include "../src/nn.h"
 #include "../src/pair.h"
 
-#include "../src/utils/err.c"
+#include "testutil.h"
 
 #include <string.h>
 
@@ -38,14 +38,10 @@
     struct nn_msghdr hdr;
     char buf [6];
 
-    sb = nn_socket (AF_SP, NN_PAIR);
-    errno_assert (sb != -1);
-    rc = nn_bind (sb, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    sc = nn_socket (AF_SP, NN_PAIR);
-    errno_assert (sc != -1);
-    rc = nn_connect (sc, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
+    sb = test_socket (AF_SP, NN_PAIR);
+    test_bind (sb, SOCKET_ADDRESS);
+    sc = test_socket (AF_SP, NN_PAIR);
+    test_connect (sc, SOCKET_ADDRESS);
 
     iov [0].iov_base = "AB";
     iov [0].iov_len = 2;
@@ -70,10 +66,8 @@
     nn_assert (rc == 6);
     nn_assert (memcmp (buf, "ABCDEF", 6) == 0);
 
-    rc = nn_close (sc);
-    errno_assert (rc == 0);
-    rc = nn_close (sb);
-    errno_assert (rc == 0);
+    test_close (sc);
+    test_close (sb);
 
     return 0;
 }
diff --git a/tests/ipc_shutdown.c b/tests/ipc_shutdown.c
index 1ffff43..1d05bec 100644
--- a/tests/ipc_shutdown.c
+++ b/tests/ipc_shutdown.c
@@ -25,8 +25,7 @@
 #include "../src/pubsub.h"
 #include "../src/ipc.h"
 
-#include "../src/utils/err.c"
-#include "../src/utils/sleep.c"
+#include "testutil.h"
 #include "../src/utils/thread.c"
 
 /*  Stress test the IPC transport. */
@@ -43,10 +42,8 @@
     if (s < 0 && nn_errno () == EMFILE)
         return;
     errno_assert (s >= 0);
-    rc = nn_connect (s, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    rc = nn_close (s);
-    errno_assert (rc == 0);
+    test_connect (s, SOCKET_ADDRESS);
+    test_close (s);
 }
 
 int main ()
@@ -60,10 +57,8 @@
 
     /*  Stress the shutdown algorithm. */
 
-    sb = nn_socket (AF_SP, NN_PUB);
-    errno_assert (sb >= 0);
-    rc = nn_bind (sb, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
+    sb = test_socket (AF_SP, NN_PUB);
+    test_bind (sb, SOCKET_ADDRESS);
 
     for (j = 0; j != 10; ++j) {
         for (i = 0; i != THREAD_COUNT; ++i)
@@ -72,8 +67,7 @@
             nn_thread_term (&threads [i]);
     }
 
-    rc = nn_close (sb);
-    errno_assert (rc == 0);
+    test_close (sb);
 
 #endif
 
diff --git a/tests/msg.c b/tests/msg.c
index 1ac2244..5b7fb15 100644
--- a/tests/msg.c
+++ b/tests/msg.c
@@ -23,7 +23,7 @@
 #include "../src/nn.h"
 #include "../src/pair.h"
 
-#include "../src/utils/err.c"
+#include "testutil.h"
 
 #include <string.h>
 
@@ -39,14 +39,10 @@
     struct nn_iovec iov;
     struct nn_msghdr hdr;
 
-    sb = nn_socket (AF_SP, NN_PAIR);
-    errno_assert (sb != -1);
-    rc = nn_bind (sb, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    sc = nn_socket (AF_SP, NN_PAIR);
-    errno_assert (sc != -1);
-    rc = nn_connect (sc, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
+    sb = test_socket (AF_SP, NN_PAIR);
+    test_bind (sb, SOCKET_ADDRESS);
+    sc = test_socket (AF_SP, NN_PAIR);
+    test_connect (sc, SOCKET_ADDRESS);
 
     buf1 = nn_allocmsg (256, 0);
     alloc_assert (buf1);
@@ -94,10 +90,8 @@
     rc = nn_freemsg (buf2);
     errno_assert (rc == 0);
 
-    rc = nn_close (sc);
-    errno_assert (rc == 0);
-    rc = nn_close (sb);
-    errno_assert (rc == 0);
+    test_close (sc);
+    test_close (sb);
 
     return 0;
 }
diff --git a/tests/pair.c b/tests/pair.c
index 550ce69..387ea7e 100644
--- a/tests/pair.c
+++ b/tests/pair.c
@@ -23,7 +23,7 @@
 #include "../src/nn.h"
 #include "../src/pair.h"
 
-#include "../src/utils/err.c"
+#include "testutil.h"
 
 #define SOCKET_ADDRESS "inproc://a"
 
@@ -34,35 +34,18 @@
     int sc;
     char buf [3];
 
-    sb = nn_socket (AF_SP, NN_PAIR);
-    errno_assert (sb != -1);
-    rc = nn_bind (sb, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    sc = nn_socket (AF_SP, NN_PAIR);
-    errno_assert (sc != -1);
-    rc = nn_connect (sc, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
+    sb = test_socket (AF_SP, NN_PAIR);
+    test_bind (sb, SOCKET_ADDRESS);
+    sc = test_socket (AF_SP, NN_PAIR);
+    test_connect (sc, SOCKET_ADDRESS);
 
-    rc = nn_send (sc, "ABC", 3, 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
+    test_send (sc, "ABC");
+    test_recv (sb, "ABC");
+    test_send (sb, "DEF");
+    test_recv (sc, "DEF");
 
-    rc = nn_recv (sb, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-
-    rc = nn_send (sb, "DEF", 3, 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-
-    rc = nn_recv (sc, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-
-    rc = nn_close (sc);
-    errno_assert (rc == 0);
-    rc = nn_close (sb);
-    errno_assert (rc == 0);
+    test_close (sc);
+    test_close (sb);
 
     return 0;
 }
diff --git a/tests/pipeline.c b/tests/pipeline.c
index a5ad49e..61f1a4a 100644
--- a/tests/pipeline.c
+++ b/tests/pipeline.c
@@ -23,8 +23,7 @@
 
 #include "../src/nn.h"
 #include "../src/pipeline.h"
-#include "../src/utils/err.c"
-#include "../src/utils/sleep.c"
+#include "testutil.h"
 
 #define SOCKET_ADDRESS "inproc://a"
 
@@ -39,80 +38,45 @@
 
     /*  Test fan-out. */
 
-    push1 = nn_socket (AF_SP, NN_PUSH);
-    errno_assert (push1 != -1);
-    rc = nn_bind (push1, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    pull1 = nn_socket (AF_SP, NN_PULL);
-    errno_assert (pull1 != -1);
-    rc = nn_connect (pull1, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    pull2 = nn_socket (AF_SP, NN_PULL);
-    errno_assert (pull2 != -1);
-    rc = nn_connect (pull2, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
+    push1 = test_socket (AF_SP, NN_PUSH);
+    test_bind (push1, SOCKET_ADDRESS);
+    pull1 = test_socket (AF_SP, NN_PULL);
+    test_connect (pull1, SOCKET_ADDRESS);
+    pull2 = test_socket (AF_SP, NN_PULL);
+    test_connect (pull2, SOCKET_ADDRESS);
 
     /*  Wait till both connections are established to get messages spread
         evenly between the two pull sockets. */
     nn_sleep (10);
 
-    rc = nn_send (push1, "ABC", 3, 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-    rc = nn_send (push1, "DEF", 3, 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
+    test_send (push1, "ABC");
+    test_send (push1, "DEF");
 
-    rc = nn_recv (pull1, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-    rc = nn_recv (pull2, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
+    test_recv (pull1, "ABC");
+    test_recv (pull2, "DEF");
 
-    rc = nn_close (push1);
-    errno_assert (rc == 0);
-    rc = nn_close (pull1);
-    errno_assert (rc == 0);    
-    rc = nn_close (pull2);
-    errno_assert (rc == 0);
+    test_close (push1);
+    test_close (pull1);
+    test_close (pull2);
 
     /*  Test fan-in. */
 
-    pull1 = nn_socket (AF_SP, NN_PULL);
-    errno_assert (pull1 != -1);
-    rc = nn_bind (pull1, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    push1 = nn_socket (AF_SP, NN_PUSH);
-    errno_assert (push1 != -1);
-    rc = nn_connect (push1, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    push2 = nn_socket (AF_SP, NN_PUSH);
-    errno_assert (push2 != -1);
-    rc = nn_connect (push2, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
+    pull1 = test_socket (AF_SP, NN_PULL);
+    test_bind (pull1, SOCKET_ADDRESS);
+    push1 = test_socket (AF_SP, NN_PUSH);
+    test_connect (push1, SOCKET_ADDRESS);
+    push2 = test_socket (AF_SP, NN_PUSH);
+    test_connect (push2, SOCKET_ADDRESS);
 
-    rc = nn_send (push1, "ABC", 3, 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-    rc = nn_send (push2, "DEF", 3, 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
+    test_send (push1, "ABC");
+    test_send (push2, "DEF");
 
-    rc = nn_recv (pull1, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-    rc = nn_recv (pull1, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
+    test_recv (pull1, "ABC");
+    test_recv (pull1, "DEF");
 
-    rc = nn_close (pull1);
-    errno_assert (rc == 0);
-    rc = nn_close (push1);
-    errno_assert (rc == 0);    
-    rc = nn_close (push2);
-    errno_assert (rc == 0);
-
+    test_close (pull1);
+    test_close (push1);
+    test_close (push2);
 
     return 0;
 }
diff --git a/tests/poll.c b/tests/poll.c
index 6f02786..0a75cdb 100644
--- a/tests/poll.c
+++ b/tests/poll.c
@@ -24,9 +24,8 @@
 #include "../src/pair.h"
 #include "../src/inproc.h"
 
-#include "../src/utils/err.c"
+#include "testutil.h"
 #include "../src/utils/thread.c"
-#include "../src/utils/sleep.c"
 
 #if defined NN_HAVE_WINDOWS
 #include "../src/utils/win.h"
@@ -45,9 +44,7 @@
    int rc;
 
    nn_sleep (10);
-   rc = nn_send (sc, "ABC", 3, 0);
-   errno_assert (rc >= 0);
-   nn_assert (rc == 3);
+   test_send (sc, "ABC");
 }
 
 void routine2 (void *arg)
@@ -131,14 +128,10 @@
     struct nn_thread thread;
 
     /*  Create a simple topology. */
-    sb = nn_socket (AF_SP, NN_PAIR);
-    errno_assert (sb != -1);
-    rc = nn_bind (sb, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    sc = nn_socket (AF_SP, NN_PAIR);
-    errno_assert (sc != -1);
-    rc = nn_connect (sc, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
+    sb = test_socket (AF_SP, NN_PAIR);
+    test_bind (sb, SOCKET_ADDRESS);
+    sc = test_socket (AF_SP, NN_PAIR);
+    test_connect (sc, SOCKET_ADDRESS);
 
     /*  Check the initial state of the socket. */
     rc = getevents (sb, NN_IN | NN_OUT, 1000);
@@ -151,16 +144,12 @@
 
     /*  Send a message and start polling. This time IN event should be
         signaled. */
-    rc = nn_send (sc, "ABC", 3, 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
+    test_send (sc, "ABC");
     rc = getevents (sb, NN_IN, 1000);
     nn_assert (rc == NN_IN);
 
     /*  Receive the message and make sure that IN is no longer signaled. */
-    rc = nn_recv (sb, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
+    test_recv (sb, "ABC");
     rc = getevents (sb, NN_IN, 10);
     nn_assert (rc == 0);
 
@@ -168,9 +157,7 @@
     nn_thread_init (&thread, routine1, NULL);
     rc = getevents (sb, NN_IN, 1000);
     nn_assert (rc == NN_IN);
-    rc = nn_recv (sb, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
+    test_recv (sb, "ABC");
     nn_thread_term (&thread);
 
     /*  Check terminating the library from a different thread. */
@@ -182,10 +169,8 @@
     nn_thread_term (&thread);
 
     /*  Clean up. */
-    rc = nn_close (sc);
-    errno_assert (rc == 0);
-    rc = nn_close (sb);
-    errno_assert (rc == 0);
+    test_close (sc);
+    test_close (sb);
 
     return 0;
 }
diff --git a/tests/prio.c b/tests/prio.c
index 4d59359..1b258ec 100644
--- a/tests/prio.c
+++ b/tests/prio.c
@@ -24,7 +24,7 @@
 #include "../src/nn.h"
 #include "../src/pipeline.h"
 
-#include "../src/utils/err.c"
+#include "testutil.h"
 
 #define SOCKET_ADDRESS_A "inproc://a"
 #define SOCKET_ADDRESS_B "inproc://b"
@@ -38,44 +38,30 @@
     int sndprio;
     char buf [3];
 
-    pull1 = nn_socket (AF_SP, NN_PULL);
-    errno_assert (pull1 != -1);
-    rc = nn_bind (pull1, SOCKET_ADDRESS_A);
-    errno_assert (rc >= 0);
-    pull2 = nn_socket (AF_SP, NN_PULL);
-    errno_assert (pull2 != -1);
-    rc = nn_bind (pull2, SOCKET_ADDRESS_B);
-    errno_assert (rc >= 0);
-    push = nn_socket (AF_SP, NN_PUSH);
-    errno_assert (push != -1);
+    pull1 = test_socket (AF_SP, NN_PULL);
+    test_bind (pull1, SOCKET_ADDRESS_A);
+    pull2 = test_socket (AF_SP, NN_PULL);
+    test_bind (pull2, SOCKET_ADDRESS_B);
+    push = test_socket (AF_SP, NN_PUSH);
     sndprio = 1;
     rc = nn_setsockopt (push, NN_SOL_SOCKET, NN_SNDPRIO,
         &sndprio, sizeof (sndprio));
     errno_assert (rc == 0);
-    rc = nn_connect (push, SOCKET_ADDRESS_A);
-    errno_assert (rc >= 0);
+    test_connect (push, SOCKET_ADDRESS_A);
     sndprio = 2;
     rc = nn_setsockopt (push, NN_SOL_SOCKET, NN_SNDPRIO,
         &sndprio, sizeof (sndprio));
     errno_assert (rc == 0);
-    rc = nn_connect (push, SOCKET_ADDRESS_B);
-    errno_assert (rc >= 0);
+    test_connect (push, SOCKET_ADDRESS_B);
 
-    rc = nn_send (push, "ABC", 3, 0);
-    errno_assert (rc == 3);
-    rc = nn_send (push, "DEF", 3, 0);
-    errno_assert (rc == 3);
-    rc = nn_recv (pull1, buf, sizeof (buf), 0);
-    errno_assert (rc == 3);
-    rc = nn_recv (pull1, buf, sizeof (buf), 0);
-    errno_assert (rc == 3);
+    test_send (push, "ABC");
+    test_send (push, "DEF");
+    test_recv (pull1, "ABC");
+    test_recv (pull1, "DEF");
 
-    rc = nn_close (pull1);
-    errno_assert (rc == 0);
-    rc = nn_close (push);
-    errno_assert (rc == 0);
-    rc = nn_close (pull2);
-    errno_assert (rc == 0);
+    test_close (pull1);
+    test_close (push);
+    test_close (pull2);
 
     return 0;
 }
diff --git a/tests/pubsub.c b/tests/pubsub.c
index 2df82e0..44d24f0 100644
--- a/tests/pubsub.c
+++ b/tests/pubsub.c
@@ -23,8 +23,7 @@
 #include "../src/nn.h"
 #include "../src/pubsub.h"
 
-#include "../src/utils/err.c"
-#include "../src/utils/sleep.c"
+#include "testutil.h"
 
 #define SOCKET_ADDRESS "inproc://a"
 
@@ -37,81 +36,48 @@
     int sub2;
     char buf [3];
 
-    pub1 = nn_socket (AF_SP, NN_PUB);
-    errno_assert (pub1 != -1);
-    rc = nn_bind (pub1, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    sub1 = nn_socket (AF_SP, NN_SUB);
-    errno_assert (sub1 != -1);
+    pub1 = test_socket (AF_SP, NN_PUB);
+    test_bind (pub1, SOCKET_ADDRESS);
+    sub1 = test_socket (AF_SP, NN_SUB);
     rc = nn_setsockopt (sub1, NN_SUB, NN_SUB_SUBSCRIBE, "", 0);
     errno_assert (rc == 0);
-    rc = nn_connect (sub1, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    sub2 = nn_socket (AF_SP, NN_SUB);
-    errno_assert (sub2 != -1);
+    test_connect (sub1, SOCKET_ADDRESS);
+    sub2 = test_socket (AF_SP, NN_SUB);
     rc = nn_setsockopt (sub2, NN_SUB, NN_SUB_SUBSCRIBE, "", 0);
     errno_assert (rc == 0);
-    rc = nn_connect (sub2, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
+    test_connect (sub2, SOCKET_ADDRESS);
 
     /*  Wait till connections are established to prevent message loss. */
     nn_sleep (10);
 
-    rc = nn_send (pub1, "0123456789012345678901234567890123456789", 40, 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 40);
+    test_send (pub1, "0123456789012345678901234567890123456789");
+    test_recv (sub1, "0123456789012345678901234567890123456789");
+    test_recv (sub2, "0123456789012345678901234567890123456789");
 
-    rc = nn_recv (sub1, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 40);
-    rc = nn_recv (sub2, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 40);
-
-    rc = nn_close (pub1);
-    errno_assert (rc == 0);
-    rc = nn_close (sub1);
-    errno_assert (rc == 0);    
-    rc = nn_close (sub2);
-    errno_assert (rc == 0);
+    test_close (pub1);
+    test_close (sub1);
+    test_close (sub2);
 
     /*  Check receiving messages from two publishers. */
 
-    sub1 = nn_socket (AF_SP, NN_SUB);
-    errno_assert (sub1 != -1);
+    sub1 = test_socket (AF_SP, NN_SUB);
     rc = nn_setsockopt (sub1, NN_SUB, NN_SUB_SUBSCRIBE, "", 0);
     errno_assert (rc == 0);
-    rc = nn_bind (sub1, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    pub1 = nn_socket (AF_SP, NN_PUB);
-    errno_assert (pub1 != -1);
-    rc = nn_connect (pub1, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    pub2 = nn_socket (AF_SP, NN_PUB);
-    errno_assert (pub2 != -1);
-    rc = nn_connect (pub2, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
+    test_bind (sub1, SOCKET_ADDRESS);
+    pub1 = test_socket (AF_SP, NN_PUB);
+    test_connect (pub1, SOCKET_ADDRESS);
+    pub2 = test_socket (AF_SP, NN_PUB);
+    test_connect (pub2, SOCKET_ADDRESS);
     nn_sleep (100);
 
-    rc = nn_send (pub1, "0123456789012345678901234567890123456789", 40, 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 40);
-    rc = nn_send (pub2, "0123456789012345678901234567890123456789", 40, 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 40);
-    rc = nn_recv (sub1, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 40);
-    rc = nn_recv (sub1, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 40);
+    test_send (pub1, "0123456789012345678901234567890123456789");
+    test_send (pub2, "0123456789012345678901234567890123456789");
+    test_recv (sub1, "0123456789012345678901234567890123456789");
+    test_recv (sub1, "0123456789012345678901234567890123456789");
 
-    rc = nn_close (pub2);
-    errno_assert (rc == 0);
-    rc = nn_close (pub1);
-    errno_assert (rc == 0);    
-    rc = nn_close (sub1);
-    errno_assert (rc == 0);
+    test_close (pub2);
+    test_close (pub1);
+    test_close (sub1);
 
     return 0;
 }
diff --git a/tests/reqrep.c b/tests/reqrep.c
index 1e9b966..2c538d5 100644
--- a/tests/reqrep.c
+++ b/tests/reqrep.c
@@ -23,7 +23,7 @@
 #include "../src/nn.h"
 #include "../src/reqrep.h"
 
-#include "../src/utils/err.c"
+#include "testutil.h"
 
 #define SOCKET_ADDRESS "inproc://test"
 
@@ -39,17 +39,12 @@
     int timeo;
 
     /*  Test req/rep with full socket types. */
-    rep1 = nn_socket (AF_SP, NN_REP);
-    errno_assert (rep1 != -1);
-    rc = nn_bind (rep1, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    req1 = nn_socket (AF_SP, NN_REQ);
-    errno_assert (req1 != -1);
-    rc = nn_connect (req1, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    req2 = nn_socket (AF_SP, NN_REQ);
-    errno_assert (req2 != -1);
-    rc = nn_connect (req2, SOCKET_ADDRESS);
+    rep1 = test_socket (AF_SP, NN_REP);
+    test_bind (rep1, SOCKET_ADDRESS);
+    req1 = test_socket (AF_SP, NN_REQ);
+    test_connect (req1, SOCKET_ADDRESS);
+    req2 = test_socket (AF_SP, NN_REQ);
+    test_connect (req2, SOCKET_ADDRESS);
     errno_assert (rc >= 0);
 
     /*  Check invalid sequence of sends and recvs. */
@@ -59,170 +54,95 @@
     nn_assert (rc == -1 && nn_errno () == EFSM);
 
     /*  Check fair queueing the requests. */
-    rc = nn_send (req2, "ABC", 3, 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-    rc = nn_recv (rep1, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-    rc = nn_send (rep1, buf, 3, 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-    rc = nn_recv (req2, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
+    test_send (req2, "ABC");
+    test_recv (rep1, "ABC");
+    test_send (rep1, "ABC");
+    test_recv (req2, "ABC");
 
-    rc = nn_send (req1, "ABC", 3, 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-    rc = nn_recv (rep1, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-    rc = nn_send (rep1, buf, 3, 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-    rc = nn_recv (req1, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
+    test_send (req1, "ABC");
+    test_recv (rep1, "ABC");
+    test_send (rep1, "ABC");
+    test_recv (req1, "ABC");
 
-    rc = nn_close (rep1);
-    errno_assert (rc == 0);
-    rc = nn_close (req1);
-    errno_assert (rc == 0);
-    rc = nn_close (req2);
-    errno_assert (rc == 0);
+    test_close (rep1);
+    test_close (req1);
+    test_close (req2);
 
     /*  Check load-balancing of requests. */
-    req1 = nn_socket (AF_SP, NN_REQ);
-    errno_assert (req1 != -1);
-    rc = nn_bind (req1, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    rep1 = nn_socket (AF_SP, NN_REP);
-    errno_assert (rep1 != -1);
-    rc = nn_connect (rep1, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    rep2 = nn_socket (AF_SP, NN_REP);
-    errno_assert (rep2 != -1);
-    rc = nn_connect (rep2, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
+    req1 = test_socket (AF_SP, NN_REQ);
+    test_bind (req1, SOCKET_ADDRESS);
+    rep1 = test_socket (AF_SP, NN_REP);
+    test_connect (rep1, SOCKET_ADDRESS);
+    rep2 = test_socket (AF_SP, NN_REP);
+    test_connect (rep2, SOCKET_ADDRESS);
 
-    rc = nn_send (req1, "ABC", 3, 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-    rc = nn_recv (rep1, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-    rc = nn_send (rep1, buf, 3, 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-    rc = nn_recv (req1, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
+    test_send (req1, "ABC");
+    test_recv (rep1, "ABC");
+    test_send (rep1, "ABC");
+    test_recv (req1, "ABC");
 
-    rc = nn_send (req1, "ABC", 3, 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-    rc = nn_recv (rep2, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-    rc = nn_send (rep2, buf, 3, 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-    rc = nn_recv (req1, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
+    test_send (req1, "ABC");
+    test_recv (rep2, "ABC");
+    test_send (rep2, "ABC");
+    test_recv (req1, "ABC");
 
-    rc = nn_close (rep2);
-    errno_assert (rc == 0);
-    rc = nn_close (rep1);
-    errno_assert (rc == 0);
-    rc = nn_close (req1);
-    errno_assert (rc == 0);
+    test_close (rep2);
+    test_close (rep1);
+    test_close (req1);
 
     /*  Test re-sending of the request. */
-    rep1 = nn_socket (AF_SP, NN_REP);
-    errno_assert (rep1 != -1);
-    rc = nn_bind (rep1, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    req1 = nn_socket (AF_SP, NN_REQ);
-    errno_assert (req1 != -1);
-    rc = nn_connect (req1, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
+    rep1 = test_socket (AF_SP, NN_REP);
+    test_bind (rep1, SOCKET_ADDRESS);
+    req1 = test_socket (AF_SP, NN_REQ);
+    test_connect (req1, SOCKET_ADDRESS);
     resend_ivl = 100;
     rc = nn_setsockopt (req1, NN_REQ, NN_REQ_RESEND_IVL,
         &resend_ivl, sizeof (resend_ivl));
     errno_assert (rc == 0);
 
-    rc = nn_send (req1, "ABC", 3, 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-    rc = nn_recv (rep1, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-    rc = nn_recv (rep1, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
+    test_send (req1, "ABC");
+    test_recv (rep1, "ABC");
+    /*  The following waits for request to be resent  */
+    test_recv (rep1, "ABC");
 
-    rc = nn_close (req1);
-    errno_assert (rc == 0);
-    rc = nn_close (rep1);
-    errno_assert (rc == 0);
+    test_close (req1);
+    test_close (rep1);
 
     /*  Check sending a request when the peer is not available. (It should
         be sent immediatelly when the peer comes online rather than relying
         on the resend algorithm. */
-    req1 = nn_socket (AF_SP, NN_REQ);
-    errno_assert (req1 != -1);
-    rc = nn_connect (req1, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    rc = nn_send (req1, "ABC", 3, 0);
-    errno_assert (rc >= 0);
+    req1 = test_socket (AF_SP, NN_REQ);
+    test_connect (req1, SOCKET_ADDRESS);
+    test_send (req1, "ABC");
 
-    rep1 = nn_socket (AF_SP, NN_REP);
-    errno_assert (rep1 != -1);
-    rc = nn_bind (rep1, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
+    rep1 = test_socket (AF_SP, NN_REP);
+    test_bind (rep1, SOCKET_ADDRESS);
     timeo = 200;
     rc = nn_setsockopt (rep1, NN_SOL_SOCKET, NN_RCVTIMEO,
        &timeo, sizeof (timeo));
     errno_assert (rc == 0);
-    rc = nn_recv (rep1, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
+    test_recv (rep1, "ABC");
 
-    rc = nn_close (req1);
-    errno_assert (rc == 0);
-    rc = nn_close (rep1);
-    errno_assert (rc == 0);
+    test_close (req1);
+    test_close (rep1);
 
     /*  Test cancelling delayed request  */
 
-    req1 = nn_socket (AF_SP, NN_REQ);
-    errno_assert (req1 != -1);
-    rc = nn_connect (req1, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
-    rc = nn_send (req1, "ABC", 3, 0);
-    errno_assert (rc >= 0);
-    rc = nn_send (req1, "DEF", 3, 0);
-    errno_assert (rc >= 0);
+    req1 = test_socket (AF_SP, NN_REQ);
+    test_connect (req1, SOCKET_ADDRESS);
+    test_send (req1, "ABC");
+    test_send (req1, "DEF");
 
-    rep1 = nn_socket (AF_SP, NN_REP);
-    errno_assert (rep1 != -1);
-    rc = nn_bind (rep1, SOCKET_ADDRESS);
-    errno_assert (rc >= 0);
+    rep1 = test_socket (AF_SP, NN_REP);
+    test_bind (rep1, SOCKET_ADDRESS);
     timeo = 100;
 //    rc = nn_setsockopt (rep1, NN_SOL_SOCKET, NN_RCVTIMEO,
 //       &timeo, sizeof (timeo));
 //    errno_assert (rc == 0);
-    rc = nn_recv (rep1, buf, sizeof (buf), 0);
-    errno_assert (rc >= 0);
-    nn_assert (rc == 3);
-    nn_assert (!memcmp(buf, "DEF", 3));
+    test_recv (rep1, "DEF");
 
-    rc = nn_close (req1);
-    errno_assert (rc == 0);
-    rc = nn_close (rep1);
-    errno_assert (rc == 0);
+    test_close (req1);
+    test_close (rep1);
 
     return 0;
 }