From 9a336622fb84de9ff2361d51c8671ef9f0f7723e Mon Sep 17 00:00:00 2001 From: sigiesec Date: Tue, 22 Aug 2017 15:54:33 +0200 Subject: [PATCH] Problem: no tests for socket-related functions passing NULL as socket Soluton: added tests --- Makefile.am | 6 ++- tests/CMakeLists.txt | 1 + tests/test_socket_null.cpp | 82 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 tests/test_socket_null.cpp diff --git a/Makefile.am b/Makefile.am index 2a2a448e..54c37dba 100644 --- a/Makefile.am +++ b/Makefile.am @@ -417,7 +417,8 @@ test_apps = \ tests/test_pub_invert_matching \ tests/test_base85 \ tests/test_bind_after_connect_tcp \ - tests/test_sodium + tests/test_sodium \ + tests/test_socket_null tests_test_ancillaries_SOURCES = tests/test_ancillaries.cpp tests_test_ancillaries_LDADD = src/libzmq.la @@ -634,6 +635,9 @@ tests_test_base85_LDADD = src/libzmq.la tests_test_sodium_SOURCES = tests/test_sodium.cpp tests_test_sodium_LDADD = src/libzmq.la +tests_test_socket_null_SOURCES = tests/test_socket_null.cpp +tests_test_socket_null_LDADD = src/libzmq.la + if HAVE_CURVE test_apps += \ diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 1413c488..3c860d84 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -69,6 +69,7 @@ set(tests test_bind_after_connect_tcp test_sodium test_monitor + test_socket_null ) if(ZMQ_HAVE_CURVE) list(APPEND tests diff --git a/tests/test_socket_null.cpp b/tests/test_socket_null.cpp new file mode 100644 index 00000000..a5a52ba6 --- /dev/null +++ b/tests/test_socket_null.cpp @@ -0,0 +1,82 @@ +/* + Copyright (c) 2007-2017 Contributors as noted in the AUTHORS file + + This file is part of libzmq, the ZeroMQ core engine in C++. + + libzmq is free software; you can redistribute it and/or modify it under + the terms of the GNU Lesser General Public License (LGPL) as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + As a special exception, the Contributors give you permission to link + this library with independent modules to produce an executable, + regardless of the license terms of these independent modules, and to + copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the + terms and conditions of the license of that module. An independent + module is a module which is not derived from or based on this library. + If you modify this library, you must extend this exception to your + version of the library. + + libzmq 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" + +// tests all socket-related functions with a NULL socket argument +int main (void) +{ + void *s = zmq_socket (NULL, ZMQ_PAIR); + assert (s == NULL); + assert (errno == EFAULT); // TODO use EINVAL instead? + + int rc = zmq_close (NULL); + assert (rc == -1); + assert (errno == ENOTSOCK); // TODO use EINVAL instead? + + int hwm = 100; + size_t hwm_size = sizeof hwm; + rc = zmq_setsockopt (NULL, ZMQ_SNDHWM, &hwm, hwm_size); + assert (rc == -1); + assert (errno == ENOTSOCK); // TODO use EINVAL instead? + + rc = zmq_getsockopt (NULL, ZMQ_SNDHWM, &hwm, &hwm_size); + assert (rc == -1); + assert (errno == ENOTSOCK); // TODO use EINVAL instead? + + rc = zmq_socket_monitor (NULL, "inproc://monitor", ZMQ_EVENT_ALL); + assert (rc == -1); + assert (errno == ENOTSOCK); // TODO use EINVAL instead? + +#ifdef ZMQ_BUILD_DRAFT_API + rc = zmq_join (NULL, "group"); + assert (rc == -1); + assert (errno == ENOTSOCK); // TODO use EINVAL instead? + + rc = zmq_leave (NULL, "group"); + assert (rc == -1); + assert (errno == ENOTSOCK); // TODO use EINVAL instead? +#endif + + rc = zmq_bind (NULL, "inproc://socket"); + assert (rc == -1); + assert (errno == ENOTSOCK); // TODO use EINVAL instead? + + rc = zmq_connect (NULL, "inproc://socket"); + assert (rc == -1); + assert (errno == ENOTSOCK); // TODO use EINVAL instead? + + rc = zmq_unbind (NULL, "inproc://socket"); + assert (rc == -1); + assert (errno == ENOTSOCK); // TODO use EINVAL instead? + + rc = zmq_disconnect (NULL, "inproc://socket"); + assert (rc == -1); + assert (errno == ENOTSOCK); // TODO use EINVAL instead? +}