blob: bc330343a5d1b48552c7ab297e20deda36e54053 [file] [log] [blame]
/*
* Copyright (c) 2018 Nordic Semiconductor ASA
* Copyright (c) 2015 Runtime Inc
*
* SPDX-License-Identifier: Apache-2.0
*/
#include "settings_test.h"
#include "settings/settings_fcb.h"
ZTEST(settings_config_fcb, test_config_compress_reset)
{
int rc;
struct settings_fcb cf;
struct flash_sector *fa;
int elems[4];
int i;
rc = settings_register(&c_test_handlers[1]);
zassert_true(rc == 0 || rc == -EEXIST, "settings_register fail");
config_wipe_srcs();
config_wipe_fcb(fcb_sectors, ARRAY_SIZE(fcb_sectors));
cf.cf_fcb.f_magic = CONFIG_SETTINGS_FCB_MAGIC;
cf.cf_fcb.f_sectors = fcb_sectors;
cf.cf_fcb.f_sector_cnt = ARRAY_SIZE(fcb_sectors);
rc = settings_fcb_src(&cf);
zassert_true(rc == 0, "can't register FCB as configuration source");
settings_mount_fcb_backend(&cf);
rc = settings_fcb_dst(&cf);
zassert_true(rc == 0,
"can't register FCB as configuration destination");
c2_var_count = 1;
(void)memset(elems, 0, sizeof(elems));
for (i = 0; ; i++) {
test_config_fill_area(test_ref_value, i);
memcpy(val_string, test_ref_value, sizeof(val_string));
rc = settings_save();
zassert_true(rc == 0, "fcb write error");
if (cf.cf_fcb.f_active.fe_sector == &fcb_sectors[2]) {
/*
* Started using space just before scratch.
*/
break;
}
(void)memset(val_string, 0, sizeof(val_string));
rc = settings_load();
zassert_true(rc == 0, "fcb read error");
zassert_true(!memcmp(val_string, test_ref_value,
SETTINGS_MAX_VAL_LEN),
"bad value read");
}
fa = cf.cf_fcb.f_active.fe_sector;
rc = fcb_append_to_scratch(&cf.cf_fcb);
zassert_true(rc == 0, "fcb_append_to_scratch call failure");
zassert_true(fcb_free_sector_cnt(&cf.cf_fcb) == 0,
"expected non of free sectors");
zassert_true(fa != cf.cf_fcb.f_active.fe_sector,
"active page should change");
config_wipe_srcs();
(void)memset(&cf, 0, sizeof(cf));
cf.cf_fcb.f_magic = CONFIG_SETTINGS_FCB_MAGIC;
cf.cf_fcb.f_sectors = fcb_sectors;
cf.cf_fcb.f_sector_cnt = ARRAY_SIZE(fcb_sectors);
rc = settings_fcb_src(&cf);
zassert_true(rc == 0, "can't register FCB as configuration source");
rc = settings_fcb_dst(&cf);
zassert_true(rc == 0,
"can't register FCB as configuration destination");
zassert_true(fcb_free_sector_cnt(&cf.cf_fcb) == 1,
"expected one free sector");
zassert_true(fa == cf.cf_fcb.f_active.fe_sector,
"active sector should become free after garbage collection");
c2_var_count = 0;
settings_unregister(&c_test_handlers[1]);
}