test/regress_ssl: convert client/server to mask too

This commit is contained in:
Azat Khuzhin 2015-09-02 12:26:40 +03:00
parent 0430327364
commit 34559913c0

View File

@ -182,12 +182,28 @@ static int stop_when_connected = 0;
static int pending_connect_events = 0; static int pending_connect_events = 0;
static struct event_base *exit_base = NULL; static struct event_base *exit_base = NULL;
enum regress_openssl_type
{
REGRESS_OPENSSL_SOCKETPAIR = 1,
REGRESS_OPENSSL_FILTER = 2,
REGRESS_OPENSSL_RENEGOTIATE = 4,
REGRESS_OPENSSL_OPEN = 8,
REGRESS_OPENSSL_DIRTY_SHUTDOWN = 16,
REGRESS_OPENSSL_CLIENT = 64,
REGRESS_OPENSSL_SERVER = 128,
};
static void static void
respond_to_number(struct bufferevent *bev, void *ctx) respond_to_number(struct bufferevent *bev, void *ctx)
{ {
struct evbuffer *b = bufferevent_get_input(bev); struct evbuffer *b = bufferevent_get_input(bev);
char *line; char *line;
int n; int n;
enum regress_openssl_type type;
type = (enum regress_openssl_type)ctx;
line = evbuffer_readln(b, NULL, EVBUFFER_EOL_LF); line = evbuffer_readln(b, NULL, EVBUFFER_EOL_LF);
if (! line) if (! line)
return; return;
@ -201,7 +217,7 @@ respond_to_number(struct bufferevent *bev, void *ctx)
bufferevent_free(bev); /* Should trigger close on other side. */ bufferevent_free(bev); /* Should trigger close on other side. */
return; return;
} }
if (!strcmp(ctx, "client") && n == renegotiate_at) { if ((type & REGRESS_OPENSSL_CLIENT) && n == renegotiate_at) {
SSL_renegotiate(bufferevent_openssl_get_ssl(bev)); SSL_renegotiate(bufferevent_openssl_get_ssl(bev));
} }
++n; ++n;
@ -226,6 +242,9 @@ done_writing_cb(struct bufferevent *bev, void *ctx)
static void static void
eventcb(struct bufferevent *bev, short what, void *ctx) eventcb(struct bufferevent *bev, short what, void *ctx)
{ {
enum regress_openssl_type type;
type = (enum regress_openssl_type)ctx;
TT_BLATHER(("Got event %d", (int)what)); TT_BLATHER(("Got event %d", (int)what));
if (what & BEV_EVENT_CONNECTED) { if (what & BEV_EVENT_CONNECTED) {
SSL *ssl; SSL *ssl;
@ -234,7 +253,7 @@ eventcb(struct bufferevent *bev, short what, void *ctx)
ssl = bufferevent_openssl_get_ssl(bev); ssl = bufferevent_openssl_get_ssl(bev);
tt_assert(ssl); tt_assert(ssl);
peer_cert = SSL_get_peer_certificate(ssl); peer_cert = SSL_get_peer_certificate(ssl);
if (0==strcmp(ctx, "server")) { if (type & REGRESS_OPENSSL_SERVER) {
tt_assert(peer_cert == NULL); tt_assert(peer_cert == NULL);
} else { } else {
tt_assert(peer_cert != NULL); tt_assert(peer_cert != NULL);
@ -277,22 +296,14 @@ open_ssl_bufevs(struct bufferevent **bev1_out, struct bufferevent **bev2_out,
} }
bufferevent_setcb(*bev1_out, respond_to_number, done_writing_cb, bufferevent_setcb(*bev1_out, respond_to_number, done_writing_cb,
eventcb, (void*)"client"); eventcb, (void*)(REGRESS_OPENSSL_CLIENT));
bufferevent_setcb(*bev2_out, respond_to_number, done_writing_cb, bufferevent_setcb(*bev2_out, respond_to_number, done_writing_cb,
eventcb, (void*)"server"); eventcb, (void*)(REGRESS_OPENSSL_SERVER));
bufferevent_openssl_set_allow_dirty_shutdown(*bev1_out, allow_dirty_shutdown); bufferevent_openssl_set_allow_dirty_shutdown(*bev1_out, allow_dirty_shutdown);
bufferevent_openssl_set_allow_dirty_shutdown(*bev2_out, allow_dirty_shutdown); bufferevent_openssl_set_allow_dirty_shutdown(*bev2_out, allow_dirty_shutdown);
} }
enum regress_openssl_type
{
REGRESS_OPENSSL_SOCKETPAIR = 1,
REGRESS_OPENSSL_FILTER = 2,
REGRESS_OPENSSL_RENEGOTIATE = 4,
REGRESS_OPENSSL_OPEN = 8,
REGRESS_OPENSSL_DIRTY_SHUTDOWN = 16,
};
static void static void
regress_bufferevent_openssl(void *arg) regress_bufferevent_openssl(void *arg)
{ {
@ -407,7 +418,7 @@ acceptcb(struct evconnlistener *listener, evutil_socket_t fd,
BEV_OPT_CLOSE_ON_FREE|BEV_OPT_DEFER_CALLBACKS); BEV_OPT_CLOSE_ON_FREE|BEV_OPT_DEFER_CALLBACKS);
bufferevent_setcb(bev, respond_to_number, NULL, eventcb, bufferevent_setcb(bev, respond_to_number, NULL, eventcb,
(void*)"server"); (void*)(REGRESS_OPENSSL_SERVER));
bufferevent_enable(bev, EV_READ|EV_WRITE); bufferevent_enable(bev, EV_READ|EV_WRITE);
@ -451,7 +462,7 @@ regress_bufferevent_openssl_connect(void *arg)
tt_assert(bev); tt_assert(bev);
bufferevent_setcb(bev, respond_to_number, NULL, eventcb, bufferevent_setcb(bev, respond_to_number, NULL, eventcb,
(void*)"client"); (void*)(REGRESS_OPENSSL_CLIENT));
tt_assert(getsockname(evconnlistener_get_fd(listener), tt_assert(getsockname(evconnlistener_get_fd(listener),
(struct sockaddr*)&ss, &slen) == 0); (struct sockaddr*)&ss, &slen) == 0);