static void test_pktbuf_mark__success_equally_sized(void) { gnrc_pktsnip_t *pkt1 = gnrc_pktbuf_add(NULL, TEST_STRING16, sizeof(TEST_STRING16), GNRC_NETTYPE_TEST); gnrc_pktsnip_t *pkt2; TEST_ASSERT_NOT_NULL(pkt1); TEST_ASSERT_NOT_NULL((pkt2 = gnrc_pktbuf_mark(pkt1, sizeof(TEST_STRING16), GNRC_NETTYPE_UNDEF))); TEST_ASSERT(gnrc_pktbuf_is_sane()); TEST_ASSERT(pkt1->next == pkt2); TEST_ASSERT_NULL(pkt1->data); TEST_ASSERT_EQUAL_INT(0, pkt1->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_TEST, pkt1->type); TEST_ASSERT_EQUAL_INT(1, pkt1->users); TEST_ASSERT_NULL(pkt2->next); TEST_ASSERT_EQUAL_INT(0, memcmp(TEST_STRING16, pkt2->data, pkt2->size)); TEST_ASSERT_EQUAL_INT(sizeof(TEST_STRING16), pkt2->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_UNDEF, pkt2->type); TEST_ASSERT_EQUAL_INT(1, pkt2->users); TEST_ASSERT(gnrc_pktbuf_is_sane()); /* check if everything can be cleaned up */ gnrc_pktbuf_release(pkt1); TEST_ASSERT(gnrc_pktbuf_is_sane()); TEST_ASSERT(gnrc_pktbuf_is_empty()); }
static void test_pktbuf_mark__success_aligned(void) { uint8_t *data = (uint8_t *)(TEST_STRING16); gnrc_pktsnip_t *pkt1 = gnrc_pktbuf_add(NULL, data, sizeof(TEST_STRING16), GNRC_NETTYPE_TEST); gnrc_pktsnip_t *pkt2; uint8_t exp_data1[sizeof(TEST_STRING16) - 8]; uint8_t exp_data2[8]; memcpy(exp_data1, data + sizeof(exp_data2), sizeof(exp_data1)); memcpy(exp_data2, data, sizeof(exp_data2)); TEST_ASSERT_NOT_NULL(pkt1); TEST_ASSERT_NOT_NULL((pkt2 = gnrc_pktbuf_mark(pkt1, 8, GNRC_NETTYPE_UNDEF))); TEST_ASSERT(gnrc_pktbuf_is_sane()); TEST_ASSERT(pkt1->next == pkt2); TEST_ASSERT_NOT_NULL(pkt1->data); TEST_ASSERT_EQUAL_INT(0, memcmp(exp_data1, pkt1->data, pkt1->size)); TEST_ASSERT_EQUAL_INT(sizeof(TEST_STRING16) - 8, pkt1->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_TEST, pkt1->type); TEST_ASSERT_EQUAL_INT(1, pkt1->users); TEST_ASSERT_NULL(pkt2->next); TEST_ASSERT_NOT_NULL(pkt2->data); TEST_ASSERT_EQUAL_INT(0, memcmp(exp_data2, pkt2->data, pkt2->size)); TEST_ASSERT_EQUAL_INT(8, pkt2->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_UNDEF, pkt2->type); TEST_ASSERT_EQUAL_INT(1, pkt2->users); /* check if slightly larger packet would override data */ gnrc_pktbuf_remove_snip(pkt1, pkt2); pkt2 = gnrc_pktbuf_add(NULL, TEST_STRING12, 12, GNRC_NETTYPE_TEST); TEST_ASSERT(gnrc_pktbuf_is_sane()); TEST_ASSERT_NOT_NULL(pkt1->data); TEST_ASSERT_EQUAL_INT(0, memcmp(exp_data1, pkt1->data, pkt1->size)); TEST_ASSERT_EQUAL_INT(sizeof(TEST_STRING16) - 8, pkt1->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_TEST, pkt1->type); TEST_ASSERT_EQUAL_INT(1, pkt1->users); /* check if everything can be cleaned up */ gnrc_pktbuf_release(pkt1); gnrc_pktbuf_release(pkt2); TEST_ASSERT(gnrc_pktbuf_is_empty()); }
/** * @{ * * @file */ #include <errno.h> #include <stdint.h> #include <sys/uio.h> #include "embUnit.h" #include "net/gnrc/nettype.h" #include "net/gnrc/pkt.h" #include "net/gnrc/pktbuf.h" #include "unittests-constants.h" #include "tests-pktbuf.h" typedef struct __attribute__((packed)) { uint8_t u8; uint16_t u16; uint32_t u32; uint64_t u64; int8_t s8; int16_t s16; int32_t s32; int64_t s64; } test_pktbuf_struct_t; static void set_up(void) { gnrc_pktbuf_init(); } static void test_pktbuf_init(void) { TEST_ASSERT(gnrc_pktbuf_is_empty()); TEST_ASSERT_NOT_NULL(gnrc_pktbuf_add(NULL, TEST_STRING4, sizeof(TEST_STRING4), GNRC_NETTYPE_TEST)); TEST_ASSERT_NOT_NULL(gnrc_pktbuf_add(NULL, TEST_STRING8, sizeof(TEST_STRING8), GNRC_NETTYPE_TEST)); TEST_ASSERT_NOT_NULL(gnrc_pktbuf_add(NULL, TEST_STRING16, sizeof(TEST_STRING16), GNRC_NETTYPE_TEST)); TEST_ASSERT(gnrc_pktbuf_is_sane()); TEST_ASSERT(!gnrc_pktbuf_is_empty()); gnrc_pktbuf_init(); TEST_ASSERT(gnrc_pktbuf_is_empty()); } static void test_pktbuf_add__pkt_NULL__data_NULL__size_0(void) { gnrc_pktsnip_t *pkt; TEST_ASSERT_NOT_NULL((pkt = gnrc_pktbuf_add(NULL, NULL, 0, GNRC_NETTYPE_TEST))); TEST_ASSERT_NULL(pkt->next); TEST_ASSERT_NULL(pkt->data); TEST_ASSERT_EQUAL_INT(0, pkt->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_TEST, pkt->type); TEST_ASSERT(gnrc_pktbuf_is_sane()); TEST_ASSERT(!gnrc_pktbuf_is_empty()); } static void test_pktbuf_add__pkt_NOT_NULL__data_NULL__size_0(void) { gnrc_pktsnip_t *pkt; gnrc_pktsnip_t *next = gnrc_pktbuf_add(NULL, TEST_STRING4, sizeof(TEST_STRING4), GNRC_NETTYPE_TEST); TEST_ASSERT_NOT_NULL(next); TEST_ASSERT_NOT_NULL((pkt = gnrc_pktbuf_add(next, NULL, 0, GNRC_NETTYPE_TEST))); TEST_ASSERT(pkt->next = next); TEST_ASSERT_NULL(pkt->data); TEST_ASSERT_EQUAL_INT(0, pkt->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_TEST, pkt->type); TEST_ASSERT_NULL(next->next); TEST_ASSERT_EQUAL_STRING(TEST_STRING4, next->data); TEST_ASSERT_EQUAL_INT(sizeof(TEST_STRING4), next->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_TEST, next->type); TEST_ASSERT(gnrc_pktbuf_is_sane()); TEST_ASSERT(!gnrc_pktbuf_is_empty()); } static void test_pktbuf_add__pkt_NULL__data_NOT_NULL__size_0(void) { gnrc_pktsnip_t *pkt; TEST_ASSERT_NOT_NULL((pkt = gnrc_pktbuf_add(NULL, TEST_STRING8, 0, GNRC_NETTYPE_TEST))); TEST_ASSERT_NULL(pkt->next); TEST_ASSERT_NULL(pkt->data); TEST_ASSERT_EQUAL_INT(0, pkt->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_TEST, pkt->type); TEST_ASSERT(gnrc_pktbuf_is_sane()); TEST_ASSERT(!gnrc_pktbuf_is_empty()); } static void test_pktbuf_add__pkt_NOT_NULL__data_NOT_NULL__size_0(void) { gnrc_pktsnip_t *pkt; gnrc_pktsnip_t *next = gnrc_pktbuf_add(NULL, TEST_STRING4, sizeof(TEST_STRING4), GNRC_NETTYPE_TEST); TEST_ASSERT_NOT_NULL(next); TEST_ASSERT_NOT_NULL((pkt = gnrc_pktbuf_add(next, TEST_STRING8, 0, GNRC_NETTYPE_TEST))); TEST_ASSERT(pkt->next = next); TEST_ASSERT_NULL(pkt->data); TEST_ASSERT_EQUAL_INT(0, pkt->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_TEST, pkt->type); TEST_ASSERT_NULL(next->next); TEST_ASSERT_EQUAL_STRING(TEST_STRING4, next->data); TEST_ASSERT_EQUAL_INT(sizeof(TEST_STRING4), next->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_TEST, next->type); TEST_ASSERT(gnrc_pktbuf_is_sane()); TEST_ASSERT(!gnrc_pktbuf_is_empty()); } static void test_pktbuf_add__pkt_NULL__data_NULL__size_not_0(void) { gnrc_pktsnip_t *pkt; TEST_ASSERT_NOT_NULL((pkt = gnrc_pktbuf_add(NULL, NULL, sizeof(TEST_STRING8), GNRC_NETTYPE_TEST))); TEST_ASSERT_NULL(pkt->next); TEST_ASSERT_NOT_NULL(pkt->data); TEST_ASSERT_EQUAL_INT(sizeof(TEST_STRING8), pkt->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_TEST, pkt->type); TEST_ASSERT_EQUAL_INT(1, pkt->users); TEST_ASSERT(gnrc_pktbuf_is_sane()); TEST_ASSERT(!gnrc_pktbuf_is_empty()); } static void test_pktbuf_add__pkt_NOT_NULL__data_NULL__size_not_0(void) { gnrc_pktsnip_t *pkt, *next = gnrc_pktbuf_add(NULL, TEST_STRING4, sizeof(TEST_STRING4), GNRC_NETTYPE_TEST); TEST_ASSERT_NOT_NULL(next); TEST_ASSERT_NOT_NULL((pkt = gnrc_pktbuf_add(next, NULL, sizeof(TEST_STRING8), GNRC_NETTYPE_TEST))); TEST_ASSERT(pkt->next == next); TEST_ASSERT_NOT_NULL(pkt->data); TEST_ASSERT_EQUAL_INT(sizeof(TEST_STRING8), pkt->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_TEST, pkt->type); TEST_ASSERT_NULL(next->next); TEST_ASSERT_EQUAL_STRING(TEST_STRING4, next->data); TEST_ASSERT_EQUAL_INT(sizeof(TEST_STRING4), next->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_TEST, pkt->type); TEST_ASSERT(!gnrc_pktbuf_is_empty()); } static void test_pktbuf_add__pkt_NOT_NULL__data_NOT_NULL__size_not_0(void) { gnrc_pktsnip_t *pkt, *next = gnrc_pktbuf_add(NULL, TEST_STRING4, sizeof(TEST_STRING4), GNRC_NETTYPE_TEST); TEST_ASSERT_NOT_NULL(next); TEST_ASSERT_NOT_NULL((pkt = gnrc_pktbuf_add(next, TEST_STRING8, sizeof(TEST_STRING8), GNRC_NETTYPE_TEST))); TEST_ASSERT(pkt->next == next); TEST_ASSERT_EQUAL_STRING(TEST_STRING8, pkt->data); TEST_ASSERT_EQUAL_INT(sizeof(TEST_STRING8), pkt->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_TEST, pkt->type); TEST_ASSERT_NULL(next->next); TEST_ASSERT_EQUAL_STRING(TEST_STRING4, next->data); TEST_ASSERT_EQUAL_INT(sizeof(TEST_STRING4), next->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_TEST, pkt->type); TEST_ASSERT(gnrc_pktbuf_is_sane()); TEST_ASSERT(!gnrc_pktbuf_is_empty()); } #ifndef MODULE_GNRC_PKTBUF_MALLOC /* to long for standard malloc on native ;-) */ static void test_pktbuf_add__memfull(void) { gnrc_pktsnip_t *pkt = gnrc_pktbuf_add(NULL, NULL, 1, GNRC_NETTYPE_TEST); while (pkt) { pkt = gnrc_pktbuf_add(NULL, NULL, 1, GNRC_NETTYPE_TEST); } TEST_ASSERT(gnrc_pktbuf_is_sane()); TEST_ASSERT(!gnrc_pktbuf_is_empty()); }
static void test_pktbuf_add__0_sized_release(void) { gnrc_pktsnip_t *pkt1 = gnrc_pktbuf_add(NULL, NULL, 0, GNRC_NETTYPE_TEST); gnrc_pktsnip_t *pkt2 = gnrc_pktbuf_add(NULL, NULL, 8, GNRC_NETTYPE_TEST); gnrc_pktbuf_release(pkt1); TEST_ASSERT(gnrc_pktbuf_is_sane()); TEST_ASSERT(!gnrc_pktbuf_is_empty()); gnrc_pktbuf_release(pkt2); TEST_ASSERT(gnrc_pktbuf_is_empty()); }
static void test_pktbuf_add__pkt_NULL__data_NOT_NULL__size_0(void) { gnrc_pktsnip_t *pkt; TEST_ASSERT_NOT_NULL((pkt = gnrc_pktbuf_add(NULL, TEST_STRING8, 0, GNRC_NETTYPE_TEST))); TEST_ASSERT_NULL(pkt->next); TEST_ASSERT_NULL(pkt->data); TEST_ASSERT_EQUAL_INT(0, pkt->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_TEST, pkt->type); TEST_ASSERT(gnrc_pktbuf_is_sane()); TEST_ASSERT(!gnrc_pktbuf_is_empty()); }
static void test_pktbuf_realloc_data__size_0(void) { gnrc_pktsnip_t *pkt = gnrc_pktbuf_add(NULL, NULL, sizeof(TEST_STRING8), GNRC_NETTYPE_TEST); TEST_ASSERT_EQUAL_INT(0, gnrc_pktbuf_realloc_data(pkt, 0)); TEST_ASSERT(gnrc_pktbuf_is_sane()); TEST_ASSERT_NULL(pkt->data); TEST_ASSERT_EQUAL_INT(0, pkt->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_TEST, pkt->type); gnrc_pktbuf_release(pkt); TEST_ASSERT(gnrc_pktbuf_is_empty()); }
static void test_pktbuf_init(void) { TEST_ASSERT(gnrc_pktbuf_is_empty()); TEST_ASSERT_NOT_NULL(gnrc_pktbuf_add(NULL, TEST_STRING4, sizeof(TEST_STRING4), GNRC_NETTYPE_TEST)); TEST_ASSERT_NOT_NULL(gnrc_pktbuf_add(NULL, TEST_STRING8, sizeof(TEST_STRING8), GNRC_NETTYPE_TEST)); TEST_ASSERT_NOT_NULL(gnrc_pktbuf_add(NULL, TEST_STRING16, sizeof(TEST_STRING16), GNRC_NETTYPE_TEST)); TEST_ASSERT(gnrc_pktbuf_is_sane()); TEST_ASSERT(!gnrc_pktbuf_is_empty()); gnrc_pktbuf_init(); TEST_ASSERT(gnrc_pktbuf_is_empty()); }
static void test_pktbuf_realloc_data__success3(void) { gnrc_pktsnip_t *pkt; pkt = gnrc_pktbuf_add(NULL, NULL, 0, GNRC_NETTYPE_TEST); TEST_ASSERT_NOT_NULL(pkt); TEST_ASSERT_NULL(pkt->data); TEST_ASSERT_EQUAL_INT(0, gnrc_pktbuf_realloc_data(pkt, sizeof(TEST_STRING16))); TEST_ASSERT_NULL(pkt->next); TEST_ASSERT_NOT_NULL(pkt->data); TEST_ASSERT_EQUAL_INT(sizeof(TEST_STRING16), pkt->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_TEST, pkt->type); TEST_ASSERT_EQUAL_INT(1, pkt->users); TEST_ASSERT(gnrc_pktbuf_is_sane()); gnrc_pktbuf_release(pkt); TEST_ASSERT(gnrc_pktbuf_is_empty()); }
static void test_pktbuf_merge_data__success2(void) { gnrc_pktsnip_t *pkt = gnrc_pktbuf_add(NULL, TEST_STRING4, sizeof(TEST_STRING4), GNRC_NETTYPE_TEST); pkt = gnrc_pktbuf_add(pkt, TEST_STRING8, sizeof(TEST_STRING8), GNRC_NETTYPE_TEST); pkt = gnrc_pktbuf_add(pkt, TEST_STRING16, sizeof(TEST_STRING16), GNRC_NETTYPE_TEST); TEST_ASSERT_EQUAL_INT(0, gnrc_pktbuf_merge(pkt)); TEST_ASSERT_NULL(pkt->next); TEST_ASSERT_EQUAL_STRING(TEST_STRING16, pkt->data); TEST_ASSERT_EQUAL_STRING(TEST_STRING8, (char *) pkt->data + sizeof(TEST_STRING16)); TEST_ASSERT_EQUAL_STRING(TEST_STRING4, (char *) pkt->data + sizeof(TEST_STRING16) + sizeof(TEST_STRING8)); gnrc_pktbuf_release(pkt); TEST_ASSERT(gnrc_pktbuf_is_empty()); TEST_ASSERT(gnrc_pktbuf_is_sane()); }
static void test_pktbuf_add__success(void) { gnrc_pktsnip_t *pkt, *pkt_prev = NULL; for (int i = 0; i < 9; i++) { pkt = gnrc_pktbuf_add(NULL, NULL, (GNRC_PKTBUF_SIZE / 10) + 4, GNRC_NETTYPE_TEST); TEST_ASSERT_NOT_NULL(pkt); TEST_ASSERT_NULL(pkt->next); TEST_ASSERT_NOT_NULL(pkt->data); TEST_ASSERT_EQUAL_INT((GNRC_PKTBUF_SIZE / 10) + 4, pkt->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_TEST, pkt->type); TEST_ASSERT_EQUAL_INT(1, pkt->users); if (pkt_prev != NULL) { TEST_ASSERT(pkt_prev < pkt); TEST_ASSERT(pkt_prev->data < pkt->data); } pkt_prev = pkt; } TEST_ASSERT(gnrc_pktbuf_is_sane()); }
static void test_pktbuf_add__pkt_NOT_NULL__data_NOT_NULL__size_not_0(void) { gnrc_pktsnip_t *pkt, *next = gnrc_pktbuf_add(NULL, TEST_STRING4, sizeof(TEST_STRING4), GNRC_NETTYPE_TEST); TEST_ASSERT_NOT_NULL(next); TEST_ASSERT_NOT_NULL((pkt = gnrc_pktbuf_add(next, TEST_STRING8, sizeof(TEST_STRING8), GNRC_NETTYPE_TEST))); TEST_ASSERT(pkt->next == next); TEST_ASSERT_EQUAL_STRING(TEST_STRING8, pkt->data); TEST_ASSERT_EQUAL_INT(sizeof(TEST_STRING8), pkt->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_TEST, pkt->type); TEST_ASSERT_NULL(next->next); TEST_ASSERT_EQUAL_STRING(TEST_STRING4, next->data); TEST_ASSERT_EQUAL_INT(sizeof(TEST_STRING4), next->size); TEST_ASSERT_EQUAL_INT(GNRC_NETTYPE_TEST, pkt->type); TEST_ASSERT(gnrc_pktbuf_is_sane()); TEST_ASSERT(!gnrc_pktbuf_is_empty()); }
bool _check_net(void) { return (gnrc_pktbuf_is_sane() && gnrc_pktbuf_is_empty()); }