Add unit tests for SSL session renegotiation.

This tickles the write-blocked-on-read code, and in this case turned
up a bug in it.

svn:r1397
This commit is contained in:
Nick Mathewson 2009-07-30 20:41:21 +00:00
parent 595f7e3877
commit 7a2a51a3a1
2 changed files with 18 additions and 2 deletions

View File

@ -414,7 +414,8 @@ stop_writing(struct bufferevent_openssl *bev_ssl)
static void
set_rbow(struct bufferevent_openssl *bev_ssl)
{
stop_reading(bev_ssl);
if (!bev_ssl->underlying)
stop_reading(bev_ssl);
bev_ssl->read_blocked_on_write = 1;
start_writing(bev_ssl);
}
@ -422,7 +423,8 @@ set_rbow(struct bufferevent_openssl *bev_ssl)
static void
set_wbor(struct bufferevent_openssl *bev_ssl)
{
stop_writing(bev_ssl);
if (!bev_ssl->underlying)
stop_writing(bev_ssl);
bev_ssl->write_blocked_on_read = 1;
start_reading(bev_ssl);
}

View File

@ -148,6 +148,7 @@ static int test_is_done = 0;
static int n_connected = 0;
static int got_close = 0;
static int got_error = 0;
static int renegotiate_at = -1;
static void
respond_to_number(struct bufferevent *bev, void *ctx)
@ -167,6 +168,9 @@ respond_to_number(struct bufferevent *bev, void *ctx)
bufferevent_free(bev); /* Should trigger close on other side. */
return;
}
if (!strcmp(ctx, "client") && n == renegotiate_at) {
SSL_renegotiate(bufferevent_openssl_get_ssl(bev));
}
++n;
evbuffer_add_printf(bufferevent_get_output(bev),
"%d\n", n);
@ -221,6 +225,9 @@ regress_bufferevent_openssl(void *arg)
SSL_use_certificate(ssl2, cert);
SSL_use_PrivateKey(ssl2, key);
if (strstr((char*)data->setup_data, "renegotiate"))
renegotiate_at = 600;
if (strstr((char*)data->setup_data, "socketpair")) {
bev1 = bufferevent_openssl_socket_new(
data->base,
@ -272,6 +279,7 @@ regress_bufferevent_openssl(void *arg)
tt_assert(test_is_done == 1);
tt_assert(n_connected == 2);
/* We don't handle shutdown properly yet.
tt_int_op(got_close, ==, 1);
tt_int_op(got_error, ==, 0);
@ -287,6 +295,12 @@ struct testcase_t ssl_testcases[] = {
{ "bufferevent_filter", regress_bufferevent_openssl,
TT_ISOLATED,
&basic_setup, (void*)"filter" },
{ "bufferevent_renegotiate_socketpair", regress_bufferevent_openssl,
TT_ISOLATED,
&basic_setup, (void*)"socketpair renegotiate" },
{ "bufferevent_renegotiate_filterfilter", regress_bufferevent_openssl,
TT_ISOLATED,
&basic_setup, (void*)"filter renegotiate" },
END_OF_TESTCASES,
};