Skip to content

Commit 7c47729

Browse files
author
coverage-leader
committed
test(coverage): Stage-6 phase-5 ff_dpdk_if 3.2%->5.1% line (+7 TC)
Phase-5 of coverage-boost. Adds 7 ff_dpdk_if TCs targeting RSS-table helpers + register_if (the testable portion that doesn't require a real DPDK ethdev port + main-loop runtime): - ff_rss_tbl_set_portrange (3 TC): no cfg / disabled / first>last - ff_rss_tbl_get_portrange (3 TC): no cfg / disabled / smoke lookup - ff_dpdk_register_if (1 TC) : malloc + memset happy path Coverage: ff_dpdk_if.c line 3.2% -> 5.1% (+1.9pp) ff_dpdk_if.c branch 1.1% -> 3.1% (+2.0pp) Project line 46.3% -> 47.1%, branch 46.5% -> 47.2%, func 61.7% -> 63.9% Note: the original Phase-5 25% line target is unattainable in pure unit-test scope; ff_dpdk_init/run/if_send/eth_dev_* require a real DPDK ethdev port + main-loop runtime, deferred to integration tests (FU-S4-DPDK-IF-FULL stays open for Phase-7+ integration work). 142 TC / 0 SKIP / 0 FAIL. G8 PASS (10/10) with ff_dpdk_if line 2->4. valgrind 11/11 PASS / 0 leak. No lib patch needed in phase-5.
1 parent e329ca0 commit 7c47729

2 files changed

Lines changed: 131 additions & 1 deletion

File tree

tests/unit/coverage_threshold.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ BEGIN {
6868
tline["ff_init.c"] = 95; tbr["ff_init.c"] = 95
6969
tline["ff_dpdk_pcap.c"] = 95; tbr["ff_dpdk_pcap.c"] = 84
7070
# P3 (Stage-5 subset only — most of the file is out-of-scope by design)
71-
tline["ff_dpdk_if.c"] = 2; tbr["ff_dpdk_if.c"] = 0
71+
tline["ff_dpdk_if.c"] = 4; tbr["ff_dpdk_if.c"] = 2
7272
tline["ff_dpdk_kni.c"] = 40; tbr["ff_dpdk_kni.c"] = 35
7373
7474
pass = 0; fail = 0; total_files = 0

tests/unit/test_ff_dpdk_if.c

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,128 @@ test_ff_in_pcbladdr_af_inet6_freebsd_to_linux_remap(void **state)
345345
ff_regist_pcblddr_fun(NULL);
346346
}
347347

348+
/* ======================================================================== */
349+
/* Stage-6 Phase-5 coverage extensions: ff_rss_tbl_* + register_if */
350+
/* ======================================================================== */
351+
352+
/* ------------------------------------------------------------------------ */
353+
/* TC-U-P3-DPDKIF-11 (Stage-6): ff_rss_tbl_set_portrange returns -1 when */
354+
/* rss_check_cfgs is NULL (covers the early-return guard L2722). */
355+
/* ------------------------------------------------------------------------ */
356+
static void
357+
test_ff_rss_tbl_set_portrange_no_cfg(void **state)
358+
{
359+
(void)state;
360+
/* Ensure clean state. */
361+
ff_global_cfg.dpdk.rss_check_cfgs = NULL;
362+
int rv = ff_rss_tbl_set_portrange(1024, 2048);
363+
assert_int_equal(rv, -1);
364+
}
365+
366+
/* ------------------------------------------------------------------------ */
367+
/* TC-U-P3-DPDKIF-12 (Stage-6): ff_rss_tbl_set_portrange returns -1 when */
368+
/* rss_check_cfgs.enable == 0 (same guard L2722-2724). */
369+
/* ------------------------------------------------------------------------ */
370+
static void
371+
test_ff_rss_tbl_set_portrange_disabled(void **state)
372+
{
373+
(void)state;
374+
struct ff_rss_check_cfg dummy = { .enable = 0 };
375+
ff_global_cfg.dpdk.rss_check_cfgs = &dummy;
376+
int rv = ff_rss_tbl_set_portrange(1024, 2048);
377+
assert_int_equal(rv, -1);
378+
ff_global_cfg.dpdk.rss_check_cfgs = NULL;
379+
}
380+
381+
/* ------------------------------------------------------------------------ */
382+
/* TC-U-P3-DPDKIF-13 (Stage-6): ff_rss_tbl_set_portrange with first > last */
383+
/* returns -1 (covers the inverted-range guard). */
384+
/* ------------------------------------------------------------------------ */
385+
static void
386+
test_ff_rss_tbl_set_portrange_inverted_range(void **state)
387+
{
388+
(void)state;
389+
struct ff_rss_check_cfg dummy = { .enable = 1 };
390+
ff_global_cfg.dpdk.rss_check_cfgs = &dummy;
391+
int rv = ff_rss_tbl_set_portrange(/*first*/2048, /*last*/1024);
392+
assert_int_equal(rv, -1);
393+
ff_global_cfg.dpdk.rss_check_cfgs = NULL;
394+
}
395+
396+
/* ------------------------------------------------------------------------ */
397+
/* TC-U-P3-DPDKIF-14 (Stage-6): ff_rss_tbl_get_portrange returns -1 when */
398+
/* rss_check_cfgs is NULL (early-return guard L2782-2784). */
399+
/* ------------------------------------------------------------------------ */
400+
static void
401+
test_ff_rss_tbl_get_portrange_no_cfg(void **state)
402+
{
403+
(void)state;
404+
ff_global_cfg.dpdk.rss_check_cfgs = NULL;
405+
uint16_t first = 0, last = 0;
406+
uint16_t *portrange = NULL;
407+
int rv = ff_rss_tbl_get_portrange(0x01020304, 0x05060708, htons(80),
408+
&first, &last, &portrange);
409+
assert_int_equal(rv, -1);
410+
}
411+
412+
/* ------------------------------------------------------------------------ */
413+
/* TC-U-P3-DPDKIF-15 (Stage-6): ff_rss_tbl_get_portrange returns -1 when */
414+
/* rss_check_cfgs.enable == 0. */
415+
/* ------------------------------------------------------------------------ */
416+
static void
417+
test_ff_rss_tbl_get_portrange_disabled(void **state)
418+
{
419+
(void)state;
420+
struct ff_rss_check_cfg dummy = { .enable = 0 };
421+
ff_global_cfg.dpdk.rss_check_cfgs = &dummy;
422+
uint16_t first = 0, last = 0;
423+
uint16_t *portrange = NULL;
424+
int rv = ff_rss_tbl_get_portrange(0x01020304, 0x05060708, htons(80),
425+
&first, &last, &portrange);
426+
assert_int_equal(rv, -1);
427+
ff_global_cfg.dpdk.rss_check_cfgs = NULL;
428+
}
429+
430+
/* ------------------------------------------------------------------------ */
431+
/* TC-U-P3-DPDKIF-16 (Stage-6): ff_rss_tbl_get_portrange smoke — verify it */
432+
/* doesn't crash when called with an arbitrary 4-tuple against the global */
433+
/* table (initial state). Acceptable return values: 0 (found), 1 (found- */
434+
/* with-portrange), or -1 (not found). Any of these covers the lookup loop.*/
435+
/* ------------------------------------------------------------------------ */
436+
static void
437+
test_ff_rss_tbl_get_portrange_smoke(void **state)
438+
{
439+
(void)state;
440+
struct ff_rss_check_cfg dummy = { .enable = 1 };
441+
ff_global_cfg.dpdk.rss_check_cfgs = &dummy;
442+
uint16_t first = 0, last = 0;
443+
uint16_t *portrange = NULL;
444+
int rv = ff_rss_tbl_get_portrange(0xDEADBEEF, 0xCAFEBABE, htons(80),
445+
&first, &last, &portrange);
446+
/* Just verify the function ran without crashing. The return value
447+
* depends on the global ff_rss_tbl state which we don't control here. */
448+
(void)rv;
449+
ff_global_cfg.dpdk.rss_check_cfgs = NULL;
450+
}
451+
452+
/* ------------------------------------------------------------------------ */
453+
/* TC-U-P3-DPDKIF-17 (Stage-6): ff_dpdk_register_if happy path: allocates */
454+
/* and returns a non-NULL ff_dpdk_if_context (covers the malloc + memset */
455+
/* path in L182-L196). */
456+
/* ------------------------------------------------------------------------ */
457+
static void
458+
test_ff_dpdk_register_if_returns_ctx(void **state)
459+
{
460+
(void)state;
461+
struct ff_port_cfg pcfg = { .port_id = 0 };
462+
int dummy_softc = 0xCAFE;
463+
int dummy_ifp = 0xBEEF;
464+
void *ctx = ff_dpdk_register_if(&dummy_softc, &dummy_ifp, &pcfg);
465+
assert_non_null(ctx);
466+
/* Round-trip via ff_dpdk_deregister_if (already tested) to free. */
467+
ff_dpdk_deregister_if((struct ff_dpdk_if_context *)ctx);
468+
}
469+
348470
/* ------------------------------------------------------------------------ */
349471
/* Main runner */
350472
/* ------------------------------------------------------------------------ */
@@ -363,6 +485,14 @@ main(void)
363485
cmocka_unit_test(test_ff_in_pcbladdr_no_callback),
364486
cmocka_unit_test(test_ff_in_pcbladdr_af_inet_dispatches),
365487
cmocka_unit_test(test_ff_in_pcbladdr_af_inet6_freebsd_to_linux_remap),
488+
/* Stage-6 Phase-5 coverage extensions */
489+
cmocka_unit_test(test_ff_rss_tbl_set_portrange_no_cfg),
490+
cmocka_unit_test(test_ff_rss_tbl_set_portrange_disabled),
491+
cmocka_unit_test(test_ff_rss_tbl_set_portrange_inverted_range),
492+
cmocka_unit_test(test_ff_rss_tbl_get_portrange_no_cfg),
493+
cmocka_unit_test(test_ff_rss_tbl_get_portrange_disabled),
494+
cmocka_unit_test(test_ff_rss_tbl_get_portrange_smoke),
495+
cmocka_unit_test(test_ff_dpdk_register_if_returns_ctx),
366496
};
367497
return cmocka_run_group_tests(tests, NULL, NULL);
368498
}

0 commit comments

Comments
 (0)