tests: use iperf3 for running interface tests on the host 33/38133/2
authorNaveen Joy <najoy@cisco.com>
Thu, 2 Feb 2023 21:56:59 +0000 (13:56 -0800)
committerDave Wallace <dwallacelf@gmail.com>
Fri, 10 Feb 2023 02:14:44 +0000 (02:14 +0000)
Type: improvement

Change-Id: I7123591932d51ce0c5b372893454945bbd3913b2
Signed-off-by: Naveen Joy <najoy@cisco.com>
test/vpp_iperf.py

index 42b5ea8..8fe0d74 100644 (file)
@@ -36,7 +36,7 @@ class VppIperf:
         self.server_args = ""
         self.logger = logger
         # Set the iperf executable
-        self.iperf = os.path.join(os.getenv("TEST_DATA_DIR") or "/", "usr/bin/iperf")
+        self.iperf = self.get_iperf()
 
     def ensure_init(self):
         if self.server_ns and self.client_ns and self.server_ip:
@@ -46,6 +46,24 @@ class VppIperf:
                 "Error: Cannot Start." "iPerf object has not been initialized"
             )
 
+    def get_iperf(self):
+        """Return the iperf executable for running tests.
+
+        Look for the iperf executable in the following order
+        1. ${TEST_DATA_DIR}/usr/bin/iperf  # running tests inside the VM
+        2. /usr/bin/iperf3                 # running tests on the host
+        """
+        vm_test_dir = os.getenv("TEST_DATA_DIR", "/tmp/vpp-vm-tests")
+        if os.path.isdir(vm_test_dir):
+            iperf = os.path.join(vm_test_dir, "/usr/bin/iperf")
+        else:
+            iperf = "/usr/bin/iperf3"
+        if os.path.exists(iperf):
+            return iperf
+        else:
+            self.logger.error(f"Could not find an iperf executable for running tests")
+            sys.exit(1)
+
     def start_iperf_server(self):
         args = [
             "ip",
@@ -58,6 +76,7 @@ class VppIperf:
         ]
         args.extend(self.server_args.split())
         args = " ".join(args)
+        self.logger.debug(f"Starting iperf server: {args}")
         try:
             return subprocess.run(
                 args,