public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Yolkfull Chow <yzhou@redhat.com>
To: Michael Goldish <mgoldish@redhat.com>
Cc: autotest@test.kernel.org, kvm@vger.kernel.org
Subject: Re: [Autotest] [KVM-AUTOTEST PATCH v2 1/3] KVM test: add AutoIt test
Date: Tue, 11 Aug 2009 20:46:13 +0800	[thread overview]
Message-ID: <20090811124613.GB2941@aFu.nay.redhat.com> (raw)
In-Reply-To: <35538aadbfdd5edaafca8b46f1d1c2b4e10c0420.1249992282.git.mgoldish@redhat.com>

On Tue, Aug 11, 2009 at 03:10:42PM +0300, Michael Goldish wrote:
> Currently the test only logs in, runs a given script and fails if the script
> takes too long to exit or if its exit status is nonzero.
> 
> The test expects these parameters:
> autoit_binary: Path to AutoIt binary in the guest.
> autoit_script: Path to script in the host.
> autoit_script_params: Command line parameters to send to the script.
> autoit_script_timeout: The time duration (in seconds) to wait for the script to
> exit.
> 
> The test code can be extended later to add more features.
> 
> Signed-off-by: Michael Goldish <mgoldish@redhat.com>
> ---
>  client/tests/kvm/kvm.py       |    1 +
>  client/tests/kvm/kvm_tests.py |   66 +++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 67 insertions(+), 0 deletions(-)
> 
> diff --git a/client/tests/kvm/kvm.py b/client/tests/kvm/kvm.py
> index 070e463..4930e80 100644
> --- a/client/tests/kvm/kvm.py
> +++ b/client/tests/kvm/kvm.py
> @@ -56,6 +56,7 @@ class kvm(test.test):
>                  "linux_s3":     test_routine("kvm_tests", "run_linux_s3"),
>                  "stress_boot":  test_routine("kvm_tests", "run_stress_boot"),
>                  "timedrift":    test_routine("kvm_tests", "run_timedrift"),
> +                "autoit":       test_routine("kvm_tests", "run_autoit"),
>                  }
>  
>          # Make it possible to import modules from the test's bindir
> diff --git a/client/tests/kvm/kvm_tests.py b/client/tests/kvm/kvm_tests.py
> index 9cd01e2..749c1fd 100644
> --- a/client/tests/kvm/kvm_tests.py
> +++ b/client/tests/kvm/kvm_tests.py
> @@ -776,3 +776,69 @@ def run_timedrift(test, params, env):
>      if drift > drift_threshold_after_rest:
>          raise error.TestFail("Time drift too large after rest period: %.2f%%"
>                               % drift_total)
> +
> +
> +def run_autoit(test, params, env):
> +    """
> +    A wrapper for AutoIt scripts.
> +
> +    1) Log into a guest.
> +    2) Run AutoIt script.
> +    3) Wait for script execution to complete.
> +    4) Pass/fail according to exit status of script.
> +
> +    @param test: KVM test object.
> +    @param params: Dictionary with test parameters.
> +    @param env: Dictionary with the test environment.
> +    """
> +    vm = kvm_utils.env_get_vm(env, params.get("main_vm"))
> +    if not vm:
> +        raise error.TestError("VM object not found in environment")
> +    if not vm.is_alive():
> +        raise error.TestError("VM seems to be dead; Test requires a living VM")
> +
> +    logging.info("Waiting for guest to be up...")
> +
> +    session = kvm_utils.wait_for(vm.remote_login, 240, 0, 2)
> +    if not session:
> +        raise error.TestFail("Could not log into guest")
> +
> +    try:
> +        logging.info("Logged in; starting script...")
> +
> +        # Collect test parameters
> +        binary = params.get("autoit_binary")
> +        script = params.get("autoit_script")
> +        script_params = params.get("autoit_script_params", "")
> +        timeout = float(params.get("autoit_script_timeout", 600))
> +
> +        # Send AutoIt script to guest (this code will be replaced once we
> +        # support sending files to Windows guests)
> +        session.sendline("del script.au3")
> +        file = open(kvm_utils.get_path(test.bindir, script))
> +        for line in file.readlines():
> +            # Insert a '^' before each character
> +            line = "".join("^" + c for c in line.rstrip())
> +            if line:
> +                # Append line to the file
> +                session.sendline("echo %s>>script.au3" % line)
> +        file.close()
> +
> +        session.read_up_to_prompt()
> +
> +        command = "cmd /c %s script.au3 %s" % (binary, script_params)

Hi Michael, for the problem that execute script in Windows cmd shell, I
have some information share with you:

Guys in our team had found that the value which `echo %errorlevel%`
returns is not always right. It just reflects whether the action to
execute the script has been implemented successfully and it ALWAYS return
even if errors occur. That means as soon as the script has been started
successfully it will return 0 even if error occurred during script running.

One solution could be use command 'start /wait script.au3' which will
let program wait for it to terminate:
http://ss64.com/nt/start.html

I have not investigated it enough as well, if any mistake made, please
just ignore this reply. ;-)


> +
> +        logging.info("---------------- Script output ----------------")
> +        status = session.get_command_status(command,
> +                                            print_func=logging.info,
> +                                            timeout=timeout)
> +        logging.info("---------------- End of script output ----------------")
> +
> +        if status is None:
> +            raise error.TestFail("Timeout expired before script execution "
> +                                 "completed (or something weird happened)")
> +        if status != 0:
> +            raise error.TestFail("Script execution failed")
> +
> +    finally:
> +        session.close()
> -- 
> 1.5.4.1
> 
> _______________________________________________
> Autotest mailing list
> Autotest@test.kernel.org
> http://test.kernel.org/cgi-bin/mailman/listinfo/autotest

  parent reply	other threads:[~2009-08-11 12:45 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-08-11 12:10 [KVM-AUTOTEST PATCH v2 0/3] KVM test: corrections to the AutoIt patchset Michael Goldish
2009-08-11 12:10 ` [KVM-AUTOTEST PATCH v2 1/3] KVM test: add AutoIt test Michael Goldish
2009-08-11 12:10   ` [KVM-AUTOTEST PATCH v2 2/3] KVM test: add sample AutoIt script Michael Goldish
2009-08-11 12:10   ` [KVM-AUTOTEST PATCH v2 3/3] KVM test: add AutoIt test to kvm_tests.cfg.sample Michael Goldish
2009-08-12  2:05     ` Cao, Chen
2009-08-11 12:46   ` Yolkfull Chow [this message]
2009-08-18 20:21 ` [Autotest] [KVM-AUTOTEST PATCH v2 0/3] KVM test: corrections to the AutoIt patchset Lucas Meneghel Rodrigues
     [not found] <886730227.1753351249996764330.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com>
2009-08-11 13:27 ` [Autotest] [KVM-AUTOTEST PATCH v2 1/3] KVM test: add AutoIt test Michael Goldish
2009-08-11 13:49   ` Yolkfull Chow

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090811124613.GB2941@aFu.nay.redhat.com \
    --to=yzhou@redhat.com \
    --cc=autotest@test.kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=mgoldish@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox