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: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
diff --git a/tests/subsys/settings/fcb/src/settings_test.h b/tests/subsys/settings/fcb/src/settings_test.h
index 728fca3..b190c25 100644
--- a/tests/subsys/settings/fcb/src/settings_test.h
+++ b/tests/subsys/settings/fcb/src/settings_test.h
@@ -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;
diff --git a/tests/subsys/settings/fcb/src/settings_test_fcb.c b/tests/subsys/settings/fcb/src/settings_test_fcb.c
index 1f6e965..e95c12a 100644
--- a/tests/subsys/settings/fcb/src/settings_test_fcb.c
+++ b/tests/subsys/settings/fcb/src/settings_test_fcb.c
@@ -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_set(int argc, char **argv, void *value_ctx)
{
+ size_t val_len;
int rc;
test_set_called = 1;
@@ -98,6 +100,15 @@
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 @@
(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_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 @@
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),
diff --git a/tests/subsys/settings/fcb/src/settings_test_save_unaligned.c b/tests/subsys/settings/fcb/src/settings_test_save_unaligned.c
new file mode 100644
index 0000000..9a81185
--- /dev/null
+++ b/tests/subsys/settings/fcb/src/settings_test_save_unaligned.c
@@ -0,0 +1,45 @@
+/*
+ * 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");
+}