diff options
author | Azat Khuzhin <a3at.mail@gmail.com> | 2015-09-10 01:17:50 +0300 |
---|---|---|
committer | Azat Khuzhin <a3at.mail@gmail.com> | 2015-09-10 11:18:34 +0300 |
commit | 37dc9e0eca7d0461e82a110a28c4744fd33b8c03 (patch) | |
tree | 0ea59ae3021ac18bee9896e7bf5bb23c5f57884f /test/regress_bufferevent.c | |
parent | 9b16d9b845f5f5bf7653fae4a1d9b0b0960c492d (diff) | |
download | libevent-37dc9e0eca7d0461e82a110a28c4744fd33b8c03.tar.gz |
test/regress_be: introduce fake_listener_create()
Diffstat (limited to 'test/regress_bufferevent.c')
-rw-r--r-- | test/regress_bufferevent.c | 46 |
1 files changed, 30 insertions, 16 deletions
diff --git a/test/regress_bufferevent.c b/test/regress_bufferevent.c index 731db9c8..38ca4458 100644 --- a/test/regress_bufferevent.c +++ b/test/regress_bufferevent.c @@ -616,6 +616,31 @@ end: ; } +static int +fake_listener_create(struct sockaddr_in *localhost) +{ + struct sockaddr *sa = (struct sockaddr *)localhost; + evutil_socket_t fd = -1; + ev_socklen_t slen = sizeof(*localhost); + + memset(localhost, 0, sizeof(*localhost)); + localhost->sin_port = 0; /* have the kernel pick a port */ + localhost->sin_addr.s_addr = htonl(0x7f000001L); + localhost->sin_family = AF_INET; + + /* bind, but don't listen or accept. should trigger + "Connection refused" reliably on most platforms. */ + fd = socket(localhost->sin_family, SOCK_STREAM, 0); + tt_assert(fd >= 0); + tt_assert(bind(fd, sa, slen) == 0); + tt_assert(getsockname(fd, sa, &slen) == 0); + + return fd; + +end: + return -1; +} + static void reader_eventcb(struct bufferevent *bev, short what, void *ctx) { @@ -765,34 +790,23 @@ test_bufferevent_connect_fail(void *arg) { struct basic_test_data *data = (struct basic_test_data *)arg; struct bufferevent *bev=NULL; - struct sockaddr_in localhost; - struct sockaddr *sa = (struct sockaddr*)&localhost; - evutil_socket_t fake_listener = -1; - ev_socklen_t slen = sizeof(localhost); struct event close_listener_event; int close_listener_event_added = 0; struct timeval one_second = { 1, 0 }; + struct sockaddr_in localhost; + ev_socklen_t slen = sizeof(localhost); + evutil_socket_t fake_listener = -1; int r; test_ok = 0; - memset(&localhost, 0, sizeof(localhost)); - localhost.sin_port = 0; /* have the kernel pick a port */ - localhost.sin_addr.s_addr = htonl(0x7f000001L); - localhost.sin_family = AF_INET; - - /* bind, but don't listen or accept. should trigger - "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); - tt_assert(getsockname(fake_listener, sa, &slen) == 0); + fake_listener = fake_listener_create(&localhost); bev = bufferevent_socket_new(data->base, -1, BEV_OPT_CLOSE_ON_FREE | BEV_OPT_DEFER_CALLBACKS); tt_assert(bev); bufferevent_setcb(bev, NULL, NULL, want_fail_eventcb, data->base); - r = bufferevent_socket_connect(bev, sa, slen); + r = bufferevent_socket_connect(bev, (struct sockaddr *)&localhost, slen); /* XXXX we'd like to test the '0' case everywhere, but FreeBSD tells * detects the error immediately, which is not really wrong of it. */ tt_want(r == 0 || r == -1); |