[v2] test/fib: clarify FIB RCU negative tests

Message ID 20241107170408.214488-1-vladimir.medvedkin@intel.com (mailing list archive)
State Accepted, archived
Delegated to: David Marchand
Headers
Series [v2] test/fib: clarify FIB RCU negative tests |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/loongarch-compilation success Compilation OK
ci/loongarch-unit-testing success Unit Testing PASS
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/intel-Functional success Functional PASS
ci/iol-marvell-Functional success Functional Testing PASS
ci/github-robot: build success github build: passed
ci/iol-unit-amd64-testing success Testing PASS
ci/iol-unit-arm64-testing success Testing PASS
ci/iol-compile-amd64-testing success Testing PASS
ci/iol-compile-arm64-testing success Testing PASS
ci/iol-sample-apps-testing success Testing PASS
ci/iol-intel-Functional success Functional Testing PASS

Commit Message

Vladimir Medvedkin Nov. 7, 2024, 5:04 p.m. UTC
Add additional negative tests for rte_fib_rcu_qsbr_add().
Also explicitly check returned codes.
Additionally add a check into the rte_fib_rcu_qsbr_add()
for passed fib argument.

Signed-off-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
---
 app/test/test_fib.c | 21 +++++++++++++++------
 lib/fib/rte_fib.c   |  3 +++
 2 files changed, 18 insertions(+), 6 deletions(-)
  

Comments

David Marchand Nov. 8, 2024, 2:16 p.m. UTC | #1
On Thu, Nov 7, 2024 at 6:04 PM Vladimir Medvedkin
<vladimir.medvedkin@intel.com> wrote:
>
> Add additional negative tests for rte_fib_rcu_qsbr_add().
> Also explicitly check returned codes.
> Additionally add a check into the rte_fib_rcu_qsbr_add()
> for passed fib argument.
>
> Signed-off-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>

I kept Stephen ack from v1.

Applied, thanks.
  

Patch

diff --git a/app/test/test_fib.c b/app/test/test_fib.c
index 15035ee045..ecd3fb4297 100644
--- a/app/test/test_fib.c
+++ b/app/test/test_fib.c
@@ -400,7 +400,6 @@  test_invalid_rcu(void)
 	config.max_routes = MAX_ROUTES;
 	config.rib_ext_sz = 0;
 	config.default_nh = def_nh;
-	config.type = RTE_FIB_DUMMY;
 
 	fib = rte_fib_create(__func__, SOCKET_ID_ANY, &config);
 	RTE_TEST_ASSERT(fib != NULL, "Failed to create FIB\n");
@@ -417,23 +416,33 @@  test_invalid_rcu(void)
 	rcu_cfg.v = qsv;
 
 	/* adding rcu to RTE_FIB_DUMMY FIB type */
+	config.type = RTE_FIB_DUMMY;
 	rcu_cfg.mode = RTE_FIB_QSBR_MODE_SYNC;
 	status = rte_fib_rcu_qsbr_add(fib, &rcu_cfg);
-	RTE_TEST_ASSERT(status == -ENOTSUP, "rte_fib_rcu_qsbr_add returned wrong error status\n");
+	RTE_TEST_ASSERT(status == -ENOTSUP,
+		"rte_fib_rcu_qsbr_add returned wrong error status when called with DUMMY type FIB\n");
 	rte_fib_free(fib);
 
-	/* Invalid QSBR mode */
 	config.type = RTE_FIB_DIR24_8;
 	config.dir24_8.nh_sz = RTE_FIB_DIR24_8_4B;
 	config.dir24_8.num_tbl8 = MAX_TBL8;
 	fib = rte_fib_create(__func__, SOCKET_ID_ANY, &config);
 	RTE_TEST_ASSERT(fib != NULL, "Failed to create FIB\n");
+
+	/* Call rte_fib_rcu_qsbr_add without fib or config */
+	status = rte_fib_rcu_qsbr_add(NULL, &rcu_cfg);
+	RTE_TEST_ASSERT(status == -EINVAL, "RCU added without fib\n");
+	status = rte_fib_rcu_qsbr_add(fib, NULL);
+	RTE_TEST_ASSERT(status == -EINVAL, "RCU added without config\n");
+
+	/* Invalid QSBR mode */
 	rcu_cfg.mode = 2;
 	status = rte_fib_rcu_qsbr_add(fib, &rcu_cfg);
-	RTE_TEST_ASSERT(status != 0, "Failed to add RCU\n");
+	RTE_TEST_ASSERT(status == -EINVAL, "RCU added with incorrect mode\n");
 
 	rcu_cfg.mode = RTE_FIB_QSBR_MODE_DQ;
-	/* Attach RCU QSBR to FIB */
+
+	/* Attach RCU QSBR to FIB to check for double attach */
 	status = rte_fib_rcu_qsbr_add(fib, &rcu_cfg);
 	RTE_TEST_ASSERT(status == 0, "Can not attach RCU to FIB\n");
 
@@ -445,7 +454,7 @@  test_invalid_rcu(void)
 	rcu_cfg.v = qsv2;
 	rcu_cfg.mode = RTE_FIB_QSBR_MODE_SYNC;
 	status = rte_fib_rcu_qsbr_add(fib, &rcu_cfg);
-	RTE_TEST_ASSERT(status != 0, "Secondary RCU was mistakenly attached\n");
+	RTE_TEST_ASSERT(status == -EEXIST, "Secondary RCU was mistakenly attached\n");
 
 	rte_fib_free(fib);
 	rte_free(qsv);
diff --git a/lib/fib/rte_fib.c b/lib/fib/rte_fib.c
index fa8779462a..db79fc428e 100644
--- a/lib/fib/rte_fib.c
+++ b/lib/fib/rte_fib.c
@@ -346,6 +346,9 @@  rte_fib_select_lookup(struct rte_fib *fib,
 int
 rte_fib_rcu_qsbr_add(struct rte_fib *fib, struct rte_fib_rcu_config *cfg)
 {
+	if (fib == NULL)
+		return -EINVAL;
+
 	switch (fib->type) {
 	case RTE_FIB_DIR24_8:
 		return dir24_8_rcu_qsbr_add(fib->dp, cfg, fib->name);