Commit 5bc3ad2a authored by Andrzej Puzdrowski's avatar Andrzej Puzdrowski Committed by Anas Nashif
Browse files

tests/subsys/settings: fcb unaligned value test



Added test for check whether value lenght is properly
stored for unaligned settings record size.

Signed-off-by: default avatarAndrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
parent f288bcaf
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@
#define SETTINGS_TEST_FCB_FLASH_CNT   4

extern u8_t val8;
extern u8_t val8_un;
extern u32_t val32;
extern u64_t val64;

+15 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
#include "flash_map.h"

u8_t val8;
u8_t val8_un;
u32_t val32;
u64_t val64;

@@ -83,6 +84,7 @@ int c1_handle_get(int argc, char **argv, char *val, int val_len_max)

int c1_handle_set(int argc, char **argv, void *value_ctx)
{
	size_t val_len;
	int rc;

	test_set_called = 1;
@@ -98,6 +100,15 @@ int c1_handle_set(int argc, char **argv, void *value_ctx)
		return 0;
	}

	if (argc == 1 && !strcmp(argv[0], "unaligned")) {
		val_len = settings_val_get_len_cb(value_ctx);
		zassert_equal(val_len, sizeof(val8_un),
			      "value length: %d, ought equal 1", val_len);
		rc = settings_val_read_cb(value_ctx, &val8_un, sizeof(val8_un));
		zassert_true(rc >= 0, "SETTINGS_VALUE_SET callback");
		return 0;
	}

	return -ENOENT;
}

@@ -117,6 +128,8 @@ int c1_handle_export(int (*cb)(const char *name, void *value, size_t val_len))

	(void)cb("myfoo/mybar64", &val64, sizeof(val64));

	(void)cb("myfoo/unaligned", &val8_un, sizeof(val8_un));

	return 0;
}

@@ -319,6 +332,7 @@ void test_config_save_one_fcb(void);
void test_config_compress_deleted(void);
void test_setting_raw_read(void);
void test_setting_val_read(void);
void test_config_save_fcb_unaligned(void);

void test_main(void)
{
@@ -336,6 +350,7 @@ void test_main(void)
			 ztest_unit_test(test_config_getset_int64),
			 ztest_unit_test(test_config_commit),
			 /* FCB as backing storage*/
			 ztest_unit_test(test_config_save_fcb_unaligned),
			 ztest_unit_test(test_config_empty_fcb),
			 ztest_unit_test(test_config_save_1_fcb),
			 ztest_unit_test(test_config_insert2),
+45 −0
Original line number Diff line number Diff line
/*
 * Copyright (c) 2019 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include "settings_test.h"
#include "settings/settings_fcb.h"

void test_config_save_fcb_unaligned(void)
{
	int rc;
	struct settings_fcb cf;

	config_wipe_srcs();

	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");

	/* override flash driver alignment */
	cf.cf_fcb.f_align = 4;
	settings_mount_fcb_backend(&cf);

	rc = settings_fcb_dst(&cf);
	zassert_true(rc == 0,
		     "can't register FCB as configuration destination");

	val8_un = 33U;
	rc = settings_save();
	zassert_true(rc == 0, "fcb write error");

	val8_un = 0U;

	rc = settings_load();
	zassert_true(rc == 0, "fcb redout error");
	zassert_true(val8_un == 33, "bad value read");

	val8_un = 15;
	rc = settings_save();
	zassert_true(rc == 0, "fcb write error");
}