From 05f404b917ddaf9fee70208a796cdf66ee747050 Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Fri, 6 Jul 2018 20:28:14 -0700 Subject: fixes #583 stress tests can starve completion --- tests/multistress.c | 29 ++++++++++++++++++++++++++++- tests/reqstress.c | 21 +++++++++++++++------ 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/tests/multistress.c b/tests/multistress.c index 1ec2bc6c..cbe16b0f 100644 --- a/tests/multistress.c +++ b/tests/multistress.c @@ -45,6 +45,7 @@ const char *tcp4_template = "tcp://127.0.0.1:%d"; const char *tcp6_template = "tcp://[::1]:%d"; const char *inproc_template = "inproc://nng_multistress_%d"; const char *ipc_template = "ipc:///tmp/nng_multistress_%d"; +nng_time end_time; const char *templates[] = { #ifdef NNG_TRANSPORT_TCP @@ -125,6 +126,10 @@ rep_server(void *arg) nng_msg * msg; nng_socket rep = c->socket; + if (nng_clock() > end_time) { + break; + } + if ((rv = nng_recvmsg(rep, &msg, 0)) != 0) { error(c, "recvmsg", rv); return; @@ -153,6 +158,9 @@ req_client(void *arg) (void) snprintf(buf, sizeof(buf), "%u-%d", req.id, num++); nng_msleep(rand() % 10); + if (nng_clock() > end_time) { + break; + } if ((rv = nng_msg_alloc(&msg, 0)) != 0) { error(c, "alloc fail", rv); @@ -243,6 +251,9 @@ pair0_bouncer(void *arg) int rv; nng_msleep(rand() % 10); + if (nng_clock() > end_time) { + break; + } if ((rv = nng_msg_alloc(&msg, 0)) != 0) { error(c, "alloc", rv); @@ -323,6 +334,9 @@ bus0_bouncer(void *arg) int rv; nng_msleep(rand() % 10); + if (nng_clock() > end_time) { + break; + } if ((rv = nng_msg_alloc(&msg, 0)) != 0) { error(c, "alloc", rv); @@ -403,6 +417,9 @@ pub0_sender(void *arg) int rv; nng_msleep(rand() % 10); + if (nng_clock() > end_time) { + break; + } if ((rv = nng_msg_alloc(&msg, 0)) != 0) { error(c, "alloc", rv); @@ -436,6 +453,9 @@ sub0_receiver(void *arg) } for (;;) { nng_msg *msg; + if (nng_clock() > end_time) { + break; + } if ((rv = nng_recvmsg(c->socket, &msg, 0)) != 0) { error(c, "recvmsg", rv); @@ -504,6 +524,9 @@ pipeline0_pusher(void *arg) int rv; nng_msleep(rand() % 10); + if (nng_clock() > end_time) { + break; + } if ((rv = nng_msg_alloc(&msg, 0)) != 0) { error(c, "alloc", rv); @@ -533,6 +556,9 @@ pipeline0_puller(void *arg) for (;;) { nng_msg *msg; + if (nng_clock() > end_time) { + break; + } if ((rv = nng_recvmsg(c->socket, &msg, 0)) != 0) { error(c, "recvmsg", rv); @@ -621,7 +647,8 @@ Main({ i = ncases; - cases = calloc(ncases, sizeof(test_case)); + cases = calloc(ncases, sizeof(test_case)); + end_time = nng_clock() + (tmo * 1000); while (i > 1) { int x = rand() % NTEMPLATES; if (x > i) { diff --git a/tests/reqstress.c b/tests/reqstress.c index fa4b0975..b06a60c5 100644 --- a/tests/reqstress.c +++ b/tests/reqstress.c @@ -33,11 +33,12 @@ static int next_port = 20000; // port number kind of. -char tcp4_template[] = "tcp://127.0.0.1:%d"; -char tcp6_template[] = "tcp://[::1]:%d"; -char inproc_template[] = "inproc://nng_reqstress_%d"; -char ipc_template[] = "ipc:///tmp/nng_reqstress_%d"; -char ws_template[] = "ws://127.0.0.1:%d/nng_reqstress"; +char tcp4_template[] = "tcp://127.0.0.1:%d"; +char tcp6_template[] = "tcp://[::1]:%d"; +char inproc_template[] = "inproc://nng_reqstress_%d"; +char ipc_template[] = "ipc:///tmp/nng_reqstress_%d"; +char ws_template[] = "ws://127.0.0.1:%d/nng_reqstress"; +nng_time end_time; char *templates[] = { #ifdef NNG_TRANSPORT_TCP @@ -121,6 +122,10 @@ rep_server(void *arg) nng_msg * msg; nng_socket rep = c->socket; + if (nng_clock() > end_time) { + break; + } + if ((rv = nng_recvmsg(rep, &msg, 0)) != 0) { error(c, "recvmsg", rv); return; @@ -149,6 +154,9 @@ req_client(void *arg) (void) snprintf(buf, sizeof(buf), "%u-%d", req.id, num++); nng_msleep(rand() % 10); + if (nng_clock() > end_time) { + break; + } if ((rv = nng_msg_alloc(&msg, 0)) != 0) { error(c, "alloc fail", rv); @@ -257,7 +265,8 @@ Main({ i = ncases; - cases = calloc(ncases, sizeof(test_case)); + cases = calloc(ncases, sizeof(test_case)); + end_time = nng_clock() + (tmo * 1000); while (i > 1) { int x = rand() % NTEMPLATES; if (x > i) { -- cgit v1.2.3-70-g09d2