From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id C45D81041 for ; Wed, 16 Jan 2019 07:06:47 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 15 Jan 2019 22:06:46 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,485,1539673200"; d="scan'208";a="135006053" Received: from unknown (HELO localhost.localdomain.sh.intel.com) ([10.240.176.135]) by fmsmga002.fm.intel.com with ESMTP; 15 Jan 2019 22:06:45 -0800 From: Xinfeng Zhao To: dts@dpdk.org Cc: Xinfeng Zhao Date: Wed, 16 Jan 2019 14:10:24 +0800 Message-Id: <1547619024-4366-1-git-send-email-xinfengx.zhao@intel.com> X-Mailer: git-send-email 1.9.3 Subject: [dts] [PATCH V1] tests: add the suite of cryptodev unit-test 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, 16 Jan 2019 06:06:48 -0000 add the methods of cryptodev common and the suite of cryptodev unit-test Signed-off-by: Xinfeng Zhao --- tests/TestSuite_cryptodev_common.py | 170 ++++++++++++++++++++++++++++ tests/TestSuite_cryptodev_func_unit-test.py | 137 ++++++++++++++++++++++ 2 files changed, 307 insertions(+) create mode 100644 tests/TestSuite_cryptodev_common.py create mode 100644 tests/TestSuite_cryptodev_func_unit-test.py diff --git a/tests/TestSuite_cryptodev_common.py b/tests/TestSuite_cryptodev_common.py new file mode 100644 index 0000000..4cb8ec0 --- /dev/null +++ b/tests/TestSuite_cryptodev_common.py @@ -0,0 +1,170 @@ +# 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. + + +def build_dpdk_with_cryptodev(test_case): + # Rebuild the dpdk with cryptodev pmds + snow3g_lib_path = "/root/libsso_snow3g/snow3g/" + if "snow3g_lib_path" in test_case.get_suite_cfg(): + snow3g_lib_path = test_case.get_suite_cfg()["snow3g_lib_path"] + + zuc_lib_path = "/root/libsso_zuc.1.0.1.1-8/zuc" + if "zuc_lib_path" in test_case.get_suite_cfg(): + zuc_lib_path = test_case.get_suite_cfg()["zuc_lib_path"] + + kasumi_lib_path = "/root/LibSSO_0_3_1/isg_cid-wireless_libs/ciphers/kasumi/" + if "kasumi_lib_path" in test_case.get_suite_cfg(): + kasumi_lib_path = test_case.get_suite_cfg()["kasumi_lib_path"] + + test_case.dut.send_expect( + "export LIBSSO_SNOW3G_PATH={}".format(snow3g_lib_path), "#") + test_case.dut.send_expect( + "export LIBSSO_ZUC_PATH={}".format(zuc_lib_path), "#") + test_case.dut.send_expect( + "export LIBSSO_KASUMI_PATH={}".format(kasumi_lib_path), "#") + + test_case.dut.send_expect( + "sed -i 's/CONFIG_RTE_LIBRTE_PMD_QAT_SYM=n$/CONFIG_RTE_LIBRTE_PMD_QAT_SYM=y/' config/common_base", "# ") + test_case.dut.send_expect( + "sed -i 's/CONFIG_RTE_LIBRTE_PMD_AESNI_MB=n$/CONFIG_RTE_LIBRTE_PMD_AESNI_MB=y/' config/common_base", "# ") + test_case.dut.send_expect( + "sed -i 's/CONFIG_RTE_LIBRTE_PMD_OPENSSL=n$/CONFIG_RTE_LIBRTE_PMD_OPENSSL=y/' config/common_base", "# ") + test_case.dut.send_expect( + "sed -i 's/CONFIG_RTE_LIBRTE_PMD_AESNI_GCM=n$/CONFIG_RTE_LIBRTE_PMD_AESNI_GCM=y/' config/common_base", "# ") + test_case.dut.send_expect( + "sed -i 's/CONFIG_RTE_LIBRTE_PMD_SNOW3G=n$/CONFIG_RTE_LIBRTE_PMD_SNOW3G=y/' config/common_base", "# ") + test_case.dut.send_expect( + "sed -i 's/CONFIG_RTE_LIBRTE_PMD_KASUMI=n$/CONFIG_RTE_LIBRTE_PMD_KASUMI=y/' config/common_base", "# ") + test_case.dut.send_expect( + "sed -i 's/CONFIG_RTE_LIBRTE_PMD_ZUC=n$/CONFIG_RTE_LIBRTE_PMD_ZUC=y/' config/common_base", "# ") + + test_case.dut.skip_setup = False + test_case.dut.build_install_dpdk(test_case.dut.target) + + +def bind_qat_device(test_case, driver = "igb_uio"): + if not driver: + test_case.logger.error("Please configure the driver of qat device to bind") + if driver == 'vfio-pci': + test_case.dut.send_expect('modprobe vfio-pci', '#', 10) + + if "crypto_dev_id" in test_case.get_suite_cfg(): + crypto_dev_id = test_case.get_suite_cfg()["crypto_dev_id"] + else: + crypto_dev_id = "443" + test_case.logger.info("crypto device id: " + crypto_dev_id) + + # Bind QAT VF devices + out = test_case.dut.send_expect("lspci -d:{}|awk '{{print $1}}'".format(crypto_dev_id), "# ", 10) + crypto_list = out.replace("\r", "\n").replace("\n\n", "\n").split("\n") + test_case._crypto_pci = crypto_list[0] + test_case.dut.send_expect( + 'echo "8086 {}" > /sys/bus/pci/drivers/{}/new_id'.format(crypto_dev_id, driver), "# ", 10) + for line in crypto_list: + cmd = "echo 0000:{} > /sys/bus/pci/devices/0000\:{}/driver/unbind".format( + line, line.replace(":", "\:")) + test_case.dut.send_expect(cmd, "# ", 10) + cmd = "echo 0000:{} > /sys/bus/pci/drivers/{}/bind".format( + line, driver) + test_case.dut.send_expect(cmd, "# ", 10) + + +def clear_dpdk_config(test_case): + test_case.dut.send_expect( + "sed -i 's/CONFIG_RTE_LIBRTE_PMD_QAT_SYM=y$/CONFIG_RTE_LIBRTE_PMD_QAT_SYM=n/' config/common_base", "# ") + test_case.dut.send_expect( + "sed -i 's/CONFIG_RTE_LIBRTE_PMD_AESNI_MB=y$/CONFIG_RTE_LIBRTE_PMD_AESNI_MB=n/' config/common_base", "# ") + test_case.dut.send_expect( + "sed -i 's/CONFIG_RTE_LIBRTE_PMD_OPENSSL=y$/CONFIG_RTE_LIBRTE_PMD_OPENSSL=n/' config/common_base", "# ") + test_case.dut.send_expect( + "sed -i 's/CONFIG_RTE_LIBRTE_PMD_AESNI_GCM=y$/CONFIG_RTE_LIBRTE_PMD_AESNI_GCM=n/' config/common_base", "# ") + test_case.dut.send_expect( + "sed -i 's/CONFIG_RTE_LIBRTE_PMD_SNOW3G=y$/CONFIG_RTE_LIBRTE_PMD_SNOW3G=n/' config/common_base", "# ") + test_case.dut.send_expect( + "sed -i 's/CONFIG_RTE_LIBRTE_PMD_KASUMI=y$/CONFIG_RTE_LIBRTE_PMD_KASUMI=n/' config/common_base", "# ") + test_case.dut.send_expect( + "sed -i 's/CONFIG_RTE_LIBRTE_PMD_ZUC=y$/CONFIG_RTE_LIBRTE_PMD_ZUC=n/' config/common_base", "# ") + + +default_eal_opts = { + "c": None, + "l": None, + "w": None, + "vdev": None, + "socket-mem": "512,512", + "n": "4" +} + + +def get_eal_opt_str(test_case, override_eal_opts={}): + return get_opt_str(test_case, default_eal_opts, override_eal_opts) + + +def get_opt_str(test_case, default_opts, override_opts={}): + opts = default_opts.copy() + + # Update options with test suite/case config file + for key in opts.keys(): + if key in test_case.get_case_cfg(): + opts[key] = test_case.get_case_cfg()[key] + + # Update options with func input + opts.update(override_opts) + + # Generate option string + opt_str = "" + for key,value in opts.items(): + if value is None: + continue + dash = "-" if len(key) == 1 else "--" + opt_str = opt_str + "{0}{1} {2} ".format(dash, key, value) + + return opt_str + + +def get_dpdk_app_cmd_str(app_path, eal_opt_str, app_opt_str=None): + if not app_opt_str: + return "{0} {1}".format(app_path, eal_opt_str) + return "{0} {1} -- {2}".format(app_path, eal_opt_str, app_opt_str) + + +def is_test_skip(test_case): + if "test_skip" in test_case.get_case_cfg() \ + and test_case.get_case_cfg()["test_skip"] == "Y": + test_case.logger.info("Test Skip is YES") + return True + + +def is_build_skip(test_case): + if "build_skip" in test_case.get_suite_cfg() \ + and test_case.get_suite_cfg()["build_skip"] == "Y": + test_case.logger.info("Build Skip is YES") + return True diff --git a/tests/TestSuite_cryptodev_func_unit-test.py b/tests/TestSuite_cryptodev_func_unit-test.py new file mode 100644 index 0000000..20aa81a --- /dev/null +++ b/tests/TestSuite_cryptodev_func_unit-test.py @@ -0,0 +1,137 @@ +# 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 json + +from test_case import TestCase + +import TestSuite_cryptodev_common as cc + + +class UnitTestsCryptodev(TestCase): + + def set_up_all(self): + self._app_path = "./{target}/app/test".format(target=self.dut.target) + if not cc.is_build_skip(self): + cc.build_dpdk_with_cryptodev(self) + cc.bind_qat_device(self) + + def set_up(self): + pass + + def tear_down(self): + self.dut.kill_all() + + def tear_down_all(self): + cc.clear_dpdk_config(self) + + def test_cryptodev_qat_autotest(self): + eal_opt_str = cc.get_eal_opt_str(self) + self.__run_unit_test("cryptodev_qat_autotest", eal_opt_str) + + def _test_cryptodev_qat_perftest(self): + eal_opt_str = cc.get_eal_opt_str(self) + self.__run_unit_test("cryptodev_qat_perftest", eal_opt_str) + + def _test_cryptodev_qat_continual_perftest(self): + eal_opt_str = cc.get_eal_opt_str(self) + self.__run_unit_test("cryptodev_qat_continual_perftest", eal_opt_str) + + def _test_cryptodev_qat_snow3g_perftest(self): + eal_opt_str = cc.get_eal_opt_str(self) + self.__run_unit_test("cryptodev_qat_snow3g_perftest", eal_opt_str) + + def test_cryptodev_aesni_mb_autotest(self): + eal_opt_str = cc.get_eal_opt_str(self) + self.__run_unit_test("cryptodev_aesni_mb_autotest", eal_opt_str) + + def _test_cryptodev_aesni_mb_perftest(self): + eal_opt_str = cc.get_eal_opt_str(self) + self.__run_unit_test("cryptodev_aesni_mb_perftest", eal_opt_str) + + def test_cryptodev_aesni_gcm_autotest(self): + eal_opt_str = cc.get_eal_opt_str(self) + self.__run_unit_test("cryptodev_aesni_gcm_autotest", eal_opt_str) + + def _test_cryptodev_aesni_gcm_perftest(self): + eal_opt_str = cc.get_eal_opt_str(self) + self.__run_unit_test("cryptodev_aesni_gcm_perftest", eal_opt_str) + + def test_cryptodev_sw_snow3g_autotest(self): + eal_opt_str = cc.get_eal_opt_str(self) + self.__run_unit_test("cryptodev_sw_snow3g_autotest", eal_opt_str) + + def _test_cryptodev_sw_snow3g_perftest(self): + eal_opt_str = cc.get_eal_opt_str(self) + self.__run_unit_test("cryptodev_sw_snow3g_perftest", eal_opt_str) + + def test_cryptodev_sw_kasumi_autotest(self): + eal_opt_str = cc.get_eal_opt_str(self) + self.__run_unit_test("cryptodev_sw_kasumi_autotest", eal_opt_str) + + def test_cryptodev_sw_zuc_autotest(self): + eal_opt_str = cc.get_eal_opt_str(self) + self.__run_unit_test("cryptodev_sw_zuc_autotest", eal_opt_str) + + def test_cryptodev_null_autotest(self): + eal_opt_str = cc.get_eal_opt_str(self) + self.__run_unit_test("cryptodev_null_autotest", eal_opt_str) + + def test_cryptodev_openssl_autotest(self): + eal_opt_str = cc.get_eal_opt_str(self) + self.__run_unit_test("cryptodev_openssl_autotest", eal_opt_str) + + def _test_cryptodev_openssl_perftest(self): + eal_opt_str = cc.get_eal_opt_str(self) + self.__run_unit_test("cryptodev_openssl_perftest", eal_opt_str) + + def test_cryptodev_scheduler_autotest(self): + eal_opt_str = cc.get_eal_opt_str(self) + self.__run_unit_test("cryptodev_scheduler_autotest", eal_opt_str) + + def __run_unit_test(self, testsuite, eal_opt_str, timeout=600): + self.logger.info("STEP_TEST: " + testsuite) + self.dut.send_expect("dmesg -C", "# ", 30) + cmd_str = cc.get_dpdk_app_cmd_str(self._app_path, eal_opt_str) + self.dut.send_expect(cmd_str, "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") -- 2.7.4