The intent of this Kconfig is to allow libc stdout functions like printf() to send their output to the active console driver instead of discarding it. This somehow evolved into preferring to use printf() instead of printk() for all test case output if enabled. Libc printf() implementation for both minimal libc and newlib use considerably more stack space than printk(), with nothing gained by using them. Remove all instances where we are conditionally sending test case output based on this config, enable it by default, and adjust a few tests that disabled this because they were blowing stack. printk() and vprintk() now work as expected for unit_testing targets, they are just wrappers for host printf(). Fixes: #13701 Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
190 lines
4.7 KiB
C
190 lines
4.7 KiB
C
|
|
/*
|
|
* Copyright (c) 2016 Intel Corporation
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
/**
|
|
* @file
|
|
*
|
|
* @brief Zephyr testing framework assertion macros
|
|
*/
|
|
|
|
#ifndef __ZTEST_ASSERT_H__
|
|
#define __ZTEST_ASSERT_H__
|
|
|
|
#include <ztest.h>
|
|
#include <stdarg.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
void ztest_test_fail(void);
|
|
#if CONFIG_ZTEST_ASSERT_VERBOSE == 0
|
|
|
|
static inline void _zassert_(int cond, const char *file, int line)
|
|
{
|
|
if (!(cond)) {
|
|
PRINT("\n Assertion failed at %s:%d\n",
|
|
file, line);
|
|
ztest_test_fail();
|
|
}
|
|
}
|
|
|
|
#define _zassert(cond, default_msg, file, line, func, msg, ...) \
|
|
_zassert_(cond, file, line)
|
|
|
|
#else /* CONFIG_ZTEST_ASSERT_VERBOSE != 0 */
|
|
|
|
static inline void _zassert(int cond,
|
|
const char *default_msg,
|
|
const char *file,
|
|
int line, const char *func,
|
|
const char *msg, ...)
|
|
{
|
|
if (!(cond)) {
|
|
va_list vargs;
|
|
|
|
va_start(vargs, msg);
|
|
PRINT("\n Assertion failed at %s:%d: %s: %s\n",
|
|
file, line, func, default_msg);
|
|
vprintk(msg, vargs);
|
|
printk("\n");
|
|
va_end(vargs);
|
|
ztest_test_fail();
|
|
}
|
|
#if CONFIG_ZTEST_ASSERT_VERBOSE == 2
|
|
else {
|
|
PRINT("\n Assertion succeeded at %s:%d (%s)\n",
|
|
file, line, func);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
#endif /* CONFIG_ZTEST_ASSERT_VERBOSE */
|
|
|
|
|
|
/**
|
|
* @defgroup ztest_assert Ztest assertion macros
|
|
* @ingroup ztest
|
|
*
|
|
* This module provides assertions when using Ztest.
|
|
*
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @brief Fail the test, if @a cond is false
|
|
*
|
|
* You probably don't need to call this macro directly. You should
|
|
* instead use zassert_{condition} macros below.
|
|
*
|
|
* @param cond Condition to check
|
|
* @param msg Optional, can be NULL. Message to print if @a cond is false.
|
|
* @param default_msg Message to print if @a cond is false
|
|
*/
|
|
|
|
#define zassert(cond, default_msg, msg, ...) \
|
|
_zassert(cond, msg ? ("(" default_msg ")") : (default_msg), \
|
|
__FILE__, __LINE__, __func__, msg ? msg : "", ##__VA_ARGS__)
|
|
|
|
/**
|
|
* @brief Assert that this function call won't be reached
|
|
* @param msg Optional message to print if the assertion fails
|
|
*/
|
|
#define zassert_unreachable(msg, ...) zassert(0, "Reached unreachable code", \
|
|
msg, ##__VA_ARGS__)
|
|
|
|
/**
|
|
* @brief Assert that @a cond is true
|
|
* @param cond Condition to check
|
|
* @param msg Optional message to print if the assertion fails
|
|
*/
|
|
#define zassert_true(cond, msg, ...) zassert(cond, #cond " is false", \
|
|
msg, ##__VA_ARGS__)
|
|
|
|
/**
|
|
* @brief Assert that @a cond is false
|
|
* @param cond Condition to check
|
|
* @param msg Optional message to print if the assertion fails
|
|
*/
|
|
#define zassert_false(cond, msg, ...) zassert(!(cond), #cond " is true", \
|
|
msg, ##__VA_ARGS__)
|
|
|
|
/**
|
|
* @brief Assert that @a ptr is NULL
|
|
* @param ptr Pointer to compare
|
|
* @param msg Optional message to print if the assertion fails
|
|
*/
|
|
#define zassert_is_null(ptr, msg, ...) zassert((ptr) == NULL, \
|
|
#ptr " is not NULL", \
|
|
msg, ##__VA_ARGS__)
|
|
|
|
/**
|
|
* @brief Assert that @a ptr is not NULL
|
|
* @param ptr Pointer to compare
|
|
* @param msg Optional message to print if the assertion fails
|
|
*/
|
|
#define zassert_not_null(ptr, msg, ...) zassert((ptr) != NULL, \
|
|
#ptr " is NULL", msg, \
|
|
##__VA_ARGS__)
|
|
|
|
/**
|
|
* @brief Assert that @a a equals @a b
|
|
*
|
|
* @a a and @a b won't be converted and will be compared directly.
|
|
*
|
|
* @param a Value to compare
|
|
* @param b Value to compare
|
|
* @param msg Optional message to print if the assertion fails
|
|
*/
|
|
#define zassert_equal(a, b, msg, ...) zassert((a) == (b), \
|
|
#a " not equal to " #b, \
|
|
msg, ##__VA_ARGS__)
|
|
|
|
/**
|
|
* @brief Assert that @a a does not equal @a b
|
|
*
|
|
* @a a and @a b won't be converted and will be compared directly.
|
|
*
|
|
* @param a Value to compare
|
|
* @param b Value to compare
|
|
* @param msg Optional message to print if the assertion fails
|
|
*/
|
|
#define zassert_not_equal(a, b, msg, ...) zassert((a) != (b), \
|
|
#a " equal to " #b, \
|
|
msg, ##__VA_ARGS__)
|
|
|
|
/**
|
|
* @brief Assert that @a a equals @a b
|
|
*
|
|
* @a a and @a b will be converted to `void *` before comparing.
|
|
*
|
|
* @param a Value to compare
|
|
* @param b Value to compare
|
|
* @param msg Optional message to print if the assertion fails
|
|
*/
|
|
#define zassert_equal_ptr(a, b, msg, ...) \
|
|
zassert((void *)(a) == (void *)(b), #a " not equal to " #b, \
|
|
msg, ##__VA_ARGS__)
|
|
|
|
/**
|
|
* @brief Assert that 2 memory buffers have the same contents
|
|
*
|
|
* @param buf Buffer to compare
|
|
* @param exp Buffer with expected contents
|
|
* @param size Size of buffers
|
|
* @param msg Optional message to print if the assertion fails
|
|
*/
|
|
static inline void zassert_mem_equal(void *buf, void *exp, size_t size,
|
|
const char *msg)
|
|
{
|
|
zassert_equal(memcmp(buf, exp, size), 0, msg);
|
|
}
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#endif /* __ZTEST_ASSERT_H__ */
|