test_suite_debug.function 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. /* BEGIN_HEADER */
  2. #include "mbedtls/debug.h"
  3. struct buffer_data
  4. {
  5. char buf[2000];
  6. char *ptr;
  7. };
  8. void string_debug(void *data, int level, const char *file, int line, const char *str)
  9. {
  10. struct buffer_data *buffer = (struct buffer_data *) data;
  11. char *p = buffer->ptr;
  12. ((void) level);
  13. memcpy( p, file, strlen( file ) );
  14. p += strlen( file );
  15. *p++ = '(';
  16. *p++ = '0' + ( line / 1000 ) % 10;
  17. *p++ = '0' + ( line / 100 ) % 10;
  18. *p++ = '0' + ( line / 10 ) % 10;
  19. *p++ = '0' + ( line / 1 ) % 10;
  20. *p++ = ')';
  21. *p++ = ':';
  22. *p++ = ' ';
  23. #if defined(MBEDTLS_THREADING_C)
  24. /* Skip "thread ID" (up to the first space) as it is not predictable */
  25. while( *str++ != ' ' );
  26. #endif
  27. memcpy( p, str, strlen( str ) );
  28. p += strlen( str );
  29. /* Detect if debug messages output partial lines and mark them */
  30. if( p[-1] != '\n' )
  31. *p++ = '*';
  32. buffer->ptr = p;
  33. }
  34. /* END_HEADER */
  35. /* BEGIN_DEPENDENCIES
  36. * depends_on:MBEDTLS_DEBUG_C:MBEDTLS_SSL_TLS_C
  37. * END_DEPENDENCIES
  38. */
  39. /* BEGIN_CASE */
  40. void debug_print_msg_threshold( int threshold, int level, char *file, int line,
  41. char *result_str )
  42. {
  43. mbedtls_ssl_context ssl;
  44. mbedtls_ssl_config conf;
  45. struct buffer_data buffer;
  46. mbedtls_ssl_init( &ssl );
  47. mbedtls_ssl_config_init( &conf );
  48. memset( buffer.buf, 0, 2000 );
  49. buffer.ptr = buffer.buf;
  50. TEST_ASSERT( mbedtls_ssl_setup( &ssl, &conf ) == 0 );
  51. mbedtls_debug_set_threshold( threshold );
  52. mbedtls_ssl_conf_dbg( &conf, string_debug, &buffer);
  53. mbedtls_debug_print_msg( &ssl, level, file, line,
  54. "Text message, 2 == %d", 2 );
  55. TEST_ASSERT( strcmp( buffer.buf, result_str ) == 0 );
  56. exit:
  57. mbedtls_ssl_free( &ssl );
  58. mbedtls_ssl_config_free( &conf );
  59. }
  60. /* END_CASE */
  61. /* BEGIN_CASE */
  62. void mbedtls_debug_print_ret( char *file, int line, char *text, int value,
  63. char *result_str )
  64. {
  65. mbedtls_ssl_context ssl;
  66. mbedtls_ssl_config conf;
  67. struct buffer_data buffer;
  68. mbedtls_ssl_init( &ssl );
  69. mbedtls_ssl_config_init( &conf );
  70. memset( buffer.buf, 0, 2000 );
  71. buffer.ptr = buffer.buf;
  72. TEST_ASSERT( mbedtls_ssl_setup( &ssl, &conf ) == 0 );
  73. mbedtls_ssl_conf_dbg( &conf, string_debug, &buffer);
  74. mbedtls_debug_print_ret( &ssl, 0, file, line, text, value);
  75. TEST_ASSERT( strcmp( buffer.buf, result_str ) == 0 );
  76. exit:
  77. mbedtls_ssl_free( &ssl );
  78. mbedtls_ssl_config_free( &conf );
  79. }
  80. /* END_CASE */
  81. /* BEGIN_CASE */
  82. void mbedtls_debug_print_buf( char *file, int line, char *text,
  83. char *data_string, char *result_str )
  84. {
  85. unsigned char data[10000];
  86. mbedtls_ssl_context ssl;
  87. mbedtls_ssl_config conf;
  88. struct buffer_data buffer;
  89. size_t data_len;
  90. mbedtls_ssl_init( &ssl );
  91. mbedtls_ssl_config_init( &conf );
  92. memset( &data, 0, sizeof( data ) );
  93. memset( buffer.buf, 0, 2000 );
  94. buffer.ptr = buffer.buf;
  95. data_len = unhexify( data, data_string );
  96. TEST_ASSERT( mbedtls_ssl_setup( &ssl, &conf ) == 0 );
  97. mbedtls_ssl_conf_dbg( &conf, string_debug, &buffer);
  98. mbedtls_debug_print_buf( &ssl, 0, file, line, text, data, data_len );
  99. TEST_ASSERT( strcmp( buffer.buf, result_str ) == 0 );
  100. exit:
  101. mbedtls_ssl_free( &ssl );
  102. mbedtls_ssl_config_free( &conf );
  103. }
  104. /* END_CASE */
  105. /* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C */
  106. void mbedtls_debug_print_crt( char *crt_file, char *file, int line,
  107. char *prefix, char *result_str )
  108. {
  109. mbedtls_x509_crt crt;
  110. mbedtls_ssl_context ssl;
  111. mbedtls_ssl_config conf;
  112. struct buffer_data buffer;
  113. mbedtls_ssl_init( &ssl );
  114. mbedtls_ssl_config_init( &conf );
  115. mbedtls_x509_crt_init( &crt );
  116. memset( buffer.buf, 0, 2000 );
  117. buffer.ptr = buffer.buf;
  118. TEST_ASSERT( mbedtls_ssl_setup( &ssl, &conf ) == 0 );
  119. mbedtls_ssl_conf_dbg( &conf, string_debug, &buffer);
  120. TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == 0 );
  121. mbedtls_debug_print_crt( &ssl, 0, file, line, prefix, &crt);
  122. TEST_ASSERT( strcmp( buffer.buf, result_str ) == 0 );
  123. exit:
  124. mbedtls_x509_crt_free( &crt );
  125. mbedtls_ssl_free( &ssl );
  126. mbedtls_ssl_config_free( &conf );
  127. }
  128. /* END_CASE */
  129. /* BEGIN_CASE depends_on:MBEDTLS_BIGNUM_C */
  130. void mbedtls_debug_print_mpi( int radix, char *value, char *file, int line,
  131. char *prefix, char *result_str )
  132. {
  133. mbedtls_ssl_context ssl;
  134. mbedtls_ssl_config conf;
  135. struct buffer_data buffer;
  136. mbedtls_mpi val;
  137. mbedtls_ssl_init( &ssl );
  138. mbedtls_ssl_config_init( &conf );
  139. mbedtls_mpi_init( &val );
  140. memset( buffer.buf, 0, 2000 );
  141. buffer.ptr = buffer.buf;
  142. TEST_ASSERT( mbedtls_ssl_setup( &ssl, &conf ) == 0 );
  143. TEST_ASSERT( mbedtls_mpi_read_string( &val, radix, value ) == 0 );
  144. mbedtls_ssl_conf_dbg( &conf, string_debug, &buffer);
  145. mbedtls_debug_print_mpi( &ssl, 0, file, line, prefix, &val);
  146. TEST_ASSERT( strcmp( buffer.buf, result_str ) == 0 );
  147. exit:
  148. mbedtls_mpi_free( &val );
  149. mbedtls_ssl_free( &ssl );
  150. mbedtls_ssl_config_free( &conf );
  151. }
  152. /* END_CASE */