typedef void (*stream_connect_function)(isc_nm_t *nm);
+static void
+connect_connect_cb(isc_nmhandle_t *handle, isc_result_t eresult, void *cbarg);
+static void
+connect_read_cb(isc_nmhandle_t *handle, isc_result_t eresult,
+ isc_region_t *region, void *cbarg);
+
isc_nm_t *listen_nm = NULL;
isc_nm_t *connect_nm = NULL;
static bool allow_send_back = false;
static bool stream_use_TLS = false;
+static isc_nm_recv_cb_t connect_readcb = NULL;
+
#define SKIP_IN_CI \
if (skip_long_tests) { \
skip(); \
isc_quota_init(&listener_quota, 0);
atomic_store(&check_listener_quota, false);
+ connect_readcb = connect_read_cb;
+
return (0);
}
return (0);
}
-static void
-noop_connect_cb(isc_nmhandle_t *handle, isc_result_t result, void *cbarg) {
- UNUSED(handle);
- UNUSED(result);
- UNUSED(cbarg);
-
- isc_refcount_decrement(&active_cconnects);
-}
-
static void
connect_send_cb(isc_nmhandle_t *handle, isc_result_t eresult, void *cbarg);
isc_refcount_decrement(&active_cconnects);
- if (eresult != ISC_R_SUCCESS) {
+ if (eresult != ISC_R_SUCCESS || connect_readcb == NULL) {
return;
}
isc_refcount_increment0(&active_creads);
isc_nmhandle_attach(handle, &readhandle);
- isc_nm_read(handle, connect_read_cb, NULL);
+ isc_nm_read(handle, connect_readcb, NULL);
connect_send(handle);
}
listen_send_cb, cbarg);
return;
}
+
/* close the connection on stop_magic */
unref:
if (handle == cbarg) {
mock_udpconnect_uv_udp_open(void **state __attribute__((unused))) {
WILL_RETURN(uv_udp_open, UV_ENOMEM);
+ connect_readcb = NULL;
isc_refcount_increment0(&active_cconnects);
isc_nm_udpconnect(connect_nm, (isc_nmiface_t *)&udp_connect_addr,
- (isc_nmiface_t *)&udp_listen_addr, noop_connect_cb,
+ (isc_nmiface_t *)&udp_listen_addr, connect_connect_cb,
NULL, T_CONNECT, 0);
isc_nm_closedown(connect_nm);
mock_udpconnect_uv_udp_bind(void **state __attribute__((unused))) {
WILL_RETURN(uv_udp_bind, UV_ENOMEM);
+ connect_readcb = NULL;
isc_refcount_increment0(&active_cconnects);
isc_nm_udpconnect(connect_nm, (isc_nmiface_t *)&udp_connect_addr,
- (isc_nmiface_t *)&udp_listen_addr, noop_connect_cb,
+ (isc_nmiface_t *)&udp_listen_addr, connect_connect_cb,
NULL, T_CONNECT, 0);
isc_nm_closedown(connect_nm);
mock_udpconnect_uv_udp_connect(void **state __attribute__((unused))) {
WILL_RETURN(uv_udp_connect, UV_ENOMEM);
+ connect_readcb = NULL;
isc_refcount_increment0(&active_cconnects);
isc_nm_udpconnect(connect_nm, (isc_nmiface_t *)&udp_connect_addr,
- (isc_nmiface_t *)&udp_listen_addr, noop_connect_cb,
+ (isc_nmiface_t *)&udp_listen_addr, connect_connect_cb,
NULL, T_CONNECT, 0);
isc_nm_closedown(connect_nm);
mock_udpconnect_uv_recv_buffer_size(void **state __attribute__((unused))) {
WILL_RETURN(uv_recv_buffer_size, UV_ENOMEM);
+ connect_readcb = NULL;
isc_refcount_increment0(&active_cconnects);
isc_nm_udpconnect(connect_nm, (isc_nmiface_t *)&udp_connect_addr,
- (isc_nmiface_t *)&udp_listen_addr, noop_connect_cb,
+ (isc_nmiface_t *)&udp_listen_addr, connect_connect_cb,
NULL, T_CONNECT, 0);
isc_nm_closedown(connect_nm);
mock_udpconnect_uv_send_buffer_size(void **state __attribute__((unused))) {
WILL_RETURN(uv_send_buffer_size, UV_ENOMEM);
+ connect_readcb = NULL;
isc_refcount_increment0(&active_cconnects);
isc_nm_udpconnect(connect_nm, (isc_nmiface_t *)&udp_connect_addr,
- (isc_nmiface_t *)&udp_listen_addr, noop_connect_cb,
+ (isc_nmiface_t *)&udp_listen_addr, connect_connect_cb,
NULL, T_CONNECT, 0);
isc_nm_closedown(connect_nm);
isc_nmsocket_close(&listen_sock);
assert_null(listen_sock);
+ connect_readcb = NULL;
isc_refcount_increment0(&active_cconnects);
isc_nm_udpconnect(connect_nm, (isc_nmiface_t *)&udp_connect_addr,
- (isc_nmiface_t *)&udp_listen_addr, noop_connect_cb,
+ (isc_nmiface_t *)&udp_listen_addr, connect_connect_cb,
NULL, T_CONNECT, 0);
isc_nm_closedown(connect_nm);
isc_nmsocket_close(&listen_sock);
assert_null(listen_sock);
+ connect_readcb = NULL;
isc_refcount_increment0(&active_cconnects);
- stream_connect(noop_connect_cb, NULL, T_CONNECT, 0);
+ stream_connect(connect_connect_cb, NULL, T_CONNECT, 0);
isc_nm_closedown(connect_nm);
atomic_assert_int_eq(cconnects, 0);
isc_nmsocket_close(&listen_sock);
assert_null(listen_sock);
+ connect_readcb = NULL;
isc_refcount_increment0(&active_cconnects);
isc_nm_tcpdnsconnect(connect_nm, (isc_nmiface_t *)&tcp_connect_addr,
- (isc_nmiface_t *)&tcp_listen_addr, noop_connect_cb,
- NULL, T_CONNECT, 0);
+ (isc_nmiface_t *)&tcp_listen_addr,
+ connect_connect_cb, NULL, T_CONNECT, 0);
isc_nm_closedown(connect_nm);
atomic_assert_int_eq(cconnects, 0);
isc_nmsocket_close(&listen_sock);
assert_null(listen_sock);
+ connect_readcb = NULL;
isc_refcount_increment0(&active_cconnects);
isc_nm_tlsdnsconnect(connect_nm, (isc_nmiface_t *)&tcp_connect_addr,
- (isc_nmiface_t *)&tcp_listen_addr, noop_connect_cb,
- NULL, T_CONNECT, 0, tcp_connect_tlsctx);
+ (isc_nmiface_t *)&tcp_listen_addr,
+ connect_connect_cb, NULL, T_CONNECT, 0,
+ tcp_connect_tlsctx);
isc_nm_closedown(connect_nm);
nm_setup, nm_teardown),
/* TCP */
- /* cmocka_unit_test_setup_teardown(mock_listentcp_uv_tcp_bind,
- */
- /* nm_setup, nm_teardown), */
- /* cmocka_unit_test_setup_teardown(mock_listentcp_uv_fileno, */
- /* nm_setup, nm_teardown), */
- /* cmocka_unit_test_setup_teardown( */
- /* mock_listentcp_uv_tcp_getsockname, nm_setup, */
- /* nm_teardown), */
- /* cmocka_unit_test_setup_teardown(mock_listentcp_uv_listen, */
- /* nm_setup, nm_teardown), */
- /* cmocka_unit_test_setup_teardown(mock_tcpconnect_uv_tcp_bind,
- */
- /* nm_setup, nm_teardown), */
- /* cmocka_unit_test_setup_teardown(mock_tcpconnect_uv_tcp_connect,
- */
- /* nm_setup, nm_teardown), */
cmocka_unit_test_setup_teardown(tcp_noop, nm_setup,
nm_teardown),
cmocka_unit_test_setup_teardown(tcp_noresponse, nm_setup,