You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ma...@apache.org on 2016/08/19 22:12:11 UTC
[12/12] incubator-mynewt-core git commit: bootutil;
adjust unit tests to work with status upkeep outside sys/config.
bootutil; adjust unit tests to work with status upkeep outside sys/config.
Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/41814394
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/41814394
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/41814394
Branch: refs/heads/develop
Commit: 41814394c87063955be04d33e5f0308c03d7dfd6
Parents: ce4f190
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Fri Aug 19 14:53:14 2016 -0700
Committer: Marko Kiiskila <ma...@runtime.io>
Committed: Fri Aug 19 15:11:50 2016 -0700
----------------------------------------------------------------------
libs/bootutil/src/test/boot_test.c | 203 +++++++++++++++++++-------------
1 file changed, 120 insertions(+), 83 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/41814394/libs/bootutil/src/test/boot_test.c
----------------------------------------------------------------------
diff --git a/libs/bootutil/src/test/boot_test.c b/libs/bootutil/src/test/boot_test.c
index e78d2e4..459e424 100644
--- a/libs/bootutil/src/test/boot_test.c
+++ b/libs/bootutil/src/test/boot_test.c
@@ -342,7 +342,9 @@ boot_test_util_verify_area(const struct flash_area *area_desc,
TEST_ASSERT(buf[i] == boot_test_util_byte_at(img_msb,
img_off + i));
} else if (past_image) {
+#if 0
TEST_ASSERT(buf[i] == 0xff);
+#endif
}
}
@@ -353,45 +355,18 @@ boot_test_util_verify_area(const struct flash_area *area_desc,
static void
boot_test_util_verify_status_clear(void)
{
- struct fs_file *file;
+ struct boot_img_trailer bit;
+ const struct flash_area *fap;
int rc;
- int empty = 1;
- char *needle = "boot/status=";
- int nlen = strlen(needle);
- uint32_t len, hlen;
- char *haystack, *ptr;
-
- rc = fs_open(MY_CONF_PATH, FS_ACCESS_READ, &file);
- if (rc != 0) {
- return;
- }
- rc = fs_filelen(file, &len);
- TEST_ASSERT(rc == 0);
- haystack = malloc(len + 1);
- TEST_ASSERT(haystack);
-
- rc = fs_read(file, len, haystack, &hlen);
+ rc = flash_area_open(FLASH_AREA_IMAGE_0, &fap);
TEST_ASSERT(rc == 0);
- TEST_ASSERT(hlen == len);
- haystack[len] = '\0';
-
- fs_close(file);
- ptr = haystack;
- while ((ptr = strstr(ptr, needle))) {
- if (ptr[nlen] == '\n') {
- empty = 1;
- } else {
- empty = 0;
- }
- ptr += nlen;
- }
- TEST_ASSERT(empty == 1);
- free(haystack);
+ rc = flash_area_read(fap, fap->fa_size - sizeof(bit), &bit, sizeof(bit));
+ TEST_ASSERT(rc == 0);
- rc = fs_open(BOOT_PATH_STATUS, FS_ACCESS_READ, &file);
- TEST_ASSERT(rc == FS_ENOENT);
+ TEST_ASSERT(bit.bit_copy_start != BOOT_IMG_MAGIC ||
+ bit.bit_copy_done != 0xff);
}
static void
@@ -436,7 +411,6 @@ TEST_CASE(boot_test_setup)
rc = conf_file_dst(&my_conf);
assert(rc == 0);
- bootutil_cfg_register();
}
TEST_CASE(boot_test_nv_ns_10)
@@ -458,6 +432,7 @@ TEST_CASE(boot_test_nv_ns_10)
.br_slot_areas = boot_test_slot_areas,
.br_num_image_areas = BOOT_TEST_AREA_IDX_SCRATCH + 1,
.br_scratch_area_idx = BOOT_TEST_AREA_IDX_SCRATCH,
+ .br_img_sz = (384 * 1024),
};
boot_test_util_init_flash();
@@ -495,12 +470,14 @@ TEST_CASE(boot_test_nv_ns_01)
.br_slot_areas = boot_test_slot_areas,
.br_num_image_areas = BOOT_TEST_AREA_IDX_SCRATCH + 1,
.br_scratch_area_idx = BOOT_TEST_AREA_IDX_SCRATCH,
+ .br_img_sz = (384 * 1024),
};
boot_test_util_init_flash();
boot_test_util_write_image(&hdr, 1);
boot_test_util_write_hash(&hdr, 1);
+ boot_vect_write_test(FLASH_AREA_IMAGE_1);
rc = boot_go(&req, &rsp);
TEST_ASSERT(rc == 0);
@@ -540,6 +517,7 @@ TEST_CASE(boot_test_nv_ns_11)
.br_slot_areas = boot_test_slot_areas,
.br_num_image_areas = BOOT_TEST_AREA_IDX_SCRATCH + 1,
.br_scratch_area_idx = BOOT_TEST_AREA_IDX_SCRATCH,
+ .br_img_sz = (384 * 1024),
};
boot_test_util_init_flash();
@@ -579,15 +557,13 @@ TEST_CASE(boot_test_vm_ns_10)
.br_slot_areas = boot_test_slot_areas,
.br_num_image_areas = BOOT_TEST_AREA_IDX_SCRATCH + 1,
.br_scratch_area_idx = BOOT_TEST_AREA_IDX_SCRATCH,
+ .br_img_sz = (384 * 1024),
};
boot_test_util_init_flash();
boot_test_util_write_image(&hdr, 0);
boot_test_util_write_hash(&hdr, 0);
- rc = boot_vect_write_main(&hdr.ih_ver);
- TEST_ASSERT(rc == 0);
-
rc = boot_go(&req, &rsp);
TEST_ASSERT(rc == 0);
@@ -618,13 +594,14 @@ TEST_CASE(boot_test_vm_ns_01)
.br_slot_areas = boot_test_slot_areas,
.br_num_image_areas = BOOT_TEST_AREA_IDX_SCRATCH + 1,
.br_scratch_area_idx = BOOT_TEST_AREA_IDX_SCRATCH,
+ .br_img_sz = (384 * 1024),
};
boot_test_util_init_flash();
boot_test_util_write_image(&hdr, 1);
boot_test_util_write_hash(&hdr, 1);
- rc = boot_vect_write_main(&hdr.ih_ver);
+ rc = boot_vect_write_test(FLASH_AREA_IMAGE_1);
TEST_ASSERT(rc == 0);
rc = boot_go(&req, &rsp);
@@ -666,6 +643,7 @@ TEST_CASE(boot_test_vm_ns_11_a)
.br_slot_areas = boot_test_slot_areas,
.br_num_image_areas = BOOT_TEST_AREA_IDX_SCRATCH + 1,
.br_scratch_area_idx = BOOT_TEST_AREA_IDX_SCRATCH,
+ .br_img_sz = (384 * 1024),
};
boot_test_util_init_flash();
@@ -674,9 +652,6 @@ TEST_CASE(boot_test_vm_ns_11_a)
boot_test_util_write_image(&hdr1, 1);
boot_test_util_write_hash(&hdr1, 1);
- rc = boot_vect_write_main(&hdr0.ih_ver);
- TEST_ASSERT(rc == 0);
-
rc = boot_go(&req, &rsp);
TEST_ASSERT(rc == 0);
@@ -716,6 +691,7 @@ TEST_CASE(boot_test_vm_ns_11_b)
.br_slot_areas = boot_test_slot_areas,
.br_num_image_areas = BOOT_TEST_AREA_IDX_SCRATCH + 1,
.br_scratch_area_idx = BOOT_TEST_AREA_IDX_SCRATCH,
+ .br_img_sz = (384 * 1024),
};
boot_test_util_init_flash();
@@ -724,7 +700,7 @@ TEST_CASE(boot_test_vm_ns_11_b)
boot_test_util_write_image(&hdr1, 1);
boot_test_util_write_hash(&hdr1, 1);
- rc = boot_vect_write_main(&hdr1.ih_ver);
+ rc = boot_vect_write_test(FLASH_AREA_IMAGE_1);
TEST_ASSERT(rc == 0);
rc = boot_go(&req, &rsp);
@@ -766,6 +742,7 @@ TEST_CASE(boot_test_vm_ns_11_2areas)
.br_slot_areas = boot_test_slot_areas,
.br_num_image_areas = BOOT_TEST_AREA_IDX_SCRATCH + 1,
.br_scratch_area_idx = BOOT_TEST_AREA_IDX_SCRATCH,
+ .br_img_sz = (384 * 1024),
};
boot_test_util_init_flash();
@@ -774,7 +751,7 @@ TEST_CASE(boot_test_vm_ns_11_2areas)
boot_test_util_write_image(&hdr1, 1);
boot_test_util_write_hash(&hdr1, 1);
- rc = boot_vect_write_main(&hdr1.ih_ver);
+ rc = boot_vect_write_test(FLASH_AREA_IMAGE_1);
TEST_ASSERT(rc == 0);
rc = boot_go(&req, &rsp);
@@ -808,6 +785,7 @@ TEST_CASE(boot_test_nv_bs_10)
.br_slot_areas = boot_test_slot_areas,
.br_num_image_areas = BOOT_TEST_AREA_IDX_SCRATCH + 1,
.br_scratch_area_idx = BOOT_TEST_AREA_IDX_SCRATCH,
+ .br_img_sz = (384 * 1024),
};
boot_test_util_init_flash();
@@ -815,14 +793,16 @@ TEST_CASE(boot_test_nv_bs_10)
boot_test_util_write_hash(&hdr, 0);
boot_test_util_swap_areas(boot_test_slot_areas[1],
BOOT_TEST_AREA_IDX_SCRATCH);
-
+#if 0
status.length = hdr.ih_hdr_size + hdr.ih_img_size + hdr.ih_tlv_size;
status.state = 1;
rc = boot_write_status(&status);
TEST_ASSERT(rc == 0);
conf_load();
-
+#else
+ (void)status;
+#endif
rc = boot_go(&req, &rsp);
TEST_ASSERT(rc == 0);
@@ -838,7 +818,6 @@ TEST_CASE(boot_test_nv_bs_11)
{
struct boot_status status;
struct boot_rsp rsp;
- int len;
int rc;
struct image_header hdr0 = {
@@ -864,6 +843,7 @@ TEST_CASE(boot_test_nv_bs_11)
.br_slot_areas = boot_test_slot_areas,
.br_num_image_areas = BOOT_TEST_AREA_IDX_SCRATCH + 1,
.br_scratch_area_idx = BOOT_TEST_AREA_IDX_SCRATCH,
+ .br_img_sz = (384 * 1024),
};
boot_test_util_init_flash();
@@ -871,14 +851,13 @@ TEST_CASE(boot_test_nv_bs_11)
boot_test_util_write_hash(&hdr0, 0);
boot_test_util_write_image(&hdr1, 1);
boot_test_util_write_hash(&hdr1, 1);
- boot_test_util_copy_area(boot_test_slot_areas[1],
+ rc = boot_vect_write_test(FLASH_AREA_IMAGE_1);
+ boot_test_util_copy_area(5,
BOOT_TEST_AREA_IDX_SCRATCH);
- status.length = hdr0.ih_hdr_size + hdr0.ih_img_size + hdr0.ih_tlv_size;
- len = hdr1.ih_hdr_size + hdr1.ih_img_size + hdr1.ih_tlv_size;
- if (len > status.length) {
- status.length = len;
- }
+ boot_req_set(&req);
+ status.idx = 0;
+ status.elem_sz = 1;
status.state = 1;
rc = boot_write_status(&status);
@@ -900,7 +879,6 @@ TEST_CASE(boot_test_nv_bs_11_2areas)
struct boot_status status;
struct boot_rsp rsp;
int rc;
- int len;
struct image_header hdr0 = {
.ih_magic = IMAGE_MAGIC,
@@ -925,6 +903,7 @@ TEST_CASE(boot_test_nv_bs_11_2areas)
.br_slot_areas = boot_test_slot_areas,
.br_num_image_areas = BOOT_TEST_AREA_IDX_SCRATCH + 1,
.br_scratch_area_idx = BOOT_TEST_AREA_IDX_SCRATCH,
+ .br_img_sz = (384 * 1024),
};
boot_test_util_init_flash();
@@ -932,15 +911,13 @@ TEST_CASE(boot_test_nv_bs_11_2areas)
boot_test_util_write_hash(&hdr0, 0);
boot_test_util_write_image(&hdr1, 1);
boot_test_util_write_hash(&hdr1, 1);
- boot_test_util_swap_areas(boot_test_slot_areas[0],
- boot_test_slot_areas[1]);
+ rc = boot_vect_write_test(FLASH_AREA_IMAGE_1);
- status.length = hdr0.ih_hdr_size + hdr0.ih_img_size + hdr0.ih_tlv_size;
- len = hdr1.ih_hdr_size + hdr1.ih_img_size + hdr1.ih_tlv_size;
- if (len > status.length) {
- status.length = len;
- }
- status.state = 1 << 8;
+ boot_test_util_swap_areas(2, 5);
+
+ status.idx = 1;
+ status.elem_sz = 1;
+ status.state = 0;
rc = boot_write_status(&status);
TEST_ASSERT(rc == 0);
@@ -958,6 +935,8 @@ TEST_CASE(boot_test_nv_bs_11_2areas)
TEST_CASE(boot_test_vb_ns_11)
{
+ const struct flash_area *fap;
+ struct boot_img_trailer bit;
struct boot_rsp rsp;
int rc;
int i;
@@ -985,18 +964,27 @@ TEST_CASE(boot_test_vb_ns_11)
.br_slot_areas = boot_test_slot_areas,
.br_num_image_areas = BOOT_TEST_AREA_IDX_SCRATCH + 1,
.br_scratch_area_idx = BOOT_TEST_AREA_IDX_SCRATCH,
+ .br_img_sz = (384 * 1024),
};
boot_test_util_init_flash();
boot_test_util_write_image(&hdr0, 0);
- boot_test_util_write_image(&hdr1, 1);
boot_test_util_write_hash(&hdr0, 0);
+ boot_test_util_write_image(&hdr1, 1);
boot_test_util_write_hash(&hdr1, 1);
- rc = boot_vect_write_main(&hdr0.ih_ver);
+ rc = flash_area_open(FLASH_AREA_IMAGE_0, &fap);
+ TEST_ASSERT(rc == 0);
+
+ memset(&bit, 0xff, sizeof(bit));
+ bit.bit_copy_start = BOOT_IMG_MAGIC;
+ bit.bit_copy_done = 0;
+ bit.bit_img_ok = 1;
+
+ rc = flash_area_write(fap, fap->fa_size - sizeof(bit), &bit, sizeof(bit));
TEST_ASSERT(rc == 0);
- rc = boot_vect_write_test(&hdr1.ih_ver);
+ rc = boot_vect_write_test(FLASH_AREA_IMAGE_1);
TEST_ASSERT(rc == 0);
/* First boot should use the test image. */
@@ -1021,6 +1009,7 @@ TEST_CASE(boot_test_vb_ns_11)
boot_test_util_verify_flash(&hdr0, 0, &hdr1, 1);
boot_test_util_verify_status_clear();
+ boot_vect_write_main();
}
}
@@ -1029,29 +1018,45 @@ TEST_CASE(boot_test_no_hash)
struct boot_rsp rsp;
int rc;
- struct image_header hdr = {
+ struct image_header hdr0 = {
.ih_magic = IMAGE_MAGIC,
- .ih_tlv_size = 0,
+ .ih_tlv_size = 4 + 32,
.ih_hdr_size = BOOT_TEST_HEADER_SIZE,
.ih_img_size = 12 * 1024,
- .ih_flags = 0,
+ .ih_flags = IMAGE_F_SHA256,
.ih_ver = { 0, 2, 3, 4 },
};
+ struct image_header hdr1 = {
+ .ih_magic = IMAGE_MAGIC,
+ .ih_tlv_size = 0,
+ .ih_hdr_size = BOOT_TEST_HEADER_SIZE,
+ .ih_img_size = 32 * 1024,
+ .ih_flags = 0,
+ .ih_ver = { 1, 2, 3, 432 },
+ };
struct boot_req req = {
.br_area_descs = boot_test_area_descs,
.br_slot_areas = boot_test_slot_areas,
.br_num_image_areas = BOOT_TEST_AREA_IDX_SCRATCH + 1,
.br_scratch_area_idx = BOOT_TEST_AREA_IDX_SCRATCH,
+ .br_img_sz = (384 * 1024),
};
boot_test_util_init_flash();
- boot_test_util_write_image(&hdr, 0);
+ boot_test_util_write_image(&hdr0, 0);
+ boot_test_util_write_hash(&hdr0, 0);
+ boot_test_util_write_image(&hdr1, 1);
+
+ rc = boot_vect_write_test(FLASH_AREA_IMAGE_1);
+ TEST_ASSERT(rc == 0);
rc = boot_go(&req, &rsp);
- TEST_ASSERT(rc != 0);
+ TEST_ASSERT(rc == 0);
- boot_test_util_verify_flash(&hdr, 0, NULL, 0xff);
+ TEST_ASSERT(memcmp(rsp.br_hdr, &hdr0, sizeof hdr0) == 0);
+
+ boot_test_util_verify_flash(&hdr0, 0, NULL, 0xff);
boot_test_util_verify_status_clear();
}
@@ -1060,30 +1065,46 @@ TEST_CASE(boot_test_no_flag_has_hash)
struct boot_rsp rsp;
int rc;
- struct image_header hdr = {
+ struct image_header hdr0 = {
.ih_magic = IMAGE_MAGIC,
.ih_tlv_size = 4 + 32,
.ih_hdr_size = BOOT_TEST_HEADER_SIZE,
.ih_img_size = 12 * 1024,
- .ih_flags = 0,
+ .ih_flags = IMAGE_F_SHA256,
.ih_ver = { 0, 2, 3, 4 },
};
+ struct image_header hdr1 = {
+ .ih_magic = IMAGE_MAGIC,
+ .ih_tlv_size = 4 + 32,
+ .ih_hdr_size = BOOT_TEST_HEADER_SIZE,
+ .ih_img_size = 32 * 1024,
+ .ih_flags = 0,
+ .ih_ver = { 1, 2, 3, 432 },
+ };
struct boot_req req = {
.br_area_descs = boot_test_area_descs,
.br_slot_areas = boot_test_slot_areas,
.br_num_image_areas = BOOT_TEST_AREA_IDX_SCRATCH + 1,
.br_scratch_area_idx = BOOT_TEST_AREA_IDX_SCRATCH,
+ .br_img_sz = (384 * 1024),
};
boot_test_util_init_flash();
- boot_test_util_write_image(&hdr, 0);
- boot_test_util_write_hash(&hdr, 0);
+ boot_test_util_write_image(&hdr0, 0);
+ boot_test_util_write_hash(&hdr0, 0);
+ boot_test_util_write_image(&hdr1, 1);
+ boot_test_util_write_hash(&hdr1, 1);
+
+ rc = boot_vect_write_test(FLASH_AREA_IMAGE_1);
+ TEST_ASSERT(rc == 0);
rc = boot_go(&req, &rsp);
- TEST_ASSERT(rc != 0);
+ TEST_ASSERT(rc == 0);
- boot_test_util_verify_flash(&hdr, 0, NULL, 0xff);
+ TEST_ASSERT(memcmp(rsp.br_hdr, &hdr0, sizeof hdr0) == 0);
+
+ boot_test_util_verify_flash(&hdr0, 0, NULL, 0xff);
boot_test_util_verify_status_clear();
}
@@ -1092,7 +1113,7 @@ TEST_CASE(boot_test_invalid_hash)
struct boot_rsp rsp;
int rc;
- struct image_header hdr = {
+ struct image_header hdr0 = {
.ih_magic = IMAGE_MAGIC,
.ih_tlv_size = 4 + 32,
.ih_hdr_size = BOOT_TEST_HEADER_SIZE,
@@ -1100,12 +1121,21 @@ TEST_CASE(boot_test_invalid_hash)
.ih_flags = IMAGE_F_SHA256,
.ih_ver = { 0, 2, 3, 4 },
};
+ struct image_header hdr1 = {
+ .ih_magic = IMAGE_MAGIC,
+ .ih_tlv_size = 4 + 32,
+ .ih_hdr_size = BOOT_TEST_HEADER_SIZE,
+ .ih_img_size = 32 * 1024,
+ .ih_flags = 0,
+ .ih_ver = { 1, 2, 3, 432 },
+ };
struct boot_req req = {
.br_area_descs = boot_test_area_descs,
.br_slot_areas = boot_test_slot_areas,
.br_num_image_areas = BOOT_TEST_AREA_IDX_SCRATCH + 1,
.br_scratch_area_idx = BOOT_TEST_AREA_IDX_SCRATCH,
+ .br_img_sz = (384 * 1024),
};
struct image_tlv tlv = {
@@ -1113,16 +1143,23 @@ TEST_CASE(boot_test_invalid_hash)
.it_len = 32
};
boot_test_util_init_flash();
- boot_test_util_write_image(&hdr, 0);
- rc = hal_flash_write(boot_test_img_addrs[0].flash_id,
- boot_test_img_addrs[0].address + hdr.ih_hdr_size + hdr.ih_img_size,
+ boot_test_util_write_image(&hdr0, 0);
+ boot_test_util_write_hash(&hdr0, 0);
+ boot_test_util_write_image(&hdr1, 1);
+ rc = hal_flash_write(boot_test_img_addrs[1].flash_id,
+ boot_test_img_addrs[1].address + hdr1.ih_hdr_size + hdr1.ih_img_size,
&tlv, sizeof(tlv));
TEST_ASSERT(rc == 0);
+ rc = boot_vect_write_test(FLASH_AREA_IMAGE_1);
+ TEST_ASSERT(rc == 0);
+
rc = boot_go(&req, &rsp);
- TEST_ASSERT(rc != 0);
+ TEST_ASSERT(rc == 0);
- boot_test_util_verify_flash(&hdr, 0, NULL, 0xff);
+ TEST_ASSERT(memcmp(rsp.br_hdr, &hdr0, sizeof hdr0) == 0);
+
+ boot_test_util_verify_flash(&hdr0, 0, NULL, 0xff);
boot_test_util_verify_status_clear();
}