From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id E87B142943;
	Fri, 14 Apr 2023 19:47:59 +0200 (CEST)
Received: from mails.dpdk.org (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id AC6D942D48;
	Fri, 14 Apr 2023 19:47:53 +0200 (CEST)
Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com
 [67.231.156.173])
 by mails.dpdk.org (Postfix) with ESMTP id D099F42D43
 for <dev@dpdk.org>; Fri, 14 Apr 2023 19:47:52 +0200 (CEST)
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
 33EGNfcJ012935; Fri, 14 Apr 2023 10:47:51 -0700
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=phZCDUZCFSui8XKp0E2yByPqaOlyeLr2kz2UB8HC6U4=;
 b=EGwISUofFKz3/lKemHz/VOTUaPmANIY31X/iBBXvKXVzH2ognWvrF2zXrg36VOUs0Mfx
 14IhwKQLo44oLsK1FbL2BcJmABU1yZSxi695yPkhoeLIEzQ22zJJRA9mDze5gKd+it9s
 RR+KcORuycHGfWJjXY0sp7FW+xQXK0fbyjJnvH6VWE4hLQZI5qmZCh/wvACN/XogD6EO
 SL3nkKuV13Ds7jtqwQz5Pl5kBUoeXa0rm4USojnnyU1g1t6kOtsGGXZj0UQftGhUSQlK
 G1beqsMQRWb4OcvKdOZsceh3Nvz/Ih3RGGmCzgHCQDfftuEEOAavTMPXTb9Wt+EkvnJh kQ== 
