summaryrefslogtreecommitdiff
path: root/tests/eagain-common.h
diff options
context:
space:
mode:
Diffstat (limited to 'tests/eagain-common.h')
-rw-r--r--tests/eagain-common.h81
1 files changed, 42 insertions, 39 deletions
diff --git a/tests/eagain-common.h b/tests/eagain-common.h
index 80a1fda2ff..19084050b7 100644
--- a/tests/eagain-common.h
+++ b/tests/eagain-common.h
@@ -1,22 +1,36 @@
#include <errno.h>
+#include <time.h>
+#include <stdio.h>
#define min(x,y) ((x)<(y)?(x):(y))
extern const char *side;
+#ifdef USE_CMOCKA
+# define failure() fail()
+# define client_transfer_failure(r) {fprintf(stderr, "client transfer failure: %s\n", gnutls_strerror(r)); fail();}
+# define server_transfer_failure(r) {fprintf(stderr, "server transfer failure: %s\n", gnutls_strerror(r)); fail();}
+# define switch_side(str)
+#else
+# define failure() fail("Handshake failed\n")
+# define client_transfer_failure(r) fail("client transfer failure: %s\n", gnutls_strerror(r))
+# define server_transfer_failure(r) fail("client transfer failure: %s\n", gnutls_strerror(r))
+# define switch_side(str) side = str
+#endif
+
#define HANDSHAKE_EXPECT(c, s, clierr, serverr) \
sret = cret = GNUTLS_E_AGAIN; \
do \
{ \
if (cret == GNUTLS_E_AGAIN) \
{ \
- side = "client"; \
+ switch_side("client"); \
cret = gnutls_handshake (c); \
if (cret == GNUTLS_E_INTERRUPTED) cret = GNUTLS_E_AGAIN; \
} \
if (sret == GNUTLS_E_AGAIN) \
{ \
- side = "server"; \
+ switch_side("server"); \
sret = gnutls_handshake (s); \
if (sret == GNUTLS_E_INTERRUPTED) sret = GNUTLS_E_AGAIN; \
} \
@@ -26,8 +40,7 @@ extern const char *side;
{ \
fprintf(stderr, "client[%d]: %s\n", cret, gnutls_strerror(cret)); \
fprintf(stderr, "server[%d]: %s\n", sret, gnutls_strerror(sret)); \
- fail("Handshake failed\n"); \
- exit(1); \
+ failure(); \
}
#define HANDSHAKE(c, s) \
@@ -44,7 +57,7 @@ extern const char *side;
} \
if (cret < 0 && gnutls_error_is_fatal(cret) == 0) \
{ \
- side = "client"; \
+ switch_side("client"); \
cret = gnutls_handshake (c); \
} \
if (sret == GNUTLS_E_LARGE_PACKET) \
@@ -54,7 +67,7 @@ extern const char *side;
} \
if (sret < 0 && gnutls_error_is_fatal(sret) == 0) \
{ \
- side = "server"; \
+ switch_side("server"); \
sret = gnutls_handshake (s); \
} \
} \
@@ -63,8 +76,7 @@ extern const char *side;
{ \
fprintf(stderr, "client: %s\n", gnutls_strerror(cret)); \
fprintf(stderr, "server: %s\n", gnutls_strerror(sret)); \
- fail("%s:%d: Handshake failed\n", __func__, __LINE__); \
- exit(1); \
+ failure(); \
}
#define HANDSHAKE_DTLS(c, s) \
@@ -75,61 +87,51 @@ extern const char *side;
#define TRANSFER2(c, s, msg, msglen, buf, buflen, retry_send_with_null) { \
int _ret; \
- side = "client"; \
+ switch_side("client"); \
_ret = record_send_loop (c, msg, msglen, retry_send_with_null); \
\
- if (_ret < 0) fail ("client send error: %s\n", gnutls_strerror (_ret)); \
+ if (_ret < 0) client_transfer_failure(_ret); \
\
do \
{ \
do \
{ \
- side = "server"; \
+ switch_side("server"); \
_ret = gnutls_record_recv (s, buf, buflen); \
} \
while(_ret == GNUTLS_E_AGAIN); \
- if (_ret == 0) \
- fail ("server: didn't receive any data\n"); \
- else if (_ret < 0) \
+ if (_ret <= 0) \
{ \
- fail ("server: error: %s\n", gnutls_strerror (_ret)); \
+ server_transfer_failure(_ret); \
} \
else \
{ \
transferred += _ret; \
} \
- side = "server"; \
+ switch_side("server"); \
_ret = record_send_loop (server, msg, msglen, retry_send_with_null); \
- if (_ret < 0) fail ("server send error: %s\n", gnutls_strerror (_ret)); \
+ if (_ret < 0) server_transfer_failure(_ret); \
do \
{ \
- side = "client"; \
+ switch_side("client"); \
_ret = gnutls_record_recv (client, buf, buflen); \
} \
while(_ret == GNUTLS_E_AGAIN); \
- if (_ret == 0) \
+ if (_ret <= 0) \
{ \
- fail ("client: Peer has closed the TLS connection\n"); \
- } \
- else if (_ret < 0) \
- { \
- if (debug) \
- fputs ("!", stdout); \
- fail ("client: Error: %s\n", gnutls_strerror (_ret)); \
+ client_transfer_failure(_ret); \
} \
else \
{ \
if (msglen != _ret || memcmp (buf, msg, msglen) != 0) \
{ \
- fail ("client: Transmitted data do not match\n"); \
+ failure(); \
} \
/* echo back */ \
- side = "client"; \
+ switch_side("client"); \
_ret = record_send_loop (client, buf, msglen, retry_send_with_null); \
- if (_ret < 0) fail ("client send error: %s\n", gnutls_strerror (_ret)); \
+ if (_ret < 0) client_transfer_failure(_ret); \
transferred += _ret; \
- if (debug) \
- fputs (".", stdout); \
} \
} \
while (transferred < 70000); \
@@ -137,25 +139,25 @@ extern const char *side;
#define EMPTY_BUF(s, c, buf, buflen) \
{ \
- side = "client"; int _ret = 0; \
+ switch_side("client"); int _ret = 0; \
while((_ret == GNUTLS_E_AGAIN && to_server_len > 0) || to_server_len > 0) \
{ \
- side = "server"; \
+ switch_side("server"); \
_ret = gnutls_record_recv (s, buf, buflen); \
} \
if (_ret < 0 && _ret !=GNUTLS_E_AGAIN) \
{ \
- fail ("server: error: %s\n", gnutls_strerror (_ret)); \
+ server_transfer_failure(_ret); \
} \
- side = "server"; _ret = 0; \
+ switch_side("server"); _ret = 0; \
while((to_client_len > 0 && _ret == GNUTLS_E_AGAIN) || to_client_len > 0) \
{ \
- side = "client"; \
+ switch_side("client"); \
_ret = gnutls_record_recv (client, buf, buflen); \
} \
if (_ret < 0 && _ret !=GNUTLS_E_AGAIN) \
{ \
- fail ("client: Error: %s\n", gnutls_strerror (_ret)); \
+ client_transfer_failure(_ret); \
} \
}
@@ -169,10 +171,11 @@ static size_t to_server_len = 0;
static char to_client[64 * 1024];
static size_t to_client_len = 0;
+
#ifdef RANDOMIZE
#define RETURN_RND_EAGAIN(session) \
- static unsigned char rnd = 0; \
- if (rnd++ % 2 == 0) \
+ unsigned int rnd = time(0); \
+ if (rnd++ % 3 == 0) \
{ \
gnutls_transport_set_errno (session, EAGAIN); \
return -1; \