summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2019-04-23 22:50:28 +0200
committerRichard Braun <rbraun@sceen.net>2019-04-24 01:17:49 +0200
commitcc2f34dc189074e8a93c03ebc5c0790661353b86 (patch)
treeb50c2e86e4b1d29bbc28ea52a9cff0de72a2df0b /test
parent9d0f14ed6aa75cf39b57c4e7efd5a1713e8ff27a (diff)
mbuf: add support for variable-size message headersHEADmaster
Diffstat (limited to 'test')
-rw-r--r--test/test_mbuf.c88
1 files changed, 68 insertions, 20 deletions
diff --git a/test/test_mbuf.c b/test/test_mbuf.c
index 6b3f90f..3df0b01 100644
--- a/test/test_mbuf.c
+++ b/test/test_mbuf.c
@@ -39,7 +39,7 @@ test_regular(void)
size_t size;
int error;
- mbuf_init(&mbuf, mbuf_buf, sizeof(mbuf_buf));
+ mbuf_init(&mbuf, mbuf_buf, sizeof(mbuf_buf), 255);
#define STRING "abcdef"
error = mbuf_push(&mbuf, STRING, STRLEN(STRING) + 1, false);
@@ -78,7 +78,7 @@ test_write_full(void)
size_t size;
int error;
- mbuf_init(&mbuf, mbuf_buf, sizeof(mbuf_buf));
+ mbuf_init(&mbuf, mbuf_buf, sizeof(mbuf_buf), (size_t)-1);
#define STRING "abcdef"
error = mbuf_push(&mbuf, STRING, STRLEN(STRING) + 1, false);
@@ -110,7 +110,7 @@ test_overwrite(void)
size_t size;
int error;
- mbuf_init(&mbuf, mbuf_buf, sizeof(mbuf_buf));
+ mbuf_init(&mbuf, mbuf_buf, sizeof(mbuf_buf), (size_t)-1);
#define STRING "abcdef"
error = mbuf_push(&mbuf, STRING, STRLEN(STRING) + 1, true);
@@ -135,14 +135,66 @@ test_overwrite(void)
}
static void
-test_msg_too_big(void)
+test_msg_size_power_of_two(void)
+{
+ char mbuf_buf[512], buffer[256];
+ struct mbuf mbuf;
+ size_t size;
+ int error;
+
+ mbuf_init(&mbuf, mbuf_buf, sizeof(mbuf_buf), sizeof(buffer));
+
+ memset(buffer, 0xab, sizeof(buffer));
+
+ error = mbuf_push(&mbuf, buffer, sizeof(buffer), true);
+ check(!error);
+
+ memset(buffer, 0xf0, sizeof(buffer));
+
+ size = sizeof(buffer);
+ error = mbuf_pop(&mbuf, buffer, &size);
+ check(!error && (size == sizeof(buffer)));
+
+ for (size_t i = 0; i < sizeof(buffer); i++) {
+ check(buffer[i] == (char)0xab);
+ }
+}
+
+static void
+test_msg_size_uint8_max(void)
+{
+ char mbuf_buf[512], buffer[255];
+ struct mbuf mbuf;
+ size_t size;
+ int error;
+
+ mbuf_init(&mbuf, mbuf_buf, sizeof(mbuf_buf), sizeof(buffer));
+
+ memset(buffer, 0xab, sizeof(buffer));
+
+ error = mbuf_push(&mbuf, buffer, sizeof(buffer), true);
+ check(!error);
+
+ memset(buffer, 0xf0, sizeof(buffer));
+
+ size = sizeof(buffer);
+ error = mbuf_pop(&mbuf, buffer, &size);
+ check(!error && (size == sizeof(buffer)));
+
+ for (size_t i = 0; i < sizeof(buffer); i++) {
+ check(buffer[i] == (char)0xab);
+ }
+}
+
+static void
+test_msg_too_big_to_fit(void)
{
char mbuf_buf[8], buffer[8];
struct mbuf mbuf;
size_t size;
int error;
- mbuf_init(&mbuf, mbuf_buf, sizeof(mbuf_buf));
+ mbuf_init(&mbuf, mbuf_buf, sizeof(mbuf_buf), (size_t)-1);
#define STRING "abcdef"
error = mbuf_push(&mbuf, STRING, STRLEN(STRING) + 1, true);
@@ -155,25 +207,19 @@ test_msg_too_big(void)
}
static void
-test_msg_far_too_big(void)
+test_msg_bigger_than_max(void)
{
- char mbuf_buf[8], buffer[8];
+ char mbuf_buf[512], buffer[256];
struct mbuf mbuf;
size_t size;
int error;
- if (sizeof(size_t) <= sizeof(uint32_t)) {
- fprintf(stderr, "warning: %s disabled\n", __func__);
- return;
- }
+ mbuf_init(&mbuf, mbuf_buf, sizeof(mbuf_buf), sizeof(buffer) - 1);
- mbuf_init(&mbuf, mbuf_buf, (size_t)1 << 36);
+ memset(buffer, 0xab, sizeof(buffer));
-#define STRING "abcdef"
- size = (size_t)1 << 32;
- error = mbuf_push(&mbuf, STRING, size, true);
- check(error == EMSGSIZE);
-#undef STRING
+ error = mbuf_push(&mbuf, buffer, sizeof(buffer), true);
+ check(error == EINVAL);
size = sizeof(buffer);
error = mbuf_pop(&mbuf, buffer, &size);
@@ -188,7 +234,7 @@ test_peak(void)
size_t size;
int error;
- mbuf_init(&mbuf, mbuf_buf, sizeof(mbuf_buf));
+ mbuf_init(&mbuf, mbuf_buf, sizeof(mbuf_buf), (size_t)-1);
#define STRING "abcdef"
error = mbuf_push(&mbuf, STRING, STRLEN(STRING) + 1, true);
@@ -214,8 +260,10 @@ main(void)
test_regular();
test_write_full();
test_overwrite();
- test_msg_too_big();
- test_msg_far_too_big();
+ test_msg_size_power_of_two();
+ test_msg_size_uint8_max();
+ test_msg_too_big_to_fit();
+ test_msg_bigger_than_max();
test_peak();
return EXIT_SUCCESS;