Hi!

Added the transports to the tests.
So far tests span the inproc:, ipc: and tcp: transports.

ipc: uses /tmp/testers as name.
tcp: uses 127.0.0.1:5555.

As ususal: License is MIT/X11.

Cheers
  Guido


>From 4954c0995a8956d0561152fe189125f465818c08 Mon Sep 17 00:00:00 2001
From: guidog <[email protected]>
Date: Sat, 28 Aug 2010 13:08:22 +0200
Subject: [PATCH] Added transport specific tests and remove place holder.

  Every test executable now tests on socket type on a given transport.
  Should make debugging socket/transport related problems easier.
---
 tests/Makefile.am                            |   17 ++++-
 tests/test_pair.cpp                          |   78 --------------------------
 tests/{simple.cpp => test_pair_inproc.cpp}   |   18 +++---
 tests/{simple.cpp => test_pair_ipc.cpp}      |   18 +++---
 tests/{simple.cpp => test_pair_tcp.cpp}      |   18 +++---
 tests/test_reqrep.cpp                        |   77 -------------------------
 tests/{simple.cpp => test_reqrep_inproc.cpp} |   18 +++---
 tests/{simple.cpp => test_reqrep_ipc.cpp}    |   18 +++---
 tests/{simple.cpp => test_reqrep_tcp.cpp}    |   18 +++---
 tests/testutil.hpp                           |   66 +++++++++++++++++++++-
 10 files changed, 131 insertions(+), 215 deletions(-)
 delete mode 100644 tests/test_pair.cpp
 copy tests/{simple.cpp => test_pair_inproc.cpp} (73%)
 copy tests/{simple.cpp => test_pair_ipc.cpp} (73%)
 copy tests/{simple.cpp => test_pair_tcp.cpp} (73%)
 delete mode 100644 tests/test_reqrep.cpp
 copy tests/{simple.cpp => test_reqrep_inproc.cpp} (73%)
 copy tests/{simple.cpp => test_reqrep_ipc.cpp} (73%)
 rename tests/{simple.cpp => test_reqrep_tcp.cpp} (73%)

diff --git a/tests/Makefile.am b/tests/Makefile.am
index bad1538..a046741 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,10 +1,19 @@
 INCLUDES = -I$(top_builddir)/include
 LDADD = $(top_builddir)/src/libzmq.la
 
-noinst_PROGRAMS = simple test_pair test_reqrep
+noinst_PROGRAMS = test_pair_inproc \
+	          test_pair_ipc \
+                  test_pair_tcp \
+                  test_reqrep_inproc \
+                  test_reqrep_ipc \
+                  test_reqrep_tcp 
 
-simple_SOURCES = simple.cpp
-test_pair_SOURCES = test_pair.cpp testutil.hpp
-test_reqrep_SOURCES = test_reqrep.cpp testutil.hpp
+test_pair_inproc_SOURCES = test_pair_inproc.cpp testutil.hpp
+test_pair_ipc_SOURCES = test_pair_ipc.cpp testutil.hpp
+test_pair_tcp_SOURCES = test_pair_tcp.cpp testutil.hpp
+
+test_reqrep_inproc_SOURCES = test_reqrep_inproc.cpp testutil.hpp
+test_reqrep_ipc_SOURCES = test_reqrep_ipc.cpp testutil.hpp
+test_reqrep_tcp_SOURCES = test_reqrep_tcp.cpp testutil.hpp
 
 TESTS = $(noinst_PROGRAMS)
