From 7d87db05290e3fd742f381b6f419eb69518ca8cf Mon Sep 17 00:00:00 2001 From: Martin Sustrik Date: Thu, 24 Mar 2011 10:03:49 +0100 Subject: Auto-tests modified to use C API instead of C++ binding As a side effect, broker HWM test was fixed. Signed-off-by: Martin Sustrik --- tests/testutil.hpp | 139 +++++++++++++++-------------------------------------- 1 file changed, 39 insertions(+), 100 deletions(-) (limited to 'tests/testutil.hpp') diff --git a/tests/testutil.hpp b/tests/testutil.hpp index 7f182c1..6879dff 100644 --- a/tests/testutil.hpp +++ b/tests/testutil.hpp @@ -22,109 +22,48 @@ #define __ZMQ_TEST_TESTUTIL_HPP_INCLUDED__ #include -#include -#include -#include +#include -#include "../include/zmq.hpp" +#include "../include/zmq.h" -namespace zmqtestutil +inline void bounce (void *sb, void *sc) { - - using namespace std ; - - typedef std::pair 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_) - { - zmq::socket_t *s1 = new zmq::socket_t (*context_, t1_); - zmq::socket_t *s2 = new zmq::socket_t (*context_, t2_); - s1->bind (transport_); - s2->connect (transport_); - 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; - zmq::socket_t &s2 = *sp_.second; - - // Construct message to send. - zmq::message_t ping (orig_msg_.size ()); - memcpy (ping.data (), orig_msg_.c_str (), orig_msg_.size ()); - - // Send ping out. - s1.send (ping, 0); - - // Get pong from connected socket. - zmq::message_t pong; - s2.recv (&pong, 0); - - // Send message via s2, so state is clean in case of req/rep. - std::string ret ((char*) pong.data(), pong.size ()); - s2.send (pong, 0); - - // Return received data as std::string. - 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); - } + const char *content = "12345678ABCDEFGH12345678abcdefgh"; + + // Send the message. + zmq_msg_t msg1; + int rc = zmq_msg_init_size (&msg1, 32); + memcpy (zmq_msg_data (&msg1), content, 32); + rc = zmq_send (sc, &msg1, 0); + assert (rc == 0); + rc = zmq_msg_close (&msg1); + assert (rc == 0); + + // Bounce the message back. + zmq_msg_t msg2; + rc = zmq_msg_init (&msg2); + assert (rc == 0); + rc = zmq_recv (sb, &msg2, 0); + assert (rc == 0); + rc = zmq_send (sb, &msg2, 0); + assert (rc == 0); + rc = zmq_msg_close (&msg2); + assert (rc == 0); + + // Receive the bounced message. + zmq_msg_t msg3; + rc = zmq_msg_init (&msg3); + assert (rc == 0); + rc = zmq_recv (sc, &msg3, 0); + assert (rc == 0); + + // Check whether the message is still the same. + assert (zmq_msg_size (&msg3) == 32); + assert (memcmp (zmq_msg_data (&msg3), content, 32) == 0); + + rc = zmq_msg_close (&msg3); + assert (rc == 0); } + #endif -- cgit v1.2.3