Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: mbed-TFT-example-NCS36510 mbed-Accelerometer-example-NCS36510 mbed-Accelerometer-example-NCS36510
Test.cpp
00001 /* 00002 * Copyright (c) 2014 ARM. All rights reserved. 00003 */ 00004 /** 00005 * \file \test_libTrace\Test.c 00006 * 00007 * \brief Unit tests for mbed_trace 00008 */ 00009 #include <string.h> 00010 #include <stdlib.h> 00011 #include <stdint.h> 00012 00013 #include "mbed-cpputest/CppUTest/TestHarness.h" 00014 #include "mbed-cpputest/CppUTest/SimpleString.h" 00015 #include "mbed-cpputest/CppUTest/CommandLineTestRunner.h" 00016 00017 #define YOTTA_CFG_MBED_TRACE 1 00018 #define YOTTA_CFG_MBED_TRACE_FEA_IPV6 1 00019 00020 #include "mbed-trace/mbed_trace.h" 00021 #include "ip6tos_stub.h" 00022 00023 int main(int ac, char **av) 00024 { 00025 return CommandLineTestRunner::RunAllTests(ac, av); 00026 } 00027 00028 static int mutex_wait_count = 0; 00029 static int mutex_release_count = 0; 00030 static bool check_mutex_lock_status = true; 00031 void my_mutex_wait() 00032 { 00033 mutex_wait_count++; 00034 } 00035 void my_mutex_release() 00036 { 00037 mutex_release_count++; 00038 } 00039 00040 char buf[1024]; 00041 #include <stdio.h> 00042 void myprint(const char* str) 00043 { 00044 if ( check_mutex_lock_status ) { 00045 CHECK( (mutex_wait_count - mutex_release_count) > 0 ); 00046 } 00047 strcpy(buf, str); 00048 } 00049 TEST_GROUP(trace) 00050 { 00051 void setup() 00052 { 00053 00054 mbed_trace_init(); 00055 mbed_trace_config_set(TRACE_MODE_PLAIN|TRACE_ACTIVE_LEVEL_ALL); 00056 mbed_trace_print_function_set( myprint ); 00057 mbed_trace_mutex_wait_function_set( my_mutex_wait ); 00058 mbed_trace_mutex_release_function_set( my_mutex_release ); 00059 } 00060 void teardown() 00061 { 00062 CHECK(mutex_wait_count == mutex_release_count); // Check the mutex count with every test 00063 mbed_trace_free(); 00064 } 00065 }; 00066 00067 /* Unity test code starts */ 00068 TEST(trace, MutexNotSet) 00069 { 00070 mbed_trace_mutex_wait_function_set( 0 ); 00071 mbed_trace_mutex_release_function_set( 0 ); 00072 int mutex_call_count_at_entry = mutex_wait_count; 00073 check_mutex_lock_status = false; 00074 00075 char expectedStr[] = "Hello hello!"; 00076 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "Hello hello!"); 00077 STRCMP_EQUAL(expectedStr, buf); 00078 00079 CHECK( mutex_call_count_at_entry == mutex_wait_count ); 00080 CHECK( mutex_call_count_at_entry == mutex_release_count ); 00081 00082 mbed_trace_mutex_wait_function_set( my_mutex_wait ); 00083 mbed_trace_mutex_release_function_set( my_mutex_release ); 00084 check_mutex_lock_status = true; 00085 } 00086 00087 TEST(trace, Array) 00088 { 00089 unsigned char longStr[200] = {0x66}; 00090 for(int i=0;i<200;i++) {longStr[i] = 0x66; } 00091 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "%s", mbed_trace_array(longStr, 200) ); 00092 } 00093 00094 TEST(trace, LongString) 00095 { 00096 char longStr[1000] = {0x36}; 00097 for(int i=0;i<999;i++) {longStr[i] = 0x36; } 00098 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "%s", longStr ); 00099 } 00100 00101 TEST(trace, TooLong) 00102 { 00103 #define TOO_LONG_SIZE 9400 00104 #define TRACE_LINE_SIZE 1024 00105 char longStr[TOO_LONG_SIZE] = {0}; 00106 for(int i=0;i<TOO_LONG_SIZE;i++) { longStr[i] = 0x36; } 00107 00108 mbed_trace_config_set(TRACE_ACTIVE_LEVEL_ALL); 00109 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "%s", longStr ); 00110 00111 char shouldStr[TRACE_LINE_SIZE] = "[DBG ][mygr]: "; 00112 for(int i=14;i<TRACE_LINE_SIZE;i++) { shouldStr[i] = 0x36; } 00113 shouldStr[TRACE_LINE_SIZE-1] = 0; 00114 STRCMP_EQUAL(shouldStr, buf); 00115 } 00116 00117 TEST(trace, BufferResize) 00118 { 00119 uint8_t arr[20] = {0}; 00120 memset(arr, '0', 20); 00121 mbed_trace_buffer_sizes(0, 10); 00122 STRCMP_EQUAL("30:30:30*", mbed_trace_array(arr, 20)); 00123 mbed_trace_buffer_sizes(0, 15); 00124 STRCMP_EQUAL("30:30:30:30*", mbed_trace_array(arr, 20)); 00125 mbed_trace_buffer_sizes(0, 15); 00126 STRCMP_EQUAL("30:30:30:30", mbed_trace_array(arr, 4)); 00127 00128 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "flush buffers and locks"); 00129 } 00130 00131 #if YOTTA_CFG_MBED_TRACE_FEA_IPV6 == 1 00132 ip6tos_stub_def_t ip6tos_stub; // extern variable 00133 00134 TEST(trace, ipv6) 00135 { 00136 uint8_t prefix[] = { 0x14, 0x6e, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00 }; 00137 int prefix_len = 64; 00138 00139 char expected_str1[] = "146e:a00::/64"; 00140 ip6tos_stub.output_string = "146e:a00::/64"; 00141 char *str = mbed_trace_ipv6_prefix(prefix, prefix_len); 00142 CHECK(memcmp(ip6tos_stub.input_array, prefix, 8) == 0); 00143 STRCMP_EQUAL(expected_str1, str); 00144 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "flush buffers and locks"); 00145 00146 char expected_str2[] = "::/0"; 00147 ip6tos_stub.output_string = "::/0"; 00148 str = mbed_trace_ipv6_prefix(NULL, 0); 00149 STRCMP_EQUAL(expected_str2, str); 00150 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "flush buffers and locks"); 00151 00152 char expected_str3[] = "<err>"; 00153 str = mbed_trace_ipv6_prefix(NULL, 1); 00154 STRCMP_EQUAL(expected_str3, str); 00155 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "flush buffers and locks"); 00156 00157 char expected_str4[] = "<err>"; 00158 str = mbed_trace_ipv6_prefix(prefix, 200); 00159 STRCMP_EQUAL(expected_str4, str); 00160 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "flush buffers and locks"); 00161 00162 char expected_str5[] = ""; 00163 ip6tos_stub.output_string = "0123456789012345678901234567890123456789"; 00164 str = mbed_trace_ipv6_prefix(prefix, 64); // Fill the tmp_data buffer 00165 str = mbed_trace_ipv6_prefix(prefix, 64); 00166 str = mbed_trace_ipv6_prefix(prefix, 64); 00167 str = mbed_trace_ipv6_prefix(prefix, 64); 00168 STRCMP_EQUAL(expected_str5, str); 00169 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "flush buffers and locks"); 00170 } 00171 00172 TEST(trace, active_level_all_ipv6) 00173 { 00174 mbed_trace_config_set(TRACE_ACTIVE_LEVEL_ALL); 00175 00176 uint8_t arr[] = { 0x20, 0x01, 0xd, 0xb8, 0,0,0,0,0,1,0,0,0,0,0,1 }; 00177 ip6tos_stub.output_string = "2001:db8::1:0:0:1"; 00178 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "my addr: %s", mbed_trace_ipv6(arr)); 00179 CHECK(memcmp(ip6tos_stub.input_array, arr, 16) == 0); 00180 STRCMP_EQUAL("[DBG ][mygr]: my addr: 2001:db8::1:0:0:1", buf); 00181 } 00182 #endif //YOTTA_CFG_MBED_TRACE_FEA_IPV6 00183 00184 TEST(trace, config_change) 00185 { 00186 mbed_trace_config_set(TRACE_MODE_COLOR|TRACE_ACTIVE_LEVEL_ALL); 00187 CHECK(mbed_trace_config_get() == TRACE_MODE_COLOR|TRACE_ACTIVE_LEVEL_ALL); 00188 mbed_trace_config_set(TRACE_MODE_PLAIN|TRACE_ACTIVE_LEVEL_NONE); 00189 CHECK(mbed_trace_config_get() == TRACE_MODE_PLAIN|TRACE_ACTIVE_LEVEL_NONE); 00190 mbed_trace_config_set(TRACE_MODE_PLAIN|TRACE_ACTIVE_LEVEL_ALL); 00191 CHECK(mbed_trace_config_get() == TRACE_MODE_PLAIN|TRACE_ACTIVE_LEVEL_ALL); 00192 } 00193 00194 TEST(trace, active_level_all_color) 00195 { 00196 mbed_trace_config_set(TRACE_MODE_COLOR|TRACE_ACTIVE_LEVEL_ALL); 00197 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "hello"); 00198 STRCMP_EQUAL("\x1b[90m[DBG ][mygr]: hello\x1b[0m", buf); 00199 mbed_tracef(TRACE_LEVEL_INFO, "mygr", "to one"); 00200 STRCMP_EQUAL("\x1b[39m[INFO][mygr]: to one\x1b[0m", buf); 00201 mbed_tracef(TRACE_LEVEL_WARN, "mygr", "and all"); 00202 STRCMP_EQUAL("\x1b[33m[WARN][mygr]: and all\x1b[0m", buf); 00203 mbed_tracef(TRACE_LEVEL_ERROR, "mygr", "even you"); 00204 STRCMP_EQUAL("\x1b[31m[ERR ][mygr]: even you\x1b[0m", buf); 00205 } 00206 00207 TEST(trace, change_levels) 00208 { 00209 mbed_trace_config_set(TRACE_ACTIVE_LEVEL_DEBUG); 00210 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "hep"); 00211 STRCMP_EQUAL("[DBG ][mygr]: hep", buf); 00212 00213 mbed_trace_config_set(TRACE_ACTIVE_LEVEL_DEBUG|TRACE_MODE_PLAIN); 00214 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "hep"); 00215 STRCMP_EQUAL("hep", buf); 00216 00217 mbed_trace_config_set(TRACE_ACTIVE_LEVEL_DEBUG|TRACE_MODE_COLOR); 00218 mbed_tracef(TRACE_LEVEL_ERROR, "mygr", "hep"); 00219 STRCMP_EQUAL("\x1b[31m[ERR ][mygr]: hep\x1b[0m", buf); 00220 00221 } 00222 00223 TEST(trace, active_level_debug) 00224 { 00225 mbed_trace_config_set(TRACE_ACTIVE_LEVEL_DEBUG); 00226 00227 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "hep"); 00228 STRCMP_EQUAL("[DBG ][mygr]: hep", buf); 00229 00230 mbed_tracef(TRACE_LEVEL_INFO, "mygr", "test"); 00231 STRCMP_EQUAL("[INFO][mygr]: test", buf); 00232 00233 mbed_tracef(TRACE_LEVEL_WARN, "mygr", "hups"); 00234 STRCMP_EQUAL("[WARN][mygr]: hups", buf); 00235 00236 mbed_tracef(TRACE_LEVEL_ERROR, "mygr", "o'ou"); 00237 STRCMP_EQUAL("[ERR ][mygr]: o'ou", buf); 00238 } 00239 00240 TEST(trace, active_level_info) 00241 { 00242 buf[0] = 0; 00243 mbed_trace_config_set(TRACE_ACTIVE_LEVEL_INFO); 00244 00245 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "hep"); 00246 STRCMP_EQUAL("", mbed_trace_last()); 00247 00248 mbed_tracef(TRACE_LEVEL_INFO, "mygr", "test"); 00249 STRCMP_EQUAL("[INFO][mygr]: test", buf); 00250 00251 mbed_tracef(TRACE_LEVEL_WARN, "mygr", "hups"); 00252 STRCMP_EQUAL("[WARN][mygr]: hups", buf); 00253 00254 mbed_tracef(TRACE_LEVEL_ERROR, "mygr", "o'ou"); 00255 STRCMP_EQUAL("[ERR ][mygr]: o'ou", buf); 00256 } 00257 00258 TEST(trace, active_level_warn) 00259 { 00260 mbed_trace_config_set(TRACE_ACTIVE_LEVEL_WARN); 00261 00262 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "hep"); 00263 STRCMP_EQUAL("", mbed_trace_last()); 00264 00265 mbed_tracef(TRACE_LEVEL_INFO, "mygr", "test"); 00266 STRCMP_EQUAL("", mbed_trace_last()); 00267 00268 mbed_tracef(TRACE_LEVEL_WARN, "mygr", "hups"); 00269 STRCMP_EQUAL("[WARN][mygr]: hups", buf); 00270 00271 mbed_tracef(TRACE_LEVEL_ERROR, "mygr", "o'ou"); 00272 STRCMP_EQUAL("[ERR ][mygr]: o'ou", buf); 00273 } 00274 00275 TEST(trace, active_level_error) 00276 { 00277 mbed_trace_config_set(TRACE_ACTIVE_LEVEL_ERROR); 00278 00279 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "hep"); 00280 STRCMP_EQUAL("", mbed_trace_last()); 00281 00282 mbed_tracef(TRACE_LEVEL_INFO, "mygr", "test"); 00283 STRCMP_EQUAL("", mbed_trace_last()); 00284 00285 mbed_tracef(TRACE_LEVEL_WARN, "mygr", "hups"); 00286 STRCMP_EQUAL("", mbed_trace_last()); 00287 00288 mbed_tracef(TRACE_LEVEL_ERROR, "mygr", "o'ou"); 00289 STRCMP_EQUAL("[ERR ][mygr]: o'ou", buf); 00290 } 00291 TEST(trace, active_level_none) 00292 { 00293 mbed_trace_config_set(TRACE_ACTIVE_LEVEL_NONE); 00294 00295 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "hep"); 00296 STRCMP_EQUAL("", mbed_trace_last()); 00297 00298 mbed_tracef(TRACE_LEVEL_INFO, "mygr", "test"); 00299 STRCMP_EQUAL("", mbed_trace_last()); 00300 00301 mbed_tracef(TRACE_LEVEL_WARN, "mygr", "hups"); 00302 STRCMP_EQUAL("", mbed_trace_last()); 00303 00304 mbed_tracef(TRACE_LEVEL_ERROR, "mygr", "o'ou"); 00305 STRCMP_EQUAL("", mbed_trace_last()); 00306 } 00307 00308 TEST(trace, active_level_all_1) 00309 { 00310 mbed_trace_config_set(TRACE_ACTIVE_LEVEL_ALL); 00311 mbed_trace_exclude_filters_set((char*)"mygr"); 00312 00313 mbed_tracef(TRACE_LEVEL_DEBUG, "mygu", "hep"); 00314 STRCMP_EQUAL("[DBG ][mygu]: hep", buf); 00315 00316 mbed_tracef(TRACE_LEVEL_INFO, "mygr", "test"); 00317 STRCMP_EQUAL("", mbed_trace_last()); 00318 } 00319 TEST(trace, active_level_all_2) 00320 { 00321 mbed_trace_config_set(TRACE_ACTIVE_LEVEL_ALL); 00322 mbed_trace_exclude_filters_set((char*)"mygr,mygu"); 00323 00324 mbed_tracef(TRACE_LEVEL_DEBUG, "mygu", "hep"); 00325 STRCMP_EQUAL("", mbed_trace_last()); 00326 00327 mbed_tracef(TRACE_LEVEL_INFO, "mygr", "test"); 00328 STRCMP_EQUAL("", mbed_trace_last()); 00329 } 00330 TEST(trace, active_level_all_3) 00331 { 00332 mbed_trace_config_set(TRACE_ACTIVE_LEVEL_ALL); 00333 mbed_trace_include_filters_set((char*)"mygr"); 00334 00335 mbed_tracef(TRACE_LEVEL_DEBUG, "mygu", "hep"); 00336 STRCMP_EQUAL("", mbed_trace_last()); 00337 00338 mbed_tracef(TRACE_LEVEL_INFO, "mygr", "test"); 00339 STRCMP_EQUAL("[INFO][mygr]: test", buf); 00340 } 00341 00342 TEST(trace, active_level_all_array) 00343 { 00344 mbed_trace_config_set(TRACE_ACTIVE_LEVEL_ALL); 00345 00346 uint8_t arr[] = {0x01, 0x02, 0x03}; 00347 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "my addr: %s", mbed_trace_array(arr, 3)); 00348 STRCMP_EQUAL("[DBG ][mygr]: my addr: 01:02:03", buf); 00349 } 00350 00351 00352 size_t time_length; 00353 char trace_prefix_str[] = "[<TIME>]"; 00354 char* trace_prefix(size_t length){ 00355 time_length = length; 00356 return trace_prefix_str; 00357 } 00358 TEST(trace, prefix) 00359 { 00360 mbed_trace_config_set(TRACE_ACTIVE_LEVEL_ALL); 00361 mbed_trace_prefix_function_set( &trace_prefix ); 00362 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "test %d %d", 1, 2); 00363 STRCMP_EQUAL("[<TIME>][DBG ][mygr]: test 1 2", buf); 00364 //TEST_ASSERT_EQUAL_INT(4, time_length); 00365 00366 mbed_trace_config_set(TRACE_ACTIVE_LEVEL_ALL|TRACE_MODE_PLAIN); 00367 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "test"); 00368 STRCMP_EQUAL("test", buf); 00369 00370 mbed_trace_config_set(TRACE_ACTIVE_LEVEL_ALL|TRACE_MODE_COLOR); 00371 mbed_tracef(TRACE_LEVEL_ERROR, "mygr", "test"); 00372 STRCMP_EQUAL("\x1b[31m[<TIME>][ERR ][mygr]: test\x1b[0m", buf); 00373 } 00374 char trace_suffix_str[] = "[END]"; 00375 char* trace_suffix() 00376 { 00377 return trace_suffix_str; 00378 } 00379 TEST(trace, suffix) 00380 { 00381 mbed_trace_config_set(TRACE_ACTIVE_LEVEL_ALL); 00382 mbed_trace_prefix_function_set( &trace_prefix ); 00383 mbed_trace_suffix_function_set( &trace_suffix ); 00384 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "test"); 00385 STRCMP_EQUAL("[<TIME>][DBG ][mygr]: test[END]", buf); 00386 } 00387 TEST(trace, formatting) 00388 { 00389 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "hello %d %d %.1f", 12, 13, 5.5); 00390 STRCMP_EQUAL("hello 12 13 5.5", buf); 00391 00392 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "hello %d %d %d %d %d %d", 12, 13, 5, 6, 8, 9); 00393 STRCMP_EQUAL("hello 12 13 5 6 8 9", buf); 00394 00395 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "HOH %d HAH %d %d %d %d %d", 12, 13, 5, 6, 8, 9); 00396 STRCMP_EQUAL("HOH 12 HAH 13 5 6 8 9", buf); 00397 } 00398 TEST(trace, filters_control) 00399 { 00400 mbed_trace_include_filters_set((char*)"hello"); 00401 STRCMP_EQUAL("hello", mbed_trace_include_filters_get()); 00402 00403 mbed_trace_include_filters_set(0); 00404 STRCMP_EQUAL("", mbed_trace_include_filters_get()); 00405 00406 mbed_trace_exclude_filters_set((char*)"hello"); 00407 STRCMP_EQUAL("hello", mbed_trace_exclude_filters_get()); 00408 00409 mbed_trace_exclude_filters_set(0); 00410 STRCMP_EQUAL("", mbed_trace_exclude_filters_get()); 00411 } 00412 TEST(trace, no_printer) 00413 { 00414 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "hello"); 00415 STRCMP_EQUAL("hello", buf); 00416 00417 mbed_trace_print_function_set(NULL); 00418 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "this shoudnt be printed because printer is missing"); 00419 STRCMP_EQUAL("hello", buf); 00420 } 00421 TEST(trace, uninitialized) 00422 { 00423 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "hello"); 00424 STRCMP_EQUAL("hello", buf); 00425 00426 mbed_trace_free(); 00427 00428 mbed_tracef(TRACE_LEVEL_DEBUG, "mygr", "this shoudnt be printed because mtrace is not initialized"); 00429 STRCMP_EQUAL("hello", buf); 00430 } 00431
Generated on Tue Jul 12 2022 11:02:54 by
