Browse Source

tests: Convert Host() class to use list of arguments instead of string

It is better to use a list of command line arguments for the local
execution case and convert that to a space-separated string for the
remote case.

Signed-off-by: Jouni Malinen <j@w1.fi>
Jouni Malinen 9 years ago
parent
commit
5a766accee
3 changed files with 9 additions and 13 deletions
  1. 5 9
      tests/hwsim/remotehost.py
  2. 1 1
      tests/hwsim/utils.py
  3. 3 3
      tests/hwsim/wpasupplicant.py

+ 5 - 9
tests/hwsim/remotehost.py

@@ -38,14 +38,10 @@ class Host():
             self.name = host
             self.name = host
 
 
     def local_execute(self, command):
     def local_execute(self, command):
-        logger.debug("execute: " + command)
-        words = command.split()
-        cmd = []
-        for word in words:
-            cmd.append(word)
+        logger.debug("execute: " + str(command))
         try:
         try:
             status = 0;
             status = 0;
-            buf = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
+            buf = subprocess.check_output(command, stderr=subprocess.STDOUT)
         except subprocess.CalledProcessError as e:
         except subprocess.CalledProcessError as e:
             status = e.returncode
             status = e.returncode
             buf = e.output
             buf = e.output
@@ -58,7 +54,7 @@ class Host():
         if self.host is None:
         if self.host is None:
             return self.local_execute(command)
             return self.local_execute(command)
 
 
-        cmd = ["ssh", self.user + "@" + self.host, command]
+        cmd = ["ssh", self.user + "@" + self.host, ' '.join(command)]
         _cmd = self.name + " execute: "
         _cmd = self.name + " execute: "
         for c in cmd:
         for c in cmd:
             _cmd = _cmd + " " + c
             _cmd = _cmd + " " + c
@@ -77,9 +73,9 @@ class Host():
     # async execute
     # async execute
     def execute_run(self, command, res):
     def execute_run(self, command, res):
         if self.host is None:
         if self.host is None:
-            cmd = [command]
+            cmd = command
         else:
         else:
-            cmd = ["ssh",  self.user + "@" + self.host, command]
+            cmd = ["ssh",  self.user + "@" + self.host, ' '.join(command)]
         _cmd = self.name + " execute_run: "
         _cmd = self.name + " execute_run: "
         for c in cmd:
         for c in cmd:
             _cmd = _cmd + " " + c
             _cmd = _cmd + " " + c

+ 1 - 1
tests/hwsim/utils.py

@@ -92,7 +92,7 @@ def get_phy(ap, ifname=None):
 
 
     if ifname == None:
     if ifname == None:
         ifname = ap['ifname']
         ifname = ap['ifname']
-    status, buf = host.execute("iw dev " + ifname + " info")
+    status, buf = host.execute(["iw", "dev", ifname, "info"])
     if status != 0:
     if status != 0:
         raise Exception("iw " + ifname + " info failed")
         raise Exception("iw " + ifname + " info failed")
     lines = buf.split("\n")
     lines = buf.split("\n")

+ 3 - 3
tests/hwsim/wpasupplicant.py

@@ -99,7 +99,7 @@ class WpaSupplicant:
     def interface_add(self, ifname, config="", driver="nl80211",
     def interface_add(self, ifname, config="", driver="nl80211",
                       drv_params=None, br_ifname=None, create=False,
                       drv_params=None, br_ifname=None, create=False,
                       set_ifname=True, all_params=False, if_type=None):
                       set_ifname=True, all_params=False, if_type=None):
-        status, groups = self.host.execute("id")
+        status, groups = self.host.execute(["id"])
         if status != 0:
         if status != 0:
             group = "admin"
             group = "admin"
         group = "admin" if "(admin)" in groups else "adm"
         group = "admin" if "(admin)" in groups else "adm"
@@ -191,11 +191,11 @@ class WpaSupplicant:
         if iter == 60:
         if iter == 60:
             logger.error(self.ifname + ": Driver scan state did not clear")
             logger.error(self.ifname + ": Driver scan state did not clear")
             print "Trying to clear cfg80211/mac80211 scan state"
             print "Trying to clear cfg80211/mac80211 scan state"
-            status, buf = self.host.execute("ifconfig " + self.ifname + " down")
+            status, buf = self.host.execute(["ifconfig", self.ifname, "down"])
             if status != 0:
             if status != 0:
                 logger.info("ifconfig failed: " + buf)
                 logger.info("ifconfig failed: " + buf)
                 logger.info(status)
                 logger.info(status)
-            status, buf = self.host.execute("ifconfig " + self.ifname + " up")
+            status, buf = self.host.execute(["ifconfig", self.ifname, "up"])
             if status != 0:
             if status != 0:
                 logger.info("ifconfig failed: " + buf)
                 logger.info("ifconfig failed: " + buf)
                 logger.info(status)
                 logger.info(status)