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:
Nick Mathewson 2009-10-21 19:21:05 +00:00
parent b73ad7bc45
commit fdd11c00bb

View File

@ -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);