summaryrefslogtreecommitdiff
path: root/tests/dtls
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2012-02-14 19:12:53 +0100
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2012-02-14 19:13:27 +0100
commitd7eb6b9c4e71f55020f69f279f42b09780f1f48c (patch)
tree95ee133b1b247e8918ac3e509981be04100d5e1c /tests/dtls
parent52844e057b1bb1b751beca0fce83cdd60a2504d6 (diff)
downloadgnutls-d7eb6b9c4e71f55020f69f279f42b09780f1f48c.tar.gz
added more tests and updated to compile with gnutls' options
Diffstat (limited to 'tests/dtls')
-rwxr-xr-xtests/dtls/dtls8
-rw-r--r--tests/dtls/dtls-stress.c100
2 files changed, 72 insertions, 36 deletions
diff --git a/tests/dtls/dtls b/tests/dtls/dtls
index ec00897edc..9d45bf638f 100755
--- a/tests/dtls/dtls
+++ b/tests/dtls/dtls
@@ -26,8 +26,10 @@ if test "${WINDIR}" != "";then
exit 77
fi
-./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
+./dtls-stress -shello 021 -sfinished 01 -cfinished 012 SKeyExchange CKeyExchange CFinished >/dev/null 2>&1
+./dtls-stress -shello 012 -sfinished 10 -cfinished 210 SHello SKeyExchange SHelloDone >/dev/null 2>&1
+./dtls-stress -shello 012 -sfinished 01 -cfinished 021 SHello SKeyExchange SHelloDone >/dev/null 2>&1
+./dtls-stress -shello 021 -sfinished 01 -cfinished 201 SHello SHelloDone CChangeCipherSpec SChangeCipherSpec SFinished >/dev/null 2>&1
+./dtls-stress -shello 102 -sfinished 01 -cfinished 120 SHello SHelloDone CKeyExchange CFinished SChangeCipherSpec SFinished >/dev/null 2>&1
exit 0
diff --git a/tests/dtls/dtls-stress.c b/tests/dtls/dtls-stress.c
index 6857636730..86d8cf75d5 100644
--- a/tests/dtls/dtls-stress.c
+++ b/tests/dtls/dtls-stress.c
@@ -43,7 +43,7 @@ int nonblock;
int run_id;
-const char* role_to_name(enum role role)
+static const char* role_to_name(enum role role)
{
if (role == SERVER) {
return "server";
@@ -52,21 +52,21 @@ const char* role_to_name(enum role role)
}
}
-void logfn(int level, const char* s)
+static void logfn(int level, const char* s)
{
if (debug) {
fprintf(stdout, "%i %s|<%i> %s", run_id, role_to_name(role), level, s);
}
}
-void auditfn(gnutls_session_t session, const char* s)
+static void auditfn(gnutls_session_t session, const char* s)
{
if (debug) {
fprintf(stdout, "%i %s| %s", run_id, role_to_name(role), s);
}
}
-void drop(const char* packet)
+static void drop(const char* packet)
{
if (debug) {
fprintf(stdout, "%i %s| dropping %s\n", run_id, role_to_name(role), packet);
@@ -102,8 +102,10 @@ typedef void (*filter_fn)(gnutls_transport_ptr_t, const unsigned char*, size_t);
filter_fn filter_chain[32];
int filter_current_idx;
-void filter_clear_state()
+static void filter_clear_state(void)
{
+int i;
+
memset(&state_packet_ServerHello, 0, sizeof(state_packet_ServerHello));
memset(&state_packet_ServerKeyExchange, 0, sizeof(state_packet_ServerKeyExchange));
memset(&state_packet_ServerHelloDone, 0, sizeof(state_packet_ServerHelloDone));
@@ -112,7 +114,7 @@ void filter_clear_state()
memset(&state_packet_ServerChangeCipherSpec, 0, sizeof(state_packet_ServerChangeCipherSpec));
memset(&state_packet_ServerFinished, 0, sizeof(state_packet_ServerFinished));
- for (int i = 0; i < 3; i++) {
+ for (i = 0; i < 3; i++) {
if (state_permute_ServerHello.packets[i].data) {
free(state_permute_ServerHello.packets[i].data);
}
@@ -129,7 +131,7 @@ void filter_clear_state()
memset(&state_permute_ClientFinished, 0, sizeof(state_permute_ClientFinished));
}
-void filter_run_next(gnutls_transport_ptr_t fd,
+static void filter_run_next(gnutls_transport_ptr_t fd,
const unsigned char* buffer, size_t len)
{
filter_fn fn = filter_chain[filter_current_idx];
@@ -143,12 +145,12 @@ void filter_run_next(gnutls_transport_ptr_t fd,
-int match_ServerHello(const unsigned char* buffer, size_t len)
+static int match_ServerHello(const unsigned char* buffer, size_t len)
{
return role == SERVER && len >= 13 + 1 && buffer[0] == 22 && buffer[13] == 2;
}
-void filter_packet_ServerHello(gnutls_transport_ptr_t fd,
+static void filter_packet_ServerHello(gnutls_transport_ptr_t fd,
const unsigned char* buffer, size_t len)
{
if (match_ServerHello(buffer, len) && state_packet_ServerHello.count++ < 3) {
@@ -158,12 +160,12 @@ void filter_packet_ServerHello(gnutls_transport_ptr_t fd,
}
}
-int match_ServerKeyExchange(const unsigned char* buffer, size_t len)
+static int match_ServerKeyExchange(const unsigned char* buffer, size_t len)
{
return role == SERVER && len >= 13 + 1 && buffer[0] == 22 && buffer[13] == 12;
}
-void filter_packet_ServerKeyExchange(gnutls_transport_ptr_t fd,
+static void filter_packet_ServerKeyExchange(gnutls_transport_ptr_t fd,
const unsigned char* buffer, size_t len)
{
if (match_ServerKeyExchange(buffer, len) && state_packet_ServerKeyExchange.count++ < 3) {
@@ -173,11 +175,12 @@ void filter_packet_ServerKeyExchange(gnutls_transport_ptr_t fd,
}
}
-int match_ServerHelloDone(const unsigned char* buffer, size_t len)
+static int match_ServerHelloDone(const unsigned char* buffer, size_t len)
{
return role == SERVER && len >= 13 + 1 && buffer[0] == 22 && buffer[13] == 14;
}
+static
void filter_packet_ServerHelloDone(gnutls_transport_ptr_t fd,
const unsigned char* buffer, size_t len)
{
@@ -188,11 +191,13 @@ void filter_packet_ServerHelloDone(gnutls_transport_ptr_t fd,
}
}
+static
int match_ClientKeyExchange(const unsigned char* buffer, size_t len)
{
return role == CLIENT && len >= 13 + 1 && buffer[0] == 22 && buffer[13] == 16;
}
+static
void filter_packet_ClientKeyExchange(gnutls_transport_ptr_t fd,
const unsigned char* buffer, size_t len)
{
@@ -203,11 +208,13 @@ void filter_packet_ClientKeyExchange(gnutls_transport_ptr_t fd,
}
}
+static
int match_ClientChangeCipherSpec(const unsigned char* buffer, size_t len)
{
return role == CLIENT && len >= 13 && buffer[0] == 20;
}
+static
void filter_packet_ClientChangeCipherSpec(gnutls_transport_ptr_t fd,
const unsigned char* buffer, size_t len)
{
@@ -218,11 +225,13 @@ void filter_packet_ClientChangeCipherSpec(gnutls_transport_ptr_t fd,
}
}
+static
int match_ClientFinished(const unsigned char* buffer, size_t len)
{
return role == CLIENT && len >= 13 && buffer[0] == 22 && buffer[4] == 1;
}
+static
void filter_packet_ClientFinished(gnutls_transport_ptr_t fd,
const unsigned char* buffer, size_t len)
{
@@ -233,11 +242,13 @@ void filter_packet_ClientFinished(gnutls_transport_ptr_t fd,
}
}
+static
int match_ServerChangeCipherSpec(const unsigned char* buffer, size_t len)
{
return role == SERVER && len >= 13 && buffer[0] == 20;
}
+static
void filter_packet_ServerChangeCipherSpec(gnutls_transport_ptr_t fd,
const unsigned char* buffer, size_t len)
{
@@ -248,11 +259,13 @@ void filter_packet_ServerChangeCipherSpec(gnutls_transport_ptr_t fd,
}
}
+static
int match_ServerFinished(const unsigned char* buffer, size_t len)
{
return role == SERVER && len >= 13 && buffer[0] == 22 && buffer[4] == 1;
}
+static
void filter_packet_ServerFinished(gnutls_transport_ptr_t fd,
const unsigned char* buffer, size_t len)
{
@@ -263,8 +276,7 @@ void filter_packet_ServerFinished(gnutls_transport_ptr_t fd,
}
}
-
-
+static
void filter_permutete_state_free_buffer(filter_permute_state_t* state)
{
int i;
@@ -276,6 +288,7 @@ void filter_permutete_state_free_buffer(filter_permute_state_t* state)
}
}
+static
void filter_permute_state_run(filter_permute_state_t* state, int packetCount,
gnutls_transport_ptr_t fd, const unsigned char* buffer, size_t len)
{
@@ -297,6 +310,7 @@ void filter_permute_state_run(filter_permute_state_t* state, int packetCount,
}
}
+static
void filter_permute_ServerHello(gnutls_transport_ptr_t fd,
const unsigned char* buffer, size_t len)
{
@@ -309,6 +323,7 @@ void filter_permute_ServerHello(gnutls_transport_ptr_t fd,
}
}
+static
void filter_permute_ServerFinished(gnutls_transport_ptr_t fd,
const unsigned char* buffer, size_t len)
{
@@ -320,6 +335,7 @@ void filter_permute_ServerFinished(gnutls_transport_ptr_t fd,
}
}
+static
void filter_permute_ClientFinished(gnutls_transport_ptr_t fd,
const unsigned char* buffer, size_t len)
{
@@ -333,8 +349,7 @@ void filter_permute_ClientFinished(gnutls_transport_ptr_t fd,
}
-
-
+static
ssize_t writefn(gnutls_transport_ptr_t fd, const void* buffer, size_t len)
{
filter_current_idx = 0;
@@ -342,6 +357,7 @@ ssize_t writefn(gnutls_transport_ptr_t fd, const void* buffer, size_t len)
return len;
}
+static
void await(int fd)
{
if (nonblock) {
@@ -353,6 +369,7 @@ void await(int fd)
+static
gnutls_session_t session(int sock, int server)
{
gnutls_session_t r;
@@ -360,7 +377,7 @@ gnutls_session_t session(int sock, int server)
gnutls_init(&r, GNUTLS_DATAGRAM | (server ? GNUTLS_SERVER : GNUTLS_CLIENT)
| GNUTLS_NONBLOCK * nonblock);
gnutls_priority_set_direct(r, "NORMAL:+ANON-ECDH", 0);
- gnutls_transport_set_ptr(r, (gnutls_transport_ptr_t) (long long int) sock);
+ gnutls_transport_set_ptr(r, (gnutls_transport_ptr_t) sock);
if (server) {
gnutls_anon_server_credentials_t cred;
@@ -380,6 +397,7 @@ gnutls_session_t session(int sock, int server)
return r;
}
+static
int log_error(int code)
{
if (code < 0 && code != GNUTLS_E_AGAIN) {
@@ -396,28 +414,32 @@ int log_error(int code)
timer_t killtimer_tid;
-void reset_killtimer()
+static
+void reset_killtimer(void)
{
+struct itimerspec tout = { { 0, 0 }, { 120, 0 } };
+
if (nonblock) {
return;
}
- struct itimerspec tout = { { 0, 0 }, { 120, 0 } };
timer_settime(killtimer_tid, 0, &tout, 0);
}
-void setup_killtimer()
+static
+void setup_killtimer(void)
{
struct sigevent sig;
+ struct itimerspec tout = { { 0, 0 }, { 240, 0 } };
memset(&sig, 0, sizeof(sig));
sig.sigev_notify = SIGEV_SIGNAL;
sig.sigev_signo = 15;
timer_create(CLOCK_MONOTONIC, &sig, &killtimer_tid);
- struct itimerspec tout = { { 0, 0 }, { 240, 0 } };
timer_settime(killtimer_tid, 0, &tout, 0);
}
+static
void log_error_with_time(int err, time_t started)
{
if (err < 0) {
@@ -433,11 +455,15 @@ void log_error_with_time(int err, time_t started)
}
}
+static
void client(int sock)
{
gnutls_session_t s = session(sock, 0);
int err = 0;
time_t started = time(0);
+ const char* line = "foobar!";
+ char buffer[8192];
+ int len;
setup_killtimer();
@@ -449,15 +475,12 @@ void client(int sock)
log_error_with_time(err, started);
started = time(0);
- const char* line = "foobar!";
do {
err = gnutls_record_send(s, line, strlen(line));
reset_killtimer();
} while (err < 0 && !gnutls_error_is_fatal(err));
log_error_with_time(err, started);
- char buffer[8192];
- int len;
do {
await(sock);
len = gnutls_record_recv(s, buffer, sizeof(buffer));
@@ -470,6 +493,7 @@ void client(int sock)
}
}
+static
void server(int sock)
{
gnutls_session_t s = session(sock, 1);
@@ -502,6 +526,8 @@ void server(int sock)
}
}
+#if 0
+static
void udp_sockpair(int* socks)
{
struct sockaddr_in6 sa = { AF_INET6, htons(30000), 0, in6addr_loopback, 0 };
@@ -516,8 +542,10 @@ void udp_sockpair(int* socks)
connect(socks[1], (struct sockaddr*) &sa, sizeof(sa));
connect(socks[0], (struct sockaddr*) &sb, sizeof(sb));
}
+#endif
-int run_test()
+static
+int run_test(void)
{
int fds[2];
int pid1, pid2;
@@ -584,9 +612,11 @@ static const char* filter_names[8]
"SChangeCipherSpec",
"SFinished" };
+static
int run_one_test(int dropMode, int serverFinishedPermute, int serverHelloPermute, int clientFinishedPermute)
{
int fnIdx = 0;
+ int filterIdx, res;
run_id = ((dropMode * 2 + serverFinishedPermute) * 6 + serverHelloPermute) * 6 + clientFinishedPermute;
filter_clear_state();
@@ -601,7 +631,7 @@ int run_one_test(int dropMode, int serverFinishedPermute, int serverHelloPermute
state_permute_ClientFinished.order = permutations3[clientFinishedPermute];
if (dropMode) {
- for (int filterIdx = 0; filterIdx < 8; filterIdx++) {
+ for (filterIdx = 0; filterIdx < 8; filterIdx++) {
if (dropMode & (1 << filterIdx)) {
filter_chain[fnIdx++] = filters[filterIdx];
}
@@ -609,7 +639,7 @@ int run_one_test(int dropMode, int serverFinishedPermute, int serverHelloPermute
}
filter_chain[fnIdx++] = NULL;
- int res = run_test();
+ res = run_test();
switch (res) {
case 0:
@@ -627,7 +657,7 @@ int run_one_test(int dropMode, int serverFinishedPermute, int serverHelloPermute
fprintf(stdout, "SFinished(%s), ", permutations2names[serverFinishedPermute]);
fprintf(stdout, "CFinished(%s) :- ", permutations3names[clientFinishedPermute]);
if (dropMode) {
- for (int filterIdx = 0; filterIdx < 8; filterIdx++) {
+ for (filterIdx = 0; filterIdx < 8; filterIdx++) {
if (dropMode & (1 << filterIdx)) {
if (dropMode & ((1 << filterIdx) - 1)) {
fprintf(stdout, ", ");
@@ -645,14 +675,16 @@ int run_one_test(int dropMode, int serverFinishedPermute, int serverHelloPermute
}
}
+static
void run_tests(int childcount)
{
int children = 0;
+ int dropMode, serverFinishedPermute, serverHelloPermute, clientFinishedPermute;
- for (int dropMode = 0; dropMode != 1 << 8; dropMode++)
- for (int serverFinishedPermute = 0; serverFinishedPermute < 2; serverFinishedPermute++)
- for (int serverHelloPermute = 0; serverHelloPermute < 6; serverHelloPermute++)
- for (int clientFinishedPermute = 0; clientFinishedPermute < 6; clientFinishedPermute++) {
+ for (dropMode = 0; dropMode != 1 << 8; dropMode++)
+ for (serverFinishedPermute = 0; serverFinishedPermute < 2; serverFinishedPermute++)
+ for (serverHelloPermute = 0; serverHelloPermute < 6; serverHelloPermute++)
+ for (clientFinishedPermute = 0; clientFinishedPermute < 6; clientFinishedPermute++) {
if (!fork()) {
exit(run_one_test(dropMode, serverFinishedPermute, serverHelloPermute, clientFinishedPermute));
} else {
@@ -674,6 +706,8 @@ void run_tests(int childcount)
int main(int argc, const char* argv[])
{
+int arg;
+
setlinebuf(stdout);
gnutls_global_init();
gnutls_global_set_log_function(logfn);
@@ -690,7 +724,7 @@ int main(int argc, const char* argv[])
int serverHelloPermute = 0;
int clientFinishedPermute = 0;
- for (int arg = 1; arg < argc; arg++) {
+ for (arg = 1; arg < argc; arg++) {
if (strcmp("-shello", argv[arg]) == 0) {
arg++;
if (arg >= argc) {