181 lines
4.4 KiB
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();
|
|
}
|