From 597cc5edd624525563e6549dc0057eca2a51c81d Mon Sep 17 00:00:00 2001 From: Micah Anderson Date: Tue, 11 Nov 2014 13:30:46 -0500 Subject: upgrade to new version --- tests/test_iov.cpp | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 tests/test_iov.cpp (limited to 'tests/test_iov.cpp') diff --git a/tests/test_iov.cpp b/tests/test_iov.cpp new file mode 100644 index 0000000..718b318 --- /dev/null +++ b/tests/test_iov.cpp @@ -0,0 +1,106 @@ +/* + Copyright (c) 2007-2013 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" + +// XSI vector I/O +#if defined ZMQ_HAVE_UIO +#include +#else +struct iovec { + void *iov_base; + size_t iov_len; +}; +#endif + +void do_check(void* sb, void* sc, unsigned int msgsz) +{ + setup_test_environment(); + int rc; + int sum =0; + for (int i = 0; i < 10; i++) + { + zmq_msg_t msg; + zmq_msg_init_size(&msg, msgsz); + void * data = zmq_msg_data(&msg); + memcpy(data,&i, sizeof(int)); + rc = zmq_msg_send(&msg,sc,i==9 ? 0 :ZMQ_SNDMORE); + assert (rc == (int)msgsz); + zmq_msg_close(&msg); + sum += i; + } + + struct iovec ibuffer[32] ; + memset(&ibuffer[0], 0, sizeof(ibuffer)); + + size_t count = 10; + rc = zmq_recviov(sb,&ibuffer[0],&count,0); + assert (rc == 10); + + int rsum=0; + for(;count;--count) + { + int v; + memcpy(&v,ibuffer[count-1].iov_base,sizeof(int)); + rsum += v; + assert(ibuffer[count-1].iov_len == msgsz); + // free up the memory + free(ibuffer[count-1].iov_base); + } + + assert ( sum == rsum ); + +} + +int main (void) +{ + void *ctx = zmq_ctx_new (); + assert (ctx); + int rc; + + void *sb = zmq_socket (ctx, ZMQ_PULL); + assert (sb); + + rc = zmq_bind (sb, "inproc://a"); + assert (rc == 0); + + msleep (SETTLE_TIME); + void *sc = zmq_socket (ctx, ZMQ_PUSH); + + rc = zmq_connect (sc, "inproc://a"); + assert (rc == 0); + + + // message bigger than vsm max + do_check(sb,sc,100); + + // message smaller than vsm max + do_check(sb,sc,10); + + rc = zmq_close (sc); + assert (rc == 0); + + rc = zmq_close (sb); + assert (rc == 0); + + rc = zmq_ctx_term (ctx); + assert (rc == 0); + + return 0; +} -- cgit v1.2.3