From 27950af66e207bd8f78bd23ed154c065bfbe10d6 Mon Sep 17 00:00:00 2001 From: Anders Ingemann Date: Sat, 20 Dec 2014 02:43:20 +0100 Subject: [PATCH] Check runlevel in order to terminate reading from the console --- tests/integration/instances/virtualbox.py | 15 ++++++++++++--- tests/integration/virtualbox_tests.py | 2 -- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/tests/integration/instances/virtualbox.py b/tests/integration/instances/virtualbox.py index fa3b7cd..9766fe8 100644 --- a/tests/integration/instances/virtualbox.py +++ b/tests/integration/instances/virtualbox.py @@ -50,24 +50,33 @@ class VirtualBoxInstance(Instance): def boot(self): self.machine.launch_vm_process(self.session, 'headless').wait_for_completion(-1) + self.console_output = self._read_console_output() - def get_console_output(self): + def _read_console_output(self): import socket import select import errno import sys console = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) console.connect(self.serial_port_path) - console.setblocking(0) + + runlvl_check = 'INIT: Entering runlevel: 2' output = '' + ptr = 0 continue_select = True while continue_select: read_ready, _, _ = select.select([console], [], []) if console in read_ready: while True: try: - sys.stdout.write(console.recv(1024)) + read = console.recv(1024) + output += read + sys.stdout.write(read) + if runlvl_check in output[ptr:]: + continue_select = False + else: + ptr = len(output) - len(runlvl_check) break except socket.error, e: if e.errno != errno.EWOULDBLOCK: diff --git a/tests/integration/virtualbox_tests.py b/tests/integration/virtualbox_tests.py index 99b4459..36fb8ad 100644 --- a/tests/integration/virtualbox_tests.py +++ b/tests/integration/virtualbox_tests.py @@ -45,14 +45,12 @@ volume: image_path = '/Users/anders/Workspace/cloud/images/debian-wheezy-amd64-141130.vmdk' image = VirtualBoxImage(manifest, image_path) - output = None try: instance = VirtualBoxInstance('unpartitioned_extlinux', image) try: instance.create() try: instance.boot() - output = instance.get_console_output() # tools.reachable_with_ssh(instance) finally: instance.shutdown()