<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@SimSun";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Hi Brandon,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">This case is already in dts, test_plans/shutdown_api_test_plan.rst  and tests/TestSuite_shutdown_api.py<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">And I think the current case is more strict, because it will check the stream when link is up.<o:p></o:p></span></p>
<p class="MsoNormal"><a name="_MailEndCompose"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></a></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> dts [mailto:dts-bounces@dpdk.org]
<b>On Behalf Of </b>Brandon Lo<br>
<b>Sent:</b> Thursday, April 23, 2020 9:32 PM<br>
<b>To:</b> dts@dpdk.org<br>
<b>Subject:</b> [dts] [PATCH] Add link status check test<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">This is a simple test meant to check whether or not the<br>
link status changes when we set the link down/up.<br>
<br>
Signed-off-by: Brandon Lo <<a href="mailto:blo@iol.unh.edu" target="_blank">blo@iol.unh.edu</a>><br>
---<br>
 test_plans/link_status_test_plan.rst | 48 +++++++++++++++++++++<br>
 tests/TestSuite_link_status.py       | 63 ++++++++++++++++++++++++++++<br>
 2 files changed, 111 insertions(+)<br>
 create mode 100644 test_plans/link_status_test_plan.rst<br>
 create mode 100644 tests/TestSuite_link_status.py<br>
<br>
diff --git a/test_plans/link_status_test_plan.rst b/test_plans/link_status_test_plan.rst<br>
new file mode 100644<br>
index 0000000..2d92a68<br>
--- /dev/null<br>
+++ b/test_plans/link_status_test_plan.rst<br>
@@ -0,0 +1,48 @@<br>
+=============================================<br>
+Link Status Check<br>
+=============================================<br>
+<br>
+This check will use testpmd to test whether or not a link can be set as<br>
+down/up and appear as the set status.<br>
+<br>
+<br>
+Prerequisites<br>
+=============<br>
+<br>
+Compile DPDK and testpmd. Be able to have the testpmd run.<br>
+<br>
+Test Case: set links as down<br>
+==========================================<br>
+<br>
+Run testpmd in interactive mode ::<br>
+<br>
+  $ ./dpdk-testpmd -- -i<br>
+<br>
+This can be run with other arguments as well, depending on your setup.<br>
+<br>
+Run this command in testpmd ::<br>
+<br>
+  testpmd> set link-down port 0<br>
+<br>
+Verify the output matches with the port being down ::<br>
+  <br>
+  testpmd> show port summary 0<br>
+<br>
+<br>
+Test Case: set links as up<br>
+===========================================<br>
+<br>
+Run testpmd in interactive mode ::<br>
+<br>
+  $ ./dpdk-testpmd -- -i<br>
+<br>
+This can be run with other arguments as well, depending on your setup.<br>
+<br>
+Run this command in testpmd ::<br>
+<br>
+  testpmd> set link-up port 0<br>
+<br>
+Verify the output matches with the port being up ::<br>
+  <br>
+  testpmd> show port summary 0<br>
+<br>
diff --git a/tests/TestSuite_link_status.py b/tests/TestSuite_link_status.py<br>
new file mode 100644<br>
index 0000000..0172000<br>
--- /dev/null<br>
+++ b/tests/TestSuite_link_status.py<br>
@@ -0,0 +1,63 @@<br>
+"""<br>
+DPDK Test suite.<br>
+Testing link status in testpmd<br>
+"""<br>
+<br>
+import utils<br>
+import time<br>
+from test_case import TestCase<br>
+from pmd_output import PmdOutput<br>
+<br>
+class TestLinkStatus(TestCase):<br>
+<br>
+    def set_up_all(self):<br>
+        """<br>
+        Run at the start of each test suite.<br>
+        """<br>
+        self.dut.build_install_dpdk(self.target)<br>
+        self.pmdout = PmdOutput(self.dut)<br>
+        self.pmdout.start_testpmd()<br>
+        self.dut_ports = self.dut.get_ports()<br>
+<br>
+    def set_up(self):<br>
+        """<br>
+        Run before each test case.<br>
+        Nothing to do.<br>
+        """<br>
+        pass<br>
+<br>
+    def test_link_down(self):<br>
+        """<br>
+        Run set link-down on ports and check if they are down in summary.<br>
+        """<br>
+        for port in self.dut_ports:<br>
+            self.dut.send_command('set link-down port {}'.format(port))<br>
+            time.sleep(5)<br>
+            self.dut.send_command('show port summary {}'.format(port))<br>
+            self.verify('down' in self.dut.session.history[-1]['output'],<br>
+                    'Link down for port {}'.format(port))<br>
+<br>
+    def test_link_up(self):<br>
+        """<br>
+        Run set link-up on ports and check if they are up in summary.<br>
+        """<br>
+        for port in self.dut_ports:<br>
+            self.dut.send_command('set link-up port {}'.format(port))<br>
+            time.sleep(5)<br>
+            self.dut.send_command('show port summary {}'.format(port))<br>
+            self.verify('up' in self.dut.session.history[-1]['output'],<br>
+                    'Link up for port {}'.format(port))<br>
+<br>
+    def tear_down(self):<br>
+        """<br>
+        Run after each test case.<br>
+        Nothing to do.<br>
+        """<br>
+        pass<br>
+<br>
+    def tear_down_all(self):<br>
+        """<br>
+        Quit out of testpmd<br>
+        """<br>
+        self.dut.send_expect("quit", "# ", 30)<br>
+<br>
-- <br>
2.17.1<o:p></o:p></p>
</div>
</div>
</div>
</div>
</body>
</html>