Skip to content

Commit 8bce8a9

Browse files
author
branch-coverage-leader
committed
test(ff_host_interface): Stage-7 +6 TCs for mmap prot/flags + NULL-time guards
ff_host_interface.c branch 92.45% -> 98.11% (+5.66pp) Tests 16 -> 22 / 0 fail / valgrind 0 leak Covers prot/flags bit-test false legs (PROT_READ/WRITE/MAP_PRIVATE/ANON absent) and ff_get_current_time NULL sec/nsec defensive branches.
1 parent 1867e05 commit 8bce8a9

1 file changed

Lines changed: 99 additions & 1 deletion

File tree

tests/unit/test_ff_host_interface.c

Lines changed: 99 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -447,8 +447,99 @@ test_ff_clock_gettime_realtime(void **state)
447447
}
448448

449449
/* ------------------------------------------------------------------------ */
450-
/* Main runner */
450+
/* Stage-7 Phase-6 (FU-S7-HIF-*): branch-coverage boost */
451451
/* ------------------------------------------------------------------------ */
452+
453+
/* TC-S7-HIF-01: ff_mmap with PROT_WRITE only (no PROT_READ) covers the */
454+
/* false leg of `(prot & ff_PROT_READ) == ff_PROT_READ` (BRDA L70 br=1). */
455+
static void
456+
test_ff_mmap_prot_writeonly(void **state)
457+
{
458+
(void)state;
459+
void *p = ff_mmap(NULL, 4096, ff_PROT_WRITE,
460+
ff_MAP_PRIVATE | ff_MAP_ANON, -1, 0);
461+
assert_ptr_not_equal(p, ff_MAP_FAILED);
462+
int rv = ff_munmap(p, 4096);
463+
assert_int_equal(rv, 0);
464+
}
465+
466+
/* TC-S7-HIF-02: ff_mmap with PROT_READ only (no PROT_WRITE) covers */
467+
/* BRDA L71 br=1 (false leg of PROT_WRITE bit test). */
468+
static void
469+
test_ff_mmap_prot_readonly(void **state)
470+
{
471+
(void)state;
472+
void *p = ff_mmap(NULL, 4096, ff_PROT_READ,
473+
ff_MAP_PRIVATE | ff_MAP_ANON, -1, 0);
474+
assert_ptr_not_equal(p, ff_MAP_FAILED);
475+
/* Read a byte; PROT_READ-only anon mapping is zero-filled. */
476+
volatile unsigned char b = ((volatile unsigned char *)p)[0];
477+
assert_int_equal(b, 0);
478+
int rv = ff_munmap(p, 4096);
479+
assert_int_equal(rv, 0);
480+
}
481+
482+
/* TC-S7-HIF-03: ff_mmap with MAP_SHARED|MAP_ANON (no MAP_PRIVATE) covers */
483+
/* BRDA L75 br=1 (false leg of MAP_PRIVATE bit test). */
484+
static void
485+
test_ff_mmap_map_shared_anon(void **state)
486+
{
487+
(void)state;
488+
void *p = ff_mmap(NULL, 4096, ff_PROT_READ | ff_PROT_WRITE,
489+
ff_MAP_SHARED | ff_MAP_ANON, -1, 0);
490+
assert_ptr_not_equal(p, ff_MAP_FAILED);
491+
int rv = ff_munmap(p, 4096);
492+
assert_int_equal(rv, 0);
493+
}
494+
495+
/* TC-S7-HIF-04: ff_mmap file-backed (MAP_PRIVATE without MAP_ANON) */
496+
/* covers BRDA L76 br=1 (false leg of MAP_ANON bit test). */
497+
static void
498+
test_ff_mmap_file_backed_no_anon(void **state)
499+
{
500+
(void)state;
501+
char tmpl[] = "/tmp/ff_hif_mmap_XXXXXX";
502+
int fd = mkstemp(tmpl);
503+
assert_true(fd >= 0);
504+
int t = ftruncate(fd, 4096);
505+
assert_int_equal(t, 0);
506+
void *p = ff_mmap(NULL, 4096, ff_PROT_READ | ff_PROT_WRITE,
507+
ff_MAP_PRIVATE, fd, 0);
508+
assert_ptr_not_equal(p, ff_MAP_FAILED);
509+
int rv = ff_munmap(p, 4096);
510+
assert_int_equal(rv, 0);
511+
close(fd);
512+
/* clean up via wrapper script */
513+
char cmd[256];
514+
snprintf(cmd, sizeof(cmd),
515+
"/data/workspace/rm_tmp_file.sh %s >/dev/null 2>&1", tmpl);
516+
int s = system(cmd); (void)s;
517+
}
518+
519+
/* TC-S7-HIF-05: ff_get_current_time(NULL, &nsec) covers BRDA L196 br=1 */
520+
/* (sec==NULL false branch of the first guard). Must not crash. */
521+
static void
522+
test_ff_get_current_time_null_sec(void **state)
523+
{
524+
(void)state;
525+
long ns = -1;
526+
ff_update_current_ts();
527+
ff_get_current_time(NULL, &ns);
528+
assert_true(ns >= 0);
529+
}
530+
531+
/* TC-S7-HIF-06: ff_get_current_time(&sec, NULL) covers BRDA L200 br=1 */
532+
/* (nsec==NULL false branch of the second guard). Must not crash. */
533+
static void
534+
test_ff_get_current_time_null_nsec(void **state)
535+
{
536+
(void)state;
537+
time_t s = 0;
538+
ff_update_current_ts();
539+
ff_get_current_time(&s, NULL);
540+
assert_true(s > 1577836800);
541+
}
542+
452543
int
453544
main(void)
454545
{
@@ -471,6 +562,13 @@ main(void)
471562
cmocka_unit_test(test_ff_realloc_zero_size_returns_p),
472563
cmocka_unit_test(test_panic_aborts),
473564
cmocka_unit_test(test_ff_clock_gettime_realtime),
565+
/* Stage-7 Phase-6 branch-coverage boost (FU-S7-HIF-*) */
566+
cmocka_unit_test(test_ff_mmap_prot_writeonly),
567+
cmocka_unit_test(test_ff_mmap_prot_readonly),
568+
cmocka_unit_test(test_ff_mmap_map_shared_anon),
569+
cmocka_unit_test(test_ff_mmap_file_backed_no_anon),
570+
cmocka_unit_test(test_ff_get_current_time_null_sec),
571+
cmocka_unit_test(test_ff_get_current_time_null_nsec),
474572
};
475573
return cmocka_run_group_tests(tests, NULL, NULL);
476574
}

0 commit comments

Comments
 (0)