def __del__(self):
try:
- self.process.kill()
+ self.process.terminate()
+ start = time.time()
+ while time.time() < start + 10000:
+ if self.process.poll():
+ break
+ else:
+ self.process.kill()
self.process.wait()
except (OSError, AttributeError):
pass
value = shlex.split(output.split('=')[-1].strip())[1]
return value
+ def info_registers(self, group):
+ output = self.command("info registers %s" % group)
+ result = {}
+ for line in output.splitlines():
+ if "Could not fetch" in line:
+ name, value = line.split(None, 1)
+ else:
+ name, hex_value, _ = line.split(None, 2)
+ value = int(hex_value, 0)
+ result[name] = value
+ return result
+
def stepi(self):
output = self.command("stepi", ops=10)
return output
result = instance.run()
log_fd.write("Result: %s\n" % result)
log_fd.write("Logfile: %s\n" % log_name)
+ log_fd.write("Reproduce: %s %s %s\n" % (sys.argv[0], parsed.target,
+ name))
finally:
sys.stdout = real_stdout
log_fd.write("Time elapsed: %.2fs\n" % (time.time() - start))
else:
print dash * length
-def print_log(path):
- header(path)
- for l in open(path, "r"):
+def print_log_handle(name, handle):
+ header(name)
+ for l in handle:
sys.stdout.write(l)
print
+def print_log(path):
+ print_log_handle(path, open(path, "r"))
+
class BaseTest(object):
compiled = {}
return result
finally:
+ # Get handles to logs before the files are deleted.
+ logs = []
for log in self.logs:
- print_log(log)
- header("End of logs")
+ logs.append((log, open(log, "r")))
+
self.classTeardown()
+ for name, handle in logs:
+ print_log_handle(name, handle)
+ header("End of logs")
if not result:
result = 'pass'