mqttauditing/tests.c

181 lines
4.4 KiB
C

#include <stdio.h>
#include "CUnit/Basic.h"
#include <pthread.h>
#include <stdint.h>
#include <stdlib.h>
#include "ringbuffer.h"
#include "mqtttopicmatcher.h"
ringbuffer_t rb;
int init_suite_ringbuffer(void)
{
ringbufferInit(&rb);
return 0;
}
int clean_suite_ringbuffer(void)
{
return 0;
}
void testRingbuffer1() {
uint32_t a = 1;
uint32_t b = 2;
uint32_t c = 3;
ringbufferPut(&rb, &a);
ringbufferPut(&rb, &b);
ringbufferPut(&rb, &c);
uint32_t *r = ringbufferGet(&rb);
CU_ASSERT(r == &a);
r = ringbufferGet(&rb);
CU_ASSERT(r == &b);
r = ringbufferGet(&rb);
CU_ASSERT(r == &c);
}
void testRingbuffer2() {
uint32_t a = 4;
uint32_t b = 5;
uint32_t c = 6;
ringbufferPut(&rb, &a);
ringbufferPut(&rb, &b);
ringbufferPut(&rb, &c);
uint32_t *r = ringbufferGet(&rb);
CU_ASSERT(r == &a);
r = ringbufferGet(&rb);
CU_ASSERT(r == &b);
r = ringbufferGet(&rb);
CU_ASSERT(r == &c);
}
void testRingbuffer3() {
for (uint32_t i = 0; i < BUFFER_SIZE + 25; i++) {
uint32_t *a = (uint32_t*) malloc(sizeof(uint32_t));
// fprintf(stderr, "&a: %p\n", a);
ringbufferPut(&rb, a);
uint32_t *r = ringbufferGet(&rb);
CU_ASSERT(r == a);
/* DO NOT free(r), otherwise always the same address is used */
}
}
void testRingbuffer4() {
#define TEST4SIZE 1000
uint32_t samples[TEST4SIZE];
for (uint32_t i = 0; i <= 100; i++) {
uint32_t *a = &(samples[i]);
ringbufferPut(&rb, a);
}
for (uint32_t i = 0; i <= 25; i++) {
uint32_t *a = &(samples[i]);
uint32_t *b = ringbufferGet(&rb);
CU_ASSERT(a == b);
}
for (uint32_t i = 101; i <= 125; i++) {
uint32_t *a = &(samples[i]);
ringbufferPut(&rb, a);
}
for (uint32_t i = 26; i <= 51; i++) {
uint32_t *a = &(samples[i]);
uint32_t *b = ringbufferGet(&rb);
CU_ASSERT(a == b);
}
for (uint32_t i = 126; i <= 200; i++) {
uint32_t *a = &(samples[i]);
ringbufferPut(&rb, a);
}
for (uint32_t i = 52; i <= 190; i++) {
uint32_t *a = &(samples[i]);
uint32_t *b = ringbufferGet(&rb);
CU_ASSERT(a == b);
}
for (uint32_t i = 201; i <= 300; i++) {
uint32_t *a = &(samples[i]);
ringbufferPut(&rb, a);
}
for (uint32_t i = 191; i <= 300; i++) {
uint32_t *a = &(samples[i]);
uint32_t *b = ringbufferGet(&rb);
CU_ASSERT(a == b);
}
}
void testTopicMatcher1() {
CU_ASSERT(cmpTopicWithWildcard("#", "bla") == 0);
CU_ASSERT(cmpTopicWithWildcard("bla/#", "bla/blu") == 0);
CU_ASSERT(cmpTopicWithWildcard("bla/#", "blu/blu") == -1);
CU_ASSERT(cmpTopicWithWildcard("bla/+", "bla/blu") == -1);
CU_ASSERT(cmpTopicWithWildcard("bla/+/blo", "bla/blu/blo") == 0);
CU_ASSERT(cmpTopicWithWildcard("bla/+/blo", "bla/blu/ble") == -1);
CU_ASSERT(cmpTopicWithWildcard("bla/+/blo", "blo/blu/blo") == -1);
CU_ASSERT(cmpTopicWithWildcard("bla/blu/blo", "bla/blu/blo") == 0);
CU_ASSERT(cmpTopicWithWildcard("bla/blu/#", "bla/blu/blo") == 0);
CU_ASSERT(cmpTopicWithWildcard("bla", "") == -1);
CU_ASSERT(cmpTopicWithWildcard("#", "") == 0);
CU_ASSERT(cmpTopicWithWildcard("", "") == 0);
}
int main()
{
if (CUE_SUCCESS != CU_initialize_registry())
return CU_get_error();
CU_pSuite ringbufferSuite = CU_add_suite("Suite_Ringbuffer", init_suite_ringbuffer, clean_suite_ringbuffer);
if (NULL == ringbufferSuite) {
CU_cleanup_registry();
return CU_get_error();
}
if ((NULL == CU_add_test(ringbufferSuite, "test 1 of ringbuffer", testRingbuffer1)) ||
(NULL == CU_add_test(ringbufferSuite, "test 2 of ringbuffer", testRingbuffer2)) ||
(NULL == CU_add_test(ringbufferSuite, "test 3 of ringbuffer", testRingbuffer3)) ||
(NULL == CU_add_test(ringbufferSuite, "test 4 of ringbuffer", testRingbuffer4)) ||
0 ) {
CU_cleanup_registry();
return CU_get_error();
}
CU_pSuite topicMatcherSuite = CU_add_suite("Suite_TopicMatcher", NULL, NULL);
if (NULL == topicMatcherSuite) {
CU_cleanup_registry();
return CU_get_error();
}
if ((NULL == CU_add_test(topicMatcherSuite, "test 1 of topicMatcher", testTopicMatcher1)) ||
0 ) {
CU_cleanup_registry();
return CU_get_error();
}
CU_basic_set_mode(CU_BRM_VERBOSE);
CU_basic_run_tests();
CU_cleanup_registry();
return CU_get_error();
}