blob: 42218eefaa7d30503d4bdacfd6232d88158d2172 [file] [log] [blame]
/*
* Copyright (c) 2019 Vestas Wind Systems A/S
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <ztest.h>
#include <drivers/eeprom.h>
#include <device.h>
static void test_size(void)
{
struct device *eeprom;
size_t size;
eeprom = device_get_binding(DT_ALIAS_EEPROM_0_LABEL);
size = eeprom_get_size(eeprom);
zassert_not_equal(0, size, "Unexpected size of zero bytes");
}
static void test_out_of_bounds(void)
{
const u8_t data[4] = { 0x01, 0x02, 0x03, 0x03 };
struct device *eeprom;
size_t size;
int rc;
eeprom = device_get_binding(DT_ALIAS_EEPROM_0_LABEL);
size = eeprom_get_size(eeprom);
rc = eeprom_write(eeprom, size - 1, data, sizeof(data));
zassert_equal(-EINVAL, rc, "Unexpected error code (%d)", rc);
}
static void test_write_and_verify(void)
{
const u8_t wr_buf1[4] = { 0xFF, 0xEE, 0xDD, 0xCC };
const u8_t wr_buf2[sizeof(wr_buf1)] = { 0xAA, 0xBB, 0xCC, 0xDD };
u8_t rd_buf[sizeof(wr_buf1)];
struct device *eeprom;
int rc;
eeprom = device_get_binding(DT_ALIAS_EEPROM_0_LABEL);
rc = eeprom_write(eeprom, 0, wr_buf1, sizeof(wr_buf1));
zassert_equal(0, rc, "Unexpected error code (%d)", rc);
rc = eeprom_read(eeprom, 0, rd_buf, sizeof(rd_buf));
zassert_equal(0, rc, "Unexpected error code (%d)", rc);
rc = memcmp(wr_buf1, rd_buf, sizeof(wr_buf1));
zassert_equal(0, rc, "Unexpected error code (%d)", rc);
rc = eeprom_write(eeprom, 0, wr_buf2, sizeof(wr_buf2));
zassert_equal(0, rc, "Unexpected error code (%d)", rc);
rc = eeprom_read(eeprom, 0, rd_buf, sizeof(rd_buf));
zassert_equal(0, rc, "Unexpected error code (%d)", rc);
rc = memcmp(wr_buf2, rd_buf, sizeof(wr_buf2));
zassert_equal(0, rc, "Unexpected error code (%d)", rc);
}
static void test_zero_length_write(void)
{
const u8_t wr_buf1[4] = { 0x10, 0x20, 0x30, 0x40 };
const u8_t wr_buf2[sizeof(wr_buf1)] = { 0xAA, 0xBB, 0xCC, 0xDD };
u8_t rd_buf[sizeof(wr_buf1)];
struct device *eeprom;
int rc;
eeprom = device_get_binding(DT_ALIAS_EEPROM_0_LABEL);
rc = eeprom_write(eeprom, 0, wr_buf1, sizeof(wr_buf1));
zassert_equal(0, rc, "Unexpected error code (%d)", rc);
rc = eeprom_read(eeprom, 0, rd_buf, sizeof(rd_buf));
zassert_equal(0, rc, "Unexpected error code (%d)", rc);
rc = memcmp(wr_buf1, rd_buf, sizeof(wr_buf1));
zassert_equal(0, rc, "Unexpected error code (%d)", rc);
rc = eeprom_write(eeprom, 0, wr_buf2, 0);
zassert_equal(0, rc, "Unexpected error code (%d)", rc);
rc = eeprom_read(eeprom, 0, rd_buf, sizeof(rd_buf));
zassert_equal(0, rc, "Unexpected error code (%d)", rc);
rc = memcmp(wr_buf1, rd_buf, sizeof(wr_buf1));
zassert_equal(0, rc, "Unexpected error code (%d)", rc);
}
void test_main(void)
{
static struct device *eeprom;
eeprom = device_get_binding(DT_ALIAS_EEPROM_0_LABEL);
zassert_not_null(eeprom, "Unable to get EEPROM device");
k_object_access_grant(eeprom, k_current_get());
ztest_test_suite(eeprom_api,
ztest_user_unit_test(test_size),
ztest_user_unit_test(test_out_of_bounds),
ztest_user_unit_test(test_write_and_verify),
ztest_user_unit_test(test_zero_length_write));
ztest_run_test_suite(eeprom_api);
}