de03c9a6ab
Solution: actually send a message rather than just opening/closing the sockets, as connecting is asynchronous. tests/test_inproc_connect.cpp:341:test_bind_before_connect:PASS tests/test_inproc_connect.cpp:342:test_connect_before_bind:PASS tests/test_inproc_connect.cpp:343:test_connect_before_bind_pub_sub:PASS tests/test_inproc_connect.cpp:344:test_connect_before_bind_ctx_term:PASS tests/test_inproc_connect.cpp:345:test_multiple_connects:PASS tests/test_inproc_connect.cpp:346:test_multiple_threads:PASS Assertion failed: _state == active || _state == waiting_for_delimiter (src/pipe.cpp:504) 0 0xffffa015d3e4 in /usr/src/packages/BUILD/src/.libs/libzmq.so.5 (zmq::zmq_abort(char const*)+0xc) 1 0xffffa017b208 in /usr/src/packages/BUILD/src/.libs/libzmq.so.5 (zmq::pipe_t::process_delimiter()+0xb0) 2 0xffffa017b420 in /usr/src/packages/BUILD/src/.libs/libzmq.so.5 (zmq::pipe_t::read(zmq::msg_t*)+0xd8) 3 0xffffa01a4b28 in /usr/src/packages/BUILD/src/.libs/libzmq.so.5 (zmq::xpub_t::xread_activated(zmq::pipe_t*)+0x110) 4 0xffffa01a3758 in /usr/src/packages/BUILD/src/.libs/libzmq.so.5 (zmq::xpub_t::xattach_pipe(zmq::pipe_t*, bool, bool)+0x68) 5 0xffffa018dc3c in /usr/src/packages/BUILD/src/.libs/libzmq.so.5 (zmq::socket_base_t::attach_pipe(zmq::pipe_t*, bool, bool)+0x94) 6 0xffffa016f288 in /usr/src/packages/BUILD/src/.libs/libzmq.so.5 (zmq::object_t::process_command(zmq::command_t const&)+0x148) 7 0xffffa014ee3c in /usr/src/packages/BUILD/src/.libs/libzmq.so.5 (zmq::ctx_t::connect_inproc_sockets(zmq::socket_base_t*, zmq::options_t const&, zmq::ctx_t::pending_connection_t const&, zmq::ctx_t::side)+0xdc) 8 0xffffa0150bec in /usr/src/packages/BUILD/src/.libs/libzmq.so.5 (zmq::ctx_t::connect_pending(char const*, zmq::socket_base_t*)+0x1fc) 9 0xffffa0190034 in /usr/src/packages/BUILD/src/.libs/libzmq.so.5 (zmq::socket_base_t::bind(char const*)+0x3e4) 10 0xaaaae50475d8 in /usr/src/packages/BUILD/tests/.libs/test_inproc_connect (simult_bind(void*)+0x28) 11 0xffffa019bfb8 in /usr/src/packages/BUILD/src/.libs/libzmq.so.5 (thread_routine+0x70) 12 0xffffa00e07e4 in /lib/aarch64-linux-gnu/libpthread.so.0 (start_thread+0x18c) 13 0xffff9fdcab2c in /lib/aarch64-linux-gnu/libc.so.6 (clone+0x5c) |
||
---|---|---|
.. | ||
CMakeLists.txt | ||
README.md | ||
test_abstract_ipc.cpp | ||
test_address_tipc.cpp | ||
test_ancillaries.cpp | ||
test_app_meta.cpp | ||
test_atomics.cpp | ||
test_base85.cpp | ||
test_bind_after_connect_tcp.cpp | ||
test_bind_curve_fuzzer.cpp | ||
test_bind_fuzzer.cpp | ||
test_bind_null_fuzzer.cpp | ||
test_bind_src_address.cpp | ||
test_bind_stream_fuzzer.cpp | ||
test_bind_ws_fuzzer.cpp | ||
test_busy_poll.cpp | ||
test_capabilities.cpp | ||
test_channel.cpp | ||
test_client_server.cpp | ||
test_conflate.cpp | ||
test_connect_curve_fuzzer.cpp | ||
test_connect_delay_tipc.cpp | ||
test_connect_fuzzer.cpp | ||
test_connect_null_fuzzer.cpp | ||
test_connect_resolve.cpp | ||
test_connect_rid.cpp | ||
test_connect_stream_fuzzer.cpp | ||
test_connect_ws_fuzzer.cpp | ||
test_ctx_destroy.cpp | ||
test_ctx_options.cpp | ||
test_dgram.cpp | ||
test_diffserv.cpp | ||
test_disconnect_inproc.cpp | ||
test_disconnect_msg.cpp | ||
test_filter_ipc.cpp | ||
test_fork.cpp | ||
test_getsockopt_memset.cpp | ||
test_heartbeats.cpp | ||
test_hello_msg.cpp | ||
test_hiccup_msg.cpp | ||
test_hwm_pubsub.cpp | ||
test_hwm.cpp | ||
test_immediate.cpp | ||
test_inproc_connect.cpp | ||
test_invalid_rep.cpp | ||
test_iov.cpp | ||
test_ipc_wildcard.cpp | ||
test_issue_566.cpp | ||
test_last_endpoint.cpp | ||
test_many_sockets.cpp | ||
test_metadata.cpp | ||
test_mock_pub_sub.cpp | ||
test_monitor.cpp | ||
test_msg_ffn.cpp | ||
test_msg_flags.cpp | ||
test_msg_init.cpp | ||
test_pair_inproc.cpp | ||
test_pair_ipc.cpp | ||
test_pair_tcp_cap_net_admin.cpp | ||
test_pair_tcp.cpp | ||
test_pair_tipc.cpp | ||
test_pair_vmci.cpp | ||
test_peer.cpp | ||
test_poller.cpp | ||
test_probe_router.cpp | ||
test_proxy_hwm.cpp | ||
test_proxy_single_socket.cpp | ||
test_proxy_terminate.cpp | ||
test_proxy.cpp | ||
test_pub_invert_matching.cpp | ||
test_pubsub.cpp | ||
test_radio_dish.cpp | ||
test_rebind_ipc.cpp | ||
test_reconnect_ivl.cpp | ||
test_reconnect_options.cpp | ||
test_req_correlate.cpp | ||
test_req_relaxed.cpp | ||
test_reqrep_device_tipc.cpp | ||
test_reqrep_device.cpp | ||
test_reqrep_inproc.cpp | ||
test_reqrep_ipc.cpp | ||
test_reqrep_tcp.cpp | ||
test_reqrep_tipc.cpp | ||
test_reqrep_vmci.cpp | ||
test_router_handover.cpp | ||
test_router_mandatory_hwm.cpp | ||
test_router_mandatory_tipc.cpp | ||
test_router_mandatory.cpp | ||
test_router_notify.cpp | ||
test_scatter_gather.cpp | ||
test_security_curve.cpp | ||
test_security_gssapi.cpp | ||
test_security_no_zap_handler.cpp | ||
test_security_null.cpp | ||
test_security_plain.cpp | ||
test_security_zap.cpp | ||
test_setsockopt.cpp | ||
test_shutdown_stress_tipc.cpp | ||
test_shutdown_stress.cpp | ||
test_socket_null.cpp | ||
test_socket_options_fuzzer.cpp | ||
test_sockopt_hwm.cpp | ||
test_socks.cpp | ||
test_sodium.cpp | ||
test_spec_dealer.cpp | ||
test_spec_pushpull.cpp | ||
test_spec_rep.cpp | ||
test_spec_req.cpp | ||
test_spec_router.cpp | ||
test_srcfd.cpp | ||
test_stream_disconnect.cpp | ||
test_stream_empty.cpp | ||
test_stream_exceeds_buffer.cpp | ||
test_stream_timeout.cpp | ||
test_stream.cpp | ||
test_sub_forward_tipc.cpp | ||
test_sub_forward.cpp | ||
test_system.cpp | ||
test_tcp_accept_filter.cpp | ||
test_term_endpoint_tipc.cpp | ||
test_term_endpoint.cpp | ||
test_thread_safe.cpp | ||
test_timeo.cpp | ||
test_timers.cpp | ||
test_unbind_wildcard.cpp | ||
test_use_fd.cpp | ||
test_ws_transport.cpp | ||
test_wss_transport.cpp | ||
test_xpub_manual_last_value.cpp | ||
test_xpub_manual.cpp | ||
test_xpub_nodrop.cpp | ||
test_xpub_verbose.cpp | ||
test_xpub_welcome_msg.cpp | ||
test_z85_decode_fuzzer.cpp | ||
test_zmq_poll_fd.cpp | ||
testutil_monitoring.cpp | ||
testutil_monitoring.hpp | ||
testutil_security.cpp | ||
testutil_security.hpp | ||
testutil_unity.cpp | ||
testutil_unity.hpp | ||
testutil.cpp | ||
testutil.hpp |
Guidelines for tests
Write your test case as if you were writing clean application code. It should be safe to compile on all platforms.
Normally, you should only include the header files from the tests directory, e.g. testutil.hpp
. Do not include files from src. Do not use the internal libzmq API. Tests for these should be placed in unittests instead.
If you must write non-portable code, wrap it in #ifdefs to ensure it will compile and run on all systems.
Note that testutil.hpp includes platform.h. Do not include it yourself as it changes location depending on the build system and OS.
All sources must contain the correct copyright header. Please copy from test_system.cpp if you're not certain.
Write new tests using the unity test framework. For an example, see test_sockopt_hwm.
Please use only ANSI C99 in test cases, no C++. This is to make the code more reusable.
On many slower environments, like embedded systems, VMs or CI systems, tests might fail because it takes time for sockets to settle after a connect. If you need to add a sleep, please be consistent with all the other tests and use: msleep (SETTLE_TIME);
Ensure proper cleanup
If a test program uses unity, it will execute test cases individually, and will continue to run further test cases if an assertion in one test case fails. However, the test case that had an assertion failure will be aborted. To ensure that the resources of the test case are properly cleaned up, use appropriate setUp and tearDown functions. These are run by unity before each test case starts resp. after it ended (whether successfully or not). The same setUp and tearDown function is used for all test cases in a test program.
For many test cases, the following setUp and tearDown functions will be appropriate: void setUp () { setup_test_context (); }
void tearDown ()
{
teardown_test_context ();
}
Within the tests, do not use zmq_socket and zmq_close then but test_context_socket and test_context_socket_close instead. These functions will register/unregister sockets with the test_context. All sockets not closed when tearDown is executed, with forcibly be closed with linger=0 before terminating the context. Note that it is a misuse not to close sockets during successful test execution, and a warning will be output.
Building tests in Windows
The tests are only built via cmake, not when using the checked-in Visual Studio .sln files.