| /* |
| * Copyright 2021 Google LLC |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #include <zephyr/device.h> |
| #include <zephyr/drivers/bbram.h> |
| #include <string.h> |
| #include <ztest.h> |
| |
| #define BBRAM_NODELABEL DT_NODELABEL(bbram) |
| #define BBRAM_LABEL DT_LABEL(BBRAM_NODELABEL) |
| #define BBRAM_SIZE DT_PROP(BBRAM_NODELABEL, size) |
| |
| static void test_get_size(void) |
| { |
| const struct device *dev = device_get_binding(BBRAM_LABEL); |
| size_t size; |
| |
| zassert_ok(bbram_get_size(dev, &size), NULL); |
| zassert_equal(size, BBRAM_SIZE, NULL); |
| } |
| |
| static void test_bbram_out_of_bounds(void) |
| { |
| const struct device *dev = device_get_binding(BBRAM_LABEL); |
| uint8_t buffer[BBRAM_SIZE]; |
| |
| zassert_not_null(dev, NULL); |
| zassert_equal(bbram_read(dev, 0, 0, buffer), -EFAULT, NULL); |
| zassert_equal(bbram_read(dev, 0, BBRAM_SIZE + 1, buffer), -EFAULT, NULL); |
| zassert_equal(bbram_read(dev, BBRAM_SIZE - 1, 2, buffer), -EFAULT, NULL); |
| zassert_equal(bbram_write(dev, 0, 0, buffer), -EFAULT, NULL); |
| zassert_equal(bbram_write(dev, 0, BBRAM_SIZE + 1, buffer), -EFAULT, NULL); |
| zassert_equal(bbram_write(dev, BBRAM_SIZE - 1, 2, buffer), -EFAULT, NULL); |
| } |
| |
| static void test_read_write(void) |
| { |
| const struct device *dev = device_get_binding(BBRAM_LABEL); |
| uint8_t buffer[BBRAM_SIZE]; |
| uint8_t expected[BBRAM_SIZE]; |
| |
| for (int i = 0; i < BBRAM_SIZE; ++i) { |
| expected[i] = i; |
| } |
| /* Set and verify content. */ |
| zassert_ok(bbram_write(dev, 0, BBRAM_SIZE, expected), NULL); |
| zassert_ok(bbram_read(dev, 0, BBRAM_SIZE, buffer), NULL); |
| zassert_mem_equal(buffer, expected, BBRAM_SIZE, NULL); |
| } |
| |
| static void test_set_invalid(void) |
| { |
| const struct device *dev = device_get_binding(BBRAM_LABEL); |
| |
| zassert_equal(bbram_check_invalid(dev), 0, NULL); |
| zassert_ok(bbram_emul_set_invalid(dev, true), NULL); |
| zassert_equal(bbram_check_invalid(dev), 1, NULL); |
| zassert_equal(bbram_check_invalid(dev), 0, NULL); |
| } |
| |
| static void test_set_standby(void) |
| { |
| const struct device *dev = device_get_binding(BBRAM_LABEL); |
| |
| zassert_equal(bbram_check_standby_power(dev), 0, NULL); |
| zassert_ok(bbram_emul_set_standby_power_state(dev, true), NULL); |
| zassert_equal(bbram_check_standby_power(dev), 1, NULL); |
| zassert_equal(bbram_check_standby_power(dev), 0, NULL); |
| } |
| |
| static void test_set_power(void) |
| { |
| const struct device *dev = device_get_binding(BBRAM_LABEL); |
| |
| zassert_equal(bbram_check_power(dev), 0, NULL); |
| zassert_ok(bbram_emul_set_power_state(dev, true), NULL); |
| zassert_equal(bbram_check_power(dev), 1, NULL); |
| zassert_equal(bbram_check_power(dev), 0, NULL); |
| } |
| |
| static void test_reset_invalid_on_read(void) |
| { |
| const struct device *dev = device_get_binding(BBRAM_LABEL); |
| uint8_t buffer[BBRAM_SIZE]; |
| |
| zassert_ok(bbram_emul_set_invalid(dev, true), NULL); |
| zassert_equal(bbram_read(dev, 0, BBRAM_SIZE, buffer), -EFAULT, NULL); |
| zassert_equal(bbram_check_invalid(dev), 0, NULL); |
| } |
| |
| static void test_reset_invalid_on_write(void) |
| { |
| const struct device *dev = device_get_binding(BBRAM_LABEL); |
| uint8_t buffer[BBRAM_SIZE]; |
| |
| zassert_ok(bbram_emul_set_invalid(dev, true), NULL); |
| zassert_equal(bbram_write(dev, 0, BBRAM_SIZE, buffer), -EFAULT, NULL); |
| zassert_equal(bbram_check_invalid(dev), 0, NULL); |
| } |
| |
| static void setup(void) |
| { |
| const struct device *dev = device_get_binding(BBRAM_LABEL); |
| |
| bbram_emul_set_invalid(dev, false); |
| bbram_emul_set_standby_power_state(dev, false); |
| bbram_emul_set_power_state(dev, false); |
| } |
| |
| void test_main(void) |
| { |
| ztest_test_suite( |
| bbram, |
| ztest_unit_test_setup_teardown(test_get_size, setup, unit_test_noop), |
| ztest_unit_test_setup_teardown(test_bbram_out_of_bounds, setup, unit_test_noop), |
| ztest_unit_test_setup_teardown(test_read_write, setup, unit_test_noop), |
| ztest_unit_test_setup_teardown(test_set_invalid, setup, unit_test_noop), |
| ztest_unit_test_setup_teardown(test_set_standby, setup, unit_test_noop), |
| ztest_unit_test_setup_teardown(test_set_power, setup, unit_test_noop), |
| ztest_unit_test_setup_teardown(test_reset_invalid_on_read, setup, unit_test_noop), |
| ztest_unit_test_setup_teardown(test_reset_invalid_on_write, setup, unit_test_noop)); |
| ztest_run_test_suite(bbram); |
| } |