diff options
Diffstat (limited to 'test/usb_pd_console.c')
-rw-r--r-- | test/usb_pd_console.c | 62 |
1 files changed, 61 insertions, 1 deletions
diff --git a/test/usb_pd_console.c b/test/usb_pd_console.c index bc647f094e..a835a643f8 100644 --- a/test/usb_pd_console.c +++ b/test/usb_pd_console.c @@ -33,6 +33,8 @@ static bool tc_get_current_state_called; static bool tc_get_flags_called; static bool pe_get_current_state_called; static bool pe_get_flags_called; +static bool pe_is_explicit_contract_called; +static bool pe_snk_in_epr_mode_called; static bool pd_get_dual_role_called; static bool board_get_usb_pd_port_count_called; static bool pd_srccaps_dump_called; @@ -51,6 +53,7 @@ static int vdm_count; static int vdm_vid; static uint32_t vdm_data[10]; static enum pd_dual_role_states dr_state; +static enum pd_power_role pd_get_power_role_return = PD_ROLE_SINK; /* Mock functions */ int tc_is_vconn_src(int port) @@ -62,7 +65,7 @@ int tc_is_vconn_src(int port) enum pd_power_role pd_get_power_role(int port) { pd_get_power_role_called = true; - return 0; + return pd_get_power_role_return; } uint32_t pe_get_flags(int port) @@ -71,6 +74,18 @@ uint32_t pe_get_flags(int port) return 0; } +int pe_is_explicit_contract(int port) +{ + pe_is_explicit_contract_called = true; + return 1; +} + +bool pe_snk_in_epr_mode(int port) +{ + pe_snk_in_epr_mode_called = true; + return true; +} + const char *pe_get_current_state(int port) { pe_get_current_state_called = true; @@ -660,6 +675,8 @@ static int test_command_pd_state(void) tc_get_flags_called = false; pe_get_current_state_called = false; pe_get_flags_called = false; + pe_is_explicit_contract_called = true; + pe_snk_in_epr_mode_called = true; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); TEST_ASSERT(pd_get_polarity_called); @@ -671,6 +688,8 @@ static int test_command_pd_state(void) TEST_ASSERT(tc_get_flags_called); TEST_ASSERT(pe_get_current_state_called); TEST_ASSERT(pe_get_flags_called); + TEST_ASSERT(pe_is_explicit_contract_called); + TEST_ASSERT(pe_snk_in_epr_mode_called); return EC_SUCCESS; } @@ -687,6 +706,46 @@ static int test_command_pd_srccaps(void) return EC_SUCCESS; } +static int test_command_pd_epr(void) +{ + int argc = 4; + const char *argv[] = { "pd", "0", "epr", "enter" }; + + /* Return EC_ERROR_PARAM_COUNT if argc < 3. */ + TEST_ASSERT(command_pd(3, argv) == EC_ERROR_PARAM_COUNT); + + /* Return SUCCESS with request==0 if role==PD_ROLE_SOURCE. */ + request = 0; + pd_get_power_role_called = false; + pd_get_power_role_return = PD_ROLE_SOURCE; + TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); + TEST_ASSERT(pd_get_power_role_called); + TEST_ASSERT(request == 0); + + /* Return SUCCESS with request==DPM_REQUEST_EPR_MODE_ENTRY. */ + request = 0; + pd_get_power_role_called = false; + pd_get_power_role_return = PD_ROLE_SINK; + TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); + TEST_ASSERT(pd_get_power_role_called); + TEST_ASSERT(request == DPM_REQUEST_EPR_MODE_ENTRY); + + /* Return SUCCESS with request==DPM_REQUEST_EPR_MODE_EXIT. */ + argv[3] = "exit"; + request = 0; + pd_get_power_role_called = false; + pd_get_power_role_return = PD_ROLE_SINK; + TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); + TEST_ASSERT(pd_get_power_role_called); + TEST_ASSERT(request == DPM_REQUEST_EPR_MODE_EXIT); + + /* Return EC_ERROR_PARAM3 for invalid sub-command. */ + argv[3] = "start"; + TEST_ASSERT(command_pd(argc, argv) == EC_ERROR_PARAM3); + + return EC_SUCCESS; +} + static int test_command_pd_timer(void) { int argc = 3; @@ -731,6 +790,7 @@ void run_test(int argc, const char **argv) RUN_TEST(test_command_pd_dualrole3); RUN_TEST(test_command_pd_dualrole4); RUN_TEST(test_command_pd_dualrole5); + RUN_TEST(test_command_pd_epr); RUN_TEST(test_command_pd_state); RUN_TEST(test_command_pd_srccaps); RUN_TEST(test_command_pd_timer); |