#include #include "CUnit/Basic.h" #include #include #include #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(); }