diff --git a/tests/integration/instances/virtualbox.py b/tests/integration/instances/virtualbox.py index 69fed19..fa3b7cd 100644 --- a/tests/integration/instances/virtualbox.py +++ b/tests/integration/instances/virtualbox.py @@ -45,12 +45,37 @@ class VirtualBoxInstance(Instance): os.close(handle) serial_port.path = self.serial_port_path serial_port.host_mode = vboxapi.library.PortMode.host_pipe - # serial_port.server = True + serial_port.server = True # Create the socket on startup machine.save_settings() def boot(self): self.machine.launch_vm_process(self.session, 'headless').wait_for_completion(-1) + def get_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) + output = '' + 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)) + break + except socket.error, e: + if e.errno != errno.EWOULDBLOCK: + raise Exception(e) + continue_select = False + console.close() + return output + def shutdown(self): self.session.console.power_down().wait_for_completion(-1) self.Lock(self.machine, self.session).unlock() diff --git a/tests/integration/virtualbox_tests.py b/tests/integration/virtualbox_tests.py index 0fd95f0..99b4459 100644 --- a/tests/integration/virtualbox_tests.py +++ b/tests/integration/virtualbox_tests.py @@ -45,23 +45,20 @@ volume: image_path = '/Users/anders/Workspace/cloud/images/debian-wheezy-amd64-141130.vmdk' image = VirtualBoxImage(manifest, image_path) - lines = [] + output = None try: instance = VirtualBoxInstance('unpartitioned_extlinux', image) try: instance.create() try: instance.boot() - lines = instance.get_console_output() + output = instance.get_console_output() # tools.reachable_with_ssh(instance) finally: instance.shutdown() finally: instance.destroy() finally: - # pass - if len(lines) > 0: - raise Exception('\n'.join(lines)) - # image.destroy() - # import os - # os.remove(image_path) + image.destroy() + import os + os.remove(image_path)