From patchwork Mon Oct 10 15:50:44 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bill Fischofer X-Patchwork-Id: 77441 Delivered-To: patch@linaro.org Received: by 10.140.97.247 with SMTP id m110csp1248522qge; Mon, 10 Oct 2016 08:52:20 -0700 (PDT) X-Received: by 10.107.34.197 with SMTP id i188mr32383691ioi.138.1476114740198; Mon, 10 Oct 2016 08:52:20 -0700 (PDT) Return-Path: Received: from lists.linaro.org (lists.linaro.org. [54.225.227.206]) by mx.google.com with ESMTP id w74si17319118itc.72.2016.10.10.08.52.19; Mon, 10 Oct 2016 08:52:20 -0700 (PDT) Received-SPF: pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.225.227.206 as permitted sender) client-ip=54.225.227.206; Authentication-Results: mx.google.com; spf=pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.225.227.206 as permitted sender) smtp.mailfrom=lng-odp-bounces@lists.linaro.org; dmarc=pass (p=NONE dis=NONE) header.from=linaro.org Received: by lists.linaro.org (Postfix, from userid 109) id B9DBA60E91; Mon, 10 Oct 2016 15:52:19 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on ip-10-142-244-252 X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL autolearn=disabled version=3.4.0 Received: from [127.0.0.1] (localhost [127.0.0.1]) by lists.linaro.org (Postfix) with ESMTP id 3535260F1E; Mon, 10 Oct 2016 15:51:04 +0000 (UTC) X-Original-To: lng-odp@lists.linaro.org Delivered-To: lng-odp@lists.linaro.org Received: by lists.linaro.org (Postfix, from userid 109) id 702BC60F11; Mon, 10 Oct 2016 15:50:55 +0000 (UTC) Received: from mail-oi0-f42.google.com (mail-oi0-f42.google.com [209.85.218.42]) by lists.linaro.org (Postfix) with ESMTPS id BEE0060E91 for ; Mon, 10 Oct 2016 15:50:51 +0000 (UTC) Received: by mail-oi0-f42.google.com with SMTP id d132so131887152oib.2 for ; Mon, 10 Oct 2016 08:50:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=NbAhwJcZ7vZlacA8RRnwTbHOLUxz1a+21Z5fEtg/Vco=; b=YkaPN2RtkZZGXVa4iX1haVAXu8lpNFbOZdo82ecTWaYsHu0/qioQ8suPUtKgIM/r4Z D6FYjBeWNlQF9hCfvCtAtAMNI/fURzG2Obos6L0pqHImV8jrs8RizpWfMheq/XFiO45a bqStjlzG5QbfoKAkq9oNATxO61tjnbOVN0dH6WkICcydmP7P0O9PSn0s5MGmlU9VrZ+2 VkslNPXHIaE5KEGyEO+YZEkK9N374ogaxmZvuXsvtEW1GY2QP+hO4JvGkcXQNyAK3mHE tFtJrZVk1lhss6Lt7+8EdNpDMxUb4qqtzR6E95g3fWmdqlAdSvGKVr124RE0EPZrjTGQ OueQ== X-Gm-Message-State: AA6/9RmSQ+/Imfk5Z/FXVcY6UwO9u+iu+MRgaL1S7aPxpR7VgHOi4v9g5NcfOZMIhIucQnwnuH4= X-Received: by 10.202.77.9 with SMTP id a9mr25555380oib.180.1476114651258; Mon, 10 Oct 2016 08:50:51 -0700 (PDT) Received: from localhost.localdomain (cpe-70-121-83-241.austin.res.rr.com. [70.121.83.241]) by smtp.gmail.com with ESMTPSA id 1sm1740700otb.2.2016.10.10.08.50.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 10 Oct 2016 08:50:50 -0700 (PDT) From: Bill Fischofer To: lng-odp@lists.linaro.org Date: Mon, 10 Oct 2016 10:50:44 -0500 Message-Id: <1476114646-9874-4-git-send-email-bill.fischofer@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1476114646-9874-1-git-send-email-bill.fischofer@linaro.org> References: <1476114646-9874-1-git-send-email-bill.fischofer@linaro.org> X-Topics: patch Subject: [lng-odp] [API-NEXT PATCHv4 3/5] validation: packet: add packet splice/reference tests X-BeenThere: lng-odp@lists.linaro.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: "The OpenDataPlane \(ODP\) List" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: lng-odp-bounces@lists.linaro.org Sender: "lng-odp" Add validation tests for the new packet splice/reference APIs: - odp_packet_splice() - odp_packet_ref() - odp_packet_is_a_splice() - odp_packet_spliced() Signed-off-by: Bill Fischofer --- test/common_plat/validation/api/packet/packet.c | 176 ++++++++++++++++++++++++ test/common_plat/validation/api/packet/packet.h | 1 + 2 files changed, 177 insertions(+) -- 2.7.4 diff --git a/test/common_plat/validation/api/packet/packet.c b/test/common_plat/validation/api/packet/packet.c index a4426e2..5aaf15b 100644 --- a/test/common_plat/validation/api/packet/packet.c +++ b/test/common_plat/validation/api/packet/packet.c @@ -1317,6 +1317,181 @@ void packet_test_offset(void) CU_ASSERT_PTR_NOT_NULL(ptr); } +void packet_test_splice(void) +{ + odp_packet_t base_pkt, segmented_base_pkt, hdr_pkt[4], + ref_pkt[4], splice_pkt[4]; + uint32_t pkt_len, segmented_pkt_len, hdr_len[4], offset[8]; + + base_pkt = odp_packet_copy(test_packet, odp_packet_pool(test_packet)); + pkt_len = odp_packet_len(test_packet); + CU_ASSERT_FATAL(base_pkt != ODP_PACKET_INVALID); + + segmented_base_pkt = + odp_packet_copy(segmented_test_packet, + odp_packet_pool(segmented_test_packet)); + segmented_pkt_len = odp_packet_len(segmented_test_packet); + CU_ASSERT_FATAL(segmented_base_pkt != ODP_PACKET_INVALID); + + CU_ASSERT(odp_packet_is_a_splice(base_pkt) == 0); + CU_ASSERT(odp_packet_is_spliced(base_pkt) == 0); + + hdr_pkt[1] = + odp_packet_copy_part(segmented_test_packet, 0, + odp_packet_len(segmented_test_packet) / 4, + odp_packet_pool(segmented_test_packet)); + CU_ASSERT_FATAL(hdr_pkt[1] != ODP_PACKET_INVALID); + hdr_len[1] = odp_packet_len(hdr_pkt[1]); + offset[1] = 0; + + hdr_pkt[2] = + odp_packet_copy_part(segmented_test_packet, 10, + odp_packet_len(segmented_test_packet) / 8, + odp_packet_pool(segmented_test_packet)); + CU_ASSERT_FATAL(hdr_pkt[2] != ODP_PACKET_INVALID); + hdr_len[2] = odp_packet_len(hdr_pkt[2]); + offset[2] = 5; + + hdr_pkt[3] = odp_packet_copy_part(test_packet, 0, + odp_packet_len(test_packet) / 4, + odp_packet_pool(test_packet)); + CU_ASSERT_FATAL(hdr_pkt[3] != ODP_PACKET_INVALID); + hdr_len[3] = odp_packet_len(hdr_pkt[3]); + offset[3] = 64; + + hdr_pkt[4] = odp_packet_copy_part(test_packet, 0, + odp_packet_len(test_packet) / 4, + odp_packet_pool(test_packet)); + CU_ASSERT_FATAL(hdr_pkt[4] != ODP_PACKET_INVALID); + hdr_len[4] = odp_packet_len(hdr_pkt[4]); + offset[4] = 64; + + /* Nothing is a splice or is spliced before we start */ + CU_ASSERT(odp_packet_is_a_splice(hdr_pkt[1]) == 0); + CU_ASSERT(odp_packet_is_a_splice(hdr_pkt[2]) == 0); + CU_ASSERT(odp_packet_is_a_splice(hdr_pkt[3]) == 0); + CU_ASSERT(odp_packet_is_a_splice(hdr_pkt[4]) == 0); + CU_ASSERT(odp_packet_is_spliced(hdr_pkt[1]) == 0); + CU_ASSERT(odp_packet_is_spliced(hdr_pkt[2]) == 0); + CU_ASSERT(odp_packet_is_spliced(hdr_pkt[3]) == 0); + CU_ASSERT(odp_packet_is_spliced(hdr_pkt[4]) == 0); + + /* Attempt an invalid splice */ + splice_pkt[1] = odp_packet_splice(hdr_pkt[1], base_pkt, pkt_len); + CU_ASSERT(splice_pkt[1] == ODP_PACKET_INVALID); + CU_ASSERT(odp_packet_is_a_splice(hdr_pkt[1]) == 0); + CU_ASSERT(odp_packet_is_a_splice(base_pkt) == 0); + CU_ASSERT(odp_packet_is_spliced(hdr_pkt[1]) == 0); + CU_ASSERT(odp_packet_is_spliced(base_pkt) == 0); + + /* We can't splice to ourselves */ + splice_pkt[1] = odp_packet_splice(hdr_pkt[1], hdr_pkt[1], 0); + CU_ASSERT(splice_pkt[1] == ODP_PACKET_INVALID); + CU_ASSERT(odp_packet_is_a_splice(hdr_pkt[1]) == 0); + CU_ASSERT(odp_packet_is_spliced(hdr_pkt[1]) == 0); + + /* Now create a couple of valid splices */ + splice_pkt[1] = odp_packet_splice(hdr_pkt[1], base_pkt, offset[1]); + splice_pkt[2] = odp_packet_splice(hdr_pkt[2], base_pkt, offset[2]); + + CU_ASSERT(splice_pkt[1] != ODP_PACKET_INVALID); + CU_ASSERT(splice_pkt[2] != ODP_PACKET_INVALID); + + CU_ASSERT(odp_packet_is_a_splice(splice_pkt[1]) > 0); + CU_ASSERT(odp_packet_is_a_splice(splice_pkt[2]) > 0); + CU_ASSERT(odp_packet_is_a_splice(base_pkt) == 0); + + CU_ASSERT(odp_packet_is_spliced(base_pkt) == 2); + CU_ASSERT(odp_packet_is_spliced(splice_pkt[1]) == 0); + CU_ASSERT(odp_packet_is_spliced(splice_pkt[2]) == 0); + + /* Verify splice lenghts and contents */ + CU_ASSERT(odp_packet_len(splice_pkt[1]) == + hdr_len[1] + pkt_len - offset[1]); + CU_ASSERT(odp_packet_len(splice_pkt[2]) == + hdr_len[2] + pkt_len - offset[2]); + + _packet_compare_offset(splice_pkt[1], hdr_len[1], + base_pkt, offset[1], + pkt_len - offset[1]); + + _packet_compare_offset(splice_pkt[2], hdr_len[2], + base_pkt, offset[2], + pkt_len - offset[2]); + + /* Delete the splices */ + odp_packet_free(splice_pkt[1]); + odp_packet_free(splice_pkt[2]); + + /* Verify that base_pkt is no longer spliced */ + CU_ASSERT(odp_packet_is_a_splice(base_pkt) == 0); + CU_ASSERT(odp_packet_is_spliced(base_pkt) == 0); + + /* Now create a two more shared splices */ + splice_pkt[3] = odp_packet_splice(hdr_pkt[3], base_pkt, offset[3]); + splice_pkt[4] = odp_packet_splice(hdr_pkt[4], base_pkt, offset[4]); + + CU_ASSERT(splice_pkt[3] != ODP_PACKET_INVALID); + CU_ASSERT(splice_pkt[4] != ODP_PACKET_INVALID); + CU_ASSERT(odp_packet_is_a_splice(splice_pkt[3]) == 1); + CU_ASSERT(odp_packet_is_a_splice(splice_pkt[4]) == 1); + CU_ASSERT(odp_packet_is_spliced(base_pkt) == 2); + + CU_ASSERT(odp_packet_len(splice_pkt[3]) == + odp_packet_len(splice_pkt[4])); + + _packet_compare_offset(splice_pkt[3], 0, + splice_pkt[4], 0, + odp_packet_len(splice_pkt[3])); + + /* Delete the splices */ + odp_packet_free(splice_pkt[3]); + odp_packet_free(splice_pkt[4]); + + /* Verify that base_pkt is no longer spliced */ + CU_ASSERT(odp_packet_is_a_splice(base_pkt) == 0); + CU_ASSERT(odp_packet_is_spliced(base_pkt) == 0); + + /* Create an invalid reference */ + ref_pkt[1] = odp_packet_ref(segmented_base_pkt, segmented_pkt_len); + CU_ASSERT(ref_pkt[1] == ODP_PACKET_INVALID); + CU_ASSERT(odp_packet_is_a_splice(segmented_base_pkt) == 0); + CU_ASSERT(odp_packet_is_spliced(segmented_base_pkt) == 0); + + /* Now create valid references */ + ref_pkt[1] = odp_packet_ref(segmented_base_pkt, offset[1]); + CU_ASSERT(odp_packet_is_a_splice(ref_pkt[1]) == 1); + CU_ASSERT(odp_packet_is_a_splice(segmented_base_pkt) == 0); + CU_ASSERT(odp_packet_is_spliced(segmented_base_pkt) == 1); + + ref_pkt[2] = odp_packet_ref(segmented_base_pkt, offset[2]); + CU_ASSERT(odp_packet_is_a_splice(ref_pkt[2]) == 1); + CU_ASSERT(odp_packet_is_a_splice(segmented_base_pkt) == 0); + CU_ASSERT(odp_packet_is_spliced(ref_pkt[2]) == 0); + CU_ASSERT(odp_packet_is_spliced(segmented_base_pkt) == 2); + + /* Verify reference lengths */ + CU_ASSERT(odp_packet_len(ref_pkt[1]) == segmented_pkt_len - offset[1]); + CU_ASSERT(odp_packet_len(ref_pkt[2]) == segmented_pkt_len - offset[2]); + + /* Free the base pkts -- references should still be valid */ + odp_packet_free(base_pkt); + odp_packet_free(segmented_base_pkt); + + CU_ASSERT(odp_packet_is_a_splice(ref_pkt[1]) == 1); + CU_ASSERT(odp_packet_is_a_splice(ref_pkt[2]) == 1); + + _packet_compare_offset(ref_pkt[1], 0, + segmented_test_packet, offset[1], + segmented_pkt_len - offset[1]); + _packet_compare_offset(ref_pkt[2], 0, + segmented_test_packet, offset[2], + segmented_pkt_len - offset[2]); + + odp_packet_free(ref_pkt[1]); + odp_packet_free(ref_pkt[2]); +} + odp_testinfo_t packet_suite[] = { ODP_TEST_INFO(packet_test_alloc_free), ODP_TEST_INFO(packet_test_alloc_free_multi), @@ -1340,6 +1515,7 @@ odp_testinfo_t packet_suite[] = { ODP_TEST_INFO(packet_test_concatsplit), ODP_TEST_INFO(packet_test_align), ODP_TEST_INFO(packet_test_offset), + ODP_TEST_INFO(packet_test_splice), ODP_TEST_INFO_NULL, }; diff --git a/test/common_plat/validation/api/packet/packet.h b/test/common_plat/validation/api/packet/packet.h index 10a377c..25d2248 100644 --- a/test/common_plat/validation/api/packet/packet.h +++ b/test/common_plat/validation/api/packet/packet.h @@ -32,6 +32,7 @@ void packet_test_copydata(void); void packet_test_concatsplit(void); void packet_test_align(void); void packet_test_offset(void); +void packet_test_splice(void); /* test arrays: */ extern odp_testinfo_t packet_suite[];