test: Record and silence console in tests
When running sandbox tests, silence the console to avoid unwanted output. Also, record the console in case tests want to check it. The -v option can be used to enable stdout during tests. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
61b4d3558e
commit
9ce8b40206
|
@ -257,6 +257,14 @@ static int sandbox_cmdline_cb_terminal(struct sandbox_state *state,
|
||||||
SANDBOX_CMDLINE_OPT_SHORT(terminal, 't', 1,
|
SANDBOX_CMDLINE_OPT_SHORT(terminal, 't', 1,
|
||||||
"Set terminal to raw/cooked mode");
|
"Set terminal to raw/cooked mode");
|
||||||
|
|
||||||
|
static int sandbox_cmdline_cb_verbose(struct sandbox_state *state,
|
||||||
|
const char *arg)
|
||||||
|
{
|
||||||
|
state->show_test_output = true;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
SANDBOX_CMDLINE_OPT_SHORT(verbose, 'v', 0, "Show test output");
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
struct sandbox_state *state;
|
struct sandbox_state *state;
|
||||||
|
|
|
@ -64,6 +64,7 @@ struct sandbox_state {
|
||||||
bool reset_allowed[RESET_COUNT]; /* Allowed reset types */
|
bool reset_allowed[RESET_COUNT]; /* Allowed reset types */
|
||||||
enum state_terminal_raw term_raw; /* Terminal raw/cooked */
|
enum state_terminal_raw term_raw; /* Terminal raw/cooked */
|
||||||
bool skip_delays; /* Ignore any time delays (for test) */
|
bool skip_delays; /* Ignore any time delays (for test) */
|
||||||
|
bool show_test_output; /* Don't suppress stdout in tests */
|
||||||
|
|
||||||
/* Pointer to information for each SPI bus/cs */
|
/* Pointer to information for each SPI bus/cs */
|
||||||
struct sandbox_spi_info spi[CONFIG_SANDBOX_SPI_MAX_BUS]
|
struct sandbox_spi_info spi[CONFIG_SANDBOX_SPI_MAX_BUS]
|
||||||
|
|
|
@ -76,6 +76,7 @@ static int dm_test_main(const char *test_name)
|
||||||
struct unit_test *tests = ll_entry_start(struct unit_test, dm_test);
|
struct unit_test *tests = ll_entry_start(struct unit_test, dm_test);
|
||||||
const int n_ents = ll_entry_count(struct unit_test, dm_test);
|
const int n_ents = ll_entry_count(struct unit_test, dm_test);
|
||||||
struct unit_test_state *uts = &global_dm_test_state;
|
struct unit_test_state *uts = &global_dm_test_state;
|
||||||
|
struct sandbox_state *state = state_get_current();
|
||||||
uts->priv = &_global_priv_dm_test_state;
|
uts->priv = &_global_priv_dm_test_state;
|
||||||
struct unit_test *test;
|
struct unit_test *test;
|
||||||
int run_count;
|
int run_count;
|
||||||
|
@ -114,7 +115,15 @@ static int dm_test_main(const char *test_name)
|
||||||
if (test->flags & DM_TESTF_SCAN_FDT)
|
if (test->flags & DM_TESTF_SCAN_FDT)
|
||||||
ut_assertok(dm_scan_fdt(gd->fdt_blob, false));
|
ut_assertok(dm_scan_fdt(gd->fdt_blob, false));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Silence the console and rely on console reocrding to get
|
||||||
|
* our output.
|
||||||
|
*/
|
||||||
|
console_record_reset();
|
||||||
|
if (!state->show_test_output)
|
||||||
|
gd->flags |= GD_FLG_SILENT;
|
||||||
test->func(uts);
|
test->func(uts);
|
||||||
|
gd->flags &= ~GD_FLG_SILENT;
|
||||||
state_set_skip_delays(false);
|
state_set_skip_delays(false);
|
||||||
|
|
||||||
ut_assertok(dm_test_destroy(uts));
|
ut_assertok(dm_test_destroy(uts));
|
||||||
|
|
|
@ -10,9 +10,12 @@
|
||||||
#include <test/test.h>
|
#include <test/test.h>
|
||||||
#include <test/ut.h>
|
#include <test/ut.h>
|
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
void ut_fail(struct unit_test_state *uts, const char *fname, int line,
|
void ut_fail(struct unit_test_state *uts, const char *fname, int line,
|
||||||
const char *func, const char *cond)
|
const char *func, const char *cond)
|
||||||
{
|
{
|
||||||
|
gd->flags &= ~(GD_FLG_SILENT | GD_FLG_RECORD);
|
||||||
printf("%s:%d, %s(): %s\n", fname, line, func, cond);
|
printf("%s:%d, %s(): %s\n", fname, line, func, cond);
|
||||||
uts->fail_count++;
|
uts->fail_count++;
|
||||||
}
|
}
|
||||||
|
@ -22,6 +25,7 @@ void ut_failf(struct unit_test_state *uts, const char *fname, int line,
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
|
gd->flags &= ~(GD_FLG_SILENT | GD_FLG_RECORD);
|
||||||
printf("%s:%d, %s(): %s: ", fname, line, func, cond);
|
printf("%s:%d, %s(): %s: ", fname, line, func, cond);
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
vprintf(fmt, args);
|
vprintf(fmt, args);
|
||||||
|
|
Loading…
Reference in New Issue