From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by dpdk.org (Postfix) with ESMTP id 26C85CF80 for ; Thu, 9 Mar 2017 02:39:32 +0100 (CET) Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga105.jf.intel.com with ESMTP; 08 Mar 2017 17:39:32 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,266,1486454400"; d="scan'208";a="73312602" Received: from stv-crb-56.sh.intel.com (HELO [10.239.128.116]) ([10.239.128.116]) by orsmga005.jf.intel.com with ESMTP; 08 Mar 2017 17:39:31 -0800 Message-ID: <58C0B06D.4030000@intel.com> Date: Thu, 09 Mar 2017 09:31:25 +0800 From: "Liu, Yong" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: "Chen, Zhaoyan" , dts@dpdk.org References: <20170309010102.30732-1-zhaoyan.chen@intel.com> In-Reply-To: <20170309010102.30732-1-zhaoyan.chen@intel.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [dts] [PATCH v4] Add Cryptodev Unit Test Cases X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Mar 2017 01:39:33 -0000 Thanks, zhaoyan. Applied into master branch. On 03/09/2017 09:01 AM, Chen, Zhaoyan wrote: > v4: > > - Move the killall process to tear_down, managed by dts framework > - Change the "print" to logger method > > v3: > > - Fix PEP8 issues > > v2: > > - Update copyright dates > - Update coryright icon > --- > test_plans/unit_tests_cryptodev_test_plan.rst | 85 +++++++++++++ > tests/TestSuite_unit_tests_cryptodev.py | 169 ++++++++++++++++++++++++++ > 2 files changed, 254 insertions(+) > create mode 100644 test_plans/unit_tests_cryptodev_test_plan.rst > create mode 100644 tests/TestSuite_unit_tests_cryptodev.py > > diff --git a/test_plans/unit_tests_cryptodev_test_plan.rst b/test_plans/unit_tests_cryptodev_test_plan.rst > new file mode 100644 > index 0000000..7a60ff3 > --- /dev/null > +++ b/test_plans/unit_tests_cryptodev_test_plan.rst > @@ -0,0 +1,85 @@ > +.. Copyright (c) 2016-2017 Intel Corporation > + All rights reserved. > + > + Redistribution and use in source and binary forms, with or without > + modification, are permitted provided that the following conditions > + are met: > + > + - Redistributions of source code must retain the above copyright > + notice, this list of conditions and the following disclaimer. > + > + - Redistributions in binary form must reproduce the above copyright > + notice, this list of conditions and the following disclaimer in > + the documentation and/or other materials provided with the > + distribution. > + > + - Neither the name of Intel Corporation nor the names of its > + contributors may be used to endorse or promote products derived > + from this software without specific prior written permission. > + > + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS > + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE > + COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, > + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES > + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR > + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) > + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, > + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) > + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED > + OF THE POSSIBILITY OF SUCH DAMAGE. > + > +============================================== > +Testing of Cryptodev Unit tests > +============================================== > + > + > +Description > +=========== > + > +This document provides the plan for testing Cryptodev API via Cryptodev unit tests. > +Unit tests include supported Hardware and Software PMD(polling mode device) and supported algorithms. > +Cryptodev API provides ability to do encryption/decryption by integrating QAT(Intel@ QuickAssist > +Technology) into DPDK. The QAT provides poll mode crypto driver support for > +Intel@ QuickAssist Adapter 8950 hardware accelerator. > + > +The testing of Crytpodev API should be tested under either Intel QuickAssist Technology DH895xxC hardware > +accelerator or AES-NI library. > + > +This test suite will run all cryptodev related unit test cases. Alternatively, you could execute > +the unit tests manually by app/test DPDK application. > + > +Unit Test List > +============== > + > +- cryptodev_qat_autotest > +- cryptodev_qat_perftest > +- cryptodev_aesni_mb_perftest > +- cryptodev_sw_snow3g_perftest > +- cryptodev_qat_snow3g_perftest > +- cryptodev_aesni_gcm_perftest > +- cryptodev_openssl_perftest > +- cryptodev_qat_continual_perftest > +- cryptodev_aesni_mb_autotest > +- cryptodev_openssl_autotest > +- cryptodev_aesni_gcm_autotest > +- cryptodev_null_autotest > +- cryptodev_sw_snow3g_autotest > +- cryptodev_sw_kasumi_autotest > +- cryptodev_sw_zuc_autotest > + > + > +Test Case Setup > +=============== > + > +1. Build DPDK and app/test app > +2. Bind cryptodev devices to igb_uio driver > +3. Manually verify the app/test by this command, as example, in your build folder > +* ./app/test -c 1 -n 1 > +* RTE>> cryptodev_qat_autotest > + > +All Unit Test Cases are listed above. > + > +Expected all tests could pass in testing. > + > diff --git a/tests/TestSuite_unit_tests_cryptodev.py b/tests/TestSuite_unit_tests_cryptodev.py > new file mode 100644 > index 0000000..df83fd9 > --- /dev/null > +++ b/tests/TestSuite_unit_tests_cryptodev.py > @@ -0,0 +1,169 @@ > +# BSD LICENSE > +# > +# Copyright(c) 2016-2017 Intel Corporation. All rights reserved. > +# All rights reserved. > +# > +# Redistribution and use in source and binary forms, with or without > +# modification, are permitted provided that the following conditions > +# are met: > +# > +# * Redistributions of source code must retain the above copyright > +# notice, this list of conditions and the following disclaimer. > +# * Redistributions in binary form must reproduce the above copyright > +# notice, this list of conditions and the following disclaimer in > +# the documentation and/or other materials provided with the > +# distribution. > +# * Neither the name of Intel Corporation nor the names of its > +# contributors may be used to endorse or promote products derived > +# from this software without specific prior written permission. > +# > +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR > +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT > +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY > +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + > +import utils > +from test_case import TestCase > + > + > +class UnitTestsCryptodev(TestCase): > + > + def set_up_all(self): > + > + self.core_config = "1S/2C/1T" > + self.number_of_ports = 1 > + self.dut_ports = self.dut.get_ports(self.nic) > + self.verify(len(self.dut_ports) >= self.number_of_ports, > + "Not enough ports for " + self.nic) > + self.ports_socket = self.dut.get_numa_id(self.dut_ports[0]) > + > + self.logger.info("core config = " + self.core_config) > + self.logger.info("number of ports = " + str(self.number_of_ports)) > + self.logger.info("dut ports = " + str(self.dut_ports)) > + self.logger.info("ports_socket = " + str(self.ports_socket)) > + > + self.core_mask = utils.create_mask(self.dut.get_core_list( > + self.core_config, > + socket=self.ports_socket)) > + self.port_mask = utils.create_mask([self.dut_ports[0]]) > + > + self.tx_port = self.tester.get_local_port(self.dut_ports[0]) > + self.rx_port = self.tester.get_local_port(self.dut_ports[0]) > + > + self.tx_interface = self.tester.get_interface(self.tx_port) > + self.rx_interface = self.tester.get_interface(self.rx_port) > + > + self.logger.info("core mask = " + self.core_mask) > + self.logger.info("port mask = " + self.port_mask) > + self.logger.info("tx interface = " + self.tx_interface) > + self.logger.info("rx interface = " + self.rx_interface) > + > + # Rebuild the dpdk with cryptodev pmds CONFIG_RTE_LIBRTE_PMD_ZUC=n > + self.dut.send_expect("export AESNI_MULTI_BUFFER_LIB_PATH=/root/ipsec_043/code/", "#") > + self.dut.send_expect("export LIBSSO_SNOW3G_PATH=/root/libsso_snow3g/snow3g/", "#") > + self.dut.send_expect("export LIBSSO_ZUC_PATH=/root/libsso_zuc.1.0.1.1-8/zuc", "#") > + self.dut.send_expect("export LIBSSO_KASUMI_PATH=/root/LibSSO_0_3_1/isg_cid-wireless_libs/ciphers/kasumi/", "#") > + self.dut.send_expect("sed -i 's/CONFIG_RTE_LIBRTE_PMD_QAT=n$/CONFIG_RTE_LIBRTE_PMD_QAT=y/' config/common_base", "# ") > + self.dut.send_expect("sed -i 's/CONFIG_RTE_LIBRTE_PMD_AESNI_GCM=n$/CONFIG_RTE_LIBRTE_PMD_AESNI_GCM=y/' config/common_base", "# ") > + self.dut.send_expect("sed -i 's/CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO=n$/CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO=y/' config/common_base", "# ") > + self.dut.send_expect("sed -i 's/CONFIG_RTE_LIBRTE_PMD_SNOW3G=n$/CONFIG_RTE_LIBRTE_PMD_SNOW3G=y/' config/common_base", "# ") > + self.dut.send_expect("sed -i 's/CONFIG_RTE_LIBRTE_PMD_KASUMI=n$/CONFIG_RTE_LIBRTE_PMD_KASUMI=y/' config/common_base", "# ") > + self.dut.send_expect("sed -i 's/CONFIG_RTE_LIBRTE_PMD_OPENSSL=n$/CONFIG_RTE_LIBRTE_PMD_OPENSSL=y/' config/common_base", "# ") > + self.dut.send_expect("sed -i 's/CONFIG_RTE_LIBRTE_PMD_AESNI_MB=n$/CONFIG_RTE_LIBRTE_PMD_AESNI_MB=y/' config/common_base", "# ") > + self.dut.send_expect("sed -i 's/CONFIG_RTE_LIBRTE_PMD_ZUC=n$/CONFIG_RTE_LIBRTE_PMD_ZUC=y/' config/common_base", "# ") > + self.dut.skip_setup = False > + self.dut.build_install_dpdk(self.dut.target) > + > + # Bind QAT VF devices > + out = self.dut.send_expect("lspci -d:443|awk '{print $1}'", "# ", 10) > + self.dut.send_expect('echo "8086 0443" > /sys/bus/pci/drivers/igb_uio/new_id', "# ", 10) > + for line in out.replace("\r", "\n").replace("\n\n", "\n").split("\n"): > + cmd = "echo 0000:{} > /sys/bus/pci/devices/0000\:{}/driver/unbind".format(line, line.replace(":", "\:")) > + self.dut.send_expect(cmd, "# ", 10) > + cmd = "echo 0000:{} > /sys/bus/pci/drivers/igb_uio/bind".format(line) > + self.dut.send_expect(cmd, "# ", 10) > + > + def set_up(self): > + pass > + > + def tear_down(self): > + self.dut.kill_all() > + > + def tear_down_all(self): > + self.dut.send_expect("sed -i 's/CONFIG_RTE_LIBRTE_PMD_QAT=y$/CONFIG_RTE_LIBRTE_PMD_QAT=n/' config/common_base", "# ") > + self.dut.send_expect("sed -i 's/CONFIG_RTE_LIBRTE_PMD_AESNI_GCM=y$/CONFIG_RTE_LIBRTE_PMD_AESNI_GCM=n/' config/common_base", "# ") > + self.dut.send_expect("sed -i 's/CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO=y$/CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO=n/' config/common_base", "# ") > + self.dut.send_expect("sed -i 's/CONFIG_RTE_LIBRTE_PMD_SNOW3G=y$/CONFIG_RTE_LIBRTE_PMD_SNOW3G=n/' config/common_base", "# ") > + self.dut.send_expect("sed -i 's/CONFIG_RTE_LIBRTE_PMD_KASUMI=y$/CONFIG_RTE_LIBRTE_PMD_KASUMI=n/' config/common_base", "# ") > + self.dut.send_expect("sed -i 's/CONFIG_RTE_LIBRTE_PMD_OPENSSL=y$/CONFIG_RTE_LIBRTE_PMD_OPENSSL=n/' config/common_base", "# ") > + self.dut.send_expect("sed -i 's/CONFIG_RTE_LIBRTE_PMD_AESNI_MB=y$/CONFIG_RTE_LIBRTE_PMD_AESNI_MB=n/' config/common_base", "# ") > + self.dut.send_expect("sed -i 's/CONFIG_RTE_LIBRTE_PMD_ZUC=y$/CONFIG_RTE_LIBRTE_PMD_ZUC=n/' config/common_base", "# ") > + > + def test_cryptodev_qat_autotest(self): > + self.__run_unit_test("cryptodev_qat_autotest") > + > + def test_cryptodev_qat_perftest(self): > + self.__run_unit_test("cryptodev_qat_perftest") > + > + def test_cryptodev_aesni_mb_perftest(self): > + self.__run_unit_test("cryptodev_aesni_mb_perftest") > + > + def test_cryptodev_sw_snow3g_perftest(self): > + self.__run_unit_test("cryptodev_sw_snow3g_perftest") > + > + def test_cryptodev_qat_snow3g_perftest(self): > + self.__run_unit_test("cryptodev_qat_snow3g_perftest") > + > + def test_cryptodev_aesni_gcm_perftest(self): > + self.__run_unit_test("cryptodev_aesni_gcm_perftest") > + > + def test_cryptodev_openssl_perftest(self): > + self.__run_unit_test("cryptodev_openssl_perftest") > + > + def test_cryptodev_qat_continual_perftest(self): > + self.__run_unit_test("cryptodev_qat_continual_perftest") > + > + def test_cryptodev_aesni_mb_autotest(self): > + self.__run_unit_test("cryptodev_aesni_mb_autotest") > + > + def test_cryptodev_openssl_autotest(self): > + self.__run_unit_test("cryptodev_openssl_autotest") > + > + def test_cryptodev_aesni_gcm_autotest(self): > + self.__run_unit_test("cryptodev_aesni_gcm_autotest") > + > + def test_cryptodev_null_autotest(self): > + self.__run_unit_test("cryptodev_null_autotest") > + > + def test_cryptodev_sw_snow3g_autotest(self): > + self.__run_unit_test("cryptodev_sw_snow3g_autotest") > + > + def test_cryptodev_sw_kasumi_autotest(self): > + self.__run_unit_test("cryptodev_sw_kasumi_autotest") > + > + def test_cryptodev_sw_zuc_autotest(self): > + self.__run_unit_test("cryptodev_sw_zuc_autotest") > + > + def __run_unit_test(self, testsuite, timeout=600): > + self.logger.info("STEP_TEST: " + testsuite) > + self.dut.send_expect("dmesg -C", "# ", 30) > + self.dut.send_expect("./{target}/app/test -n 1 -c 0xf".format(target=self.dut.target), "RTE>>", 30) > + out = "" > + try: > + out = self.dut.send_expect(testsuite, "RTE>>", timeout) > + self.dut.send_expect("quit", "# ", 30) > + except Exception, ex: > + self.logger.error("Cryptodev Unit Tests Exception") > + dmesg = self.dut.alt_session.send_expect("dmesg", "# ", 30) > + self.logger.error("dmesg info:") > + self.logger.error(dmesg) > + > + self.logger.info(out) > + self.verify("Test OK" in out, "Test Failed")