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();
 }