blob: 6ac8499bd40b71df814677adfda76a81b3c9a8cd [file] [log] [blame]
/*
* Copyright (c) 2017 Nordic Semiconductor ASA
* Copyright (c) 2015 Runtime Inc
*
* SPDX-License-Identifier: Apache-2.0
*/
#include "fcb_test.h"
void test_fcb_last_of_n(void)
{
const uint8_t ENTRIES = 5U;
struct fcb *fcb;
int rc;
struct fcb_entry loc;
struct fcb_entry areas[ENTRIES];
uint8_t test_data[128] = {0};
uint8_t i;
fcb = &test_fcb;
fcb->f_scratch_cnt = 1U;
/* No fcbs available */
rc = fcb_offset_last_n(fcb, 1, &loc);
zassert_true(rc != 0, "No fcbs available");
/*
* Add some fcbs.
*/
for (i = 0U; i < ENTRIES; i++) {
rc = fcb_append(fcb, sizeof(test_data), &loc);
if (rc == -ENOSPC) {
break;
}
rc = flash_area_write(fcb->fap, FCB_ENTRY_FA_DATA_OFF(loc),
test_data, sizeof(test_data));
zassert_true(rc == 0, "flash_area_write call failure");
rc = fcb_append_finish(fcb, &loc);
zassert_true(rc == 0, "fcb_append_finish call failure");
areas[i] = loc;
}
/* last entry */
rc = fcb_offset_last_n(fcb, 1, &loc);
zassert_true(rc == 0, "fcb_offset_last_n call failure");
zassert_true(areas[4].fe_sector == loc.fe_sector &&
areas[4].fe_data_off == loc.fe_data_off &&
areas[4].fe_data_len == loc.fe_data_len,
"fcb_offset_last_n: fetched wrong n-th location");
/* somewhere in the middle */
rc = fcb_offset_last_n(fcb, 3, &loc);
zassert_true(rc == 0, "fcb_offset_last_n call failure");
zassert_true(areas[2].fe_sector == loc.fe_sector &&
areas[2].fe_data_off == loc.fe_data_off &&
areas[2].fe_data_len == loc.fe_data_len,
"fcb_offset_last_n: fetched wrong n-th location");
/* first entry */
rc = fcb_offset_last_n(fcb, 5, &loc);
zassert_true(rc == 0, "fcb_offset_last_n call failure");
zassert_true(areas[0].fe_sector == loc.fe_sector &&
areas[0].fe_data_off == loc.fe_data_off &&
areas[0].fe_data_len == loc.fe_data_len,
"fcb_offset_last_n: fetched wrong n-th location");
/* after last valid entry, returns the first one like for 5 */
rc = fcb_offset_last_n(fcb, 6, &loc);
zassert_true(rc == 0, "fcb_offset_last_n call failure");
zassert_true(areas[0].fe_sector == loc.fe_sector &&
areas[0].fe_data_off == loc.fe_data_off &&
areas[0].fe_data_len == loc.fe_data_len,
"fcb_offset_last_n: fetched wrong n-th location");
}