From 14a19cd5d4103d916ef2d10ed47804f491b137d7 Mon Sep 17 00:00:00 2001 From: somdoron Date: Mon, 2 Feb 2015 15:57:30 +0200 Subject: [PATCH] test the server socket can drop multi frame messages that being sent to it --- Makefile.am | 6 +- tests/test_server_drop_more.cpp | 106 ++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 tests/test_server_drop_more.cpp diff --git a/Makefile.am b/Makefile.am index 3b722b19..7cbf3e00 100644 --- a/Makefile.am +++ b/Makefile.am @@ -343,7 +343,8 @@ test_apps = \ tests/test_xpub_manual \ tests/test_xpub_welcome_msg \ tests/test_atomics \ - tests/test_client_server + tests/test_client_server \ + tests/test_server_drop_more tests_test_system_SOURCES = tests/test_system.cpp tests_test_system_LDADD = src/libzmq.la @@ -518,6 +519,9 @@ tests_test_atomics_LDADD = src/libzmq.la tests_test_client_server_SOURCES = tests/test_client_server.cpp tests_test_client_server_LDADD = src/libzmq.la +tests_test_server_drop_more_SOURCES = tests/test_server_drop_more.cpp +tests_test_server_drop_more_LDADD = src/libzmq.la + if !ON_MINGW if !ON_CYGWIN test_apps += \ diff --git a/tests/test_server_drop_more.cpp b/tests/test_server_drop_more.cpp new file mode 100644 index 00000000..868dd456 --- /dev/null +++ b/tests/test_server_drop_more.cpp @@ -0,0 +1,106 @@ +/* + Copyright (c) 2007-2015 Contributors as noted in the AUTHORS file + + This file is part of 0MQ. + + 0MQ 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. + + 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 + 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 . +*/ + +#include "testutil.hpp" + +int send_msg(zmq_msg_t* msg, void* s, int flags, int value); + +int main (void) +{ + setup_test_environment(); + void *ctx = zmq_ctx_new (); + assert (ctx); + + void *server = zmq_socket (ctx, ZMQ_SERVER); + void *client = zmq_socket (ctx, ZMQ_DEALER); + + int rc; + + rc = zmq_bind (server, "inproc://serverdropmore"); + assert (rc == 0); + + rc = zmq_connect (client, "inproc://serverdropmore"); + assert (rc == 0); + + zmq_msg_t msg; + rc = zmq_msg_init (&msg); + assert (rc == 0); + + // we will send 2 3-frames messages and then single frame message, only last one should be received + rc = send_msg (&msg, client, ZMQ_SNDMORE, 1); + assert(rc == 1); + + rc = send_msg (&msg, client, ZMQ_SNDMORE, 2); + assert(rc == 1); + + rc = send_msg (&msg, client, 0, 3); + assert(rc == 1); + + rc = send_msg (&msg, client, ZMQ_SNDMORE, 4); + assert(rc == 1); + + rc = send_msg (&msg, client, ZMQ_SNDMORE, 5); + assert(rc == 1); + + rc = send_msg (&msg, client, 0, 6); + assert(rc == 1); + + rc = send_msg (&msg, client, 0, 7); + assert(rc == 1); + + rc = zmq_msg_recv (&msg, server, 0); + assert (rc == 1); + + assert(zmq_msg_more(&msg) == 0); + + unsigned char* data = (unsigned char*)zmq_msg_data (&msg); + assert (data[0] == 7); + + rc = zmq_msg_close (&msg); + assert (rc == 0); + + rc = zmq_close (server); + assert (rc == 0); + + rc = zmq_close (client); + assert (rc == 0); + + rc = zmq_ctx_term (ctx); + assert (rc == 0); + + return 0 ; +} + +int send_msg(zmq_msg_t* msg, void* s, int flags, int value) +{ + int rc = zmq_msg_close(msg); + + if (rc != 0) + return rc; + + zmq_msg_init_size(msg, 1); + + if (rc != 0) + return rc; + + unsigned char* data = (unsigned char*)zmq_msg_data(msg); + data[0] = (unsigned char)value; + + return zmq_msg_send (msg, s, flags); +}