From: Nikos Mavrogiannopoulos Date: Thu, 2 Oct 2014 12:10:16 +0000 (+0200) Subject: tests: added -r option to dtls-stress X-Git-Tag: gnutls_3_4_0~846 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8bd15b84107ace3419bd7d2fe29da167f40652f8;p=thirdparty%2Fgnutls.git tests: added -r option to dtls-stress That allows it to replay messages in a kind of arbitrary way. --- diff --git a/tests/dtls/dtls b/tests/dtls/dtls index 4e841c9f9f..1a80573024 100755 --- a/tests/dtls/dtls +++ b/tests/dtls/dtls @@ -26,6 +26,9 @@ if test "${WINDIR}" != "";then exit 77 fi +./dtls-stress -full -shello 01234 -sfinished 01 -cfinished 01234 CCertificate CKeyExchange CCertificateVerify CChangeCipherSpec CFinished -d 6 +./dtls-stress -full -r -shello 42130 -sfinished 10 -cfinished 43210 SHello SKeyExchange SHelloDone CKeyExchange CChangeCipherSpec CFinished SChangeCipherSpec SCertificate SFinished + ./dtls-stress -shello 021 -sfinished 01 -cfinished 012 SKeyExchange CKeyExchange CFinished ./dtls-stress -shello 012 -sfinished 10 -cfinished 210 SHello SKeyExchange SHelloDone ./dtls-stress -shello 012 -sfinished 01 -cfinished 021 SHello SKeyExchange SHelloDone diff --git a/tests/dtls/dtls-stress.c b/tests/dtls/dtls-stress.c index ebbfc09342..bd73ba6454 100644 --- a/tests/dtls/dtls-stress.c +++ b/tests/dtls/dtls-stress.c @@ -26,6 +26,7 @@ * -nb enable nonblocking operations on sessions * -batch read test identifiers from stdin and run them * -d increase debug level by one + * -r replay messages (very crude replay mechanism) * -d set debug level to * -die don't start new tests after the first detected failure * -timeout set handshake timeout to seconds. Tests that don't make progress @@ -329,6 +330,7 @@ enum role role; int debug; int nonblock; +int replay; int full; int timeout_seconds; int retransmit_milliseconds; @@ -493,6 +495,9 @@ static void filter_clear_state(void) sizeof(state_permute_ClientFinishedFull)); } +static int rbuffer[5*1024]; +unsigned rbuffer_size = 0; + static void filter_run_next(gnutls_transport_ptr_t fd, const unsigned char *buffer, size_t len) { @@ -504,6 +509,19 @@ static void filter_run_next(gnutls_transport_ptr_t fd, send((int) (intptr_t) fd, buffer, len, 0); } filter_current_idx--; + + if (replay != 0) { + if (rbuffer_size == 0 && len < sizeof(rbuffer)) { + memcpy(rbuffer, buffer, len); + rbuffer_size = len; + } else if (rbuffer_size != 0) { + send((int) (intptr_t) fd, rbuffer, rbuffer_size, 0); + if (len < sizeof(rbuffer) && len > rbuffer_size) { + memcpy(rbuffer, buffer, len); + rbuffer_size = len; + } + } + } } // }}} @@ -1200,6 +1218,7 @@ int main(int argc, const char *argv[]) int arg; nonblock = 0; + replay = 0; debug = 0; timeout_seconds = 120; retransmit_milliseconds = 100; @@ -1236,6 +1255,8 @@ int main(int argc, const char *argv[]) } } else if (strcmp("-nb", argv[arg]) == 0) { nonblock = 1; + } else if (strcmp("-r", argv[arg]) == 0) { + replay = 1; } else if (strcmp("-timeout", argv[arg]) == 0) { char *end; int val;