From patchwork Fri Jan 20 10:21:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Volodymyr Fialko X-Patchwork-Id: 122418 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5973E4242B; Fri, 20 Jan 2023 11:22:26 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 496CC42DAC; Fri, 20 Jan 2023 11:22:16 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 03E3740223 for ; Fri, 20 Jan 2023 11:22:10 +0100 (CET) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 30K7NYEn016078; Fri, 20 Jan 2023 02:22:10 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=pfpt0220; bh=22sj6aSWS5lb5ZySePULeppcDUnXnS00IKiG+S3Y90k=; b=D1e0Mo2OYBMJ29U1/YQp2zCsXnMgfq7DVV4BDdkHpPeJaimFY51ToDGVVq2nvptSJUz6 C/eOG7WPKoWjUowJmI8262F1WLlbcRdcXLFoRrItIHeN3LacX3tAdLu3tDNnzLiS/QVt E/S9y+3TyoX6dey3nSqMLrL4DXCU/D2IlHqqE+bwN8KbPb3KOFwidL8BI+X/AHLQ6F4G J18bF3nHfd9U665dsoCQ7EngO/MngfMFzAONitpW/9w3NIx/l+0/Ucl6RbxSw/VATWZx 7iOegnsgtomC4kgvQx+2dffezcHGWVPLdkFzD6tZ8ro2ayxZZWjcL5nbiQ0GfaCIJeHQ Sg== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3n71cexxm9-6 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Fri, 20 Jan 2023 02:22:10 -0800 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Fri, 20 Jan 2023 02:22:05 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.42 via Frontend Transport; Fri, 20 Jan 2023 02:22:05 -0800 Received: from cavium-DT10.. (unknown [10.28.34.39]) by maili.marvell.com (Postfix) with ESMTP id 90A003F7076; Fri, 20 Jan 2023 02:22:03 -0800 (PST) From: Volodymyr Fialko To: , Reshma Pattan CC: , , Volodymyr Fialko Subject: [PATCH 3/3] test/reorder: add cases to cover new API Date: Fri, 20 Jan 2023 11:21:46 +0100 Message-ID: <20230120102146.4035460-4-vfialko@marvell.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230120102146.4035460-1-vfialko@marvell.com> References: <20230120102146.4035460-1-vfialko@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: EHkB_sUDkcquMGYRAl3GqeuRsz5oOoTd X-Proofpoint-ORIG-GUID: EHkB_sUDkcquMGYRAl3GqeuRsz5oOoTd X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.122.1 definitions=2023-01-20_06,2023-01-20_01,2022-06-22_01 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Add new test cases to cover `rte_reorder_drain_up_to_seqn` and `rte_reorder_min_seqn_set`. Signed-off-by: Volodymyr Fialko --- app/test/test_reorder.c | 160 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) diff --git a/app/test/test_reorder.c b/app/test/test_reorder.c index f0714a5c18..c345a72e0c 100644 --- a/app/test/test_reorder.c +++ b/app/test/test_reorder.c @@ -335,6 +335,164 @@ test_reorder_drain(void) return ret; } +static void +buffer_to_reorder_move(struct rte_mbuf **mbuf, struct rte_reorder_buffer *b) +{ + rte_reorder_insert(b, *mbuf); + *mbuf = NULL; +} + +static int +test_reorder_drain_up_to_seqn(void) +{ + struct rte_mempool *p = test_params->p; + struct rte_reorder_buffer *b = NULL; + const unsigned int num_bufs = 10; + const unsigned int size = 4; + unsigned int i, cnt; + int ret = 0; + + struct rte_mbuf *bufs[num_bufs]; + struct rte_mbuf *robufs[num_bufs]; + + /* initialize all robufs to NULL */ + memset(robufs, 0, sizeof(robufs)); + + /* This would create a reorder buffer instance consisting of: + * reorder_seq = 0 + * ready_buf: RB[size] = {NULL, NULL, NULL, NULL} + * order_buf: OB[size] = {NULL, NULL, NULL, NULL} + */ + b = rte_reorder_create("test_drain_up_to_seqn", rte_socket_id(), size); + TEST_ASSERT_NOT_NULL(b, "Failed to create reorder buffer"); + + for (i = 0; i < num_bufs; i++) { + bufs[i] = rte_pktmbuf_alloc(p); + TEST_ASSERT_NOT_NULL(bufs[i], "Packet allocation failed\n"); + *rte_reorder_seqn(bufs[i]) = i; + } + + /* Insert packet with seqn 1 and 3: + * RB[] = {NULL, NULL, NULL, NULL} + * OB[] = {1, 2, 3, NULL} + */ + buffer_to_reorder_move(&bufs[1], b); + buffer_to_reorder_move(&bufs[2], b); + buffer_to_reorder_move(&bufs[3], b); + /* Draining 1, 2 */ + cnt = rte_reorder_drain_up_to_seqn(b, robufs, num_bufs, 3); + if (cnt != 2) { + printf("%s:%d:%d: number of expected packets not drained\n", + __func__, __LINE__, cnt); + ret = -1; + goto exit; + } + for (i = 0; i < 2; i++) + rte_pktmbuf_free(robufs[i]); + memset(robufs, 0, sizeof(robufs)); + + /* Insert more packets + * RB[] = {NULL, NULL, NULL, NULL} + * OB[] = {3, 4, NULL, 6} + */ + buffer_to_reorder_move(&bufs[4], b); + buffer_to_reorder_move(&bufs[6], b); + /* Insert more packets to utilize Ready buffer + * RB[] = {3, NULL, 5, 6} + * OB[] = {NULL, NULL, 8, NULL} + */ + buffer_to_reorder_move(&bufs[8], b); + + /* Drain 3 and 5 */ + cnt = rte_reorder_drain_up_to_seqn(b, robufs, num_bufs, 6); + if (cnt != 2) { + printf("%s:%d:%d: number of expected packets not drained\n", + __func__, __LINE__, cnt); + ret = -1; + goto exit; + } + for (i = 0; i < 2; i++) + rte_pktmbuf_free(robufs[i]); + memset(robufs, 0, sizeof(robufs)); + + ret = 0; +exit: + rte_reorder_free(b); + for (i = 0; i < num_bufs; i++) { + rte_pktmbuf_free(bufs[i]); + rte_pktmbuf_free(robufs[i]); + } + return ret; +} + +static int +test_reorder_set_seqn(void) +{ + struct rte_mempool *p = test_params->p; + struct rte_reorder_buffer *b = NULL; + const unsigned int num_bufs = 7; + const unsigned int size = 4; + unsigned int i; + int ret = 0; + + struct rte_mbuf *bufs[num_bufs]; + + /* This would create a reorder buffer instance consisting of: + * reorder_seq = 0 + * ready_buf: RB[size] = {NULL, NULL, NULL, NULL} + * order_buf: OB[size] = {NULL, NULL, NULL, NULL} + */ + b = rte_reorder_create("test_min_seqn_set", rte_socket_id(), size); + TEST_ASSERT_NOT_NULL(b, "Failed to create reorder buffer"); + + for (i = 0; i < num_bufs; i++) { + bufs[i] = rte_pktmbuf_alloc(p); + if (bufs[i] == NULL) { + printf("Packet allocation failed\n"); + goto exit; + } + *rte_reorder_seqn(bufs[i]) = i; + } + + ret = rte_reorder_min_seqn_set(b, 5); + if (ret != 0) { + printf("%s:%d: Error in setting min sequence number\n", __func__, __LINE__); + ret = -1; + goto exit; + } + + ret = rte_reorder_insert(b, bufs[0]); + if (ret >= 0) { + printf("%s:%d: Insertion with value less the min seq number\n", __func__, __LINE__); + ret = -1; + goto exit; + } + + ret = rte_reorder_insert(b, bufs[5]); + if (ret != 0) { + printf("%s:%d: Error inserting packet with valid seqn\n", __func__, __LINE__); + ret = -1; + goto exit; + } + bufs[5] = NULL; + + ret = rte_reorder_min_seqn_set(b, 0); + if (ret >= 0) { + printf("%s:%d: Error in setting min sequence number with non-empty buffer\n", + __func__, __LINE__); + ret = -1; + goto exit; + } + + ret = 0; +exit: + rte_reorder_free(b); + for (i = 0; i < num_bufs; i++) + rte_pktmbuf_free(bufs[i]); + + return ret; +} + static int test_setup(void) { @@ -385,6 +543,8 @@ static struct unit_test_suite reorder_test_suite = { TEST_CASE(test_reorder_free), TEST_CASE(test_reorder_insert), TEST_CASE(test_reorder_drain), + TEST_CASE(test_reorder_drain_up_to_seqn), + TEST_CASE(test_reorder_set_seqn), TEST_CASES_END() } };