]> granicus.if.org Git - libevent/commitdiff
test/ssl: cover case when we writing to be_openssl after connecting
authorAzat Khuzhin <a3at.mail@gmail.com>
Fri, 2 Dec 2016 15:32:03 +0000 (18:32 +0300)
committerAzat Khuzhin <a3at.mail@gmail.com>
Thu, 19 Jan 2017 17:53:05 +0000 (20:53 +0300)
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")

test/regress_ssl.c

index 8a5524a8eef86cec4aa85c1ed694e0e49a8aae11..6d31cfce091182d92685192d8a11315ddfdb3f87 100644 (file)
@@ -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) },