From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id D862B952 for ; Wed, 8 Mar 2017 03:25:42 +0100 (CET) Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 07 Mar 2017 18:25:41 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,261,1486454400"; d="scan'208";a="73481397" Received: from npg-joey-devtop.sh.intel.com ([10.239.66.47]) by fmsmga005.fm.intel.com with ESMTP; 07 Mar 2017 18:25:40 -0800 From: "Chen, Zhaoyan" To: dts@dpdk.org Cc: "Chen, Zhaoyan" Date: Wed, 8 Mar 2017 10:25:16 +0800 Message-Id: <20170308022516.13999-1-zhaoyan.chen@intel.com> X-Mailer: git-send-email 2.9.3 Subject: [dts] [PATCH v2] 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: Wed, 08 Mar 2017 02:25:43 -0000 v2: - Update copyright dates - Update copyright icon --- test_plans/unit_tests_cryptodev_test_plan.rst | 85 +++++++++++++ tests/TestSuite_unit_tests_cryptodev.py | 174 ++++++++++++++++++++++++++ 2 files changed, 259 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..1732b5b --- /dev/null +++ b/tests/TestSuite_unit_tests_cryptodev.py @@ -0,0 +1,174 @@ +# 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) + + #out = self.dut.build_dpdk_apps("./app/test/") + #self.verify('make: Leaving directory' in out, "Compilation failed") + + + # 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): + pass + + 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): + print "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: + print ex + print "run cryptodev_unit_tests process coredump" + self.dut.alt_session.send_expect("killall test", "# ", 30) + dmesg = self.dut.alt_session.send_expect("dmesg", "# ", 30) + print dmesg + print out + self.verify("Test OK" in out, "Test Failed") + -- 1.9.3