summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/lib/oeqa/utils/oeqemuconsole.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/meta/lib/oeqa/utils/oeqemuconsole.py b/meta/lib/oeqa/utils/oeqemuconsole.py
new file mode 100644
index 0000000..95a2133
--- /dev/null
+++ b/meta/lib/oeqa/utils/oeqemuconsole.py
@@ -0,0 +1,45 @@
1import socket
2import time
3import re
4from telnetlib import Telnet
5
6class oeQemuConsole(Telnet):
7
8 """
9 Override Telnet class to use unix domain sockets,
10 Telnet uses AF_INET for socket, we don't want that.
11 Also, provide a read_all variant with timeout, that
12 returns whatever output there is.
13 """
14
15 def __init__(self, stream, logfile):
16
17 Telnet.__init__(self, host=None)
18 self.stream = stream
19 self.logfile = logfile
20 self.eof = 0
21 self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
22 self.sock.connect(stream)
23
24 def log(self, msg):
25 if self.logfile:
26 with open(self.logfile, "a") as f:
27 f.write("%s\n" % msg)
28
29
30 def read_all_timeout(self, match, timeout=200):
31 """Read until EOF or until timeout or until match.
32 """
33 ret = False
34 self.process_rawq()
35 endtime = time.time() + timeout
36 while not self.eof and time.time() < endtime:
37 self.fill_rawq()
38 self.process_rawq()
39 if re.search(match, self.cookedq):
40 ret = True
41 break
42 buf = self.cookedq
43 self.cookedq = ''
44 self.log(buf)
45 return (ret, buf)