diff --git a/tests/test_pair.cpp b/tests/test_pair.cpp
deleted file mode 100644
index c10e0a6..0000000
--- a/tests/test_pair.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-    Copyright (c) 2007-2010 iMatix Corporation
-
-    This file is part of 0MQ.
-
-    0MQ is free software; you can redistribute it and/or modify it under
-    the terms of the Lesser GNU General Public License as published by
-    the Free Software Foundation; either version 3 of the License, or
-    (at your option) any later version.
-
-    0MQ is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    Lesser GNU General Public License for more details.
-
-    You should have received a copy of the Lesser GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <assert.h>
-#include <string>
-
-#include "testutil.hpp"
-
-using namespace std;
-using namespace zmqtestutil;
-
-int main ()
-{
-    zmq::context_t context (1);
-
-    zmq::pollitem_t items [2];
-    socket_pair p = create_bound_pair (&context, ZMQ_PAIR, ZMQ_PAIR,
-        "tcp://127.0.0.1:2000");
-
-    //  First test simple ping pong.
-    const string expect ("XXX");
-
-    {
-        const string returned = zmqtestutil::ping_pong (p, expect);
-        assert (expect == returned);
-
-        //  Adjust socket state so that poll shows only 1 pending message.
-        zmq::message_t mx ;
-        p.first->recv (&mx, 0);
-    }
-
-    {
-        zmq::message_t m1 (expect.size ());
-        memcpy (m1.data (), expect.c_str (), expect.size ());
-        items [0].socket = *p.first;
-        items [0].fd = 0;
-        items [0].events = ZMQ_POLLIN;
-        items [0].revents = 0;
-        items [1].socket = *p.second;
-        items [1].fd = 0;
-        items [1].events = ZMQ_POLLIN;
-        items [1].revents = 0;
-
-        p.first->send (m1, 0);
-
-        int rc = zmq::poll (&items [0], 2, -1);
-        assert (rc == 1);
-        assert ((items [1].revents & ZMQ_POLLIN) != 0);
-
-        zmq::message_t m2;
-        p.second->recv (&m2, 0);
-        const string ret ((char*) m2.data (), m2.size ());
-        assert (expect == ret);
-    }
-
-    //  Delete sockets.
-    delete (p.first);
-    delete (p.second);
-
-    return 0 ;
-assert (false);
-}
diff --git a/tests/simple.cpp b/tests/test_pair_inproc.cpp
similarity index 73%
copy from tests/simple.cpp
copy to tests/test_pair_inproc.cpp
index d1c5261..3e90be5 100644
--- a/tests/simple.cpp
+++ b/tests/test_pair_inproc.cpp
@@ -17,16 +17,16 @@
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "../include/zmq.h"
+#include "testutil.hpp"
 
