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;
 }
