From: Owen Hilyard <ohilyard@iol.unh.edu>
To: DongJunX <junx.dong@intel.com>
Cc: qinx.sun@intel.com, Wei Ling <weix.ling@intel.com>,
Yan Xia <yanx.xia@intel.com>, Yu Jiang <yux.jiang@intel.com>,
Zhimin Huang <zhiminx.huang@intel.com>,
"Xu, HailinX" <hailinx.xu@intel.com>,
songx.jiale@intel.com, dts@dpdk.org, "Tu,
Lijuan" <lijuan.tu@intel.com>,
David Marchand <david.marchand@redhat.com>
Subject: Re: [dts] [PATCH V1 4/4] tests/*: removed makefile from test suite
Date: Wed, 12 Jan 2022 10:36:45 -0500 [thread overview]
Message-ID: <CAHx6DYDNnHcgqKiMAs_Nk2-vfUjHMd5qePidr+H-t7L7g5bo3A@mail.gmail.com> (raw)
In-Reply-To: <CAJFAV8w3kq61AL=fTR1h0XQ2bbsZn-xrTqxOwLV8_oBOQBQuUQ@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 37711 bytes --]
>
> self.dut.set_build_options({SW[7:]: 'y'})
I think that all of the instances of this line or similar lines that are
using string indexing on a constant string should be replaced by what that
substring (SW[7:]) evaluates to. This isn't very readable.
On Thu, Nov 18, 2021 at 3:23 AM David Marchand <david.marchand@redhat.com>
wrote:
> Hello,
>
> On Wed, Nov 17, 2021 at 9:55 AM DongJunX <junx.dong@intel.com> wrote:
>
>
> A commitlog is needed.
>
> First, a general comment on this patch: please don't mix in unrelated
> whitespace changes.
>
> >
> > Signed-off-by: DongJunX <junx.dong@intel.com>
> > ---
> > tests/TestSuite_compressdev_isal_pmd.py | 9 ----
> > tests/TestSuite_compressdev_qat_pmd.py | 7 ---
> > tests/TestSuite_compressdev_zlib_pmd.py | 9 ----
> > tests/TestSuite_crypto_perf_cryptodev_perf.py | 10 ++---
> > tests/TestSuite_external_mempool_handler.py | 1 -
> > tests/TestSuite_fips_cryptodev.py | 42 +++++++++---------
> > tests/TestSuite_ieee1588.py | 4 --
> > tests/TestSuite_ipsec_gw_cryptodev_func.py | 2 +-
> > tests/TestSuite_kni.py | 6 ---
> > tests/TestSuite_l2fwd_cryptodev_func.py | 2 +-
> > tests/TestSuite_packet_capture.py | 9 ----
> > tests/TestSuite_pmd.py | 1 -
> > tests/TestSuite_power_branch_ratio.py | 25 +++--------
> > tests/TestSuite_power_pbf.py | 13 +-----
> > tests/TestSuite_power_telemetry.py | 16 +++----
> > tests/TestSuite_unit_tests_cryptodev_func.py | 2 +-
> > tests/TestSuite_unit_tests_kni.py | 2 -
> > tests/TestSuite_vhost_1024_ethports.py | 12 +----
> > .../TestSuite_virtio_ipsec_cryptodev_func.py | 6 ---
> > tests/TestSuite_virtio_perf_cryptodev_func.py | 5 ---
> > tests/TestSuite_virtio_unit_cryptodev_func.py | 2 -
> > tests/TestSuite_vmdq_dcb.py | 2 -
> > tests/cryptodev_common.py | 44 +------------------
> > 23 files changed, 42 insertions(+), 189 deletions(-)
> >
> > diff --git a/tests/TestSuite_compressdev_isal_pmd.py
> b/tests/TestSuite_compressdev_isal_pmd.py
> > index 559c68de..93e41ca9 100644
> > --- a/tests/TestSuite_compressdev_isal_pmd.py
> > +++ b/tests/TestSuite_compressdev_isal_pmd.py
> > @@ -53,10 +53,6 @@ class TestCompressdevIsalPmd(TestCase):
> > cc.default_opts = copy.deepcopy(self.opts)
> >
> > def prepare_dpdk(self):
> > - self.dut.send_expect(
> > - "sed -i
> 's/CONFIG_RTE_COMPRESSDEV_TEST=n$/CONFIG_RTE_COMPRESSDEV_TEST=y/'
> config/common_base", "# ")
> > - self.dut.send_expect(
> > - "sed -i
> 's/CONFIG_RTE_LIBRTE_PMD_ISAL=n$/CONFIG_RTE_LIBRTE_PMD_ISAL=y/'
> config/common_base", "# ")
> > self.dut.build_install_dpdk(self.dut.target)
>
> This comment and the next one apply to all other hunks in this patch.
>
> Is it necessary to call dut.build_install_dpdk here?
> Since this test uses the default configuration, is dpdk built in
> DPDKdut set_target() method not enough?
>
>
> >
> > def test_isal_pmd_unit_test(self):
> > @@ -87,11 +83,6 @@ class TestCompressdevIsalPmd(TestCase):
> >
> > def tear_down_all(self):
> > self.dut.kill_all()
> > -
> > - self.dut.send_expect(
> > - "sed -i
> 's/CONFIG_RTE_COMPRESSDEV_TEST=y$/CONFIG_RTE_COMPRESSDEV_TEST=n/'
> config/common_base", "# ")
> > - self.dut.send_expect(
> > - "sed -i
> 's/CONFIG_RTE_LIBRTE_PMD_ISAL=y$/CONFIG_RTE_LIBRTE_PMD_ISAL=n/'
> config/common_base", "# ")
> > self.dut.build_install_dpdk(self.dut.target)
>
> There was no change in the configuration since the start of this test.
> No need to recompile anything.
>
> >
> > if not self._perf_result:
> > diff --git a/tests/TestSuite_compressdev_qat_pmd.py
> b/tests/TestSuite_compressdev_qat_pmd.py
> > index 38f0bff3..13b7bb57 100644
> > --- a/tests/TestSuite_compressdev_qat_pmd.py
> > +++ b/tests/TestSuite_compressdev_qat_pmd.py
> > @@ -55,8 +55,6 @@ class TestCompressdevQatPmd(TestCase):
> > cc.default_opts = copy.deepcopy(self.opts)
> >
> > def prepare_dpdk(self):
> > - self.dut.send_expect(
> > - "sed -i
> 's/CONFIG_RTE_COMPRESSDEV_TEST=n$/CONFIG_RTE_COMPRESSDEV_TEST=y/'
> config/common_base", "# ")
> > self.dut.build_install_dpdk(self.dut.target)
> >
> > def get_perf_default_device(self, dev_num=3):
> > @@ -153,11 +151,6 @@ class TestCompressdevQatPmd(TestCase):
> >
> > def tear_down_all(self):
> > self.dut.kill_all()
> > -
> > - self.dut.send_expect(
> > - "sed -i
> 's/CONFIG_RTE_COMPRESSDEV_TEST=y$/CONFIG_RTE_COMPRESSDEV_TEST=n/'
> config/common_base", "# ")
> > - self.dut.send_expect(
> > - "sed -i
> 's/CONFIG_RTE_LIBRTE_PMD_QAT_SYM=y$/CONFIG_RTE_LIBRTE_PMD_QAT_SYM=n/'
> config/common_base", "# ")
> > self.dut.build_install_dpdk(self.dut.target)
> >
> > if not self._perf_result:
> > diff --git a/tests/TestSuite_compressdev_zlib_pmd.py
> b/tests/TestSuite_compressdev_zlib_pmd.py
> > index f1b3d4c4..574a6061 100644
> > --- a/tests/TestSuite_compressdev_zlib_pmd.py
> > +++ b/tests/TestSuite_compressdev_zlib_pmd.py
> > @@ -54,10 +54,6 @@ class TestCompressdevZlibPmd(TestCase):
> > cc.default_opts = copy.deepcopy(self.opts)
> >
> > def prepare_dpdk(self):
> > - self.dut.send_expect(
> > - "sed -i
> 's/CONFIG_RTE_COMPRESSDEV_TEST=n$/CONFIG_RTE_COMPRESSDEV_TEST=y/'
> config/common_base", "# ")
> > - self.dut.send_expect(
> > - "sed -i
> 's/CONFIG_RTE_LIBRTE_PMD_ZLIB=n$/CONFIG_RTE_LIBRTE_PMD_ZLIB=y/'
> config/common_base", "# ")
> > self.dut.build_install_dpdk(self.dut.target)
> >
> > def test_zlib_pmd_unit_test(self):
> > @@ -88,11 +84,6 @@ class TestCompressdevZlibPmd(TestCase):
> >
> > def tear_down_all(self):
> > self.dut.kill_all()
> > -
> > - self.dut.send_expect(
> > - "sed -i
> 's/CONFIG_RTE_COMPRESSDEV_TEST=y$/CONFIG_RTE_COMPRESSDEV_TEST=n/'
> config/common_base", "# ")
> > - self.dut.send_expect(
> > - "sed -i
> 's/CONFIG_RTE_LIBRTE_PMD_ZLIB=y$/CONFIG_RTE_LIBRTE_PMD_ZLIB=n/'
> config/common_base", "# ")
> > self.dut.build_install_dpdk(self.dut.target)
> >
> > if not self._perf_result:
> > diff --git a/tests/TestSuite_crypto_perf_cryptodev_perf.py
> b/tests/TestSuite_crypto_perf_cryptodev_perf.py
> > index 759c5186..39be86c1 100644
> > --- a/tests/TestSuite_crypto_perf_cryptodev_perf.py
> > +++ b/tests/TestSuite_crypto_perf_cryptodev_perf.py
> > @@ -86,13 +86,9 @@ class PerfTestsCryptodev(TestCase):
> > self.dut.session.copy_file_to(file, self.dut_file_dir)
> >
> > def tear_down_all(self):
> > - cc.clear_dpdk_config(self)
> > -
> > - if not self._perf_result:
> > - return
> > -
> > - with open(self.logger.log_path + "/" +
> "perf_cryptodev_result.json", "a") as fv:
> > - json.dump(self._perf_result, fv, indent=4)
> > + if self._perf_result:
> > + with open(self.logger.log_path + "/" +
> "perf_cryptodev_result.json", "a") as fv:
> > + json.dump(self._perf_result, fv, indent=4)
> >
> > def set_up(self):
> > pass
> > diff --git a/tests/TestSuite_external_mempool_handler.py
> b/tests/TestSuite_external_mempool_handler.py
> > index cee22d0f..d747a9da 100644
> > --- a/tests/TestSuite_external_mempool_handler.py
> > +++ b/tests/TestSuite_external_mempool_handler.py
> > @@ -60,7 +60,6 @@ class TestExternalMempool(TestCase):
> > pass
> >
> > def change_mempool_ops(self, ops=''):
> > - self.dut.send_expect("sed -i
> 's/CONFIG_RTE_MBUF_DEFAULT_MEMPOOL_OPS=.*$/CONFIG_RTE_MBUF_DEFAULT_MEMPOOL_OPS=\"%s\"/'
> ./config/common_base" % ops, "# ")
> > self.dut.set_build_options({'RTE_MBUF_DEFAULT_MEMPOOL_OPS':
> ops})
>
> Mbuf mempool ops can be passed at runtime via --mbuf-pool-ops-name.
> No need to recompile if DTS calls with the right option.
>
>
> > self.dut.build_install_dpdk(self.target)
> >
> > diff --git a/tests/TestSuite_fips_cryptodev.py
> b/tests/TestSuite_fips_cryptodev.py
> > index 39b30c6a..8731b109 100644
> > --- a/tests/TestSuite_fips_cryptodev.py
> > +++ b/tests/TestSuite_fips_cryptodev.py
> > @@ -43,8 +43,8 @@ class FipCryptodev(TestCase):
> > if not cc.is_build_skip(self):
> > cc.build_dpdk_with_cryptodev(self)
> > out = self.dut.build_dpdk_apps("./examples/fips_validation")
> > - self.verify("Error"not in out,"Compilation error")
> > - self.verify("No such"not in out,"Compilation error")
> > + self.verify("Error"not in out, "Compilation error")
> > + self.verify("No such"not in out, "Compilation error")
> > self.vf_driver = self.get_suite_cfg()['vf_driver']
> > cc.bind_qat_device(self, "vfio-pci")
> > self._app_path = self.dut.apps_name['fips_validation']
> > @@ -54,7 +54,7 @@ class FipCryptodev(TestCase):
> > "cryptodev": None,
> > "path-is-folder": "",
> > "cryptodev-id": 0,
> > - "self-test":"",
> > + "self-test": "",
> > }
> > self.FIP_path = "/root/FIPS"
> >
> > @@ -65,7 +65,7 @@ class FipCryptodev(TestCase):
> > self.dut.kill_all()
> >
> > def tear_down_all(self):
> > - cc.clear_dpdk_config(self)
> > + pass
> >
> > # Private functions
> > def _get_fips_opt_str(self):
> > @@ -86,14 +86,14 @@ class FipCryptodev(TestCase):
> > def compare_resp_file(self,eal_opt_str,fips_opt_str):
> > out = self._run_fips(eal_opt_str, fips_opt_str)
> > check_out = out[out.index("Done"):]
> > - self.verify("Error" not in check_out," req file error")
> > + self.verify("Error" not in check_out, " req file error")
> > rep_list = re.findall(r"FIPS/(.*)/req/(.*).req", out)
> >
> > for alog_name, file_name in rep_list:
> > out = self.dut.send_expect("diff %s/%s/resp/%s.rsp
> %s/%s/fax/%s.rsp | grep -v '#' | grep -v '\---'" % (
> > self.FIP_path, alog_name, file_name, self.FIP_path,
> alog_name, file_name), "#")
> > lines = re.split('\r\n', out)
> > - self.verify(len(lines) <= 2, "%s.req file comparison
> failed!"%file_name)
> > + self.verify(len(lines) <= 2, "%s.req file comparison
> failed!" % file_name)
> >
> > def test_fips_aesni_mb_aes(self):
> > eal_opt_str = cc.get_eal_opt_str(self)
> > @@ -121,72 +121,72 @@ class FipCryptodev(TestCase):
> > self.compare_resp_file(eal_opt_str, fips_opt_str)
> >
> > def test_fips_qat_gcm(self):
> > - eal_opt_str = cc.get_eal_opt_str(self,{"vdev":None})
> > + eal_opt_str = cc.get_eal_opt_str(self, {"vdev": None})
> > fips_opt_str = self._get_fips_opt_str()
> > self.compare_resp_file(eal_opt_str, fips_opt_str)
> >
> > def test_fips_qat_aes(self):
> > - eal_opt_str = cc.get_eal_opt_str(self,{"vdev":None})
> > + eal_opt_str = cc.get_eal_opt_str(self, {"vdev": None})
> > fips_opt_str = self._get_fips_opt_str()
> > self.compare_resp_file(eal_opt_str, fips_opt_str)
> >
> > def test_fips_qat_3des(self):
> > - eal_opt_str = cc.get_eal_opt_str(self,{"vdev":None})
> > + eal_opt_str = cc.get_eal_opt_str(self, {"vdev": None})
> > fips_opt_str = self._get_fips_opt_str()
> > self.compare_resp_file(eal_opt_str, fips_opt_str)
> >
> > def test_fips_qat_hmac(self):
> > - eal_opt_str = cc.get_eal_opt_str(self,{"vdev":None})
> > + eal_opt_str = cc.get_eal_opt_str(self, {"vdev": None})
> > fips_opt_str = self._get_fips_opt_str()
> > self.compare_resp_file(eal_opt_str, fips_opt_str)
> >
> > def test_fips_qat_ccm(self):
> > - eal_opt_str = cc.get_eal_opt_str(self,{"vdev":None})
> > + eal_opt_str = cc.get_eal_opt_str(self, {"vdev": None})
> > fips_opt_str = self._get_fips_opt_str()
> > self.compare_resp_file(eal_opt_str, fips_opt_str)
> >
> > def test_fips_qat_cmac(self):
> > - eal_opt_str = cc.get_eal_opt_str(self,{"vdev":None})
> > + eal_opt_str = cc.get_eal_opt_str(self, {"vdev": None})
> > fips_opt_str = self._get_fips_opt_str()
> > self.compare_resp_file(eal_opt_str, fips_opt_str)
> >
> > def test_fips_openssl_gcm(self):
> > - eal_opt_str =
> cc.get_eal_opt_str(self,{"vdev":"crypto_openssl_pmd_1"})
> > + eal_opt_str = cc.get_eal_opt_str(self, {"vdev":
> "crypto_openssl_pmd_1"})
> > fips_opt_str = self._get_fips_opt_str()
> > self.compare_resp_file(eal_opt_str, fips_opt_str)
> >
> > def test_fips_openssl_aes(self):
> > - eal_opt_str =
> cc.get_eal_opt_str(self,{"vdev":"crypto_openssl_pmd_1"})
> > + eal_opt_str = cc.get_eal_opt_str(self, {"vdev":
> "crypto_openssl_pmd_1"})
> > fips_opt_str = self._get_fips_opt_str()
> > self.compare_resp_file(eal_opt_str, fips_opt_str)
> >
> > def test_fips_openssl_3des(self):
> > - eal_opt_str =
> cc.get_eal_opt_str(self,{"vdev":"crypto_openssl_pmd_1"})
> > + eal_opt_str = cc.get_eal_opt_str(self, {"vdev":
> "crypto_openssl_pmd_1"})
> > fips_opt_str = self._get_fips_opt_str()
> > self.compare_resp_file(eal_opt_str, fips_opt_str)
> >
> > def test_fips_openssl_hmac(self):
> > - eal_opt_str =
> cc.get_eal_opt_str(self,{"vdev":"crypto_openssl_pmd_1"})
> > + eal_opt_str = cc.get_eal_opt_str(self, {"vdev":
> "crypto_openssl_pmd_1"})
> > fips_opt_str = self._get_fips_opt_str()
> > self.compare_resp_file(eal_opt_str, fips_opt_str)
> >
> > def test_fips_openssl_ccm(self):
> > - eal_opt_str =
> cc.get_eal_opt_str(self,{"vdev":"crypto_openssl_pmd_1"})
> > + eal_opt_str = cc.get_eal_opt_str(self, {"vdev":
> "crypto_openssl_pmd_1"})
> > fips_opt_str = self._get_fips_opt_str()
> > self.compare_resp_file(eal_opt_str, fips_opt_str)
> >
> > def test_fips_aesni_gcm_gcm(self):
> > - eal_opt_str =
> cc.get_eal_opt_str(self,{"vdev":"crypto_aesni_gcm_pmd_1"})
> > + eal_opt_str = cc.get_eal_opt_str(self, {"vdev":
> "crypto_aesni_gcm_pmd_1"})
> > fips_opt_str = self._get_fips_opt_str()
> > self.compare_resp_file(eal_opt_str, fips_opt_str)
> >
> > def test_fips_self_test(self):
> > - eal_opt_str = cc.get_eal_opt_str(self,{"l":None,"n":None,})
> > + eal_opt_str = cc.get_eal_opt_str(self, {"l": None, "n": None})
> > fips_opt_str = self._get_fips_opt_str()
> > self.compare_resp_file(eal_opt_str, fips_opt_str)
> >
> > def test_fips_broken_test(self):
> > - eal_opt_str = cc.get_eal_opt_str(self,{"l":None,"n":None,})
> > - fips_opt_str = cc.get_opt_str(self,
> self._default_fips_opts,{"cryptodev-id":None, "broken-test-id":15,
> "broken-test-dir":"dec"})
> > + eal_opt_str = cc.get_eal_opt_str(self, {"l": None, "n": None})
> > + fips_opt_str = cc.get_opt_str(self, self._default_fips_opts,
> {"cryptodev-id": None, "broken-test-id": 15, "broken-test-dir": "dec"})
> > out = self._run_fips(eal_opt_str, fips_opt_str)
> > self.verify("Failed init" in out, "test Failed!")
> > diff --git a/tests/TestSuite_ieee1588.py b/tests/TestSuite_ieee1588.py
> > index e17b1699..d61f2a53 100644
> > --- a/tests/TestSuite_ieee1588.py
> > +++ b/tests/TestSuite_ieee1588.py
> > @@ -55,8 +55,6 @@ class TestIeee1588(TestCase):
> > self.verify(len(dutPorts) > 0, "No ports found for " + self.nic)
> >
> > # Change the config file to support IEEE1588 and recompile the
> package.
> > - self.dut.send_expect(
> > - "sed -i -e 's/IEEE1588=n$/IEEE1588=y/' config/common_base",
> "# ", 30)
> > self.dut.set_build_options({'RTE_LIBRTE_IEEE1588': 'y'})
> > self.dut.skip_setup = False
> > self.dut.build_install_dpdk(self.target)
> > @@ -173,7 +171,5 @@ class TestIeee1588(TestCase):
> > self.dut.send_expect("quit", "# ", 30)
> >
> > # Restore the config file and recompile the package.
> > - self.dut.send_expect(
> > - "sed -i -e 's/IEEE1588=y$/IEEE1588=n/' config/common_base",
> "# ", 30)
> > self.dut.set_build_options({'RTE_LIBRTE_IEEE1588': 'n'})
> > self.dut.build_install_dpdk(self.target)
> > diff --git a/tests/TestSuite_ipsec_gw_cryptodev_func.py
> b/tests/TestSuite_ipsec_gw_cryptodev_func.py
> > index a5d6e775..bfdc1271 100644
> > --- a/tests/TestSuite_ipsec_gw_cryptodev_func.py
> > +++ b/tests/TestSuite_ipsec_gw_cryptodev_func.py
> > @@ -97,7 +97,7 @@ class TestIPsecGW(TestCase):
> > self.dut.kill_all()
> >
> > def tear_down_all(self):
> > - cc.clear_dpdk_config(self)
> > + pass
> >
> > def test_qat_aes_128_cbc_ipv4_tunnel(self):
> > self._execute_ipsec_gw_test()
> > diff --git a/tests/TestSuite_kni.py b/tests/TestSuite_kni.py
> > index 85289d37..151668c3 100644
> > --- a/tests/TestSuite_kni.py
> > +++ b/tests/TestSuite_kni.py
> > @@ -259,9 +259,6 @@ class TestKni(TestCase):
> > out = self.dut.send_expect("which brctl", "# ")
> > self.verify('no brctl' not in out,
> > "The linux tool brctl is needed to run this test
> suite")
> > -
> > - self.dut.send_expect("sed -i -e
> 's/KNI_KMOD_ETHTOOL=n$/KNI_KMOD_ETHTOOL=y/' config/common_base", "# ", 30)
> > - self.dut.send_expect("sed -i -e
> 's/CONFIG_RTE_KNI_KMOD=n$/CONFIG_RTE_KNI_KMOD=y/' config/common_base", "#
> ", 30)
> > self.dut.build_install_dpdk(self.target)
> >
> > out = self.dut.build_dpdk_apps("./examples/kni")
> > @@ -1225,9 +1222,6 @@ class TestKni(TestCase):
> > """
> > Run after each test suite.
> > """
> > -
> > - self.dut.send_expect("sed -i -e
> 's/KNI_KMOD_ETHTOOL=y$/KNI_KMOD_ETHTOOL=n/' config/common_base", "# ", 30)
> > self.dut.build_install_dpdk(self.target)
> > -
> > self.dut.kill_all()
> > self.dut.send_expect("rmmod rte_kni", "# ", 10)
> > diff --git a/tests/TestSuite_l2fwd_cryptodev_func.py
> b/tests/TestSuite_l2fwd_cryptodev_func.py
> > index 1e8ce549..1b9129af 100644
> > --- a/tests/TestSuite_l2fwd_cryptodev_func.py
> > +++ b/tests/TestSuite_l2fwd_cryptodev_func.py
> > @@ -438,7 +438,7 @@ class TestL2fwdCrypto(TestCase):
> > self.dut.kill_all()
> >
> > def tear_down_all(self):
> > - cc.clear_dpdk_config(self)
> > + pass
> >
> > def __test_vector_to_cmd(self, test_vector, core_mask="",
> port_mask=""):
> > cores = ','.join(self.core_list)
> > diff --git a/tests/TestSuite_packet_capture.py
> b/tests/TestSuite_packet_capture.py
> > index 4440c5f3..5ad7ed37 100644
> > --- a/tests/TestSuite_packet_capture.py
> > +++ b/tests/TestSuite_packet_capture.py
> > @@ -815,12 +815,7 @@ class TestPacketCapture(TestCase):
> > not self.is_existed_on_crb(self.pdump_log, crb='tester'):
> > cmd = "mkdir -p {0}".format(self.pdump_log)
> > self.tester.alt_session.send_expect(cmd, "# ")
> > - self.pcap_SW = "CONFIG_RTE_LIBRTE_PMD_PCAP"
> > - self.SW_file = os.path.join(self.target_dir,
> 'config/common_base')
> > if not (self.dut_skip_compile and self.check_pcap_lib()):
> > - cmd = "sed -i -e 's/{0}=n$/{0}=y/' {1}".format(
> > - self.pcap_SW, self.SW_file)
> > - self.dut.alt_session.send_expect(cmd, "# ", 30)
> > self.dut.skip_setup = False
> > self.dut.build_install_dpdk(self.target)
> > # secondary process (dpdk-pdump)
> > @@ -879,10 +874,6 @@ class TestPacketCapture(TestCase):
> > self.session_ex = None
> > # Restore the config file and recompile the package.
> > if self.check_pcap_lib():
> > - self.dut.alt_session.send_expect(
> > - ("sed -i -e 's/{0}=y$/{0}=n/' "
> > - "{1}").format(self.pcap_SW, self.SW_file),
> > - "# ", 120)
> > # temporary disable skip_setup
> > skip_setup = self.dut.skip_setup
> > self.dut.skip_setup = True
> > diff --git a/tests/TestSuite_pmd.py b/tests/TestSuite_pmd.py
> > index 52250023..98421765 100644
> > --- a/tests/TestSuite_pmd.py
> > +++ b/tests/TestSuite_pmd.py
> > @@ -75,7 +75,6 @@ class TestPmd(TestCase):
> > self.blocklist = ""
> >
> > # Update config file and rebuild to get best perf on FVL
> > - self.dut.send_expect("sed -i -e
> 's/CONFIG_RTE_LIBRTE_I40E_16BYTE_RX_DESC=n/CONFIG_RTE_LIBRTE_I40E_16BYTE_RX_DESC=y/'
> ./config/common_base", "#", 20)
> > self.dut.build_install_dpdk(self.target)
> >
> > # Based on h/w type, choose how many ports to use
> > diff --git a/tests/TestSuite_power_branch_ratio.py
> b/tests/TestSuite_power_branch_ratio.py
> > index dee2cc11..7484d130 100644
> > --- a/tests/TestSuite_power_branch_ratio.py
> > +++ b/tests/TestSuite_power_branch_ratio.py
> > @@ -44,8 +44,7 @@ from pprint import pformat
> > from framework.exception import VerifyFailure
> > from framework.packet import Packet
> > from framework.pktgen import TRANSMIT_CONT
> > -from framework.qemu_libvirt import LibvirtKvm
> > -from framework.settings import HEADER_SIZE, HOST_BUILD_TYPE_SETTING,
> load_global_setting
> > +from framework.settings import HEADER_SIZE
> > from framework.test_case import TestCase
> > from framework.utils import create_mask as dts_create_mask
> >
> > @@ -224,15 +223,8 @@ class TestPowerBranchRatio(TestCase):
> > return sw_table
> >
> > def preset_compilation(self):
> > - if 'meson' == load_global_setting(HOST_BUILD_TYPE_SETTING):
> > - compile_SWs = self.compile_switch +
> ["CONFIG_RTE_LIBRTE_I40E_PMD"]
> > - self.dut.set_build_options(dict([(sw[7:], 'y') for sw in
> compile_SWs]))
> > - else:
> > - for sw in self.compile_switch:
> > - cmd = ("sed -i -e "
> > - "'s/{0}=n$/{0}=y/' "
> > - "{1}/config/common_base").format(sw,
> self.target_dir)
> > - self.d_a_con(cmd)
> > + compile_SWs = self.compile_switch +
> ["CONFIG_RTE_LIBRTE_I40E_PMD"]
>
> This option does not exist anymore.
> So I don't think this code has any effect.
>
>
> > + self.dut.set_build_options(dict([(sw[7:], 'y') for sw in
> compile_SWs]))
> > # re-compile dpdk source code
> > self.dut.build_install_dpdk(self.target)
> >
> > @@ -247,15 +239,8 @@ class TestPowerBranchRatio(TestCase):
> > except Exception as e:
> > self.logger.error(traceback.format_exc())
> > # restore compilation
> > - if 'meson' == load_global_setting(HOST_BUILD_TYPE_SETTING):
> > - self.dut.set_build_options(
> > - dict([(sw[7:], 'n') for sw in self.compile_switch]))
> > - else:
> > - for sw in self.compile_switch:
> > - cmd = ("sed -i -e "
> > - "'s/{0}=y$/{0}=n/' "
> > - "{1}/config/common_base").format(sw,
> self.target_dir)
> > - self.d_a_con(cmd)
> > + self.dut.set_build_options(
> > + dict([(sw[7:], 'n') for sw in self.compile_switch]))
> > # re-compile dpdk source code
> > self.dut.build_install_dpdk(self.target)
> >
> > diff --git a/tests/TestSuite_power_pbf.py b/tests/TestSuite_power_pbf.py
> > index 42d939cd..832f5c57 100644
> > --- a/tests/TestSuite_power_pbf.py
> > +++ b/tests/TestSuite_power_pbf.py
> > @@ -31,18 +31,14 @@
> >
> > import json
> > import os
> > -import random
> > import re
> > import shutil
> > import time
> > import traceback
> > +
> > from collections import Counter
> > from pprint import pformat
> > -
> > from framework.exception import VerifyFailure
> > -
> > -# import framework.dts as dts libs
> > -from framework.settings import HOST_BUILD_TYPE_SETTING,
> load_global_setting
> > from framework.test_case import TestCase
> > from framework.utils import create_mask
> >
> > @@ -149,12 +145,7 @@ class TestPowerPbf(TestCase):
> > self.create_powermonitor_folder()
> > # open debug SW
> > SW = "CONFIG_RTE_LIBRTE_POWER_DEBUG"
> > - if 'meson' == load_global_setting(HOST_BUILD_TYPE_SETTING):
> > - self.dut.set_build_options({SW[7:]: 'y'})
> > - else:
> > - cmd = "sed -i -e 's/{0}=n$/{0}=y/'
> {1}/config/common_base".format(
> > - SW, self.target_dir)
> > - self.d_a_con(cmd)
> > + self.dut.set_build_options({SW[7:]: 'y'})
> > self.dut.build_install_dpdk(self.target)
> > # set up vm power management binary process setting
> > self.vm_power_mgr = self.prepare_binary('vm_power_manager')
> > diff --git a/tests/TestSuite_power_telemetry.py
> b/tests/TestSuite_power_telemetry.py
> > index d8182ce2..dda942a4 100644
> > --- a/tests/TestSuite_power_telemetry.py
> > +++ b/tests/TestSuite_power_telemetry.py
> > @@ -45,7 +45,7 @@ from pprint import pformat
> > from framework.exception import VerifyFailure
> > from framework.packet import Packet
> > from framework.pktgen import TRANSMIT_CONT
> > -from framework.settings import HEADER_SIZE, HOST_BUILD_TYPE_SETTING,
> load_global_setting
> > +from framework.settings import HEADER_SIZE
> > from framework.test_case import TestCase
> > from framework.utils import create_mask as dts_create_mask
> >
> > @@ -122,17 +122,11 @@ class TestPowerTelemetry(TestCase):
> > return result
> >
> > def preset_compilation(self):
> > - if self.dut.skip_setup:
> > - return
> > - SW = "CONFIG_RTE_LIBRTE_TELEMETRY"
> > - if 'meson' == load_global_setting(HOST_BUILD_TYPE_SETTING):
> > + if not self.dut.skip_setup:
> > + SW = "CONFIG_RTE_LIBRTE_TELEMETRY"
>
> Telemetry is built by default, plus this config option with _LIBRTE_
> does not exist anymore.
>
>
> > self.dut.set_build_options({SW[7:]: 'y'})
> > - else:
> > - cmd = "sed -i -e 's/{0}=n$/{0}=y/'
> {1}/config/common_base".format(
> > - SW, self.target_dir)
> > - self.d_a_con(cmd)
> > - # re-compile dpdk source code
> > - self.dut.build_install_dpdk(self.target)
> > + # re-compile dpdk source code
> > + self.dut.build_install_dpdk(self.target)
> >
> > def prepare_binary(self, name):
> > example_dir = "examples/" + name
> > diff --git a/tests/TestSuite_unit_tests_cryptodev_func.py
> b/tests/TestSuite_unit_tests_cryptodev_func.py
> > index d2117255..02d1b092 100644
> > --- a/tests/TestSuite_unit_tests_cryptodev_func.py
> > +++ b/tests/TestSuite_unit_tests_cryptodev_func.py
> > @@ -51,7 +51,7 @@ class UnitTestsCryptodev(TestCase):
> > self.dut.kill_all()
> >
> > def tear_down_all(self):
> > - cc.clear_dpdk_config(self)
> > + pass
> >
> > def _get_crypto_device(self, num):
> > device = {}
> > diff --git a/tests/TestSuite_unit_tests_kni.py
> b/tests/TestSuite_unit_tests_kni.py
> > index 5ad19d15..91283b8a 100644
> > --- a/tests/TestSuite_unit_tests_kni.py
> > +++ b/tests/TestSuite_unit_tests_kni.py
> > @@ -73,8 +73,6 @@ class TestUnitTestsKni(TestCase):
> >
> > KNI Prerequisites
> > """
> > - self.dut.send_expect("sed -i -e
> 's/KNI_KMOD_ETHTOOL=n$/KNI_KMOD_ETHTOOL=y/' config/common_base", "# ", 30)
> > - self.dut.send_expect("sed -i -e
> 's/CONFIG_RTE_KNI_KMOD=n$/CONFIG_RTE_KNI_KMOD=y/' config/common_base", "#
> ", 30)
> > self.dut.set_build_options({'KNI_KMOD_ETHTOOL': 'y'})
>
> ethtool support was dropped ages ago (19.08?).
>
> > self.dut.set_build_options({'RTE_KNI_KMOD': 'y'})
>
> Kernel modules are built via meson option enable_kmods.
>
>
> > self.dut.build_install_dpdk(self.target)
> > diff --git a/tests/TestSuite_vhost_1024_ethports.py
> b/tests/TestSuite_vhost_1024_ethports.py
> > index 3b20f3e0..d2a643c2 100644
> > --- a/tests/TestSuite_vhost_1024_ethports.py
> > +++ b/tests/TestSuite_vhost_1024_ethports.py
> > @@ -65,18 +65,10 @@ class TestVhost1024Ethports(TestCase):
> > self.vhost_user = self.dut.new_session(suite='vhost-user')
> >
> > def build_user_dpdk(self):
> > - if self.dut.build_type == "meson":
> > - self.dut.build_install_dpdk(self.target,
> extra_options="-Dmax_ethports=1024")
> > - else:
> > - self.dut.send_expect("sed -i
> 's/CONFIG_RTE_MAX_ETHPORTS=32$/CONFIG_RTE_MAX_ETHPORTS=1024/'
> config/common_base", '#', 30)
> > - self.dut.build_install_dpdk(self.target)
> > + self.dut.build_install_dpdk(self.target,
> extra_options="-Dmax_ethports=1024")
> >
> > def restore_dpdk(self):
> > - if self.dut.build_type == "meson":
> > - self.dut.build_install_dpdk(self.target,
> extra_options="-Dmax_ethports=32")
> > - else:
> > - self.dut.send_expect("sed -i
> 's/CONFIG_RTE_MAX_ETHPORTS=1024$/CONFIG_RTE_MAX_ETHPORTS=32/'
> config/common_base", '#', 30)
> > - self.dut.build_install_dpdk(self.target)
> > + self.dut.build_install_dpdk(self.target,
> extra_options="-Dmax_ethports=32")
> >
> > @property
> > def check_2M_env(self):
> > diff --git a/tests/TestSuite_virtio_ipsec_cryptodev_func.py
> b/tests/TestSuite_virtio_ipsec_cryptodev_func.py
> > index c4f62b86..d5374209 100644
> > --- a/tests/TestSuite_virtio_ipsec_cryptodev_func.py
> > +++ b/tests/TestSuite_virtio_ipsec_cryptodev_func.py
> > @@ -96,10 +96,6 @@ class VirtioCryptodevIpsecTest(TestCase):
> > return self.dut.send_expect(cmdline, ex, timout)
> >
> > def build_user_dpdk(self, user_dut):
> > - user_dut.send_expect(
> > - "sed -i
> 's/CONFIG_RTE_LIBRTE_PMD_AESNI_MB=n$/CONFIG_RTE_LIBRTE_PMD_AESNI_MB=y/'
> config/common_base", '#', 30)
> > - user_dut.send_expect(
> > - "sed -i
> 's/CONFIG_RTE_EAL_IGB_UIO=n/CONFIG_RTE_EAL_IGB_UIO=y/g'
> config/common_base", '#', 30)
> > user_dut.set_build_options({'RTE_LIBRTE_PMD_AESNI_MB': 'y'})
>
> Same comment as above, this config option does not exist anymore, it
> has no effect.
>
>
> > user_dut.build_install_dpdk(self.target)
> > user_dut.build_dpdk_apps("./examples/ipsec-secgw")
> > @@ -371,5 +367,3 @@ class VirtioCryptodevIpsecTest(TestCase):
> > self.dut.send_expect("killall -s INT %s" % self.app_name, "#")
> > self.dut_execut_cmd("killall -s INT qemu-system-x86_64")
> > self.dut_execut_cmd("rm -r /tmp/*")
> > -
> > - cc.clear_dpdk_config(self)
> > diff --git a/tests/TestSuite_virtio_perf_cryptodev_func.py
> b/tests/TestSuite_virtio_perf_cryptodev_func.py
> > index 92765675..f8b288c8 100644
> > --- a/tests/TestSuite_virtio_perf_cryptodev_func.py
> > +++ b/tests/TestSuite_virtio_perf_cryptodev_func.py
> > @@ -117,10 +117,6 @@ class VirtioCryptodevPerfTest(TestCase):
> > return self.dut.send_expect(cmdline, ex, timout)
> >
> > def build_user_dpdk(self, user_dut):
> > - user_dut.send_expect(
> > - "sed -i
> 's/CONFIG_RTE_LIBRTE_PMD_AESNI_MB=n$/CONFIG_RTE_LIBRTE_PMD_AESNI_MB=y/'
> config/common_base", '#', 30)
> > - user_dut.send_expect(
> > - "sed -i
> 's/CONFIG_RTE_EAL_IGB_UIO=n/CONFIG_RTE_EAL_IGB_UIO=y/g'
> config/common_base", '#', 30)
> > user_dut.set_build_options({'RTE_LIBRTE_PMD_AESNI_MB': 'y'})
> > user_dut.build_install_dpdk(self.target)
> >
> > @@ -257,4 +253,3 @@ class VirtioCryptodevPerfTest(TestCase):
> > self.dut.send_expect("killall -s INT %s" % self.app_name, "#")
> > self.dut_execut_cmd("killall -s INT qemu-system-x86_64")
> > self.dut_execut_cmd("rm -r /tmp/*")
> > - cc.clear_dpdk_config(self)
> > diff --git a/tests/TestSuite_virtio_unit_cryptodev_func.py
> b/tests/TestSuite_virtio_unit_cryptodev_func.py
> > index 6ccfef7f..fd5b30fe 100644
> > --- a/tests/TestSuite_virtio_unit_cryptodev_func.py
> > +++ b/tests/TestSuite_virtio_unit_cryptodev_func.py
> > @@ -202,5 +202,3 @@ class VirtioCryptodevUnitTest(TestCase):
> > self.dut.send_expect("killall -s INT %s" % self.app_name, "#")
> > self.dut_execut_cmd("killall -s INT qemu-system-x86_64")
> > self.dut_execut_cmd("rm -r /tmp/*")
> > -
> > - cc.clear_dpdk_config(self)
> > diff --git a/tests/TestSuite_vmdq_dcb.py b/tests/TestSuite_vmdq_dcb.py
> > index b5714469..c7f60141 100644
> > --- a/tests/TestSuite_vmdq_dcb.py
> > +++ b/tests/TestSuite_vmdq_dcb.py
> > @@ -93,8 +93,6 @@ class TestVmdqDcb(TestCase):
> > """
> > Rebuild dpdk
> > """
> > - self.dut.send_expect("sed -i -e
> 's/CONFIG_RTE_LIBRTE_I40E_QUEUE_NUM_PER_VM=.*$/CONFIG_RTE_LIBRTE_I40E_"
> > - "QUEUE_NUM_PER_VM=%s/'
> ./config/common_base" % nb_queue_per_vm, "#", 20)
> > self.dut.set_build_options({'RTE_LIBRTE_I40E_QUEUE_NUM_PER_VM':
> nb_queue_per_vm})
> > self.dut.build_install_dpdk(self.target)
> >
> > diff --git a/tests/cryptodev_common.py b/tests/cryptodev_common.py
> > index e3c58cdc..2856e322 100644
> > --- a/tests/cryptodev_common.py
> > +++ b/tests/cryptodev_common.py
> > @@ -74,43 +74,20 @@ def build_dpdk_with_cryptodev(test_case):
> > test_case.dut.send_expect(
> > "export LD_LIBRARY_PATH={}".format(fip_library_path), "#")
> >
> > - 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.set_build_options({'RTE_LIBRTE_PMD_AESNI_MB': 'y'})
> > -
> > - 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.set_build_options({'RTE_LIBRTE_PMD_QAT_SYM': 'y'})
> > -
> > - test_case.dut.send_expect(
> > - "sed -i
> 's/CONFIG_RTE_LIBRTE_PMD_QAT_ASYM=n$/CONFIG_RTE_LIBRTE_PMD_QAT_ASYM=y/'
> config/common_base", "# ")
> > test_case.dut.set_build_options({'RTE_LIBRTE_PMD_QAT_ASYM': 'y'})
> > -
> > - 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.set_build_options({'RTE_LIBRTE_PMD_AESNI_GCM': 'y'})
> > -
> > - 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.set_build_options({'RTE_LIBRTE_PMD_OPENSSL': 'y'})
> > -
> > - 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.set_build_options({'RTE_LIBRTE_PMD_SNOW3G': 'y'})
> > -
> > - 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.set_build_options({'RTE_LIBRTE_PMD_KASUMI': 'y'})
> > -
> > - 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.set_build_options({'RTE_LIBRTE_PMD_ZUC': 'y'})
>
> Setting all those options above probably has no effect.
>
>
> >
> > 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"):
> > +def bind_qat_device(test_case, driver="igb_uio"):
> > if driver == 'vfio-pci':
> > test_case.dut.send_expect('modprobe vfio', '#', 10)
> > test_case.dut.send_expect('modprobe vfio-pci', '#', 10)
> > @@ -168,25 +145,6 @@ def get_qat_devices(test_case, cpm_num=None, num=1):
> > return dev_list
> >
> >
> > -def clear_dpdk_config(test_case):
> > - 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_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_QAT_ASYM=y$/CONFIG_RTE_LIBRTE_PMD_QAT_ASYM=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_OPENSSL=y$/CONFIG_RTE_LIBRTE_PMD_OPENSSL=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,
> > --
> > 2.33.1.windows.1
> >
>
>
> --
> David Marchand
>
>
[-- Attachment #2: Type: text/html, Size: 47919 bytes --]
prev parent reply other threads:[~2022-01-12 15:37 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-17 8:54 [dts] [PATCH V1 1/4] executions/execution*: removed makefile from configure file DongJunX
2021-11-17 8:54 ` [dts] [PATCH V1 2/4] doc/dts_gsg: removed makefile from user guide document DongJunX
2022-01-12 15:16 ` Owen Hilyard
2021-11-17 8:54 ` [dts] [PATCH V1 3/4] framework/*: removed makefile from framework DongJunX
2022-01-12 15:28 ` Owen Hilyard
2021-11-17 8:54 ` [dts] [PATCH V1 4/4] tests/*: removed makefile from test suite DongJunX
2021-11-18 8:23 ` David Marchand
2022-01-12 15:36 ` Owen Hilyard [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAHx6DYDNnHcgqKiMAs_Nk2-vfUjHMd5qePidr+H-t7L7g5bo3A@mail.gmail.com \
--to=ohilyard@iol.unh.edu \
--cc=david.marchand@redhat.com \
--cc=dts@dpdk.org \
--cc=hailinx.xu@intel.com \
--cc=junx.dong@intel.com \
--cc=lijuan.tu@intel.com \
--cc=qinx.sun@intel.com \
--cc=songx.jiale@intel.com \
--cc=weix.ling@intel.com \
--cc=yanx.xia@intel.com \
--cc=yux.jiang@intel.com \
--cc=zhiminx.huang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).