lib/oeqa: make it possible to restart the target

Tweak QemuRunner so we can actually restart the
qemu target in a test (if we want more memory for example).
Also add a restart method to the base test class so that tests
can use it.

(From OE-Core rev: 9de7fe11967576f4a8b24e653c6b9a02e5f6d85b)

Signed-off-by: Stefan Stanacar <stefanx.stanacar@intel.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Stefan Stanacar 2013-08-22 14:47:21 +03:00 committed by Richard Purdie
parent ecb21fd7f8
commit 51588936d4
2 changed files with 28 additions and 7 deletions

View File

@ -81,6 +81,13 @@ class oeRuntimeTest(unittest.TestCase):
else:
return False
@classmethod
def restartTarget(self,params=None):
if oeRuntimeTest.tc.qemu.restart(params):
oeRuntimeTest.tc.target.host = oeRuntimeTest.tc.qemu.ip
else:
raise Exception("Restarting target failed")
def getmodule(pos=2):

View File

@ -32,6 +32,10 @@ class QemuRunner:
self.boottime = boottime
self.runqemutime = runqemutime
self.create_socket()
def create_socket(self):
self.bootlog = ''
self.qemusock = None
@ -137,21 +141,31 @@ class QemuRunner:
return self.is_alive()
def kill(self):
if self.runqemu:
bb.note("Sending SIGTERM to runqemu")
os.kill(-self.runqemu.pid,signal.SIGTERM)
endtime = time.time() + self.runqemutime
while self.runqemu.poll() is None and time.time() < endtime:
time.sleep(1)
if self.runqemu.poll() is None:
bb.note("Sending SIGKILL to runqemu")
os.kill(-self.runqemu.pid,signal.SIGKILL)
self.runqemu = None
if self.server_socket:
self.server_socket.close()
self.server_socket = None
if self.runqemu.pid:
os.kill(-self.runqemu.pid,signal.SIGTERM)
os.kill(-self.runqemu.pid,signal.SIGKILL)
self.runqemu.pid = None
self.qemupid = None
self.ip = None
def restart(self, qemuparams = None):
if self.is_alive():
bb.note("Restarting qemu process")
if self.runqemu.poll() is None:
self.kill()
bb.note("Qemu Restart required...")
return self.launch(qemuparams)
self.create_socket()
if self.launch(qemuparams):
return True
return False
def is_alive(self):
qemu_child = self.find_child(str(self.runqemu.pid))