Mercurial > lcfOS
diff test/testemulation.py @ 338:8eb4a6fe8fc8
Added testcase with emulator
author | Windel Bouwman |
---|---|
date | Fri, 21 Feb 2014 13:31:29 +0100 |
parents | |
children | 6ee17c4dd6b8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/testemulation.py Fri Feb 21 13:31:29 2014 +0100 @@ -0,0 +1,67 @@ +import unittest +import os +import sys +import subprocess +import socket +import time + +from testzcc import ZccBaseTestCase + +# Store testdir for safe switch back to directory: +testdir = os.path.dirname(os.path.abspath(__file__)) + + +class EmulationTestCase(ZccBaseTestCase): + """ Tests the compiler driver """ + def setUp(self): + os.chdir(testdir) + if 'TESTEMU' not in os.environ: + self.skipTest('Not running emulation tests') + + def tearDown(self): + os.chdir(testdir) + + def runQemu(self, kernel, timespan=2): + args = ['qemu-system-arm', '-M', 'lm3s811evb', '-m', '16M', + '-nographic', '-kernel', kernel, '-monitor', + 'unix:qemucontrol.sock,server', + '-serial', 'unix:qemuserial.sock,server'] + p = subprocess.Popen(args) + + # Give process some time to boot: + time.sleep(0.5) + + # Connect to the control socket: + qemu_control = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + qemu_control.connect('qemucontrol.sock') + + time.sleep(0.5) + + # Now connect to the serial output: + qemu_serial = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + qemu_serial.connect('qemuserial.sock') + + + data = qemu_serial.recv(11).decode('ascii') + print(data) + + # Send quit command: + qemu_control.send("quit\n".encode('ascii')) + + p.wait(timeout=timespan) + + qemu_control.close() + qemu_serial.close() + + # Check that output was correct: + self.assertEqual('Hello worle', data) + + def testM3Bare(self): + """ Build bare m3 binary and emulate it """ + recipe = os.path.join(testdir, 'm3_bare', 'recipe.yaml') + self.buildRecipe(recipe) + self.runQemu('m3_bare/bare.bin') + + +if __name__ == '__main__': + unittest.main()