summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--tests/block.c37
-rw-r--r--tests/bus.c48
-rw-r--r--tests/device.c133
-rw-r--r--tests/domain.c8
-rw-r--r--tests/inproc.c77
-rw-r--r--tests/tcp.c68
7 files changed, 114 insertions, 258 deletions
diff --git a/.gitignore b/.gitignore
index 3d2e508..c443293 100644
--- a/.gitignore
+++ b/.gitignore
@@ -44,6 +44,7 @@ perf/local_lat
perf/local_thr
perf/remote_lat
perf/remote_thr
+doc/*.1
doc/*.7
doc/*.3
doc/*.html
diff --git a/tests/block.c b/tests/block.c
index 7ae070b..edf1a1c 100644
--- a/tests/block.c
+++ b/tests/block.c
@@ -23,9 +23,8 @@
#include "../src/nn.h"
#include "../src/pair.h"
-#include "../src/utils/err.c"
+#include "testutil.h"
#include "../src/utils/thread.c"
-#include "../src/utils/sleep.c"
/* This test checks whether blocking on send/recv works as expected. */
@@ -41,17 +40,13 @@ void worker (void *arg)
/* Wait 0.1 sec for the main thread to block. */
nn_sleep (100);
- rc = nn_send (sc, "ABC", 3, 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 3);
+ test_send (sc, "ABC");
/* Wait 0.1 sec for the main thread to process the previous message
and block once again. */
nn_sleep (100);
- rc = nn_send (sc, "ABC", 3, 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 3);
+ test_send (sc, "ABC");
}
int main ()
@@ -60,30 +55,20 @@ int main ()
char buf [3];
struct nn_thread thread;
- 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);
nn_thread_init (&thread, worker, NULL);
- rc = nn_recv (sb, buf, sizeof (buf), 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 3);
- rc = nn_recv (sb, buf, sizeof (buf), 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 3);
+ test_recv (sb, "ABC");
+ test_recv (sb, "ABC");
nn_thread_term (&thread);
- 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/bus.c b/tests/bus.c
index b93c2ad..c6b0536 100644
--- a/tests/bus.c
+++ b/tests/bus.c
@@ -22,8 +22,7 @@
#include "../src/nn.h"
#include "../src/bus.h"
-#include "../src/utils/err.c"
-#include "../src/utils/sleep.c"
+#include "testutil.h"
#define SOCKET_ADDRESS_A "inproc://a"
#define SOCKET_ADDRESS_B "inproc://b"
@@ -37,33 +36,19 @@ int main ()
char buf [3];
/* Create a simple bus topology consisting of 3 nodes. */
- bus1 = nn_socket (AF_SP, NN_BUS);
- errno_assert (bus1 != -1);
- rc = nn_bind (bus1, SOCKET_ADDRESS_A);
- errno_assert (rc >= 0);
- bus2 = nn_socket (AF_SP, NN_BUS);
- errno_assert (bus2 != -1);
- rc = nn_bind (bus2, SOCKET_ADDRESS_B);
- errno_assert (rc >= 0);
- rc = nn_connect (bus2, SOCKET_ADDRESS_A);
- errno_assert (rc >= 0);
- bus3 = nn_socket (AF_SP, NN_BUS);
- errno_assert (bus3 != -1);
- rc = nn_connect (bus3, SOCKET_ADDRESS_A);
- errno_assert (rc >= 0);
- rc = nn_connect (bus3, SOCKET_ADDRESS_B);
- errno_assert (rc >= 0);
+ bus1 = test_socket (AF_SP, NN_BUS);
+ test_bind (bus1, SOCKET_ADDRESS_A);
+ bus2 = test_socket (AF_SP, NN_BUS);
+ test_bind (bus2, SOCKET_ADDRESS_B);
+ test_connect (bus2, SOCKET_ADDRESS_A);
+ bus3 = test_socket (AF_SP, NN_BUS);
+ test_connect (bus3, SOCKET_ADDRESS_A);
+ test_connect (bus3, SOCKET_ADDRESS_B);
/* Send a message from each node. */
- rc = nn_send (bus1, "A", 1, 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 1);
- rc = nn_send (bus2, "AB", 2, 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 2);
- rc = nn_send (bus3, "ABC", 3, 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 3);
+ test_send (bus1, "A");
+ test_send (bus2, "AB");
+ test_send (bus3, "ABC");
/* Check that two messages arrived at each node. */
rc = nn_recv (bus1, buf, 3, 0);
@@ -88,12 +73,9 @@ int main ()
/* Wait till both connections are established. */
nn_sleep (10);
- rc = nn_close (bus3);
- errno_assert (rc == 0);
- rc = nn_close (bus2);
- errno_assert (rc == 0);
- rc = nn_close (bus1);
- errno_assert (rc == 0);
+ test_close (bus3);
+ test_close (bus2);
+ test_close (bus1);
return 0;
}
diff --git a/tests/device.c b/tests/device.c
index c1014de..f9908fb 100644
--- a/tests/device.c
+++ b/tests/device.c
@@ -27,8 +27,7 @@
#include "../src/pipeline.h"
#include "../src/inproc.h"
-#include "../src/utils/err.c"
-#include "../src/utils/sleep.c"
+#include "testutil.h"
#include "../src/utils/thread.c"
#define SOCKET_ADDRESS_A "inproc://a"
@@ -44,24 +43,18 @@ void device1 (void *arg)
int devb;
/* Intialise the device sockets. */
- deva = nn_socket (AF_SP_RAW, NN_PAIR);
- errno_assert (deva >= 0);
- rc = nn_bind (deva, SOCKET_ADDRESS_A);
- errno_assert (rc >= 0);
- devb = nn_socket (AF_SP_RAW, NN_PAIR);
- errno_assert (devb >= 0);
- rc = nn_bind (devb, SOCKET_ADDRESS_B);
- errno_assert (rc >= 0);
+ deva = test_socket (AF_SP_RAW, NN_PAIR);
+ test_bind (deva, SOCKET_ADDRESS_A);
+ devb = test_socket (AF_SP_RAW, NN_PAIR);
+ test_bind (devb, SOCKET_ADDRESS_B);
/* Run the device. */
rc = nn_device (deva, devb);
nn_assert (rc < 0 && nn_errno () == ETERM);
/* Clean up. */
- rc = nn_close (devb);
- errno_assert (rc == 0);
- rc = nn_close (deva);
- errno_assert (rc == 0);
+ test_close (devb);
+ test_close (deva);
}
void device2 (void *arg)
@@ -71,24 +64,18 @@ void device2 (void *arg)
int devd;
/* Intialise the device sockets. */
- devc = nn_socket (AF_SP_RAW, NN_PULL);
- errno_assert (devc >= 0);
- rc = nn_bind (devc, SOCKET_ADDRESS_C);
- errno_assert (rc >= 0);
- devd = nn_socket (AF_SP_RAW, NN_PUSH);
- errno_assert (devd >= 0);
- rc = nn_bind (devd, SOCKET_ADDRESS_D);
- errno_assert (rc >= 0);
+ devc = test_socket (AF_SP_RAW, NN_PULL);
+ test_bind (devc, SOCKET_ADDRESS_C);
+ devd = test_socket (AF_SP_RAW, NN_PUSH);
+ test_bind (devd, SOCKET_ADDRESS_D);
/* Run the device. */
rc = nn_device (devc, devd);
nn_assert (rc < 0 && nn_errno () == ETERM);
/* Clean up. */
- rc = nn_close (devd);
- errno_assert (rc == 0);
- rc = nn_close (devc);
- errno_assert (rc == 0);
+ test_close (devd);
+ test_close (devc);
}
void device3 (void *arg)
@@ -97,18 +84,15 @@ void device3 (void *arg)
int deve;
/* Intialise the device socket. */
- deve = nn_socket (AF_SP_RAW, NN_BUS);
- errno_assert (deve >= 0);
- rc = nn_bind (deve, SOCKET_ADDRESS_E);
- errno_assert (rc >= 0);
+ deve = test_socket (AF_SP_RAW, NN_BUS);
+ test_bind (deve, SOCKET_ADDRESS_E);
/* Run the device. */
rc = nn_device (deve, -1);
nn_assert (rc < 0 && nn_errno () == ETERM);
/* Clean up. */
- rc = nn_close (deve);
- errno_assert (rc == 0);
+ test_close (deve);
}
int main ()
@@ -132,34 +116,20 @@ int main ()
nn_thread_init (&thread1, device1, NULL);
/* Create two sockets to connect to the device. */
- enda = nn_socket (AF_SP, NN_PAIR);
- errno_assert (enda >= 0);
- rc = nn_connect (enda, SOCKET_ADDRESS_A);
- errno_assert (rc >= 0);
- endb = nn_socket (AF_SP, NN_PAIR);
- errno_assert (endb >= 0);
- rc = nn_connect (endb, SOCKET_ADDRESS_B);
- errno_assert (rc >= 0);
+ enda = test_socket (AF_SP, NN_PAIR);
+ test_connect (enda, SOCKET_ADDRESS_A);
+ endb = test_socket (AF_SP, NN_PAIR);
+ test_connect (endb, SOCKET_ADDRESS_B);
/* Pass a pair of messages between endpoints. */
- rc = nn_send (enda, "ABC", 3, 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 3);
- rc = nn_recv (endb, buf, sizeof (buf), 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 3);
- rc = nn_send (endb, "ABC", 3, 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 3);
- rc = nn_recv (enda, buf, sizeof (buf), 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 3);
+ test_send (enda, "ABC");
+ test_recv (endb, "ABC");
+ test_send (endb, "ABC");
+ test_recv (enda, "ABC");
/* Clean up. */
- rc = nn_close (endb);
- errno_assert (rc == 0);
- rc = nn_close (enda);
- errno_assert (rc == 0);
+ test_close (endb);
+ test_close (enda);
/* Test the uni-directional device. */
@@ -167,28 +137,18 @@ int main ()
nn_thread_init (&thread2, device2, NULL);
/* Create two sockets to connect to the device. */
- endc = nn_socket (AF_SP, NN_PUSH);
- errno_assert (endc >= 0);
- rc = nn_connect (endc, SOCKET_ADDRESS_C);
- errno_assert (rc >= 0);
- endd = nn_socket (AF_SP, NN_PULL);
- errno_assert (endd >= 0);
- rc = nn_connect (endd, SOCKET_ADDRESS_D);
- errno_assert (rc >= 0);
+ endc = test_socket (AF_SP, NN_PUSH);
+ test_connect (endc, SOCKET_ADDRESS_C);
+ endd = test_socket (AF_SP, NN_PULL);
+ test_connect (endd, SOCKET_ADDRESS_D);
/* Pass a message between endpoints. */
- rc = nn_send (endc, "XYZ", 3, 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 3);
- rc = nn_recv (endd, buf, sizeof (buf), 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 3);
+ test_send (endc, "XYZ");
+ test_recv (endd, "XYZ");
/* Clean up. */
- rc = nn_close (endd);
- errno_assert (rc == 0);
- rc = nn_close (endc);
- errno_assert (rc == 0);
+ test_close (endd);
+ test_close (endc);
/* Test the loopback device. */
@@ -196,25 +156,18 @@ int main ()
nn_thread_init (&thread3, device3, NULL);
/* Create two sockets to connect to the device. */
- ende1 = nn_socket (AF_SP, NN_BUS);
- errno_assert (ende1 >= 0);
- rc = nn_connect (ende1, SOCKET_ADDRESS_E);
- errno_assert (rc >= 0);
- ende2 = nn_socket (AF_SP, NN_BUS);
- errno_assert (ende2 >= 0);
- rc = nn_connect (ende2, SOCKET_ADDRESS_E);
+ ende1 = test_socket (AF_SP, NN_BUS);
+ test_connect (ende1, SOCKET_ADDRESS_E);
+ ende2 = test_socket (AF_SP, NN_BUS);
+ test_connect (ende2, SOCKET_ADDRESS_E);
errno_assert (rc >= 0);
/* BUS is unreliable so wait a bit for connections to be established. */
nn_sleep (100);
/* Pass a message to the bus. */
- rc = nn_send (ende1, "KLM", 3, 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 3);
- rc = nn_recv (ende2, buf, sizeof (buf), 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 3);
+ test_send (ende1, "KLM");
+ test_recv (ende2, "KLM");
/* Make sure that the message doesn't arrive at the socket it was
originally sent to. */
@@ -226,10 +179,8 @@ int main ()
errno_assert (rc < 0 && nn_errno () == EAGAIN);
/* Clean up. */
- rc = nn_close (ende2);
- errno_assert (rc == 0);
- rc = nn_close (ende1);
- errno_assert (rc == 0);
+ test_close (ende2);
+ test_close (ende1);
/* Shut down the devices. */
nn_term ();
diff --git a/tests/domain.c b/tests/domain.c
index dc29246..8a3bf3b 100644
--- a/tests/domain.c
+++ b/tests/domain.c
@@ -22,7 +22,7 @@
#include "../src/nn.h"
#include "../src/pair.h"
-#include "../src/utils/err.c"
+#include "testutil.h"
/* Test the NN_DOMAIN and NN_PROTOCOL socket options. */
@@ -33,8 +33,7 @@ int main ()
int op;
size_t opsz;
- s = nn_socket (AF_SP, NN_PAIR);
- errno_assert (s >= 0);
+ s = test_socket (AF_SP, NN_PAIR);
opsz = sizeof (op);
rc = nn_getsockopt (s, NN_SOL_SOCKET, NN_DOMAIN, &op, &opsz);
@@ -48,8 +47,7 @@ int main ()
nn_assert (opsz == sizeof (op));
nn_assert (op == NN_PAIR);
- rc = nn_close (s);
- errno_assert (rc == 0);
+ test_close (s);
return 0;
}
diff --git a/tests/inproc.c b/tests/inproc.c
index e20c4fb..7addb26 100644
--- a/tests/inproc.c
+++ b/tests/inproc.c
@@ -24,7 +24,7 @@
#include "../src/pubsub.h"
#include "../src/inproc.h"
-#include "../src/utils/err.c"
+#include "testutil.h"
/* Tests inproc transport. */
@@ -40,14 +40,10 @@ int main ()
int val;
/* Create a simple topology. */
- sc = nn_socket (AF_SP, NN_PAIR);
- errno_assert (sc != -1);
- rc = nn_connect (sc, SOCKET_ADDRESS);
- errno_assert (rc >= 0);
- sb = nn_socket (AF_SP, NN_PAIR);
- errno_assert (sb != -1);
- rc = nn_bind (sb, SOCKET_ADDRESS);
- errno_assert (rc >= 0);
+ sc = test_socket (AF_SP, NN_PAIR);
+ test_connect (sc, SOCKET_ADDRESS);
+ sb = test_socket (AF_SP, NN_PAIR);
+ test_bind (sb, SOCKET_ADDRESS);
/* Try a duplicate bind. It should fail. */
rc = nn_bind (sc, SOCKET_ADDRESS);
@@ -56,52 +52,31 @@ int main ()
/* Ping-pong test. */
for (i = 0; i != 100; ++i) {
- rc = nn_send (sc, "ABC", 3, 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 3);
-
- rc = nn_recv (sb, buf, sizeof (buf), 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 3);
-
- rc = nn_send (sb, "DEFG", 4, 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 4);
-
- rc = nn_recv (sc, buf, sizeof (buf), 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 4);
+ test_send (sc, "ABC");
+ test_recv (sb, "ABC");
+ test_send (sb, "DEFG");
+ test_recv (sc, "DEFG");
}
/* Batch transfer test. */
for (i = 0; i != 100; ++i) {
- rc = nn_send (sc, "XYZ", 3, 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 3);
+ test_send (sc, "XYZ");
}
for (i = 0; i != 100; ++i) {
- rc = nn_recv (sb, buf, sizeof (buf), 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 3);
+ test_recv (sb, "XYZ");
}
- rc = nn_close (sc);
- errno_assert (rc == 0);
- rc = nn_close (sb);
- errno_assert (rc == 0);
+ test_close (sc);
+ test_close (sb);
/* Test whether queue limits are observed. */
- sb = nn_socket (AF_SP, NN_PAIR);
- errno_assert (sb != -1);
+ sb = test_socket (AF_SP, NN_PAIR);
val = 200;
rc = nn_setsockopt (sb, NN_SOL_SOCKET, NN_RCVBUF, &val, sizeof (val));
errno_assert (rc == 0);
- 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);
+ test_bind (sb, SOCKET_ADDRESS);
+ sc = test_socket (AF_SP, NN_PAIR);
+ test_connect (sc, SOCKET_ADDRESS);
val = 200;
rc = nn_setsockopt (sc, NN_SOL_SOCKET, NN_SNDTIMEO, &val, sizeof (val));
@@ -116,18 +91,12 @@ int main ()
++i;
}
nn_assert (i == 20);
- rc = nn_recv (sb, buf, sizeof (buf), 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 10);
- rc = nn_send (sc, "0123456789", 10, 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 10);
+ test_recv (sb, "0123456789");
+ test_send (sc, "0123456789");
rc = nn_send (sc, "0123456789", 10, 0);
nn_assert (rc < 0 && nn_errno () == EAGAIN);
for (i = 0; i != 20; ++i) {
- rc = nn_recv (sb, buf, sizeof (buf), 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 10);
+ test_recv (sb, "0123456789");
}
/* Make sure that even a message that doesn't fit into the buffers
@@ -141,10 +110,8 @@ int main ()
errno_assert (rc >= 0);
nn_assert (rc == 256);
- 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/tcp.c b/tests/tcp.c
index 9b5e18e..9e1c0bb 100644
--- a/tests/tcp.c
+++ b/tests/tcp.c
@@ -25,8 +25,7 @@
#include "../src/pubsub.h"
#include "../src/tcp.h"
-#include "../src/utils/err.c"
-#include "../src/utils/sleep.c"
+#include "testutil.h"
/* Tests TCP transport. */
@@ -38,30 +37,22 @@ int main ()
int sb;
int sc;
int i;
- char buf [3];
int opt;
size_t sz;
/* Try closing bound but unconnected socket. */
- sb = nn_socket (AF_SP, NN_PAIR);
- errno_assert (sb >= 0);
- rc = nn_bind (sb, SOCKET_ADDRESS);
- errno_assert (rc > 0);
- rc = nn_close (sb);
- errno_assert (rc == 0);
+ sb = test_socket (AF_SP, NN_PAIR);
+ test_bind (sb, SOCKET_ADDRESS);
+ test_close (sb);
/* Try closing a TCP socket while it not connected. At the same time
test specifying the local address for the connection. */
- sc = nn_socket (AF_SP, NN_PAIR);
- errno_assert (sc != -1);
- rc = nn_connect (sc, "tcp://127.0.0.1;127.0.0.1:5555");
- errno_assert (rc >= 0);
- rc = nn_close (sc);
- errno_assert (rc == 0);
+ sc = test_socket (AF_SP, NN_PAIR);
+ test_connect (sc, "tcp://127.0.0.1;127.0.0.1:5555");
+ test_close (sc);
/* Open the socket anew. */
- sc = nn_socket (AF_SP, NN_PAIR);
- errno_assert (sc != -1);
+ sc = test_socket (AF_SP, NN_PAIR);
/* Check NODELAY socket option. */
sz = sizeof (opt);
@@ -91,7 +82,7 @@ int main ()
rc = nn_connect (sc, "tcp://*:some_port");
nn_assert (rc < 0);
rc = nn_connect (sc, "tcp://eth10000;127.0.0.1:5555");
- nn_assert (rc < 0);
+ nn_assert (rc < 0);
errno_assert (nn_errno () == ENODEV);
rc = nn_connect (sc, "tcp://127.0.0.1");
nn_assert (rc < 0);
@@ -128,53 +119,34 @@ int main ()
errno_assert (nn_errno () == EINVAL);
/* Connect correctly. Do so before binding the peer socket. */
- rc = nn_connect (sc, SOCKET_ADDRESS);
- errno_assert (rc >= 0);
+ test_connect (sc, SOCKET_ADDRESS);
/* Leave enough time for at least on re-connect attempt. */
nn_sleep (200);
- sb = nn_socket (AF_SP, NN_PAIR);
- errno_assert (sb != -1);
- rc = nn_bind (sb, SOCKET_ADDRESS);
- errno_assert (rc >= 0);
+ sb = test_socket (AF_SP, NN_PAIR);
+ test_bind (sb, SOCKET_ADDRESS);
/* Ping-pong test. */
for (i = 0; i != 100; ++i) {
- rc = nn_send (sc, "ABC", 3, 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 3);
-
- rc = nn_recv (sb, buf, sizeof (buf), 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 3);
+ test_send (sc, "ABC");
+ test_recv (sb, "ABC");
- 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);
+ test_send (sb, "DEF");
+ test_recv (sc, "DEF");
}
/* Batch transfer test. */
for (i = 0; i != 100; ++i) {
- rc = nn_send (sc, "0123456789012345678901234567890123456789", 40, 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 40);
+ test_send (sc, "0123456789012345678901234567890123456789");
}
for (i = 0; i != 100; ++i) {
- rc = nn_recv (sb, buf, sizeof (buf), 0);
- errno_assert (rc >= 0);
- nn_assert (rc == 40);
+ test_recv (sb, "0123456789012345678901234567890123456789");
}
- rc = nn_close (sc);
- errno_assert (rc == 0);
- rc = nn_close (sb);
- errno_assert (rc == 0);
+ test_close (sc);
+ test_close (sb);
return 0;
}