From: Azat Khuzhin Date: Sat, 3 Nov 2018 21:59:33 +0000 (+0300) Subject: regress: use non blocking descriptors whenever it is possible X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4cbdb39c270c3d00c94797f48e87f64178f2c988;p=libevent regress: use non blocking descriptors whenever it is possible Next tests uses fds without O_NONBLOCK flag - main/free_active_base - main/many_events - et/et (has some other bits cleaned up by using TT_* flags and test setup/cleanup callbacks) And hence they will fail in debug mode (EVENT_DEBUG_MODE=): Assertion flags & O_NONBLOCK failed in event_debug_assert_socket_nonblocking_ --- diff --git a/test/regress.c b/test/regress.c index 6daa17ed..e3966247 100644 --- a/test/regress.c +++ b/test/regress.c @@ -1389,18 +1389,14 @@ test_free_active_base(void *ptr) struct event ev1; base1 = event_init(); - if (base1) { - event_assign(&ev1, base1, data->pair[1], EV_READ, - dummy_read_cb, NULL); - event_add(&ev1, NULL); - event_base_free(base1); /* should not crash */ - } else { - tt_fail_msg("failed to create event_base for test"); - } + tt_assert(base1); + event_assign(&ev1, base1, data->pair[1], EV_READ, dummy_read_cb, NULL); + event_add(&ev1, NULL); + event_base_free(base1); /* should not crash */ base1 = event_init(); tt_assert(base1); - event_assign(&ev1, base1, 0, 0, dummy_read_cb, NULL); + event_assign(&ev1, base1, data->pair[0], 0, dummy_read_cb, NULL); event_active(&ev1, EV_READ, 1); event_base_free(base1); end: @@ -3080,6 +3076,7 @@ test_many_events(void *arg) * instance of that. */ sock[i] = socket(AF_INET, SOCK_DGRAM, 0); tt_assert(sock[i] >= 0); + tt_assert(!evutil_make_socket_nonblocking(sock[i])); called[i] = 0; ev[i] = event_new(base, sock[i], EV_WRITE|evflags, many_event_cb, &called[i]); diff --git a/test/regress_et.c b/test/regress_et.c index b9bd317e..07bcd4a5 100644 --- a/test/regress_et.c +++ b/test/regress_et.c @@ -75,19 +75,14 @@ read_cb(evutil_socket_t fd, short event, void *arg) event_del(arg); } -#ifdef _WIN32 -#define LOCAL_SOCKETPAIR_AF AF_INET -#else -#define LOCAL_SOCKETPAIR_AF AF_UNIX -#endif - static void -test_edgetriggered(void *et) +test_edgetriggered(void *data_) { + struct basic_test_data *data = data_; + struct event_base *base = data->base; + int *pair = data->pair; struct event *ev = NULL; - struct event_base *base = NULL; const char *test = "test string"; - evutil_socket_t pair[2] = {-1,-1}; int supports_et; /* On Linux 3.2.1 (at least, as patched by Fedora and tested by Nick), @@ -96,24 +91,12 @@ test_edgetriggered(void *et) * get edge-triggered behavior. Yuck! Linux 3.1.9 didn't have this * problem. */ -#ifdef __linux__ - if (evutil_ersatz_socketpair_(AF_INET, SOCK_STREAM, 0, pair) == -1) { - tt_abort_perror("socketpair"); - } -#else - if (evutil_socketpair(LOCAL_SOCKETPAIR_AF, SOCK_STREAM, 0, pair) == -1) { - tt_abort_perror("socketpair"); - } -#endif called = was_et = 0; tt_int_op(send(pair[0], test, (int)strlen(test)+1, 0), >, 0); shutdown(pair[0], EVUTIL_SHUT_WR); - /* Initalize the event library */ - base = event_base_new(); - supports_et = base_supports_et(base); TT_BLATHER(("Checking for edge-triggered events with %s, which should %s" "support edge-triggering", event_base_get_method(base), @@ -142,15 +125,11 @@ test_edgetriggered(void *et) tt_assert(!was_et); } - end: +end: if (ev) { event_del(ev); event_free(ev); } - if (base) - event_base_free(base); - evutil_closesocket(pair[0]); - evutil_closesocket(pair[1]); } static void @@ -281,7 +260,8 @@ end: } struct testcase_t edgetriggered_testcases[] = { - { "et", test_edgetriggered, TT_FORK, NULL, NULL }, + { "et", test_edgetriggered, + TT_FORK|TT_NEED_BASE|TT_NEED_SOCKETPAIR, &basic_setup, NULL }, { "et_mix_error", test_edgetriggered_mix_error, TT_FORK|TT_NEED_SOCKETPAIR|TT_NO_LOGS, &basic_setup, NULL }, { "et_multiple_events", test_edge_triggered_multiple_events,