mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-11 13:24:43 -04:00
Make the bufferevent_connect_fail test faster on OSX.
It seems that connecting to a listener that is bound but not accepting or listening doesn't give a 'connection refused' error on OSX, but rather makes the connect() time out after 75 seconds. I couldn't find any way to make the timout shorter. Fortunately, closing the listener after a second or so makes the desired error occur after another second or so. svn:r1457
This commit is contained in:
parent
b73ad7bc45
commit
fdd11c00bb
@ -517,6 +517,16 @@ want_fail_eventcb(struct bufferevent *bev, short what, void *ctx)
|
|||||||
event_base_loopexit(base, NULL);
|
event_base_loopexit(base, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
close_socket_cb(evutil_socket_t fd, short what, void *arg)
|
||||||
|
{
|
||||||
|
evutil_socket_t *fdp = arg;
|
||||||
|
if (*fdp >= 0) {
|
||||||
|
EVUTIL_CLOSESOCKET(*fdp);
|
||||||
|
*fdp = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_bufferevent_connect_fail(void *arg)
|
test_bufferevent_connect_fail(void *arg)
|
||||||
{
|
{
|
||||||
@ -526,6 +536,8 @@ test_bufferevent_connect_fail(void *arg)
|
|||||||
struct sockaddr *sa = (struct sockaddr*)&localhost;
|
struct sockaddr *sa = (struct sockaddr*)&localhost;
|
||||||
evutil_socket_t fake_listener = -1;
|
evutil_socket_t fake_listener = -1;
|
||||||
ev_socklen_t slen = sizeof(localhost);
|
ev_socklen_t slen = sizeof(localhost);
|
||||||
|
struct event close_listener_event;
|
||||||
|
struct timeval one_second = { 1, 0 };
|
||||||
|
|
||||||
test_ok = 0;
|
test_ok = 0;
|
||||||
|
|
||||||
@ -535,7 +547,7 @@ test_bufferevent_connect_fail(void *arg)
|
|||||||
localhost.sin_family = AF_INET;
|
localhost.sin_family = AF_INET;
|
||||||
|
|
||||||
/* bind, but don't listen or accept. should trigger
|
/* bind, but don't listen or accept. should trigger
|
||||||
"Connection refused" reliably */
|
"Connection refused" reliably on most platforms. */
|
||||||
fake_listener = socket(localhost.sin_family, SOCK_STREAM, 0);
|
fake_listener = socket(localhost.sin_family, SOCK_STREAM, 0);
|
||||||
tt_assert(fake_listener >= 0);
|
tt_assert(fake_listener >= 0);
|
||||||
tt_assert(bind(fake_listener, sa, slen) == 0);
|
tt_assert(bind(fake_listener, sa, slen) == 0);
|
||||||
@ -547,6 +559,12 @@ test_bufferevent_connect_fail(void *arg)
|
|||||||
|
|
||||||
tt_want(!bufferevent_socket_connect(bev, sa, slen));
|
tt_want(!bufferevent_socket_connect(bev, sa, slen));
|
||||||
|
|
||||||
|
/* Close the listener socket after a second. This should trigger
|
||||||
|
"connection refused" on some other platforms, including OSX. */
|
||||||
|
evtimer_assign(&close_listener_event, data->base, close_socket_cb,
|
||||||
|
&fake_listener);
|
||||||
|
event_add(&close_listener_event, &one_second);
|
||||||
|
|
||||||
event_base_dispatch(data->base);
|
event_base_dispatch(data->base);
|
||||||
|
|
||||||
tt_int_op(test_ok, ==, 1);
|
tt_int_op(test_ok, ==, 1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user