#include <stdlib.h>
#include "atca_test.h"
#include "basic/atca_basic.h"
#include "host/atca_host.h"
#include "test/atca_tests.h"
#include "atca_execution.h"
TEST(atca_cmd_unit_test, read)
{
ATCA_STATUS status;
ATCAPacket packet;
ATCACommand ca_cmd = _gDevice->mCommands;
packet.param1 = ATCA_ZONE_CONFIG;
packet.param2 = 0x0000;
status = atRead(ca_cmd, &packet);
TEST_ASSERT_EQUAL(ATCA_SUCCESS, status);
status = atca_execute_command(&packet, _gDevice);
TEST_ASSERT_EQUAL(ATCA_SUCCESS, status);
TEST_ASSERT_EQUAL(0x07, packet.data[ATCA_COUNT_IDX]);
}
TEST(atca_cmd_basic_test, read_zone)
{
ATCA_STATUS status = ATCA_GEN_FAIL;
uint8_t data[32];
uint8_t serial_prefix[] = { 0x01, 0x23 };
uint8_t slot, block, offset;
bool locked = false;
slot = 0;
block = 0;
offset = 0;
memset(data, 0x77, sizeof(data));
status = atcab_read_zone(ATCA_ZONE_CONFIG, slot, block, offset, data, sizeof(data));
TEST_ASSERT_EQUAL(ATCA_SUCCESS, status);
TEST_ASSERT_EQUAL_UINT8_ARRAY(serial_prefix, data, 2);
status = atcab_is_locked(LOCK_ZONE_DATA, &locked);
TEST_ASSERT_EQUAL(ATCA_SUCCESS, status);
status = atcab_read_zone(LOCK_ZONE_DATA, slot, block, offset, data, sizeof(data));
TEST_ASSERT_EQUAL(locked ? ATCA_SUCCESS : ATCA_EXECUTION_ERROR, status);
}
TEST(atca_cmd_basic_test, read_config_zone)
{
ATCA_STATUS status = ATCA_SUCCESS;
uint8_t config_data[ATCA_ECC_CONFIG_SIZE];
status = atcab_read_config_zone(config_data);
TEST_ASSERT_EQUAL(ATCA_SUCCESS, status);
switch (gCfg->devtype)
{
case ATSHA204A:
TEST_ASSERT_EQUAL_MEMORY(&sha204_default_config[16], &config_data[16], 52 - 16);
break;
case ATECC108A:
case ATECC508A:
TEST_ASSERT_EQUAL_MEMORY(&test_ecc_configdata[16], &config_data[16], 52 - 16);
TEST_ASSERT_EQUAL_MEMORY(&test_ecc_configdata[90], &config_data[90], 38);
break;
case ATECC608A:
TEST_ASSERT_EQUAL_MEMORY(&test_ecc608_configdata[16], &config_data[16], 52 - 16);
TEST_ASSERT_EQUAL_MEMORY(&test_ecc608_configdata[68], &config_data[68], 84 - 68);
TEST_ASSERT_EQUAL_MEMORY(&test_ecc608_configdata[90], &config_data[90], 38);
break;
default:
break;
}
}
TEST(atca_cmd_basic_test, read_otp_zone)
{
ATCA_STATUS status = ATCA_SUCCESS;
uint8_t read_data[ATCA_BLOCK_SIZE * 2];
test_assert_data_is_locked();
status = atcab_read_bytes_zone(ATCA_ZONE_OTP, 0, 0x00, read_data, sizeof(read_data));
TEST_ASSERT_EQUAL(ATCA_SUCCESS, status);
}
TEST(atca_cmd_basic_test, read_data_zone)
{
ATCA_STATUS status = ATCA_SUCCESS;
uint8_t read_data[ATCA_BLOCK_SIZE];
test_assert_data_is_locked();
status = atcab_read_bytes_zone(ATCA_ZONE_DATA, 11, 0, read_data, sizeof(read_data));
TEST_ASSERT_EQUAL(ATCA_SUCCESS, status);
}
t_test_case_info read_basic_test_info[] =
{
{ REGISTER_TEST_CASE(atca_cmd_basic_test, read_zone), DEVICE_MASK(ATSHA204A) | DEVICE_MASK(ATECC108A) | DEVICE_MASK(ATECC508A) | DEVICE_MASK(ATECC608A) },
{ REGISTER_TEST_CASE(atca_cmd_basic_test, read_config_zone), DEVICE_MASK(ATSHA204A) | DEVICE_MASK(ATECC108A) | DEVICE_MASK(ATECC508A) | DEVICE_MASK(ATECC608A) },
{ REGISTER_TEST_CASE(atca_cmd_basic_test, read_otp_zone), DEVICE_MASK(ATSHA204A) | DEVICE_MASK(ATECC108A) | DEVICE_MASK(ATECC508A) | DEVICE_MASK(ATECC608A) },
{ REGISTER_TEST_CASE(atca_cmd_basic_test, read_data_zone), DEVICE_MASK(ATSHA204A) | DEVICE_MASK(ATECC108A) | DEVICE_MASK(ATECC508A) | DEVICE_MASK(ATECC608A) },
{ (fp_test_case)NULL, (uint8_t)0 },
};
t_test_case_info read_unit_test_info[] =
{
{ REGISTER_TEST_CASE(atca_cmd_unit_test, read), DEVICE_MASK(ATSHA204A) | DEVICE_MASK(ATECC108A) | DEVICE_MASK(ATECC508A) | DEVICE_MASK(ATECC608A) },
{ (fp_test_case)NULL, (uint8_t)0 },
};