summaryrefslogtreecommitdiff
path: root/tests/dtls
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@redhat.com>2014-10-02 14:10:16 +0200
committerNikos Mavrogiannopoulos <nmav@redhat.com>2014-10-02 14:54:26 +0200
commit8bd15b84107ace3419bd7d2fe29da167f40652f8 (patch)
tree2b6c80503dcfafc0ade0de9276231c2a6f9c2699 /tests/dtls
parent56fc10ff30eb493c62a69de4e25caa98d19233b3 (diff)
downloadgnutls-8bd15b84107ace3419bd7d2fe29da167f40652f8.tar.gz
tests: added -r option to dtls-stress
That allows it to replay messages in a kind of arbitrary way.
Diffstat (limited to 'tests/dtls')
-rwxr-xr-xtests/dtls/dtls3
-rw-r--r--tests/dtls/dtls-stress.c21
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;