From 743577a06268662e59a10cf0953c7c2a63158de7 Mon Sep 17 00:00:00 2001 From: swateeshrivastava Date: Wed, 13 Feb 2019 14:00:42 +0530 Subject: [PATCH] UT for ocmp_led --- .../ec/src/devices/ocmp_wrappers/ocmp_led.c | 3 + firmware/ec/test/Makefile | 3 + firmware/ec/test/suites/Test_ocmp_led.c | 186 ++++++++++++++++++ 3 files changed, 192 insertions(+) create mode 100644 firmware/ec/test/suites/Test_ocmp_led.c diff --git a/firmware/ec/src/devices/ocmp_wrappers/ocmp_led.c b/firmware/ec/src/devices/ocmp_wrappers/ocmp_led.c index 486b826564..4f18e51249 100644 --- a/firmware/ec/src/devices/ocmp_wrappers/ocmp_led.c +++ b/firmware/ec/src/devices/ocmp_wrappers/ocmp_led.c @@ -43,6 +43,8 @@ static ePostCode _probe(void *driver, POSTData *postData) return led_probe(driver, postData); } +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" static ePostCode _init(void *driver, const void *config, const void *alert_token) { @@ -56,6 +58,7 @@ static ePostCode _init(void *driver, const void *config, return POST_DEV_CFG_DONE; } +#pragma GCC diagnostic pop const Driver_fxnTable LED_fxnTable = { /* Message handlers */ diff --git a/firmware/ec/test/Makefile b/firmware/ec/test/Makefile index 05cf51c475..93ab732630 100644 --- a/firmware/ec/test/Makefile +++ b/firmware/ec/test/Makefile @@ -200,6 +200,9 @@ $(PATHB)Test_ocmp_dat-xxr5a$(TARGET_EXTENSION): $(STD_FILES) $(TEST_OCMP_DATXXR5 TEST_LED_SRC=$(OCWARE_ROOT)/src/devices/led.c $(OCWARE_ROOT)/src/devices/sx1509.c $(OCWARE_ROOT)/src/devices/i2cbus.c fake/fake_GPIO.c fake/fake_I2C.c fake/fake_ThreadedISR.c fake/fake_SX1509_register.c fake/fake_led.c stub/stub_GateMutex.c $(OCWARE_ROOT)/platform/oc-sdr/cfg/OC_CONNECT_LED.c $(PATHB)Test_led$(TARGET_EXTENSION): $(STD_FILES) $(TEST_LED_SRC) +TEST_OCMP_LED_SRC=$(OCWARE_ROOT)/src/devices/ocmp_wrappers/ocmp_led.c $(OCWARE_ROOT)/src/devices/led.c $(OCWARE_ROOT)/src/devices/sx1509.c $(OCWARE_ROOT)/src/devices/i2cbus.c fake/fake_GPIO.c fake/fake_I2C.c fake/fake_ThreadedISR.c fake/fake_SX1509_register.c fake/fake_led.c stub/stub_GateMutex.c $(OCWARE_ROOT)/platform/oc-sdr/cfg/OC_CONNECT_LED.c +$(PATHB)Test_ocmp_led$(TARGET_EXTENSION): $(STD_FILES) $(TEST_OCMP_LED_SRC) + $(PATHB)%$(TARGET_EXTENSION): $(C_COMPILER) $(CFLAGS) $(INC_DIRS) $(SYMBOLS) $^ -o $@ $(COV_CMDS) diff --git a/firmware/ec/test/suites/Test_ocmp_led.c b/firmware/ec/test/suites/Test_ocmp_led.c new file mode 100644 index 0000000000..8f4e7fc871 --- /dev/null +++ b/firmware/ec/test/suites/Test_ocmp_led.c @@ -0,0 +1,186 @@ +/** + * Copyright (c) 2017-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#include "common/inc/ocmp_wrappers/ocmp_led.h" +#include "include/test_led.h" + +extern const I2C_Dev s_sx1509_left_dev; +extern const I2C_Dev s_sx1509_right_dev; +extern HciLedCfg led_hci_ioexp; +extern uint8_t LED_GpioPins[OC_EC_HCI_LED_RESET]; +extern uint8_t SX1509_regs[SX1509_REG_TEST_2]; +extern uint8_t SX1509_right_regs[SX1509_REG_TEST_2]; +extern uint32_t LED_GpioConfig[OC_EC_HCI_LED_RESET]; +HciLedCfg ledDriver; +/* ============================= Boilerplate ================================ */ +unsigned int s_task_sleep_ticks; + +xdc_Void ti_sysbios_knl_Task_sleep__E(xdc_UInt32 nticks) +{ + s_task_sleep_ticks += nticks; +} + +void post_update_POSTData(POSTData *pData, uint8_t I2CBus, uint8_t devAddress, + uint16_t manId, uint16_t devId) +{ + pData->i2cBus = I2CBus; + pData->devAddr = devAddress; + pData->manId = manId; + pData->devId = devId; +} + +void suite_setUp(void) +{ + fake_I2C_init(); + fake_I2C_registerDevSimple(OC_CONNECT1_I2C8, LED_SX1509_LEFT_ADDRESS, + SX1509_regs, sizeof(SX1509_regs), + sizeof(SX1509_regs[0]), sizeof(uint8_t), + FAKE_I2C_DEV_BIG_ENDIAN); + fake_I2C_registerDevSimple(OC_CONNECT1_I2C8, LED_SX1509_RIGHT_ADDRESS, + SX1509_right_regs, sizeof(SX1509_right_regs), + sizeof(SX1509_right_regs[0]), sizeof(uint8_t), + FAKE_I2C_DEV_BIG_ENDIAN); + FakeGpio_registerDevSimple(LED_GpioPins, LED_GpioConfig); +} + +void setUp(void) +{ + memset(SX1509_regs, 0, sizeof(SX1509_regs)); + memset(SX1509_right_regs, 0, sizeof(SX1509_right_regs)); +} + +void tearDown(void) +{ +} + +void suite_tearDown(void) +{ + fake_I2C_deinit(); /* This will automatically unregister devices */ +} +/* ================================ Tests =================================== */ +void test_ocmp_led_probe(void) +{ + HciLedCfg *invalidLedDriver = NULL; + POSTData postData; + POSTData *invalidPostData = NULL; + + TEST_ASSERT_EQUAL(POST_DEV_FOUND, + LED_fxnTable.cb_probe(&led_hci_ioexp, &postData)); + TEST_ASSERT_EQUAL(OC_CONNECT1_I2C8, postData.i2cBus); + TEST_ASSERT_EQUAL(LED_SX1509_LEFT_ADDRESS, postData.devAddr); + TEST_ASSERT_EQUAL_HEX8(LED_POST_MANID, postData.manId); + TEST_ASSERT_EQUAL_HEX8(LED_POST_DEVID, postData.devId); + + postData.i2cBus = LED_POST_DATA_NULL; + postData.devAddr = LED_POST_DATA_NULL; + postData.manId = LED_POST_DATA_NULL; + postData.devId = LED_POST_DATA_NULL; + + /* Invalid config test */ + TEST_ASSERT_EQUAL(POST_DEV_MISSING, + LED_fxnTable.cb_probe(invalidLedDriver, &postData)); + TEST_ASSERT_EQUAL(LED_POST_DATA_NULL, postData.i2cBus); + TEST_ASSERT_EQUAL_HEX8(LED_POST_DATA_NULL, postData.devAddr); + TEST_ASSERT_EQUAL_HEX8(LED_POST_DATA_NULL, postData.manId); + TEST_ASSERT_EQUAL_HEX8(LED_POST_DATA_NULL, postData.devId); + + /* Invalid post data test */ + TEST_ASSERT_EQUAL(POST_DEV_MISSING, + LED_fxnTable.cb_probe(&led_hci_ioexp, invalidPostData)); + TEST_ASSERT_EQUAL(LED_POST_DATA_NULL, postData.i2cBus); + TEST_ASSERT_EQUAL_HEX8(LED_POST_DATA_NULL, postData.devAddr); + TEST_ASSERT_EQUAL_HEX8(LED_POST_DATA_NULL, postData.manId); + TEST_ASSERT_EQUAL_HEX8(LED_POST_DATA_NULL, postData.devId); +} + +void test_ocmp_init_probe(void) +{ + HciLedCfg *invalidLedDriver = NULL; + SX1509_regs[SX1509_REG_DATA_A] = LED_DEFAULT_VALUE; + SX1509_regs[SX1509_REG_DATA_B] = LED_DEFAULT_VALUE; + SX1509_right_regs[SX1509_REG_DATA_A] = LED_DEFAULT_VALUE; + SX1509_right_regs[SX1509_REG_DATA_B] = LED_DEFAULT_VALUE; + + TEST_ASSERT_EQUAL(POST_DEV_CFG_DONE, + LED_fxnTable.cb_init(&led_hci_ioexp, NULL, NULL)); + TEST_ASSERT_EQUAL_HEX8(SX1509_SOFT_RESET_REG_VALUE_2, + SX1509_regs[SX1509_REG_RESET]); + TEST_ASSERT_EQUAL_HEX8(SX1509_SOFT_RESET_REG_VALUE_2, + SX1509_right_regs[SX1509_REG_RESET]); + TEST_ASSERT_EQUAL_HEX8(LED_REG_INPUT_DISABLE_B_VALUE, + SX1509_regs[SX1509_REG_INPUT_DISABLE_B]); + TEST_ASSERT_EQUAL_HEX8(LED_REG_INPUT_DISABLE_B_VALUE, + SX1509_right_regs[SX1509_REG_INPUT_DISABLE_B]); + TEST_ASSERT_EQUAL_HEX8(LED_REG_PULL_UP_B_VALUE, + SX1509_regs[SX1509_REG_PULL_UP_B]); + TEST_ASSERT_EQUAL_HEX8(LED_REG_PULL_UP_B_VALUE, + SX1509_right_regs[SX1509_REG_PULL_UP_B]); + TEST_ASSERT_EQUAL_HEX8(LED_REG_OPEN_DRAIN_B_VALUE, + SX1509_regs[SX1509_REG_OPEN_DRAIN_B]); + TEST_ASSERT_EQUAL_HEX8(LED_REG_OPEN_DRAIN_B_VALUE, + SX1509_right_regs[SX1509_REG_OPEN_DRAIN_B]); + TEST_ASSERT_EQUAL_HEX8(LED_CLOCK_VALUE, SX1509_regs[SX1509_REG_CLOCK]); + TEST_ASSERT_EQUAL_HEX8(LED_CLOCK_VALUE, + SX1509_right_regs[SX1509_REG_CLOCK]); + TEST_ASSERT_EQUAL_HEX8(REG_MISC_VALUE, SX1509_regs[SX1509_REG_MISC]); + TEST_ASSERT_EQUAL_HEX8(REG_MISC_VALUE, SX1509_right_regs[SX1509_REG_MISC]); + TEST_ASSERT_EQUAL_HEX8(LED_DRIVER_ENABLE_B_VALUE, + SX1509_regs[SX1509_REG_LED_DRIVER_ENABLE_B]); + TEST_ASSERT_EQUAL_HEX8(LED_DRIVER_ENABLE_B_VALUE, + SX1509_right_regs[SX1509_REG_LED_DRIVER_ENABLE_B]); + TEST_ASSERT_EQUAL_HEX8(LED_GREEN, SX1509_regs[SX1509_REG_DATA_A]); + TEST_ASSERT_EQUAL_HEX8(0xD5, SX1509_regs[SX1509_REG_DATA_B]); + TEST_ASSERT_EQUAL_HEX8(LED_GREEN, SX1509_right_regs[SX1509_REG_DATA_A]); + TEST_ASSERT_EQUAL_HEX8(0xD5, SX1509_right_regs[SX1509_REG_DATA_B]); + + /* Invalid config test */ + TEST_ASSERT_EQUAL(POST_DEV_CFG_FAIL, + LED_fxnTable.cb_init(invalidLedDriver, NULL, NULL)); +} + +void test_ocmp_led_testpattern_control(void) +{ + HciLedCfg *invalidLedDriver = NULL; + uint8_t param = HCI_LED_OFF; + SX1509_regs[SX1509_REG_DATA_A] = LED_GREEN; + SX1509_regs[SX1509_REG_DATA_B] = LED_GREEN; + SX1509_right_regs[SX1509_REG_DATA_A] = LED_GREEN; + SX1509_right_regs[SX1509_REG_DATA_B] = LED_GREEN; + + /* For HCI_LED_OFF */ + TEST_ASSERT_EQUAL(true, led_testpattern_control(&led_hci_ioexp, ¶m)); + TEST_ASSERT_EQUAL_HEX8(LED_OFF, SX1509_regs[SX1509_REG_DATA_A]); + TEST_ASSERT_EQUAL_HEX8(LED_OFF, SX1509_regs[SX1509_REG_DATA_B]); + TEST_ASSERT_EQUAL_HEX8(LED_OFF, SX1509_right_regs[SX1509_REG_DATA_A]); + TEST_ASSERT_EQUAL_HEX8(LED_OFF, SX1509_right_regs[SX1509_REG_DATA_B]); + + /* For HCI_LED_RED */ + param = HCI_LED_RED; + TEST_ASSERT_EQUAL(true, led_testpattern_control(&led_hci_ioexp, ¶m)); + TEST_ASSERT_EQUAL_HEX8(LED_RED, SX1509_regs[SX1509_REG_DATA_A]); + TEST_ASSERT_EQUAL_HEX8(LED_RED, SX1509_regs[SX1509_REG_DATA_B]); + TEST_ASSERT_EQUAL_HEX8(LED_RED, SX1509_right_regs[SX1509_REG_DATA_A]); + TEST_ASSERT_EQUAL_HEX8(LED_RED, SX1509_right_regs[SX1509_REG_DATA_B]); + + /* For HCI_LED_GREEN */ + param = HCI_LED_GREEN; + TEST_ASSERT_EQUAL(true, led_testpattern_control(&led_hci_ioexp, ¶m)); + TEST_ASSERT_EQUAL_HEX8(LED_GREEN, SX1509_regs[SX1509_REG_DATA_A]); + TEST_ASSERT_EQUAL_HEX8(LED_GREEN, SX1509_regs[SX1509_REG_DATA_B]); + TEST_ASSERT_EQUAL_HEX8(LED_GREEN, SX1509_right_regs[SX1509_REG_DATA_A]); + TEST_ASSERT_EQUAL_HEX8(LED_GREEN, SX1509_right_regs[SX1509_REG_DATA_B]); + + /* Inavlid param Id */ + param = LED_INVALID_PARAM; + TEST_ASSERT_EQUAL(false, led_testpattern_control(&led_hci_ioexp, ¶m)); + + /* Invalid config test */ + param = HCI_LED_GREEN; + TEST_ASSERT_EQUAL(false, led_testpattern_control(invalidLedDriver, ¶m)); +}