mock: Clean up TCPMv2 mocks

Place mock functions in the mock libraries corresponding to the layers
of the real implementations. Broadly, move towards one layer of the TCPM
stack as a UUT, with mocks for the other layers as needed. There should
be a one-to-one correspondence between real modules and mock modules.
usb_pd_mock.c does not correspond to any real implementation module or
TCPM stack layer, so remove it and move its contents to the layers
corresponding to their real implementations.

Also clean up some redundant or misplaced mocks inside tests.

BUG=b:153071799,b:173791979
TEST=make buildall
BRANCH=none

Signed-off-by: Abe Levkoy <alevkoy@chromium.org>
Change-Id: Ic44df8675de2b9f1f8c7669cd97dcdc296bf107f
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2578200
Reviewed-by: Paul Fagerburg <pfagerburg@chromium.org>
Commit-Queue: Paul Fagerburg <pfagerburg@chromium.org>
This commit is contained in:
Abe Levkoy 2020-12-07 17:39:09 -07:00 committed by Commit Bot
parent 160208413d
commit 0a561def48
14 changed files with 99 additions and 148 deletions

View File

@ -14,7 +14,6 @@ mock-$(HAS_MOCK_TCPM) += tcpm_mock.o
mock-$(HAS_MOCK_TCPCI_I2C) += tcpci_i2c_mock.o
mock-$(HAS_MOCK_TIMER) += timer_mock.o
mock-$(HAS_MOCK_USB_MUX) += usb_mux_mock.o
mock-$(HAS_MOCK_USB_PD) += usb_pd_mock.o
mock-$(HAS_MOCK_USB_PE_SM) += usb_pe_sm_mock.o
mock-$(HAS_MOCK_USB_TC_SM) += usb_tc_sm_mock.o
mock-$(HAS_MOCK_USB_PD_DPM) += usb_pd_dpm_mock.o

View File

@ -1,101 +0,0 @@
/* Copyright 2020 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.
*/
/* Mock USB Type-C PD */
#include "common.h"
#include "console.h"
#include "usb_pd.h"
#include "mock/usb_pd_mock.h"
#include "memory.h"
#ifndef TEST_BUILD
#error "Mocks should only be in the test build."
#endif
struct mock_pd_port_t mock_pd_port[CONFIG_USB_PD_PORT_MAX_COUNT];
void mock_pd_reset(void)
{
/* Reset all values to 0. */
memset(mock_pd_port, 0, sizeof(mock_pd_port));
}
enum pd_dual_role_states pd_get_dual_role(int port)
{
return PD_DRP_TOGGLE_ON;
}
enum pd_data_role pd_get_data_role(int port)
{
return mock_pd_port[port].data_role;
}
enum pd_power_role pd_get_power_role(int port)
{
return mock_pd_port[port].power_role;
}
enum pd_cc_states pd_get_task_cc_state(int port)
{
return PD_CC_NONE;
}
int pd_is_connected(int port)
{
return 1;
}
bool pd_is_disconnected(int port)
{
return false;
}
__overridable const uint32_t * const pd_get_src_caps(int port)
{
return NULL;
}
__overridable uint8_t pd_get_src_cap_cnt(int port)
{
return 0;
}
__overridable void pd_set_src_caps(int port, int cnt, uint32_t *src_caps)
{
}
bool pd_get_partner_usb_comm_capable(int port)
{
return true;
}
inline uint8_t board_get_usb_pd_port_count(void)
{
return CONFIG_USB_PD_PORT_MAX_COUNT;
}
void pd_set_suspend(int port, int suspend)
{
}
enum tcpc_cc_polarity pd_get_polarity(int port)
{
return POLARITY_CC1;
}
void pd_request_data_swap(int port)
{}
void pd_request_vconn_swap_off(int port)
{}
void pd_request_vconn_swap_on(int port)
{}
bool pd_alt_mode_capable(int port)
{
return false;
}

View File

