[PATCH 3/9] tests: remotehost add execute_stop()
Janusz Dziedzic
janusz.dziedzic at gmail.com
Sat Sep 26 07:26:54 EDT 2020
Before we have to kill application we start
in the thread - in most cases using
killall and sometimes kill other applicantions
eg. tcpdump, iper, iperf3, tshark
With this patch we are able to stop/kill
single application/thread instead, base
on pid file.
Signed-off-by: Janusz Dziedzic <janusz.dziedzic at gmail.com>
---
tests/hwsim/remotehost.py | 58 ++++++++++++++++++++++++++++++++++++---
1 file changed, 54 insertions(+), 4 deletions(-)
diff --git a/tests/hwsim/remotehost.py b/tests/hwsim/remotehost.py
index b87b58936..a1ef1f34b 100644
--- a/tests/hwsim/remotehost.py
+++ b/tests/hwsim/remotehost.py
@@ -8,6 +8,7 @@ import logging
import subprocess
import threading
import tempfile
+import os
logger = logging.getLogger()
@@ -34,6 +35,17 @@ def execute_thread(command, reply):
reply.append(status)
reply.append(buf)
+def gen_reaper_file(conf):
+ fd, filename = tempfile.mkstemp(dir='/tmp', prefix=conf + '-')
+ f = os.fdopen(fd, 'w')
+
+ f.write("#!/bin/sh\n")
+ f.write("name=\"$(basename $0)\"\n")
+ f.write("echo $$ > /tmp/$name.pid\n")
+ f.write("exec \"$@\"\n");
+
+ return filename;
+
class Host():
def __init__(self, host=None, ifname=None, port=None, name="", user="root"):
self.host = host
@@ -86,17 +98,55 @@ class Host():
return status, buf.decode()
# async execute
- def execute_run(self, command, res):
+ def execute_run(self, command, res, use_reaper=True):
+ if use_reaper:
+ filename = gen_reaper_file("reaper")
+ self.send_file(filename, filename)
+ self.execute(["chmod", "755", filename])
+ _command = [filename] + command
+ else:
+ filename = ""
+ _command = command
+
if self.host is None:
- cmd = command
+ cmd = _command
else:
- cmd = ["ssh", self.user + "@" + self.host, ' '.join(command)]
+ cmd = ["ssh", self.user + "@" + self.host, ' '.join(_command)]
_cmd = self.name + " execute_run: " + ' '.join(cmd)
logger.debug(_cmd)
- t = threading.Thread(target=execute_thread, args=(cmd, res))
+ t = threading.Thread(target=execute_thread, name=filename, args=(cmd, res))
t.start()
return t
+ def execute_stop(self, t):
+ if t.name.find("reaper") == -1:
+ raise Exception("use_reaper required")
+
+ pid_file = t.name + ".pid"
+
+ if t.isAlive():
+ cmd = ["kill `cat " + pid_file + "`"]
+ self.execute(cmd)
+
+ # try again
+ self.wait_execute_complete(t, 5)
+ if t.isAlive():
+ cmd = ["kill `cat " + pid_file + "`"]
+ self.execute(cmd)
+
+ # try with -9
+ self.wait_execute_complete(t, 5)
+ if t.isAlive():
+ cmd = ["kill -9 `cat " + pid_file + "`"]
+ self.execute(cmd)
+
+ self.wait_execute_complete(t, 5)
+ if t.isAlive():
+ raise Exception("thread still alive")
+
+ self.execute(["rm", pid_file])
+ self.execute(["rm", t.name])
+
def wait_execute_complete(self, t, wait=None):
if wait == None:
wait_str = "infinite"
--
2.17.1
More information about the Hostap
mailing list