diff options
| author | Garrett D'Amore <garrett@damore.org> | 2018-05-09 10:24:35 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2018-05-09 12:49:52 -0700 |
| commit | e0beb13b066d27ce32347a1c18c9d441828dc553 (patch) | |
| tree | eff76caf075f8a191a82d22b8b47d0245e43b9cd | |
| parent | 25e801be9c4889b8df48cce842bbf2e2628d38db (diff) | |
| download | nng-e0beb13b066d27ce32347a1c18c9d441828dc553.tar.gz nng-e0beb13b066d27ce32347a1c18c9d441828dc553.tar.bz2 nng-e0beb13b066d27ce32347a1c18c9d441828dc553.zip | |
fixes #423 desire tunable stress time and pressure in stress tests
Use -p STRESSPRESSURE=<count> (default 32) and -p STRESSTIME=<sec>
to affect stress run. Pressure should be a number [2,x] where x
is determined by the number of threads and file descriptors your
platform can handle. Modern platforms should be able to handle
at least 100.
| -rw-r--r-- | tests/multistress.c | 45 | ||||
| -rw-r--r-- | tests/reqstress.c | 36 |
2 files changed, 61 insertions, 20 deletions
diff --git a/tests/multistress.c b/tests/multistress.c index d88d0af5..62838a73 100644 --- a/tests/multistress.c +++ b/tests/multistress.c @@ -154,13 +154,17 @@ req_client(void *arg) nng_msleep(rand() % 10); - if (((rv = nng_msg_alloc(&msg, 0)) != 0) || - ((rv = nng_msg_append(msg, buf, strlen(buf) + 1)) != 0)) { + if ((rv = nng_msg_alloc(&msg, 0)) != 0) { error(c, "alloc fail", rv); return; } - + if ((rv = nng_msg_append(msg, buf, strlen(buf) + 1)) != 0) { + nng_msg_free(msg); + error(c, "append fail", rv); + return; + } if ((rv = nng_sendmsg(req, msg, 0)) != 0) { + nng_msg_free(msg); error(c, "sendmsg", rv); return; } @@ -247,11 +251,13 @@ pair0_bouncer(void *arg) r = rand(); if ((rv = nng_msg_append(msg, &r, sizeof(r))) != 0) { + nng_msg_free(msg); error(c, "msg_append", rv); return; } if ((rv = nng_sendmsg(c->socket, msg, 0)) != 0) { + nng_msg_free(msg); error(c, "sendmsg", rv); return; } @@ -325,11 +331,13 @@ bus0_bouncer(void *arg) r = rand(); if ((rv = nng_msg_append(msg, &r, sizeof(r))) != 0) { + nng_msg_free(msg); error(c, "msg_append", rv); return; } if ((rv = nng_sendmsg(c->socket, msg, 0)) != 0) { + nng_msg_free(msg); error(c, "sendmsg", rv); return; } @@ -402,11 +410,13 @@ pub0_sender(void *arg) } if ((rv = nng_msg_append(msg, "SUB", 4)) != 0) { + nng_msg_free(msg); error(c, "msg_append", rv); return; } if ((rv = nng_sendmsg(c->socket, msg, 0)) != 0) { + nng_msg_free(msg); error(c, "sendmsg", rv); return; } @@ -501,11 +511,13 @@ pipeline0_pusher(void *arg) } if ((rv = nng_msg_append(msg, "PUSH", 5)) != 0) { + nng_msg_free(msg); error(c, "msg_append", rv); return; } if ((rv = nng_sendmsg(c->socket, msg, 0)) != 0) { + nng_msg_free(msg); error(c, "sendmsg", rv); return; } @@ -539,6 +551,8 @@ pipeline0_test(int ntests) char addr[NNG_MAXADDRLEN]; int rv; + atexit(nng_fini); + if (ntests < 2) { // Need a client *and* a server. return; @@ -581,19 +595,30 @@ pipeline0_test(int ntests) } Main({ - int i; + int i; + char *str; + int tmo; + + atexit(nng_fini); // Each run should truly be random. srand((int) time(NULL)); + if (((str = ConveyGetEnv("STRESSTIME")) == NULL) || + ((tmo = atoi(str)) < 1)) { + tmo = 30; + } + // We have to keep this relatively low by default because some + // platforms don't support large numbers of threads. + if (((str = ConveyGetEnv("STRESSPRESSURE")) == NULL) || + ((ncases = atoi(str)) < 1)) { + ncases = 32; + } + // Reduce the likelihood of address in use conflicts between // subsequent runs. next_port += (rand() % 100) * 100; - // We have to keep this relatively low because some platforms - // don't support large numbers of threads. - ncases = 32; - i = ncases; cases = calloc(ncases, sizeof(test_case)); @@ -627,8 +652,8 @@ Main({ i -= x; } - dprintf("WAITING for 30 sec...\n"); - nng_msleep(30000); // sleep 30 sec + dprintf("WAITING for %d sec...\n", tmo); + nng_msleep(tmo * 1000); // sleep 30 sec nng_closeall(); Test("MultiProtocol/Transport Stress", { diff --git a/tests/reqstress.c b/tests/reqstress.c index 81249946..f2ee502d 100644 --- a/tests/reqstress.c +++ b/tests/reqstress.c @@ -150,13 +150,17 @@ req_client(void *arg) nng_msleep(rand() % 10); - if (((rv = nng_msg_alloc(&msg, 0)) != 0) || - ((rv = nng_msg_append(msg, buf, strlen(buf) + 1)) != 0)) { + if ((rv = nng_msg_alloc(&msg, 0)) != 0) { error(c, "alloc fail", rv); return; } - + if ((rv = nng_msg_append(msg, buf, strlen(buf) + 1)) != 0) { + nng_msg_free(msg); + error(c, "append fail", rv); + return; + } if ((rv = nng_sendmsg(req, msg, 0)) != 0) { + nng_msg_free(msg); error(c, "sendmsg", rv); return; } @@ -169,6 +173,7 @@ req_client(void *arg) if (strcmp(nng_msg_body(msg), buf) != 0) { error(c, "mismatched message", NNG_EINTERNAL); + nng_msg_free(msg); return; } @@ -226,7 +231,22 @@ reqrep_test(int ntests) } Main({ - int i; + int i; + int tmo; + char *str; + + atexit(nng_fini); + + if (((str = ConveyGetEnv("STRESSTIME")) == NULL) || + ((tmo = atoi(str)) < 1)) { + tmo = 30; + } + // We have to keep this relatively low by default because some + // platforms don't support large numbers of threads. + if (((str = ConveyGetEnv("STRESSPRESSURE")) == NULL) || + ((ncases = atoi(str)) < 1)) { + ncases = 32; + } // Each run should truly be random. srand((int) time(NULL)); @@ -235,10 +255,6 @@ Main({ // subsequent runs. next_port += (rand() % 100) * 100; - // We have to keep this relatively low because some platforms - // don't support large numbers of threads. - ncases = 32; - i = ncases; cases = calloc(ncases, sizeof(test_case)); @@ -251,8 +267,8 @@ Main({ i -= x; } - dprintf("WAITING for 30 sec...\n"); - nng_msleep(30000); // sleep 30 sec + dprintf("WAITING for %d sec...\n", tmo); + nng_msleep(tmo * 1000); // sleep 30 sec nng_closeall(); Test("Req/Rep Stress", { |