Received: from dc5-exch02.marvell.com ([199.233.59.182])
 by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3py646s6vh-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);
 Fri, 14 Apr 2023 10:47:51 -0700
Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH02.marvell.com
 (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.48;
 Fri, 14 Apr 2023 10:47:49 -0700
Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com
 (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.48 via Frontend
 Transport; Fri, 14 Apr 2023 10:47:49 -0700
Received: from BG-LT92004.corp.innovium.com (unknown [10.28.161.183])
 by maili.marvell.com (Postfix) with ESMTP id 72BE43F707F;
 Fri, 14 Apr 2023 10:47:43 -0700 (PDT)
From: Anoob Joseph <anoobj@marvell.com>
To: Thomas Monjalon <thomas@monjalon.net>, Akhil Goyal <gakhil@marvell.com>,
 Jerin Jacob <jerinj@marvell.com>, Konstantin Ananyev
 <konstantin.v.ananyev@yandex.ru>, Bernard Iremonger
 <bernard.iremonger@intel.com>
CC: Volodymyr Fialko <vfialko@marvell.com>, Hemant Agrawal
 <hemant.agrawal@nxp.com>, =?UTF-8?q?Mattias=20R=C3=B6nnblom?=
 <mattias.ronnblom@ericsson.com>,
 Kiran Kumar K <kirankumark@marvell.com>, <dev@dpdk.org>,
 Olivier Matz <olivier.matz@6wind.com>
Subject: [PATCH v2 18/22] test/pdcp: add timer restart case
Date: Fri, 14 Apr 2023 23:15:08 +0530
Message-ID: <20230414174512.642-19-anoobj@marvell.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20230414174512.642-1-anoobj@marvell.com>
References: <20221222092522.1628-1-anoobj@marvell.com>
 <20230414174512.642-1-anoobj@marvell.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-Proofpoint-GUID: diBaiJtOwkIa7O0jMViwKXZdkSyObM6s
X-Proofpoint-ORIG-GUID: diBaiJtOwkIa7O0jMViwKXZdkSyObM6s
X-Proofpoint-Virus-Version: vendor=baseguard
 engine=ICAP:2.0.254,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22
 definitions=2023-04-14_10,2023-04-14_01,2023-02-09_01
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org

From: Volodymyr Fialko <vfialko@marvell.com>

Add test to cover the case when t-reordering timer should be restarted on
the same packet.

Signed-off-by: Anoob Joseph <anoobj@marvell.com>
Signed-off-by: Volodymyr Fialko <vfialko@marvell.com>
---
 app/test/test_pdcp.c | 67 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 67 insertions(+)

diff --git a/app/test/test_pdcp.c b/app/test/test_pdcp.c
index a0e982777d..de3375bb22 100644
--- a/app/test/test_pdcp.c
+++ b/app/test/test_pdcp.c
@@ -1072,6 +1072,70 @@ test_reorder_gap_fill(struct pdcp_test_conf *ul_conf)
 	return ret;
 }
 
+static int
+test_reorder_gap_in_reorder_buffer(const struct pdcp_test_conf *ul_conf)
+{
+	struct rte_mbuf *m = NULL, *out_mb[2] = {0};
+	uint16_t nb_success = 0, nb_err = 0;
+	struct rte_pdcp_entity *pdcp_entity;
+	int ret = TEST_FAILED, nb_out, i;
+	struct pdcp_test_conf dl_conf;
+	uint8_t cdev_id;
+
+	const int start_count = 0;
+
+	if (ul_conf->entity.pdcp_xfrm.pkt_dir == RTE_SECURITY_PDCP_DOWNLINK)
+		return TEST_SKIPPED;
+
+	/* Create configuration for actual testing */
+	uplink_to_downlink_convert(ul_conf, &dl_conf);
+	dl_conf.entity.count = start_count;
+	pdcp_entity = test_entity_create(&dl_conf, &ret);
+	if (pdcp_entity == NULL)
+		return ret;
+
+	const uint32_t sn_size = dl_conf.entity.pdcp_xfrm.sn_size;
+	cdev_id = dl_conf.entity.dev_id;
+
+	/* Create two gaps [NULL, m1, NULL, m3]*/
+	for (i = 0; i < 2; i++) {
+		m = generate_packet_for_dl_with_sn(*ul_conf, start_count + 2 * i + 1);
+		ASSERT_TRUE_OR_GOTO(m != NULL, exit, "Could not allocate buffer for packet\n");
+		nb_success = test_process_packets(pdcp_entity, cdev_id, &m, 1, out_mb, &nb_err);
+		ASSERT_TRUE_OR_GOTO(nb_err == 0, exit, "Error occurred during packet process\n");
+		ASSERT_TRUE_OR_GOTO(nb_success == 0, exit, "Packet was not buffered as expected\n");
+		m = NULL; /* Packet was moved to PDCP lib */
+	}
+
+	/* Generate packet to fill the first gap */
+	m = generate_packet_for_dl_with_sn(*ul_conf, start_count);
+	ASSERT_TRUE_OR_GOTO(m != NULL, exit, "Could not allocate buffer for packet\n");
+
+	/*
+	 * Buffered packets after insert [m0, m1, NULL, m3]
+	 * Only first gap should be filled, timer should be restarted for second gap
+	 */
+	nb_success = test_process_packets(pdcp_entity, cdev_id, &m, 1, out_mb, &nb_err);
+	ASSERT_TRUE_OR_GOTO(nb_err == 0, exit, "Error occurred during packet process\n");
+	ASSERT_TRUE_OR_GOTO(nb_success == 2, exit,
+			"Packet count mismatch (received: %i, expected: 2)\n", nb_success);
+	m = NULL;
+	/* Check that packets in correct order */
+	ASSERT_TRUE_OR_GOTO(array_asc_sorted_check(out_mb, nb_success, sn_size),
+			exit, "Error occurred during packet drain\n");
+	ASSERT_TRUE_OR_GOTO(testsuite_params.timer_is_running == true, exit,
+			"Timer should be restarted after partial drain");
+
+
+	ret = TEST_SUCCESS;
+exit:
+	rte_pktmbuf_free(m);
+	rte_pktmbuf_free_bulk(out_mb, nb_success);
+	nb_out = rte_pdcp_entity_release(pdcp_entity, out_mb);
+	rte_pktmbuf_free_bulk(out_mb, nb_out);
+	return ret;
+}
+
 static int
 test_reorder_buffer_full_window_size_sn_12(const struct pdcp_test_conf *ul_conf)
 {
@@ -1472,6 +1536,9 @@ static struct unit_test_suite reorder_test_cases  = {
 		TEST_CASE_NAMED_WITH_DATA("test_reorder_gap_fill",
 			ut_setup_pdcp, ut_teardown_pdcp,
 			run_test_with_all_known_vec, test_reorder_gap_fill),
+		TEST_CASE_NAMED_WITH_DATA("test_reorder_gap_in_reorder_buffer",
+			ut_setup_pdcp, ut_teardown_pdcp,
+			run_test_with_all_known_vec, test_reorder_gap_in_reorder_buffer),
 		TEST_CASE_NAMED_WITH_DATA("test_reorder_buffer_full_window_size_sn_12",
 			ut_setup_pdcp, ut_teardown_pdcp,
 			run_test_with_all_known_vec_until_first_pass,
-- 
2.25.1