On Thu, 2011-02-24 at 16:32 +0800, Yiqiao Pu wrote: > This function will help test to scp file between two remote os. > It can be two guest, one guest and one host or other conditions
I'll just briefly comment what we talked over irc for documentation purposes: > Signed-off-by: Yiqiao Pu <[email protected]> > --- > client/tests/kvm/kvm_utils.py | 46 +++++++++++++++++++++++++++++++++++++++- > 1 files changed, 44 insertions(+), 2 deletions(-) > > diff --git a/client/tests/kvm/kvm_utils.py b/client/tests/kvm/kvm_utils.py > index de52b65..19a613d 100644 > --- a/client/tests/kvm/kvm_utils.py > +++ b/client/tests/kvm/kvm_utils.py > @@ -701,6 +701,8 @@ def _remote_scp(session, password, transfer_timeout=600, > login_timeout=10): > timeout = login_timeout > authentication_done = False > > + scp_type = len(password) ^ Here you are modifying the internal function interface, instead of a password you take a list of passwords. So, please modify the docstring and it might be a good idea to change the parameter name to password_list for more clarity. > + > while True: > try: > match, text = session.read_until_last_line_matches( > @@ -714,6 +716,18 @@ def _remote_scp(session, password, transfer_timeout=600, > login_timeout=10): > if password_prompt_count == 0: > logging.debug("Got password prompt; sending '%s'", > password) > session.sendline(password) > + logging.debug("Got password prompt; sending '%s'" % > + password[password_prompt_count]) > + session.sendline(password[password_prompt_count]) > + password_prompt_count += 1 > + timeout = transfer_timeout > + if scp_type == 1: > + authentication_done = True > + continue > + elif password_prompt_count == 1 and scp_type == 2: > + logging.debug("Got password prompt; sending '%s'" % > > + password[password_prompt_count]) > + session.sendline(password[password_prompt_count]) > password_prompt_count += 1 > timeout = transfer_timeout > authentication_done = True > @@ -789,7 +803,10 @@ def scp_to_remote(host, port, username, password, > local_path, remote_path, > command = ("scp -v -o UserKnownHostsFile=/dev/null " > "-o PreferredAuthentications=password -r -P %s %s %s@%s:%s" % > (port, local_path, username, host, remote_path)) > - remote_scp(command, password, log_filename, timeout) > + password_list = [] > + password_list.append(password) > + return remote_scp(command, password_list, log_filename, timeout) > + > > > def scp_from_remote(host, port, username, password, remote_path, local_path, > @@ -810,8 +827,33 @@ def scp_from_remote(host, port, username, password, > remote_path, local_path, > command = ("scp -v -o UserKnownHostsFile=/dev/null " > "-o PreferredAuthentications=password -r -P %s %s@%s:%s %s" % > (port, username, host, remote_path, local_path)) > - remote_scp(command, password, log_filename, timeout) > + password_list = [] > + password_list.append(password) > + remote_scp(command, password_list, log_filename, timeout) > + > +def scp_remote(src, dst, port, s_passwd, d_passwd, s_name, d_name, s_path, > + d_path, log_filename=None, timeout=600): ^ Considering the naming of the other functions present on the module, a better name for scp_remote() would be scp_between_remotes(). > + """ > + Copy files from a remote host (guest) to another remote host(guest). > + > + @param src/dst: Hostname or IP address of src and dst > + @param s_name/d_name: Username (if required) > + @param s_passwd/d_passwd: Password (if required) > + @param s_path/d_path: Path on the remote machine where we are copying > + from/to > + @param log_filename: If specified, log all output to this file > + @param timeout: The time duration (in seconds) to wait for the transfer > + to complete. > > + @return: True on success and False on failure. > + """ > + command = ("scp -v -o UserKnownHostsFile=/dev/null -o " > + "PreferredAuthentications=password -r -P %s %s@%s:%s > %s@%s:%s" % > + (port, s_name, src, s_path, d_name, dst, d_path)) > + password_list = [] > + password_list.append(s_passwd) > + password_list.append(d_passwd) > + return remote_scp(command, password_list, log_filename, timeout) > > def copy_files_to(address, client, username, password, port, local_path, > remote_path, log_filename=None, verbose=False, > timeout=600): _______________________________________________ Autotest mailing list [email protected] http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
