Skip to content

Commit

Permalink
sys/log: Update selftests to account for header and trailers
Browse files Browse the repository at this point in the history
- Earlier these would only account for the entries, now they
  also account for headers and trailers
  • Loading branch information
vrahane committed Jun 7, 2024
1 parent 159a6f0 commit 05458a4
Show file tree
Hide file tree
Showing 9 changed files with 179 additions and 76 deletions.
75 changes: 75 additions & 0 deletions sys/log/full/selftest/util/src/log_test_util.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,37 @@ static struct flash_sector_range fcb_range = {
static int ltu_str_idx = 0;
static int ltu_str_max_idx = 0;

struct dummy_log {
struct log_entry_hdr ueh;
struct log_tlv;
uint32_t num_entries;
}

struct dummy_log dummy_log = {
.hdr = {
.ue_ts = 1,
.ue_module = 2,
.ue_etype = 3
.ue_flags =
#if MYNEWT_VAL(LOG_FLAGS_IMAGE_HASH)
LOG_FLAGS_IMAGE_HASH
#endif
#if MYNEWT_VAL(LOG_FLAGS_TLV_SUPPORT)
| LOG_FLAGS_TLV_SUPPORT
#endif
,
.ue_etype = 4,
.ue_imghash = 0x12345678,
.ue_level = 3,
.ue_num_entries = 5
},
.tlv = {
.tag = LOG_TLV_NUM_ENTRIES,
.len = LOG_NUM_ENTRIES_SIZE
},
.num_entries = 0,
};

char *ltu_str_logs[] = {
"testdata",
"1testdata2",
Expand All @@ -54,6 +85,10 @@ char *ltu_str_logs[] = {
NULL
};

struct uint16_t ltu_off_arr[5];

uint8_t dummy_log_arr[sizeof(ltu_str_logs) + sizeof(struct dummy_log)*4];

static uint8_t ltu_cbmem_buf[2048];

int
Expand All @@ -66,6 +101,39 @@ ltu_num_strs(void)
return i;
}

uint16_t *ltu_get_ltu_off_arr(void)
{
return ltu_off_arr;
}

uint16_t
ltu_init_arr(void)
{
uint16_t offset = 0;

for (i = 0; i < ltu_num_strs(); i++) {
ltu_off_arr[i] = offset;
memcpy(dummy_log_arr + offset, &dummy_log.hdr, LOG_BASE_ENTRY_HDR_SIZE);
offset = LOG_BASE_ENTRY_HDR_SIZE;
#if MYNEWT_VAL(LOG_FLAGS_IMAGE_HASH)
memcpy(dummy_log_arr + offset,
&dummy_log.hdr.ue_imghash, LOG_IMG_HASHLEN);
offset += LOG_IMG_HASHLEN;
#endif
memcpy(dummy_log_arr + offset, ltu_str_logs[i], sizeof(ltu_str_logs[i]));
offset += sizeof(ltu_str_logs[i]);
#if MYNEWT_VAL(LOG_FLAGS_TLV_SUPPORT) && MYNEWT_VAL(LOG_TLV_NUM_ENTRIES)
memcpy(dummy_log_arr + offset, &dummy_log.tlv, sizeof(struct log_tlv));
offset += sizeof(struct log_tlv);
memcpy(dummy_log_arr + offset, &dummy_log.num_entries, LOG_NUM_ENTRIES_SIZE);
#endif
offset += LOG_NUM_ENTRIES_SIZE;
}
ltu_off_arr[i] = offset;
TEST_ASSERT_FATAL(offset <= sizeof(ltu_cbmem_buf));
return offset;
}

struct os_mbuf *
ltu_flat_to_fragged_mbuf(const void *flat, int len, int frag_sz)
{
Expand Down Expand Up @@ -191,6 +259,7 @@ ltu_walk_verify(struct log *log, struct log_offset *log_offset,
int dlen;
uint16_t hdr_len;
uint16_t trailer_len;
uint16_t offset = 0;

TEST_ASSERT(ltu_str_idx < ltu_str_max_idx);

Expand All @@ -199,6 +268,12 @@ ltu_walk_verify(struct log *log, struct log_offset *log_offset,
rc = log_read(log, dptr, &ueh, 0, LOG_BASE_ENTRY_HDR_SIZE);
TEST_ASSERT(rc == LOG_BASE_ENTRY_HDR_SIZE);

if (ueh.ue_flags & LOG_FLAGS_IMG_HASH) {
offset = LOG_BASE_ENTRY_HDR_SIZE;
rc = log_read(log, dptr, data, offset, LOG_IMG_HASHLEN);
TEST_ASSERT(rc == LOG_IMG_HASHLEN);
}

hdr_len = log_hdr_len(&ueh);
trailer_len = log_trailer_len(&ueh);
dlen = len - hdr_len - trailer_len;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,23 +23,23 @@ TEST_CASE_SELF(log_test_case_cbmem_append)
{
struct cbmem cbmem;
struct log log;
uint8_t buf[256];
char *str;
int body_len;
uint16_t len = 0;
uint16_t *off_arr;
int i;
int rc;

ltu_setup_cbmem(&cbmem, &log);
len = ltu_init_arr();
TEST_ASSERT_FATAL(len != 0);

for (i = 0; ; i++) {
str = ltu_str_logs[i];
if (!str) {
break;
}
off_arr = ltu_get_ltu_off_arr();
TEST_ASSERT_FATAL(arr != NULL);

body_len = strlen(str);
memcpy(buf + LOG_HDR_SIZE, str, body_len);
rc = log_append_typed(&log, 0, 0, LOG_ETYPE_STRING, buf, body_len);
for (i = 0; i < num_strs; i++) {
len = off_arr[i+1] - off_arr[i];
rc = log_append_typed(&log, 2, 3, LOG_ETYPE_STRING,
dummy_log_arr + off_arr[i],
len);
TEST_ASSERT_FATAL(rc == 0);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,18 +23,27 @@ TEST_CASE_SELF(log_test_case_cbmem_append_body)
{
struct cbmem cbmem;
struct log log;
char *str;
uint16_t len = 0;
uint16_t *off_arr;
int i;
int rc;
struct log_entry_hdr *hdr;
int num_strs = ltu_num_strs();

ltu_setup_cbmem(&cbmem, &log);
len = ltu_init_arr();
TEST_ASSERT_FATAL(len != 0);

for (i = 0; ; i++) {
str = ltu_str_logs[i];
if (!str) {
break;
}
off_arr = ltu_get_ltu_off_arr();
TEST_ASSERT_FATAL(arr != NULL);

log_append_body(&log, 0, 0, LOG_ETYPE_STRING, str, strlen(str));
for (i = 0; i < num_strs; i++) {
hdr = dummy_log_arr + off_arr[i];
len = off_arr[i + 1] - off_arr[i] -
log_hdr_len(hdr) - log_trailer_len(hdr);
log_append_body(&log, 2, 3, LOG_ETYPE_STRING,
dummy_log_arr + off_arr[i] + log_hdr_len(hdr),
len);
}

ltu_verify_contents(&log);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,28 +22,28 @@
TEST_CASE_SELF(log_test_case_cbmem_append_mbuf)
{
struct cbmem cbmem;
struct os_mbuf *om;
struct log log;
char *str;
int rc;
struct os_mbuf *om;
uint16_t len = 0;
uint16_t *off_arr;
int i;
int rc;
int num_strs = ltu_num_strs();

ltu_setup_cbmem(&cbmem, &log);
len = ltu_init_arr();
TEST_ASSERT_FATAL(len != 0);

for (i = 0; ; i++) {
str = ltu_str_logs[i];
if (!str) {
break;
}
off_arr = ltu_get_ltu_off_arr();
TEST_ASSERT_FATAL(arr != NULL);

for (i = 0; i < num_strs; i++) {
len = off_arr[i+1] - off_arr[i];
/* Split chain into several mbufs. */
om = ltu_flat_to_fragged_mbuf(str, strlen(str), 2);

/* Prepend space for the entry header. */
om = os_mbuf_prepend(om, LOG_HDR_SIZE);
TEST_ASSERT(om != NULL);
om = ltu_flat_to_fragged_mbuf(dummy_log_arr + off_arr[i],
len, 2);

rc = log_append_mbuf_typed(&log, 0, 0, LOG_ETYPE_STRING, om);
rc = log_append_mbuf_typed(&log, 2, 3, LOG_ETYPE_STRING, om);
TEST_ASSERT_FATAL(rc == 0);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,22 +24,25 @@ TEST_CASE_SELF(log_test_case_cbmem_append_mbuf_body)
struct cbmem cbmem;
struct os_mbuf *om;
struct log log;
char *str;
int rc;
int i;
int num_strs = ltu_num_strs();

ltu_setup_cbmem(&cbmem, &log);
len = ltu_init_arr();
TEST_ASSERT_FATAL(len != 0);

for (i = 0; ; i++) {
str = ltu_str_logs[i];
if (!str) {
break;
}
off_arr = ltu_get_ltu_off_arr();
TEST_ASSERT_FATAL(arr != NULL);

for (i = 0; num_strs; i++) {
len = off_arr[i+1] - off_arr[i];

/* Split chain into several mbufs. */
om = ltu_flat_to_fragged_mbuf(str, strlen(str), 2);
om = ltu_flat_to_fragged_mbuf(dummy_log_arr + off_arr[i],
len, 2);

rc = log_append_mbuf_body(&log, 0, 0, LOG_ETYPE_STRING, om);
rc = log_append_mbuf_body(&log, 2, 3, LOG_ETYPE_STRING, om);
TEST_ASSERT_FATAL(rc == 0);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,18 +23,22 @@ TEST_CASE_SELF(log_test_case_cbmem_printf)
{
struct cbmem cbmem;
struct log log;
char *str;
int i;
int rc;
uint16_t len = 0;
int num_strs = ltu_num_strs();

ltu_setup_cbmem(&cbmem, &log);
len = ltu_init_arr();
TEST_ASSERT_FATAL(len != 0);

for (i = 0; ; i++) {
str = ltu_str_logs[i];
if (!str) {
break;
}
off_arr = ltu_get_ltu_off_arr();
TEST_ASSERT_FATAL(arr != NULL);

log_printf(&log, 0, 0, str, strlen(str));
for (i = 0; i < num_strs; i++) {
len = off_arr[i+1] - off_arr[i];
log_printf(&log, 0, 0, dummy_log_arr + off_arr[i],
len);
}

ltu_verify_contents(&log);
Expand Down
23 changes: 13 additions & 10 deletions sys/log/full/selftest/util/src/testcases/log_test_case_fcb_append.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,22 +23,25 @@ TEST_CASE_SELF(log_test_case_fcb_append)
{
struct fcb_log fcb_log;
struct log log;
uint8_t buf[256];
char *str;
uint16_t len = 0;
uint16_t *off_arr;
int body_len;
int i;
int rc;

ltu_setup_fcb(&fcb_log, &log);
len = ltu_init_arr();
TEST_ASSERT_FATAL(len != 0);

for (i = 0; ; i++) {
str = ltu_str_logs[i];
if (!str) {
break;
}
off_arr = ltu_get_ltu_off_arr();
TEST_ASSERT_FATAL(arr != NULL);

body_len = strlen(str);
memcpy(buf + LOG_HDR_SIZE, str, body_len);
log_append_typed(&log, 0, 0, LOG_ETYPE_STRING, buf, body_len);
for (i = 0; num_strs; i++) {
len = off_arr[i+1] - off_arr[i];
rc = log_append_typed(&log, 2, 3, LOG_ETYPE_STRING,
dummy_log_arr + off_arr[i],
len);
TEST_ASSERT_FATAL(rc == 0);
}

ltu_verify_contents(&log);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,18 +23,28 @@ TEST_CASE_SELF(log_test_case_fcb_append_body)
{
struct fcb_log fcb_log;
struct log log;
char *str;
uint16_t len = 0;
uint16_t *off_arr;
int i;
int rc;
struct log_entry_hdr *hdr;
int num_strs = ltu_num_strs();

ltu_setup_fcb(&fcb_log, &log);
len = ltu_init_arr();
TEST_ASSERT_FATAL(len != 0);

for (i = 0; ; i++) {
str = ltu_str_logs[i];
if (!str) {
break;
}
log_append_body(&log, 0, 0, LOG_ETYPE_STRING, str, strlen(str));
}
off_arr = ltu_get_ltu_off_arr();
TEST_ASSERT_FATAL(arr != NULL);

for (i = 0; i < num_strs; i++) {
hdr = dummy_log_arr + off_arr[i];
len = off_arr[i + 1] - off_arr[i] -
log_hdr_len(hdr) - log_trailer_len(hdr);
log_append_body(&log, 2, 3, LOG_ETYPE_STRING,
dummy_log_arr + off_arr[i] + log_hdr_len(hdr),
len);
}
ltu_verify_contents(&log);

}
Original file line number Diff line number Diff line change
Expand Up @@ -27,23 +27,22 @@ TEST_CASE_SELF(log_test_case_fcb_append_mbuf)
char *str;
int rc;
int i;
int num_strs = ltu_num_strs();

ltu_setup_fcb(&fcb_log, &log);
len = ltu_init_arr();
TEST_ASSERT_FATAL(len != 0);

for (i = 0; ; i++) {
str = ltu_str_logs[i];
if (!str) {
break;
}
off_arr = ltu_get_ltu_off_arr();
TEST_ASSERT_FATAL(arr != NULL);

for (i = 0; i < num_strs; i++) {
len = off_arr[i+1] - off_arr[i];
/* Split chain into several mbufs. */
om = ltu_flat_to_fragged_mbuf(str, strlen(str), 2);
om = ltu_flat_to_fragged_mbuf(dummy_log_arr + off_arr[i],
len, 2);

/* Prepend space for the entry header. */
om = os_mbuf_prepend(om, LOG_HDR_SIZE);
TEST_ASSERT(om != NULL);

rc = log_append_mbuf_typed(&log, 0, 0, LOG_ETYPE_STRING, om);
rc = log_append_mbuf_typed(&log, 2, 3, LOG_ETYPE_STRING, om);
TEST_ASSERT_FATAL(rc == 0);
}

Expand Down

0 comments on commit 05458a4

Please sign in to comment.