Browse Source

tests: Add functions to execute shell commands on interface host

Add the feature to execute shell commands on each wpa_supplicant/hostapd
interface host. When executing remote tests the interfaces are not all
on a single host so when executing shell commands the test needs to
execute the command on the host which the interface relevant for the
command is on. This patch enables tests to execute the command on the
relevant host.

Signed-off-by: Jonathan Afek <jonathanx.afek@intel.com>
Jonathan Afek 8 years ago
parent
commit
7fd9fbc27d
2 changed files with 42 additions and 0 deletions
  1. 30 0
      tests/hwsim/hostapd.py
  2. 12 0
      tests/hwsim/wpasupplicant.py

+ 30 - 0
tests/hwsim/hostapd.py

@@ -12,6 +12,7 @@ import struct
 import wpaspy
 import remotehost
 import utils
+import subprocess
 
 logger = logging.getLogger()
 hapd_ctrl = '/var/run/hostapd'
@@ -41,6 +42,17 @@ class HostapdGlobal:
             self.dbg = hostname + "/" + str(port)
         self.mon.attach()
 
+    def cmd_execute(self, cmd_array):
+        if self.hostname is None:
+            cmd = ' '.join(cmd_array)
+            proc = subprocess.Popen(cmd, stderr=subprocess.STDOUT,
+                                    stdout=subprocess.PIPE, shell=True)
+            out = proc.communicate()[0]
+            ret = proc.returncode
+            return ret, out
+        else:
+            return self.host.execute(cmd_array)
+
     def request(self, cmd, timeout=10):
         logger.debug(self.dbg + ": CTRL(global): " + cmd)
         return self.ctrl.request(cmd, timeout)
@@ -134,6 +146,20 @@ class Hostapd:
         self.bssid = None
         self.bssidx = bssidx
 
+    def cmd_execute(self, cmd_array):
+        if self.hostname is None:
+            cmd = ""
+            for arg in cmd_array:
+                cmd += arg + " "
+            cmd = cmd.strip()
+            proc = subprocess.Popen(cmd, stderr=subprocess.STDOUT,
+                                    stdout=subprocess.PIPE, shell=True)
+            out = proc.communicate()[0]
+            ret = proc.returncode
+            return ret, out
+        else:
+            return self.host.execute(cmd_array)
+
     def close_ctrl(self):
         if self.mon is not None:
             self.mon.detach()
@@ -561,3 +587,7 @@ def ht40_minus_params(channel="1", ssid=None, country=None):
     params = ht20_params(channel, ssid, country)
     params['ht_capab'] = "[HT40-]"
     return params
+
+def cmd_execute(apdev, cmd):
+    hapd_global = HostapdGlobal(apdev)
+    return hapd_global.cmd_execute(cmd)

+ 12 - 0
tests/hwsim/wpasupplicant.py

@@ -12,6 +12,7 @@ import re
 import struct
 import wpaspy
 import remotehost
+import subprocess
 
 logger = logging.getLogger()
 wpas_ctrl = '/var/run/wpa_supplicant'
@@ -48,6 +49,17 @@ class WpaSupplicant:
         else:
             self.global_mon = None
 
+    def cmd_execute(self, cmd_array):
+        if self.hostname is None:
+            cmd = ' '.join(cmd_array)
+            proc = subprocess.Popen(cmd, stderr=subprocess.STDOUT,
+                                    stdout=subprocess.PIPE, shell=True)
+            out = proc.communicate()[0]
+            ret = proc.returncode
+            return ret, out
+        else:
+            return self.host.execute(cmd_array)
+
     def terminate(self):
         if self.global_mon:
             self.global_mon.detach()