@ -7,6 +7,7 @@
#include "common.h"
#include "console.h"
#include "usb_pd.h"
#include "usb_pe_sm.h"
#include "mock/usb_pe_sm_mock.h"
#include "memory.h"
@ -86,3 +87,28 @@ bool pe_in_local_ams(int port)
return false;
}
const uint32_t * const pd_get_src_caps(int port)
{
return NULL;
}
uint8_t pd_get_src_cap_cnt(int port)
{
return 0;
}
void pd_set_src_caps(int port, int cnt, uint32_t *src_caps)
{
}
void pd_request_power_swap(int port)
{}
int pd_get_rev(int port, enum tcpm_transmit_type type)
{
return IS_ENABLED(CONFIG_USB_PD_REV30) ? PD_REV30 : PD_REV20;
}
void pe_invalidate_explicit_contract(int port)
{
}

View File

@ -126,6 +126,7 @@ int mock_prl_wait_for_tx_msg(int port,
}
task_wait_event(5 * MSEC);
}
/* A message of the expected type should have been sent by end_time. */
TEST_ASSERT(0);
return EC_ERROR_UNKNOWN;
}

View File

@ -7,6 +7,7 @@
#include "common.h"
#include "console.h"
#include "ec_commands.h"
#include "usb_tc_sm.h"
#include "mock/usb_tc_sm_mock.h"
#include "memory.h"
@ -35,6 +36,8 @@ void mock_tc_port_reset(void)
mock_tc_port[port].attached_snk = 0;
mock_tc_port[port].attached_src = 0;
mock_tc_port[port].vconn_src = false;
mock_tc_port[port].data_role = PD_ROLE_UFP;
mock_tc_port[port].power_role = PD_ROLE_SINK;
}
}
@ -128,3 +131,61 @@ void tc_snk_power_off(int port)
void tc_request_power_swap(int port)
{
}
enum pd_dual_role_states pd_get_dual_role(int port)
{
return PD_DRP_TOGGLE_ON;
}
enum pd_data_role pd_get_data_role(int port)
{
return mock_tc_port[port].data_role;
}
enum pd_power_role pd_get_power_role(int port)
{
return mock_tc_port[port].power_role;
}
enum pd_cc_states pd_get_task_cc_state(int port)
{
return PD_CC_NONE;
}
int pd_is_connected(int port)
{
return 1;
}
bool pd_is_disconnected(int port)
{
return false;
}
bool pd_get_partner_usb_comm_capable(int port)
{
return true;
}
void pd_set_suspend(int port, int suspend)
{
}
enum tcpc_cc_polarity pd_get_polarity(int port)
{
return POLARITY_CC1;
}
void pd_request_data_swap(int port)
{}
void pd_request_vconn_swap_off(int port)
{}
void pd_request_vconn_swap_on(int port)
{}
bool pd_alt_mode_capable(int port)
{
return false;
}

View File

@ -517,6 +517,10 @@ uint8_t pd_get_snk_cap_cnt(int port)
return 0;
}
void pd_set_src_caps(int port, int cnt, uint32_t *src_caps)
{
}
#endif /* !CONFIG_USB_PR_SM */
void pd_update_contract(int port)

View File

@ -1,23 +0,0 @@
/* Copyright 2020 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.
*/
/* Mock USB PD */
#ifndef __MOCK_USB_PD_MOCK_H
#define __MOCK_USB_PD_MOCK_H
#include "common.h"
#include "usb_pd.h"
/* Defaults should all be 0 values. */
struct mock_pd_port_t {
enum pd_data_role data_role;
enum pd_power_role power_role;
};
extern struct mock_pd_port_t mock_pd_port[CONFIG_USB_PD_PORT_MAX_COUNT];
void mock_pd_reset(void);
#endif /* __MOCK_USB_PD_MOCK_H */

View File

