@@ -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+
452543int
453544main (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