From patchwork Fri Jun 18 00:14:32 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Goldish X-Patchwork-Id: 106787 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.3/8.14.3) with ESMTP id o5I0FkmA016080 for ; Fri, 18 Jun 2010 00:15:47 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1760935Ab0FRAPp (ORCPT ); Thu, 17 Jun 2010 20:15:45 -0400 Received: from mx1.redhat.com ([209.132.183.28]:27311 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1760601Ab0FRAPL (ORCPT ); Thu, 17 Jun 2010 20:15:11 -0400 Received: from int-mx03.intmail.prod.int.phx2.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o5I0FA2f001399 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 17 Jun 2010 20:15:10 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx03.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o5I0F8lS016418; Thu, 17 Jun 2010 20:15:08 -0400 Received: from localhost.localdomain (dhcp-1-188.tlv.redhat.com [10.35.1.188]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id o5I0EljV005733; Thu, 17 Jun 2010 20:15:07 -0400 From: Michael Goldish To: autotest@test.kernel.org, kvm@vger.kernel.org Cc: Michael Goldish Subject: [KVM-AUTOTEST PATCH 15/18] KVM test: kvm_vm.py: log serial console output and allow serial login Date: Fri, 18 Jun 2010 03:14:32 +0300 Message-Id: <1276820075-31310-15-git-send-email-mgoldish@redhat.com> In-Reply-To: <1276820075-31310-14-git-send-email-mgoldish@redhat.com> References: <1276820075-31310-1-git-send-email-mgoldish@redhat.com> <1276820075-31310-2-git-send-email-mgoldish@redhat.com> <1276820075-31310-3-git-send-email-mgoldish@redhat.com> <1276820075-31310-4-git-send-email-mgoldish@redhat.com> <1276820075-31310-5-git-send-email-mgoldish@redhat.com> <1276820075-31310-6-git-send-email-mgoldish@redhat.com> <1276820075-31310-7-git-send-email-mgoldish@redhat.com> <1276820075-31310-8-git-send-email-mgoldish@redhat.com> <1276820075-31310-9-git-send-email-mgoldish@redhat.com> <1276820075-31310-10-git-send-email-mgoldish@redhat.com> <1276820075-31310-11-git-send-email-mgoldish@redhat.com> <1276820075-31310-12-git-send-email-mgoldish@redhat.com> <1276820075-31310-13-git-send-email-mgoldish@redhat.com> <1276820075-31310-14-git-send-email-mgoldish@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.16 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter.kernel.org [140.211.167.41]); Fri, 18 Jun 2010 00:15:47 +0000 (UTC) diff --git a/client/tests/kvm/kvm_vm.py b/client/tests/kvm/kvm_vm.py index 5012d66..c8a282d 100755 --- a/client/tests/kvm/kvm_vm.py +++ b/client/tests/kvm/kvm_vm.py @@ -106,6 +106,7 @@ class VM: @param address_cache: A dict that maps MAC addresses to IP addresses """ self.process = None + self.serial_console = None self.redirs = {} self.vnc_port = 5900 self.uuid = None @@ -632,6 +633,15 @@ class VM: return False logging.debug("VM appears to be alive with PID %s", self.get_pid()) + + # Establish a session with the serial console -- requires a version + # of netcat that supports -U + self.serial_console = kvm_subprocess.kvm_shell_session( + "nc -U %s" % self.get_serial_console_filename(), + auto_close=False, + output_func=kvm_utils.log_line, + output_params=("serial-%s.log" % name,)) + return True finally: @@ -705,6 +715,8 @@ class VM: self.pci_assignable.release_devs() if self.process: self.process.close() + if self.serial_console: + self.serial_console.close() for f in ([self.get_testlog_filename()] + self.get_monitor_filenames()): try: @@ -973,6 +985,35 @@ class VM: remote_path, local_path, timeout) + def serial_login(self, timeout=10): + """ + Log into the guest via the serial console. + If timeout expires while waiting for output from the guest (e.g. a + password prompt or a shell prompt) -- fail. + + @param timeout: Time (seconds) before giving up logging into the guest. + @return: kvm_spawn object on success and None on failure. + """ + username = self.params.get("username", "") + password = self.params.get("password", "") + prompt = self.params.get("shell_prompt", "[\#\$]") + linesep = eval("'%s'" % self.params.get("shell_linesep", r"\n")) + status_test_command = self.params.get("status_test_command", "") + + if self.serial_console: + self.serial_console.set_linesep(linesep) + self.serial_console.set_status_test_command(status_test_command) + else: + return None + + # Make sure we get a login prompt + self.serial_console.sendline() + + if kvm_utils._remote_login(self.serial_console, username, password, + prompt, timeout): + return self.serial_console + + def send_key(self, keystr): """ Send a key event to the VM.