mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-10 04:50:37 -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);
|
||||
}
|
||||
|
||||
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
|
||||
test_bufferevent_connect_fail(void *arg)
|
||||
{
|
||||
@ -526,6 +536,8 @@ test_bufferevent_connect_fail(void *arg)
|
||||
struct sockaddr *sa = (struct sockaddr*)&localhost;
|
||||
evutil_socket_t fake_listener = -1;
|
||||
ev_socklen_t slen = sizeof(localhost);
|
||||
struct event close_listener_event;
|
||||
struct timeval one_second = { 1, 0 };
|
||||
|
||||
test_ok = 0;
|
||||
|
||||
@ -535,7 +547,7 @@ test_bufferevent_connect_fail(void *arg)
|
||||
localhost.sin_family = AF_INET;
|
||||
|
||||
/* 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);
|
||||
tt_assert(fake_listener >= 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));
|
||||
|
||||
/* 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);
|
||||
|
||||
tt_int_op(test_ok, ==, 1);
|
||||
|
Loading…
x
Reference in New Issue
Block a user