/* * Copyright (c) 2014 ARM. All rights reserved. */ /** * \file \test_libTrace\Test.c * * \brief Unit tests for mbed_trace */ #include #include #include #include "mbed-cpputest/CppUTest/TestHarness.h" #include "mbed-cpputest/CppUTest/SimpleString.h" #include "mbed-cpputest/CppUTest/CommandLineTestRunner.h" #define MBED_CONF_MBED_TRACE_ENABLE 1 #define MBED_CONF_MBED_TRACE_FEA_IPV6 1 #include "mbed-trace/mbed_trace.h" #include "ip6tos_stub.h" int main(int ac, char **av) { return CommandLineTestRunner::RunAllTests(ac, av); } static int mutex_wait_count = 0; static int mutex_release_count = 0; static bool check_mutex_lock_status = true; void my_mutex_wait() { mutex_wait_count++; } void my_mutex_release() { mutex_release_count++; } char buf[1024]; #include void myprint(const char* str) { if ( check_mutex_lock_status ) { CHECK( (mutex_wait_count - mutex_release_count) > 0 ); } strcpy(buf, str); } TEST_GROUP(trace) { void setup() { mbed_trace_init(); mbed_trace_config_set(TRACE_MODE_PLAIN|TRACE_ACTIVE_LEVEL_ALL); mbed_trace_print_function_set( myprint ); mbed_trace_mutex_wait_function_set( my_mutex_wait ); mbed_trace_mutex_release_function_set( my_mutex_release ); } void teardown() { CHECK(mutex_wait_count == mutex_release_count); // Check the mutex count with every test mbed_trace_free(); } }; /* Unity test code starts */ TEST(trace, MutexNotSet) { mbed_trace_mutex_wait_function_set( 0 ); mbed_trace_mutex_release_function_set( 0 ); int mutex_call_count_at_entry = mutex_wait_count; check_mutex_lock_status = false; char expectedStr[] = "Hello hello!"; mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "Hello hello!"); STRCMP_EQUAL(expectedStr, buf); CHECK( mutex_call_count_at_entry == mutex_wait_count ); CHECK( mutex_call_count_at_entry == mutex_release_count ); mbed_trace_mutex_wait_function_set( my_mutex_wait ); mbed_trace_mutex_release_function_set( my_mutex_release ); check_mutex_lock_status = true; } TEST(trace, Array) { unsigned char longStr[200] = {0x66}; for(int i=0;i<200;i++) {longStr[i] = 0x66; } mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "%s", mbed_trace_array(longStr, 200) ); } TEST(trace, Null0Array) { static const unsigned char array[2] = { 0x23, 0x45 }; mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "%s", mbed_trace_array(array, 2)); STRCMP_EQUAL("23:45", buf); mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "%s", mbed_trace_array(array, 0)); STRCMP_EQUAL("", buf); mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "%s", mbed_trace_array(NULL, 0)); STRCMP_EQUAL("", buf); mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "%s", mbed_trace_array(NULL, 2)); STRCMP_EQUAL("", buf); } TEST(trace, LongString) { char longStr[1000] = {0x36}; for(int i=0;i<999;i++) {longStr[i] = 0x36; } mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "%s", longStr ); } TEST(trace, TooLong) { #define TOO_LONG_SIZE 9400 #define TRACE_LINE_SIZE 1024 char longStr[TOO_LONG_SIZE] = {0}; for(int i=0;i][DBG ][mygr]: test 1 2", buf); //TEST_ASSERT_EQUAL_INT(4, time_length); mbed_trace_config_set(TRACE_ACTIVE_LEVEL_ALL|TRACE_MODE_PLAIN); mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "test"); STRCMP_EQUAL("test", buf); mbed_trace_config_set(TRACE_ACTIVE_LEVEL_ALL|TRACE_MODE_COLOR); mbed_tracef(TRACE_LEVEL_ERROR, "mygr", "test"); STRCMP_EQUAL("\x1b[31m[