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()