]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
tests: added -r option to dtls-stress
authorNikos Mavrogiannopoulos <nmav@redhat.com>
Thu, 2 Oct 2014 12:10:16 +0000 (14:10 +0200)
committerNikos Mavrogiannopoulos <nmav@redhat.com>
Thu, 2 Oct 2014 12:54:26 +0000 (14:54 +0200)
That allows it to replay messages in a kind of arbitrary way.

tests/dtls/dtls
tests/dtls/dtls-stress.c

index 4e841c9f9f7cb18ec82b93d9d53ff43bbfca6f77..1a80573024308462b3e804185ffb6c60a83d2452 100755 (executable)
@@ -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
index ebbfc09342b8a080b96440db1aede3e9c3911e46..bd73ba6454d0ead5b787af0394fa737feaf762f0 100644 (file)
@@ -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;