@ -9,6 +9,7 @@
#include "common.h"
#include "usb_tc_sm.h"
#include "usb_pd.h"
struct mock_tc_port_t {
int rev;
@ -20,6 +21,8 @@ struct mock_tc_port_t {
int attached_snk;
int attached_src;
bool vconn_src;
enum pd_data_role data_role;
enum pd_power_role power_role;
};
extern struct mock_tc_port_t mock_tc_port[CONFIG_USB_PD_PORT_MAX_COUNT];

View File

@ -16,7 +16,6 @@
#include "mock/usb_tc_sm_mock.h"
#include "mock/tcpc_mock.h"
#include "mock/usb_mux_mock.h"
#include "mock/usb_pd_mock.h"
#include "mock/usb_pd_dpm_mock.h"
#include "mock/dp_alt_mode_mock.h"
#include "mock/usb_prl_mock.h"
@ -39,7 +38,6 @@ void before_test(void)
mock_tc_port_reset();
mock_tcpc_reset();
mock_usb_mux_reset();
mock_pd_reset();
mock_dpm_reset();
mock_dp_alt_mode_reset();
mock_prl_reset();
@ -138,7 +136,7 @@ test_static int finish_src_discovery(void)
test_static int test_send_caps_error_before_connected(void)
{
/* Enable PE as source, expect SOURCE_CAP. */
mock_pd_port[PORT0].power_role = PD_ROLE_SOURCE;
mock_tc_port[PORT0].power_role = PD_ROLE_SOURCE;
mock_tc_port[PORT0].pd_enable = 1;
mock_tc_port[PORT0].vconn_src = true;
TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPC_TX_SOP,
@ -205,7 +203,7 @@ test_static int test_send_caps_error_before_connected(void)
test_static int test_send_caps_error_when_connected(void)
{
/* Enable PE as source, expect SOURCE_CAP. */
mock_pd_port[PORT0].power_role = PD_ROLE_SOURCE;
mock_tc_port[PORT0].power_role = PD_ROLE_SOURCE;
mock_tc_port[PORT0].pd_enable = 1;
mock_tc_port[PORT0].vconn_src = true;
TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPC_TX_SOP,

View File

@ -5,7 +5,6 @@
#define CONFIG_TEST_MOCK_LIST \
MOCK(USB_TC_SM) \
MOCK(USB_PD) \
MOCK(TCPC) \
MOCK(USB_MUX) \
MOCK(USB_PD_DPM) \

View File

@ -5,7 +5,6 @@
#define CONFIG_TEST_MOCK_LIST \
MOCK(USB_TC_SM) \
MOCK(USB_PD) \
MOCK(TCPC) \
MOCK(USB_MUX) \
MOCK(USB_PD_DPM) \

View File

@ -7,7 +7,6 @@
#include "common.h"
#include "mock/tcpc_mock.h"
#include "mock/tcpm_mock.h"
#include "mock/usb_pd_mock.h"
#include "mock/usb_pe_sm_mock.h"
#include "mock/usb_tc_sm_mock.h"
#include "task.h"
@ -140,8 +139,8 @@ void before_test(void)
{
mock_tc_port_reset();
mock_tc_port[PORT0].rev = PD_REV30;
mock_pd_port[PORT0].power_role = PD_ROLE_SOURCE;
mock_pd_port[PORT0].data_role = PD_ROLE_DFP;
mock_tc_port[PORT0].power_role = PD_ROLE_SOURCE;
mock_tc_port[PORT0].data_role = PD_ROLE_DFP;
mock_tcpm_reset();
mock_pe_port_reset();

View File

@ -6,6 +6,5 @@
#define CONFIG_TEST_MOCK_LIST \
MOCK(TCPC) \
MOCK(TCPM) \
MOCK(USB_PD) \
MOCK(USB_PE_SM) \
MOCK(USB_TC_SM)

View File

@ -27,19 +27,6 @@
/* Unreachable time in future */
#define TIMER_DISABLED 0xffffffffffffffff
/* TODO(b/153071799): Move these pd_* and pe_* function into mock */
__overridable void pd_request_power_swap(int port)
{}
void pd_set_src_caps(int port, int cnt, uint32_t *src_caps)
{
}
__overridable void pe_invalidate_explicit_contract(int port)
{
}
/* End pd_ mock section */
/* Install Mock TCPC and MUX drivers */
const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT] = {
{