mirror of
https://github.com/Mbed-TLS/mbedtls-framework.git
synced 2026-10-02 14:57:22 +00:00
New macro TEST_ASSERT_ERRNO
Show errno if a test assertion fails. Signed-off-by: Gilles Peskine <[email protected]>
This commit is contained in:
@@ -240,6 +240,19 @@ void mbedtls_test_platform_teardown(void);
|
|||||||
*/
|
*/
|
||||||
void mbedtls_test_fail(const char *test, int line_no, const char *filename);
|
void mbedtls_test_fail(const char *test, int line_no, const char *filename);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Record the current test case as a failure
|
||||||
|
* and show the value of errno.
|
||||||
|
*
|
||||||
|
* This function is usually called via #TEST_ASSERT_ERRNO.
|
||||||
|
*
|
||||||
|
* \param test Description of the failure or assertion that failed. This
|
||||||
|
* MUST be a string literal.
|
||||||
|
* \param line_no Line number where the failure originated.
|
||||||
|
* \param filename Filename where the failure originated.
|
||||||
|
*/
|
||||||
|
void mbedtls_test_fail_errno(const char *test, int line_no, const char *filename);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Record the current test case as skipped.
|
* \brief Record the current test case as skipped.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -54,6 +54,21 @@
|
|||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
/** \brief Evaluate an integer expression. If the value is 0 (i.e. false),
|
||||||
|
* mark the test case as failed and display errno.
|
||||||
|
*
|
||||||
|
* This is intended for functions that follow the Unix API convention of
|
||||||
|
* returning a particular value (often -1) and setting errno on failure,
|
||||||
|
* e.g. `TEST_ASSERT_ERRNO(open(...) != -1)`.
|
||||||
|
*/
|
||||||
|
#define TEST_ASSERT_ERRNO(expr) \
|
||||||
|
do { \
|
||||||
|
if (!(expr)) { \
|
||||||
|
mbedtls_test_fail_errno(#expr, __LINE__, __FILE__); \
|
||||||
|
goto exit; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
/** This macro asserts fails the test with given output message.
|
/** This macro asserts fails the test with given output message.
|
||||||
*
|
*
|
||||||
* \param MESSAGE The message to be outputed on assertion
|
* \param MESSAGE The message to be outputed on assertion
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include <test/constant_flow.h>
|
#include <test/constant_flow.h>
|
||||||
#include <test/helpers.h>
|
#include <test/helpers.h>
|
||||||
#include <test/macros.h>
|
#include <test/macros.h>
|
||||||
|
#include <errno.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#if defined(MBEDTLS_PSA_INJECT_ENTROPY)
|
#if defined(MBEDTLS_PSA_INJECT_ENTROPY)
|
||||||
@@ -571,6 +572,31 @@ int mbedtls_test_le_s(const char *test, int line_no, const char *filename,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mbedtls_test_fail_errno(const char *test,
|
||||||
|
int line_no, const char *filename)
|
||||||
|
{
|
||||||
|
#ifdef MBEDTLS_THREADING_C
|
||||||
|
mbedtls_mutex_lock(&mbedtls_test_info_mutex);
|
||||||
|
#endif /* MBEDTLS_THREADING_C */
|
||||||
|
|
||||||
|
/* Don't use accessor, we already hold mutex. */
|
||||||
|
if (mbedtls_test_info.result != MBEDTLS_TEST_RESULT_FAILED) {
|
||||||
|
/* If we've already recorded the test as having failed then don't
|
||||||
|
* overwrite any previous information about the failure. */
|
||||||
|
|
||||||
|
char buf[MBEDTLS_TEST_LINE_LENGTH];
|
||||||
|
mbedtls_test_fail_internal(test, line_no, filename);
|
||||||
|
(void) mbedtls_snprintf(buf, sizeof(buf),
|
||||||
|
"errno = %d (%s)",
|
||||||
|
errno, strerror(errno));
|
||||||
|
mbedtls_test_set_line1_internal(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef MBEDTLS_THREADING_C
|
||||||
|
mbedtls_mutex_unlock(&mbedtls_test_info_mutex);
|
||||||
|
#endif /* MBEDTLS_THREADING_C */
|
||||||
|
}
|
||||||
|
|
||||||
int mbedtls_test_unhexify(unsigned char *obuf,
|
int mbedtls_test_unhexify(unsigned char *obuf,
|
||||||
size_t obufmax,
|
size_t obufmax,
|
||||||
const char *ibuf,
|
const char *ibuf,
|
||||||
|
|||||||
Reference in New Issue
Block a user