diff options
Diffstat (limited to 'test/system.c')
-rw-r--r-- | test/system.c | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/test/system.c b/test/system.c new file mode 100644 index 0000000000..a116fa3cb6 --- /dev/null +++ b/test/system.c @@ -0,0 +1,107 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Test system_common. + */ + +#include "common.h" +#include "console.h" +#include "host_command.h" +#include "system.h" +#include "test_util.h" +#include "timer.h" +#include "util.h" + +#define TEST_STATE_STEP_2 (1 << 0) +#define TEST_STATE_FAIL (1 << 1) + +static int test_reboot_on_shutdown(void) +{ + struct ec_params_reboot_ec params; + + /* Fails if the system reboots unexpectedly */ + system_set_scratchpad(TEST_STATE_FAIL); + + test_chipset_on(); + msleep(30); + + params.cmd = EC_REBOOT_COLD; + params.flags = EC_REBOOT_FLAG_ON_AP_SHUTDOWN; + + TEST_ASSERT(test_send_host_command( + EC_CMD_REBOOT_EC, 0, ¶ms, + sizeof(params), NULL, 0) == EC_SUCCESS); + + system_set_scratchpad(TEST_STATE_STEP_2); + test_chipset_off(); + msleep(30); + + /* Shouldn't reach here */ + return EC_ERROR_UNKNOWN; +} + +static int test_cancel_reboot(void) +{ + struct ec_params_reboot_ec params; + + /* Fails if the system reboots unexpectedly */ + system_set_scratchpad(TEST_STATE_FAIL); + + test_chipset_on(); + msleep(30); + + params.cmd = EC_REBOOT_COLD; + params.flags = EC_REBOOT_FLAG_ON_AP_SHUTDOWN; + + TEST_ASSERT(test_send_host_command( + EC_CMD_REBOOT_EC, 0, ¶ms, + sizeof(params), NULL, 0) == EC_SUCCESS); + + params.cmd = EC_REBOOT_CANCEL; + params.flags = 0; + + TEST_ASSERT(test_send_host_command( + EC_CMD_REBOOT_EC, 0, ¶ms, + sizeof(params), NULL, 0) == EC_SUCCESS); + + test_chipset_off(); + msleep(30); + + return EC_SUCCESS; +} + +static void run_test_step1(void) +{ + if (test_reboot_on_shutdown() != EC_SUCCESS) + test_fail(); +} + +static void run_test_step2(void) +{ + if (test_cancel_reboot() != EC_SUCCESS) + test_fail(); + + system_set_scratchpad(0); + test_pass(); +} + +static void fail_and_clean_up(void) +{ + system_set_scratchpad(0); + test_fail(); +} + +void run_test(void) +{ + uint32_t state = system_get_scratchpad(); + + test_reset(); + + if (state == 0) + run_test_step1(); + else if (state & TEST_STATE_STEP_2) + run_test_step2(); + else if (state & TEST_STATE_FAIL) + fail_and_clean_up(); +} |