In order to let the serial console work, we must let the remote_login() send the username when met the username prompt. This patch fails the progress if if it met the username prompt twice. Signed-off-by: Jason Wang <jasowang@xxxxxxxxxx> --- client/tests/kvm/kvm_utils.py | 23 ++++++++++++++++------- 1 files changed, 16 insertions(+), 7 deletions(-) diff --git a/client/tests/kvm/kvm_utils.py b/client/tests/kvm/kvm_utils.py index 11f2b1a..2800fae 100644 --- a/client/tests/kvm/kvm_utils.py +++ b/client/tests/kvm/kvm_utils.py @@ -451,7 +451,7 @@ def check_kvm_source_dir(source_dir): # The following are functions used for SSH, SCP and Telnet communication with # guests. -def remote_login(command, password, prompt, linesep="\n", timeout=10, +def remote_login(command, username, password, prompt, linesep="\n", timeout=10, prompt_assist=None): """ Log into a remote host (guest) using SSH or Telnet. Run the given command @@ -462,6 +462,7 @@ def remote_login(command, password, prompt, linesep="\n", timeout=10, @brief: Log into a remote host (guest) using SSH or Telnet. @param command: The command to execute (e.g. "ssh root@localhost") + @param username: The username to send in reply to a username prompt @param password: The password to send in reply to a password prompt @param prompt: The shell prompt that indicates a successful login @param linesep: The line separator to send instead of "\\n" @@ -471,6 +472,7 @@ def remote_login(command, password, prompt, linesep="\n", timeout=10, password prompt, the shell prompt, etc) @param prompt_assist: An assistant string sent before the pattern matching in order to get the prompt for some kinds of shell_client. + @return Return the kvm_spawn object on success and None on failure. """ sub = kvm_subprocess.kvm_shell_session(command, @@ -478,6 +480,7 @@ def remote_login(command, password, prompt, linesep="\n", timeout=10, prompt=prompt) password_prompt_count = 0 + login_prompt_count = 0 logging.debug("Trying to login with command '%s'" % command) @@ -505,9 +508,15 @@ def remote_login(command, password, prompt, linesep="\n", timeout=10, sub.close() return None elif match == 2: # "login:" - logging.debug("Got unexpected login prompt") - sub.close() - return None + if login_prompt_count == 0: + logging.debug("Got username prompt; sending '%s'" % username) + sub.sendline(username) + login_prompt_count += 1 + continue + else: + logging.debug("Got username prompt again") + sub.close() + return None elif match == 3: # "Connection closed" logging.debug("Got 'Connection closed'") sub.close() @@ -644,7 +653,7 @@ def ssh(host, port, username, password, prompt, linesep="\n", timeout=10): command = ("ssh -o UserKnownHostsFile=/dev/null " "-o PreferredAuthentications=password -p %s %s@%s" % (port, username, host)) - return remote_login(command, password, prompt, linesep, timeout) + return remote_login(command, username, password, prompt, linesep, timeout) def telnet(host, port, username, password, prompt, linesep="\n", timeout=10): @@ -661,7 +670,7 @@ def telnet(host, port, username, password, prompt, linesep="\n", timeout=10): @return: kvm_spawn object on success and None on failure. """ command = "telnet -l %s %s %s" % (username, host, port) - return remote_login(command, password, prompt, linesep, timeout) + return remote_login(command, username, password, prompt, linesep, timeout) def netcat(host, port, username, password, prompt, linesep="\n", timeout=10): @@ -678,7 +687,7 @@ def netcat(host, port, username, password, prompt, linesep="\n", timeout=10): @return: kvm_spawn object on success and None on failure. """ command = "nc %s %s" % (host, port) - return remote_login(command, password, prompt, linesep, timeout) + return remote_login(command, username, password, prompt, linesep, timeout) # The following are utility functions related to ports. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html