diff options
author | Nikos Mavrogiannopoulos <nmav@redhat.com> | 2014-10-02 14:10:16 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@redhat.com> | 2014-10-10 09:26:52 +0200 |
commit | 74344ab30e166fc83fe21cbb671aef745a310259 (patch) | |
tree | cc5e49ff4f9040353bada89d744b0e5a5e18ca24 | |
parent | b3f075e2636a11ac6bab8046a5d5f3ee622fe1f5 (diff) | |
download | gnutls-74344ab30e166fc83fe21cbb671aef745a310259.tar.gz |
tests: added -r option to dtls-stress
That allows it to replay messages in a kind of arbitrary way.
-rwxr-xr-x | tests/dtls/dtls | 3 | ||||
-rw-r--r-- | tests/dtls/dtls-stress.c | 21 |
2 files changed, 24 insertions, 0 deletions
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 <n> set debug level to <n> * -die don't start new tests after the first detected failure * -timeout <n> set handshake timeout to <n> 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; |