diff options
Diffstat (limited to 'zephyr/test/drivers/default/src/virtual_battery.c')
-rw-r--r-- | zephyr/test/drivers/default/src/virtual_battery.c | 155 |
1 files changed, 5 insertions, 150 deletions
diff --git a/zephyr/test/drivers/default/src/virtual_battery.c b/zephyr/test/drivers/default/src/virtual_battery.c index 3b265443e8..fc29e39777 100644 --- a/zephyr/test/drivers/default/src/virtual_battery.c +++ b/zephyr/test/drivers/default/src/virtual_battery.c @@ -3,19 +3,15 @@ * found in the LICENSE file. */ +#include <zephyr/kernel.h> +#include <zephyr/ztest.h> + #include "battery.h" #include "battery_smart.h" #include "ec_commands.h" #include "emul/emul_smart_battery.h" -#include "gpio.h" #include "host_command.h" #include "test/drivers/test_state.h" -#include "virtual_battery.h" - -#include <zephyr/drivers/emul.h> -#include <zephyr/drivers/gpio/gpio_emul.h> -#include <zephyr/kernel.h> -#include <zephyr/ztest.h> void copy_memmap_string(uint8_t *dest, int offset, int len); @@ -230,11 +226,11 @@ ZTEST_USER(virtual_battery, test_read_regs) word = virtual_battery_read16(SB_SPECIFICATION_INFO); zassert_equal(expected, word, "%d != %d", expected, word); - zassert_ok(battery_status(&expected)); + zassume_ok(battery_status(&expected)); word = virtual_battery_read16(SB_BATTERY_STATUS); zassert_equal(expected, word, "%d != %d", expected, word); - zassert_ok(battery_design_voltage(&expected)); + zassume_ok(battery_design_voltage(&expected)); word = virtual_battery_read16(SB_DESIGN_VOLTAGE); zassert_equal(expected, word, "%d != %d", expected, word); @@ -289,144 +285,3 @@ ZTEST(virtual_battery, test_read_data_from_host_memmap) ZTEST_SUITE(virtual_battery, drivers_predicate_post_main, NULL, NULL, NULL, NULL); - -ZTEST(virtual_battery_direct, test_bad_reg_write) -{ - struct ec_response_i2c_passthru resp; - - /* Start with a zero-length write. The state machine is expecting a - * register address to be written, so this will fail. - */ - zassert_equal(EC_ERROR_INVAL, - virtual_battery_handler(&resp, 0, NULL, 0, 0, - /* write_len = */ 0, NULL)); - - zassert_equal(EC_I2C_STATUS_NAK, resp.i2c_status); -} - -ZTEST(virtual_battery_direct, test_aborted_write) -{ - struct ec_response_i2c_passthru resp; - int error_code; - - /* Arbitrary packet of bytes */ - const uint8_t packet[] = { 0xAA, 0xBB, 0xCC }; - - /* Start with a length 1 write to set a register address. */ - zassert_ok(virtual_battery_handler(&resp, 0, &error_code, 0, 0, - /* write_len = */ 1, &packet[0])); - - /* Now write two more bytes successfully... */ - zassert_ok(virtual_battery_handler(&resp, 0, &error_code, 0, 0, - /* write_len = */ 1, &packet[1])); - zassert_ok(error_code); - - zassert_ok(virtual_battery_handler(&resp, 0, &error_code, 0, 0, - /* write_len = */ 1, &packet[2])); - zassert_ok(error_code); - - /* ...and abruptly write 0 bytes. This will cause an error */ - zassert_equal(EC_ERROR_INVAL, - virtual_battery_handler(&resp, 0, &error_code, 0, 0, - /* write_len = */ 0, NULL)); - - zassert_equal(EC_I2C_STATUS_NAK, resp.i2c_status); -} - -ZTEST(virtual_battery_direct, test_aborted_read) -{ - struct ec_response_i2c_passthru resp; - int error_code; - - /* Arbitrary packet to set a register plus a buffer to read to */ - const uint8_t write_packet[] = { SB_MANUFACTURER_NAME }; - uint8_t read_packet[3] = { 0 }; - - /* Start with a length 1 write to set a register address. */ - zassert_ok(virtual_battery_handler(&resp, 0, &error_code, 0, 0, - /* write_len = */ 1, - &write_packet[0])); - - /* Now read two bytes successfully... */ - zassert_ok(virtual_battery_handler(&resp, 0, &error_code, 0, - /* read_len = */ 1, 0, - &read_packet[0])); - zassert_ok(error_code); - - zassert_ok(virtual_battery_handler(&resp, 0, &error_code, 0, - /* read_len = */ 1, 0, - &read_packet[1])); - zassert_ok(error_code); - - /* ...and abruptly read 0 bytes. This will cause an error */ - zassert_equal(EC_ERROR_INVAL, - virtual_battery_handler(&resp, 0, &error_code, 0, - /* read_len = */ 0, 0, - &read_packet[2])); - - zassert_equal(EC_I2C_STATUS_NAK, resp.i2c_status); -} - -ZTEST(virtual_battery_direct, test_read_bad_reg) -{ - struct ec_response_i2c_passthru resp; - int error_code; - - /* Try to read from an invalid register */ - const uint8_t write_packet[] = { 0xFF }; - uint8_t read_packet[3] = { 0 }; - - /* Start with a length 1 write to set a register address. */ - zassert_ok(virtual_battery_handler(&resp, 0, &error_code, 0, 0, - /* write_len = */ 1, - &write_packet[0])); - - /* Now try to read */ - zassert_equal(EC_ERROR_INVAL, - virtual_battery_handler(&resp, 0, &error_code, 0, - /* read_len = */ 1, 0, - &read_packet[0])); - zassert_equal(EC_ERROR_INVAL, error_code); -} - -#define GPIO_BATT_PRES_ODL_PATH DT_PATH(named_gpios, ec_batt_pres_odl) -#define GPIO_BATT_PRES_ODL_PORT DT_GPIO_PIN(GPIO_BATT_PRES_ODL_PATH, gpios) - -static int set_battery_present(bool batt_present) -{ - const struct device *batt_pres_dev = - DEVICE_DT_GET(DT_GPIO_CTLR(GPIO_BATT_PRES_ODL_PATH, gpios)); - - return gpio_emul_input_set(batt_pres_dev, GPIO_BATT_PRES_ODL_PORT, - !batt_present); -} - -ZTEST(virtual_battery_direct, test_no_battery) -{ - struct ec_response_i2c_passthru resp; - - set_battery_present(false); - - /* Arbitrary packet of bytes */ - const uint8_t packet[] = { 0xAA, 0xBB, 0xCC }; - - /* Attempt a valid write operation, which will fail due to no battery */ - zassert_equal(EC_ERROR_INVAL, - virtual_battery_handler(&resp, 0, NULL, 0, 0, - /* write_len = */ 1, &packet[0])); - - zassert_equal(EC_I2C_STATUS_NAK, resp.i2c_status); -} - -static void virtual_battery_direct_reset(void *arg) -{ - reset_parse_state(); - - set_battery_present(true); -} - -/* The virtual_battery_direct suite tests the virtual battery handler directly - * without performing I2C ops. This makes it easier to test certain corner-cases - */ -ZTEST_SUITE(virtual_battery_direct, drivers_predicate_post_main, NULL, - virtual_battery_direct_reset, virtual_battery_direct_reset, NULL); |