summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@250bpm.com>2012-04-05 07:32:58 +0200
committerMartin Sustrik <sustrik@250bpm.com>2012-04-05 07:32:58 +0200
commitd82cbb3a81f116cd22e9895ecac36ac3d7b38929 (patch)
tree03c923311b937f550bec325d131476513a02bebf /tests
parent52b8a917deb2990e7197b82e81e0258ebe30f424 (diff)
XS_PLUGIN and XS_FILTER implementation
This patch introduces following features: - XS_PLUGIN context option to add plugins to libxs - XS_FILTER option to switch between different filter types - Automatic loading of plug-ins is *not* implemented. From the implementation point of view: - standard prefix filter is implemented as a pluggable filter - trie_t and mtrie_t are joined into a single class - the code for 0MQ/3.1 compatibility is left in in the form of comments - new test for testing re-subscriptions is added Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am4
-rw-r--r--tests/resubscribe.cpp103
-rw-r--r--tests/tests.cpp6
3 files changed, 112 insertions, 1 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 8e2bbbf..af826af 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -22,7 +22,8 @@ noinst_PROGRAMS = pair_inproc \
emptyctx \
polltimeo \
wireformat \
- libzmq21
+ libzmq21 \
+ resubscribe
pair_inproc_SOURCES = pair_inproc.cpp testutil.hpp
pair_tcp_SOURCES = pair_tcp.cpp testutil.hpp
@@ -44,5 +45,6 @@ emptyctx_SOURCES = emptyctx.cpp
polltimeo_SOURCES = polltimeo.cpp testutil.hpp
wireformat_SOURCES = wireformat.cpp
libzmq21_SOURCES = libzmq21.cpp
+resubscribe_SOURCES = resubscribe.cpp
TESTS = $(noinst_PROGRAMS)
diff --git a/tests/resubscribe.cpp b/tests/resubscribe.cpp
new file mode 100644
index 0000000..1924434
--- /dev/null
+++ b/tests/resubscribe.cpp
@@ -0,0 +1,103 @@
+/*
+ Copyright (c) 2012 250bpm s.r.o.
+ Copyright (c) 2012 Other contributors as noted in the AUTHORS file
+
+ This file is part of Crossroads I/O project.
+
+ Crossroads I/O is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ Crossroads 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
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "testutil.hpp"
+
+int XS_TEST_MAIN ()
+{
+ fprintf (stderr, "resubscribe test running...\n");
+
+ // Create the basic infrastructure.
+ void *ctx = xs_init ();
+ assert (ctx);
+ void *xpub = xs_socket (ctx, XS_XPUB);
+ assert (xpub);
+ void *sub = xs_socket (ctx, XS_SUB);
+ assert (sub);
+
+ // Send two subscriptions upstream.
+ int rc = xs_bind (xpub, "tcp://127.0.0.1:5560");
+ assert (rc == 0);
+ rc = xs_setsockopt (sub, XS_SUBSCRIBE, "a", 1);
+ assert (rc == 0);
+ rc = xs_setsockopt (sub, XS_SUBSCRIBE, "b", 1);
+ assert (rc == 0);
+ rc = xs_connect (sub, "tcp://127.0.0.1:5560");
+ assert (rc == 0);
+
+ // Check whether subscriptions are correctly received.
+ char buf [5];
+ rc = xs_recv (xpub, buf, sizeof (buf), 0);
+ assert (rc == 5);
+ assert (buf [0] == 0);
+ assert (buf [1] == 1);
+ assert (buf [2] == 0);
+ assert (buf [3] == 1);
+ assert (buf [4] == 'a');
+ rc = xs_recv (xpub, buf, sizeof (buf), 0);
+ assert (rc == 5);
+ assert (buf [0] == 0);
+ assert (buf [1] == 1);
+ assert (buf [2] == 0);
+ assert (buf [3] == 1);
+ assert (buf [4] == 'b');
+
+ // Tear down the connection.
+ rc = xs_close (xpub);
+ assert (rc == 0);
+ sleep (1);
+
+ // Re-establish the connection.
+ xpub = xs_socket (ctx, XS_XPUB);
+ assert (xpub);
+ rc = xs_bind (xpub, "tcp://127.0.0.1:5560");
+ assert (rc == 0);
+
+ // We have to give control to the SUB socket here so that it has
+ // chance to resend the subscriptions.
+ rc = xs_recv (sub, buf, sizeof (buf), XS_DONTWAIT);
+ assert (rc == -1 && xs_errno () == EAGAIN);
+
+ // Check whether subscriptions are correctly generated.
+ rc = xs_recv (xpub, buf, sizeof (buf), 0);
+ assert (rc == 5);
+ assert (buf [0] == 0);
+ assert (buf [1] == 1);
+ assert (buf [2] == 0);
+ assert (buf [3] == 1);
+ assert (buf [4] == 'a');
+ rc = xs_recv (xpub, buf, sizeof (buf), 0);
+ assert (rc == 5);
+ assert (buf [0] == 0);
+ assert (buf [1] == 1);
+ assert (buf [2] == 0);
+ assert (buf [3] == 1);
+ assert (buf [4] == 'b');
+
+ // Clean up.
+ rc = xs_close (sub);
+ assert (rc == 0);
+ rc = xs_close (xpub);
+ assert (rc == 0);
+ rc = xs_term (ctx);
+ assert (rc == 0);
+
+ return 0 ;
+}
diff --git a/tests/tests.cpp b/tests/tests.cpp
index f5c403a..21d10e3 100644
--- a/tests/tests.cpp
+++ b/tests/tests.cpp
@@ -107,6 +107,10 @@
#include "libzmq21.cpp"
#undef XS_TEST_MAIN
+#define XS_TEST_MAIN resubscribe
+#include "resubscribe.cpp"
+#undef XS_TEST_MAIN
+
int main ()
{
int rc;
@@ -149,6 +153,8 @@ int main ()
assert (rc == 0);
rc = libzmq21 ();
assert (rc == 0);
+ rc = resubscribe ();
+ assert (rc == 0);
fprintf (stderr, "SUCCESS\n");
sleep (1);