test: Record and silence console in tests
authorSimon Glass <sjg@chromium.org>
Mon, 9 Nov 2015 06:47:50 +0000 (23:47 -0700)
committerSimon Glass <sjg@chromium.org>
Fri, 20 Nov 2015 03:27:51 +0000 (20:27 -0700)
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>
arch/sandbox/cpu/start.c
arch/sandbox/include/asm/state.h
test/dm/test-main.c
test/ut.c

index 4c38fab443f68ab04492d67d9e5a34ed570fb337..0dda4fc84ea1a322dcca9e286c8e54125db214be 100644 (file)
@@ -257,6 +257,14 @@ static int sandbox_cmdline_cb_terminal(struct sandbox_state *state,
 SANDBOX_CMDLINE_OPT_SHORT(terminal, 't', 1,
                          "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[])
 {
        struct sandbox_state *state;
index e876ba29784171fa177dee815bf9328cdf7bc410..11856c2fede654e6a26ce3d64e563702aeaaa9b0 100644 (file)
@@ -64,6 +64,7 @@ struct sandbox_state {
        bool reset_allowed[RESET_COUNT];        /* Allowed reset types */
        enum state_terminal_raw term_raw;       /* Terminal raw/cooked */
        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 */
        struct sandbox_spi_info spi[CONFIG_SANDBOX_SPI_MAX_BUS]
index 867b5177e0cf6565d234960dcbc2b60d421e6da2..91bdda83ab36a2ee6600cf2132379d27f9f06c12 100644 (file)
@@ -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);
        const int n_ents = ll_entry_count(struct unit_test, dm_test);
        struct unit_test_state *uts = &global_dm_test_state;
+       struct sandbox_state *state = state_get_current();
        uts->priv = &_global_priv_dm_test_state;
        struct unit_test *test;
        int run_count;
@@ -114,7 +115,15 @@ static int dm_test_main(const char *test_name)
                if (test->flags & DM_TESTF_SCAN_FDT)
                        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);
+               gd->flags &= ~GD_FLG_SILENT;
                state_set_skip_delays(false);
 
                ut_assertok(dm_test_destroy(uts));
index 0282de595bbb74ffa3286a58dbdf54061ba90b38..fa0f02d6d94ee179e3f07dae60fabb5babc6c1cb 100644 (file)
--- a/test/ut.c
+++ b/test/ut.c
 #include <test/test.h>
 #include <test/ut.h>
 
+DECLARE_GLOBAL_DATA_PTR;
+
 void ut_fail(struct unit_test_state *uts, const char *fname, int line,
             const char *func, const char *cond)
 {
+       gd->flags &= ~(GD_FLG_SILENT | GD_FLG_RECORD);
        printf("%s:%d, %s(): %s\n", fname, line, func, cond);
        uts->fail_count++;
 }
@@ -22,6 +25,7 @@ void ut_failf(struct unit_test_state *uts, const char *fname, int line,
 {
        va_list args;
 
+       gd->flags &= ~(GD_FLG_SILENT | GD_FLG_RECORD);
        printf("%s:%d, %s(): %s: ", fname, line, func, cond);
        va_start(args, fmt);
        vprintf(fmt, args);