-/*  This is the simplest possible test case; test if we can initialize and
-    immediately terminate a context. */
-int main (int argc, char *argv [])
-{
-    void *ctx;
+using namespace std;
+using namespace zmqtestutil;
 
-    ctx = zmq_init (1);
-    zmq_term (ctx);
+static const char *TEST_NAME = "test_pair_inproc";
 
-    return 0;
+int main (int argc, char *argv[])
+{
+    const char *transport = "inproc://tester" ;
+    basic_tests(transport, ZMQ_PAIR, ZMQ_PAIR);
+    return 0 ;
 }
diff --git a/tests/simple.cpp b/tests/test_pair_ipc.cpp
similarity index 73%
copy from tests/simple.cpp
copy to tests/test_pair_ipc.cpp
index d1c5261..feed42e 100644
--- a/tests/simple.cpp
+++ b/tests/test_pair_ipc.cpp
@@ -17,16 +17,16 @@
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "../include/zmq.h"
+#include "testutil.hpp"
 
-/*  This is the simplest possible test case; test if we can initialize and
-    immediately terminate a context. */
-int main (int argc, char *argv [])
-{
-    void *ctx;
+using namespace std;
+using namespace zmqtestutil;
 
-    ctx = zmq_init (1);
-    zmq_term (ctx);
+static const char *TEST_NAME = "test_pair_ipc" ;
 
-    return 0;
+int main (int argc, char *argv[])
+{
+    const char *transport = "ipc:///tmp/tester" ;
+    basic_tests(transport, ZMQ_PAIR, ZMQ_PAIR);
+    return 0 ;
 }
diff --git a/tests/simple.cpp b/tests/test_pair_tcp.cpp
similarity index 73%
copy from tests/simple.cpp
copy to tests/test_pair_tcp.cpp
index d1c5261..8b8f7e6 100644
--- a/tests/simple.cpp
+++ b/tests/test_pair_tcp.cpp
@@ -17,16 +17,16 @@
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "../include/zmq.h"
+#include "testutil.hpp"
 
-/*  This is the simplest possible test case; test if we can initialize and
-    immediately terminate a context. */
-int main (int argc, char *argv [])
-{
-    void *ctx;
+using namespace std;
+using namespace zmqtestutil;
 
-    ctx = zmq_init (1);
-    zmq_term (ctx);
+static const char *TEST_NAME = "test_pair_tcp" ;
 
-    return 0;
+int main (int argc, char *argv[])
+{
+    const char *transport = "tcp://127.0.0.1:5555" ;
+    basic_tests(transport, ZMQ_PAIR, ZMQ_PAIR);
+    return 0 ;
 }
diff --git a/tests/test_reqrep.cpp b/tests/test_reqrep.cpp
deleted file mode 100644
index eab7e8b..0000000
--- a/tests/test_reqrep.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-    Copyright (c) 2007-2010 iMatix Corporation
-
-    This file is part of 0MQ.
-
-    0MQ is free software; you can redistribute it and/or modify it under
-    the terms of the Lesser GNU General Public License as published by
-    the Free Software Foundation; either version 3 of the License, or
-    (at your option) any later version.
-
-    0MQ is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    Lesser GNU General Public License for more details.
-
-    You should have received a copy of the Lesser GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <assert.h>
-#include <string>
-
-#include "testutil.hpp"
-
-using namespace std;
-using namespace zmqtestutil;
-
-int main()
-{
-    zmq::context_t context (1);
-
-    zmq::pollitem_t items [2];
-    socket_pair p = create_bound_pair (&context, ZMQ_REQ, ZMQ_REP,
-        "tcp://127.0.0.1:2000");
-
-    //  First test simple ping pong.
-    const string expect ("XXX");
-
-    {
-        const string returned = zmqtestutil::ping_pong (p, expect);
-        assert (expect == returned);
-
-        //  Adjust socket state, so that first is clean for another send.
-        zmq::message_t mx ;
-        p.first->recv(&mx, 0);
-    }
-
-    {
-        zmq::message_t m1 (expect.size ());
-        memcpy (m1.data (), expect.c_str (), expect.size ());
-        items [0].socket = *p.first;
-        items [0].fd = 0;
-        items [0].events = ZMQ_POLLIN;
-        items [0].revents = 0;
-        items [1].socket = *p.second;
-        items [1].fd = 0;
-        items [1].events = ZMQ_POLLIN;
-        items [1].revents = 0;
-
-        p.first->send (m1, 0);
-
-        int rc = zmq::poll(&items [0], 2, -1);
-        assert (rc == 1);
-        assert ((items [1].revents & ZMQ_POLLIN) != 0);
-
-        zmq::message_t m2 ;
-        p.second->recv (&m2, 0);
-        const string ret ((char*) m2.data (), m2.size ());
-        assert (expect == ret);
-    }
-
-    //  Delete sockets.
-    delete (p.first);
-    delete (p.second);
-
-    return 0 ;
-}
diff --git a/tests/simple.cpp b/tests/test_reqrep_inproc.cpp
similarity index 73%
copy from tests/simple.cpp
copy to tests/test_reqrep_inproc.cpp
index d1c5261..dee67c9 100644
--- a/tests/simple.cpp
+++ b/tests/test_reqrep_inproc.cpp
@@ -17,16 +17,16 @@
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "../include/zmq.h"
+#include "testutil.hpp"
 
-/*  This is the simplest possible test case; test if we can initialize and
-    immediately terminate a context. */
-int main (int argc, char *argv [])
-{
-    void *ctx;
+using namespace std;
+using namespace zmqtestutil;
 
-    ctx = zmq_init (1);
-    zmq_term (ctx);
+static const char *TEST_NAME = "test_reqrep_inproc";
 
-    return 0;
+int main (int argc, char *argv[])
+{
+    const char *transport = "inproc://tester" ;
+    basic_tests(transport, ZMQ_REQ, ZMQ_REP);
+    return 0 ;
 }
diff --git a/tests/simple.cpp b/tests/test_reqrep_ipc.cpp
similarity index 73%
copy from tests/simple.cpp
copy to tests/test_reqrep_ipc.cpp
index d1c5261..10ece2f 100644
--- a/tests/simple.cpp
+++ b/tests/test_reqrep_ipc.cpp
@@ -17,16 +17,16 @@
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "../include/zmq.h"
+#include "testutil.hpp"
 
-/*  This is the simplest possible test case; test if we can initialize and
-    immediately terminate a context. */
-int main (int argc, char *argv [])
-{
-    void *ctx;
+using namespace std;
+using namespace zmqtestutil;
 
-    ctx = zmq_init (1);
-    zmq_term (ctx);
+static const char *TEST_NAME = "test_reqrep_ipc";
 
-    return 0;
+int main (int argc, char *argv[])
+{
+    const char *transport = "ipc:///tmp/tester" ;
+    basic_tests(transport, ZMQ_REQ, ZMQ_REP);
+    return 0 ;
 }
diff --git a/tests/simple.cpp b/tests/test_reqrep_tcp.cpp
similarity index 73%
rename from tests/simple.cpp
rename to tests/test_reqrep_tcp.cpp
index d1c5261..88c5806 100644
--- a/tests/simple.cpp
+++ b/tests/test_reqrep_tcp.cpp
@@ -17,16 +17,16 @@
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "../include/zmq.h"
+#include "testutil.hpp"
 
-/*  This is the simplest possible test case; test if we can initialize and
-    immediately terminate a context. */
-int main (int argc, char *argv [])
-{
-    void *ctx;
+using namespace std;
+using namespace zmqtestutil;
 
-    ctx = zmq_init (1);
-    zmq_term (ctx);
+static const char *TEST_NAME = "test_reqrep_tcp";
 
-    return 0;
+int main (int argc, char *argv[])
+{
+    const char *transport = "tcp://127.0.0.1:5555" ;
+    basic_tests(transport, ZMQ_REQ, ZMQ_REP);
+    return 0 ;
 }
diff --git a/tests/testutil.hpp b/tests/testutil.hpp
index 3e9f954..e1326ab 100644
--- a/tests/testutil.hpp
+++ b/tests/testutil.hpp
@@ -20,15 +20,21 @@
 #ifndef __ZMQ_TEST_TESTUTIL_HPP_INCLUDED__
 #define __ZMQ_TEST_TESTUTIL_HPP_INCLUDED__
 
-#include "../include/zmq.hpp"
-
+#include <assert.h>
+#include <iostream>
+#include <string>
 #include <utility>
 
+#include "../include/zmq.hpp"
+
 namespace zmqtestutil
 {
 
+    using namespace std ;
+
     typedef std::pair <zmq::socket_t*, zmq::socket_t*> socket_pair;
 
+    //  Create a pair of sockets connected to each other.
     socket_pair create_bound_pair (zmq::context_t *context_,
         int t1_, int t2_, const char *transport_)
     {
@@ -39,6 +45,7 @@ namespace zmqtestutil
         return socket_pair (s1, s2);
     }
 
+    //  Send a message from one socket in the pair to the other and back.
     std::string ping_pong (const socket_pair &sp_, const std::string &orig_msg_)
     {
         zmq::socket_t &s1 = *sp_.first;
@@ -63,6 +70,61 @@ namespace zmqtestutil
         return ret ;
     }
 
+    /*  Run basic tests for the given transport.
+
+        Basic tests are:
+        * ping pong as defined above.
+        * send receive where the receive is signalled by zmq::poll
+     */
+    void basic_tests(const char *transport_, int t1_, int t2_)
+    {
+        zmq::context_t context (1);
+
+        zmq::pollitem_t items [2];
+        socket_pair p = create_bound_pair (&context, t1_, t2_,
+                                           transport_);
+
+        //  First test simple ping pong.
+        const string expect ("XXX");
+
+        {
+            const string returned = zmqtestutil::ping_pong (p, expect);
+            assert (expect == returned);
+
+            //  Adjust socket state so that poll shows only 1 pending message.
+            zmq::message_t mx ;
+            p.first->recv (&mx, 0);
+        }
+
+        {
+            //  Now poll is used to singal that a message is ready to read.
+            zmq::message_t m1 (expect.size ());
+            memcpy (m1.data (), expect.c_str (), expect.size ());
+            items [0].socket = *p.first;
+            items [0].fd = 0;
+            items [0].events = ZMQ_POLLIN;
+            items [0].revents = 0;
+            items [1].socket = *p.second;
+            items [1].fd = 0;
+            items [1].events = ZMQ_POLLIN;
+            items [1].revents = 0;
+
+            p.first->send (m1, 0);
+
+            int rc = zmq::poll (&items [0], 2, -1);
+            assert (rc == 1);
+            assert ((items [1].revents & ZMQ_POLLIN) != 0);
+
+            zmq::message_t m2;
+            p.second->recv (&m2, 0);
+            const string ret ((char*) m2.data (), m2.size ());
+            assert (expect == ret);
+        }
+
+        //  Delete sockets.
+        delete (p.first);
+        delete (p.second);
+    }
 }
 
 #endif
-- 
1.7.1

_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to