From: Azat Khuzhin Date: Fri, 2 Dec 2016 15:32:03 +0000 (+0300) Subject: test/ssl: cover case when we writing to be_openssl after connecting X-Git-Tag: release-2.1.8-stable~5^2~4 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d047c2412ecb67187fe5edbf703f26f5d160c5f5;p=libevent test/ssl: cover case when we writing to be_openssl after connecting Right now it fails because of regression for filtered openssl bufferevent, and by it I mean ssl/bufferevent_filter_write_after_connect test, and by fails - hang. Regression-for: da52933550fd4736aa1c213b6de497e2ffc31e34 ("be_openssl: don't call do_write() directly from outbuf_cb") --- diff --git a/test/regress_ssl.c b/test/regress_ssl.c index 8a5524a8..6d31cfce 100644 --- a/test/regress_ssl.c +++ b/test/regress_ssl.c @@ -227,6 +227,8 @@ enum regress_openssl_type REGRESS_OPENSSL_FREED = 256, REGRESS_OPENSSL_TIMEOUT = 512, REGRESS_OPENSSL_SLEEP = 1024, + + REGRESS_OPENSSL_CLIENT_WRITE = 2048, }; static void @@ -322,6 +324,9 @@ eventcb(struct bufferevent *bev, short what, void *ctx) if (--pending_connect_events == 0) event_base_loopexit(exit_base, NULL); } + + if ((type & REGRESS_OPENSSL_CLIENT_WRITE) && (type & REGRESS_OPENSSL_CLIENT)) + evbuffer_add_printf(bufferevent_get_output(bev), "1\n"); } else if (what & BEV_EVENT_EOF) { TT_BLATHER(("Got a good EOF")); ++got_close; @@ -465,7 +470,8 @@ regress_bufferevent_openssl(void *arg) bufferevent_enable(bev1, EV_READ|EV_WRITE); bufferevent_enable(bev2, EV_READ|EV_WRITE); - evbuffer_add_printf(bufferevent_get_output(bev1), "1\n"); + if (!(type & REGRESS_OPENSSL_CLIENT_WRITE)) + evbuffer_add_printf(bufferevent_get_output(bev1), "1\n"); event_base_dispatch(data->base); @@ -488,7 +494,8 @@ regress_bufferevent_openssl(void *arg) bufferevent_set_timeouts(bev1, &t, &t); - evbuffer_add_printf(bufferevent_get_output(bev1), "1\n"); + if (!(type & REGRESS_OPENSSL_CLIENT_WRITE)) + evbuffer_add_printf(bufferevent_get_output(bev1), "1\n"); event_base_dispatch(data->base); @@ -731,8 +738,14 @@ struct testcase_t ssl_testcases[] = { #define T(a) ((void *)(a)) { "bufferevent_socketpair", regress_bufferevent_openssl, TT_ISOLATED, &basic_setup, T(REGRESS_OPENSSL_SOCKETPAIR) }, + { "bufferevent_socketpair_write_after_connect", regress_bufferevent_openssl, + TT_ISOLATED, &basic_setup, + T(REGRESS_OPENSSL_SOCKETPAIR|REGRESS_OPENSSL_CLIENT_WRITE) }, { "bufferevent_filter", regress_bufferevent_openssl, TT_ISOLATED, &basic_setup, T(REGRESS_OPENSSL_FILTER) }, + { "bufferevent_filter_write_after_connect", regress_bufferevent_openssl, + TT_ISOLATED, &basic_setup, + T(REGRESS_OPENSSL_FILTER|REGRESS_OPENSSL_CLIENT_WRITE) }, { "bufferevent_renegotiate_socketpair", regress_bufferevent_openssl, TT_ISOLATED, &basic_setup, T(REGRESS_OPENSSL_SOCKETPAIR | REGRESS_OPENSSL_RENEGOTIATE) },