From patchwork Fri May 20 10:27:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Weiyuan Li X-Patchwork-Id: 111537 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 05A7DA0505; Fri, 20 May 2022 12:27:58 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 948AB42BA7; Fri, 20 May 2022 12:27:57 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mails.dpdk.org (Postfix) with ESMTP id CA727427ED for ; Fri, 20 May 2022 12:27:55 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1653042476; x=1684578476; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=+Gy1BamwckOCXnRCKpXoXqn4TwZBYWPqZTk3+pdsgZo=; b=axJ31UJvSdq6xYLeu4J4kdaSoDnjRVQLGC5lfZevIq/jvef8WUu6fCkF 3a7o8Oz8rFOSD9aXtBSAXIBpUyeHAzoMpqEQncxiioMrvh/VASgbEjIUB cybieeYvO8zkeszWsMBGlyTxOwqKey75n+4L9RLLcjQ/nY1a1usZhEjvj +/5BzyqUUfOll0VdVTKzBKveULXdndU3zsrEZsgG8d3U1atEiXXuSE7oc T0GTU8dCoozxv0MYG2IoAJ9DRMgyfWnhXWUmHu4InR3/za4HpD9I+YFPa hisAnR6N3FiXyM4Z26nIFAOecBV/DS+KAQN2nnsFc2KTi45xJczgs66+9 w==; X-IronPort-AV: E=McAfee;i="6400,9594,10352"; a="254621230" X-IronPort-AV: E=Sophos;i="5.91,238,1647327600"; d="scan'208";a="254621230" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 May 2022 03:27:54 -0700 X-IronPort-AV: E=Sophos;i="5.91,238,1647327600"; d="scan'208";a="899259395" Received: from shwdenpg560.ccr.corp.intel.com ([10.253.109.11]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 May 2022 03:27:53 -0700 From: "Li, WeiyuanX" To: dts@dpdk.org, lijuan.tu@intel.com Cc: Weiyuan Li Subject: [dts][PATCH V1 2/3] tests/meson_tests: add new testsuite for meson tests Date: Fri, 20 May 2022 18:27:31 +0800 Message-Id: <20220520102732.652-2-weiyuanx.li@intel.com> X-Mailer: git-send-email 2.34.1.windows.1 In-Reply-To: <20220520102732.652-1-weiyuanx.li@intel.com> References: <20220520102732.652-1-weiyuanx.li@intel.com> MIME-Version: 1.0 X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org From: Weiyuan Li Add new testsuite for meson tests. Signed-off-by: Weiyuan Li --- tests/TestSuite_meson_tests.py | 212 +++++++++++++++++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 tests/TestSuite_meson_tests.py diff --git a/tests/TestSuite_meson_tests.py b/tests/TestSuite_meson_tests.py new file mode 100644 index 00000000..c50716f8 --- /dev/null +++ b/tests/TestSuite_meson_tests.py @@ -0,0 +1,212 @@ +# BSD LICENSE +# +# Copyright(c) 2022 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. + +""" +DPDK Test Suite. + +fast-tests autotest +""" +import os +import re +from mimetypes import init +from sre_constants import SUCCESS +import framework.utils as utils +from framework.test_case import TestCase + +class TestMesonTests(TestCase): + + def set_up_all(self): + """ + Run at the start of each test suite. + """ + # icc compilation cost long long time. + self.cores = self.dut.get_core_list("all") + self.dut_ip = self.dut.get_ip_address() + self.timeout = 600 + #-t 2 + self.ratio = 6 + self.dut_pathlog = 'fast-test.log' + self.execute_wait_time = self.ratio * self.timeout * 10 + #skip scope + self.SKIP_SCOPE = "" + #Test log storage directory + self.base_output = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))),'output') + + def set_up(self): + """ + Run before each test case. + """ + self.meson_auto_test = {} + + def delete_exists_files(self): + out = self.tester.send_command(f"ls -l {self.base_output}/{self.dut_pathlog}", "# ") + if self.dut_pathlog in out: + self.tester.send_command(f"rm -rf {self.base_output}/{self.dut_pathlog}") + + def find_text(self, res): + pattern = r'(DPDK:fast-tests|DPDK:perf-tests|DPDK:debug-tests|DPDK:extra-tests|DPDK:driver-tests) / (\w+)\s+(\w+)\s+' + regex = re.compile(pattern) + mo = regex.search(res) + + if mo is None: + return 0 + case_name = mo.group(2) + test_result = mo.group(3) + + self.meson_auto_test[case_name] = test_result + + def check_sub_case(self): + success = [] + skip = [] + timeout = [] + failed = [] + + for k,v in self.meson_auto_test.items(): + if v == 'FAIL': + failed.append(k) + elif v == 'OK': + success.append(k) + elif v == 'SKIP': + skip.append(k) + elif v == 'TIMEOUT': + timeout.append(k) + else: + failed.append(k) + + for item in skip: + self.logger.debug(utils.RED(f"Skip sub case:{item}")) + + for item in timeout: + self.logger.debug(utils.RED(f"TimeOut sub case:{item}")) + + if (len(failed) + len(timeout)) > 0 : + sub_fail = "" + sub_timeout = "" + if len(failed) > 0: + sub_fail = "[" + ",".join(failed) + "] sub case failed. " + if len(timeout) > 0: + sub_timeout = "[" + ",".join(timeout) + "] sub case time out. " + self.verify(False, f'Test failed. {sub_fail}{sub_timeout}') + + def check_scp_file_valid_between_dut(self): + out = self.tester.send_command(f"scp root@{self.dut_ip}:/root/{self.dut_pathlog} {self.base_output}", timeout=15) + if "Are you sure you want to continue connecting" in out: + out = self.tester.send_command("yes", timeout=20) + for item in range(30): + if "password" in out: + self.tester.send_command(self.dut.get_password(), timeout=20) + break + + out = self.tester.send_command(f"ls -l {self.base_output}/{self.dut_pathlog}", "# ") + self.verify('No such file or directory' not in out, 'No test result log was obtained!') + + def insmod_kni(self): + out = self.dut.send_expect("lsmod | grep rte_kni", "# ") + + if "rte_kni" in out: + self.dut.send_expect("rmmod rte_kni.ko", "# ") + + out = self.dut.send_expect( + "insmod ./%s/kmod/rte_kni.ko lo_mode=lo_mode_fifo" % (self.target), "# " + ) + self.verify("Error" not in out, "Error loading KNI module: " + out) + + def check_meson_test_result(self, res=None): + if not os.path.exists(f'{self.base_output}/{self.dut_pathlog}'): + self.verify(False, 'meson tests log file is not exists!!') + if res is None: + with open(f"{self.base_output}/{self.dut_pathlog}", "r") as file_obj: + for files in file_obj: + self.find_text(files) + else: + self.find_text(res) + self.check_sub_case() + + def test_fasts(self): + #init file name + self.dut_pathlog = 'fast-test.log' + self.delete_exists_files() + self.insmod_kni() + cmds = f'meson test -C x86_64-native-linuxapp-gcc/ --suite DPDK:fast-tests -t {self.ratio} --test-args="-c 0xff" |tee /root/{self.dut_pathlog}' + out = self.dut.send_expect(cmds, "# ", self.execute_wait_time) + self.logger.info(out) + self.check_scp_file_valid_between_dut() + self.check_meson_test_result() + + def test_driver(self): + #init file name + self.dut_pathlog = 'driver-test.log' + self.delete_exists_files() + cmds = f'meson test -C x86_64-native-linuxapp-gcc/ --suite DPDK:driver-tests -t {self.ratio} --test-args="-c 0xff" |tee /root/{self.dut_pathlog}' + out = self.dut.send_expect(cmds, "# ", self.execute_wait_time) + self.logger.info(out) + self.check_scp_file_valid_between_dut() + self.check_meson_test_result() + + def test_debug(self): + self.logger.warning("Debug-tests all case failed commands are not registered, there is a bug https://bugs.dpdk.org/show_bug.cgi?id=1002") + + def test_extra(self): + self.dut_pathlog = 'extra-test.log' + #delete exists files + self.delete_exists_files() + cmds = f'meson test -C x86_64-native-linuxapp-gcc/ --suite DPDK:extra-tests -t {self.ratio} --test-args="-c 0xff" |tee /root/{self.dut_pathlog}' + out = self.dut.send_expect(cmds, "# ", self.execute_wait_time) + self.logger.info(out) + self.check_scp_file_valid_between_dut() + self.check_meson_test_result() + self.logger.warning("Extra-tests are know issues which are recorded in DPDK commit and meson.build (detail see test plan)") + + def test_perf(self): + #init file name + self.dut_pathlog = 'perf-test.log' + #delete exists files + self.delete_exists_files() + cmds = f'meson test -C x86_64-native-linuxapp-gcc/ --suite DPDK:perf-tests -t {self.ratio} --test-args="-c 0xff" |tee /root/{self.dut_pathlog}' + out = self.dut.send_expect(cmds, "# ", self.execute_wait_time) + self.logger.info(out) + self.check_scp_file_valid_between_dut() + self.check_meson_test_result() + + def tear_down(self): + """ + Run after each test case. + """ + out = self.dut.send_expect("lsmod | grep rte_kni", "# ") + + if "rte_kni" in out: + self.dut.send_expect("rmmod rte_kni.ko", "# ") + + def tear_down_all(self): + """ + Run after each test suite. + """ + pass