Re: [KVM-AUTOTEST PATCH 6/9] [RFC] KVM test: add utility functions start_windows_service() and stop_windows_service()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 08/05/2010 03:38 AM, Amos Kong wrote:
> On Thu, Jul 15, 2010 at 06:57:35PM +0300, Michael Goldish wrote:
>> These utilities use sc to stop and start windows services.  They're used by whql_submission
>> and whql_client_install to stop or restart wttsvc on the client machine.
>>
>> Signed-off-by: Michael Goldish <mgoldish@xxxxxxxxxx>
>> ---
>>  client/tests/kvm/kvm_test_utils.py |   46 ++++++++++++++++++++++++++++++++++++
>>  1 files changed, 46 insertions(+), 0 deletions(-)
>>
>> diff --git a/client/tests/kvm/kvm_test_utils.py b/client/tests/kvm/kvm_test_utils.py
>> index 53c11ae..9fd3a74 100644
>> --- a/client/tests/kvm/kvm_test_utils.py
>> +++ b/client/tests/kvm/kvm_test_utils.py
>> @@ -242,6 +242,52 @@ def migrate(vm, env=None, mig_timeout=3600, mig_protocol="tcp",
>>          raise
>>  
>>  
>> +def stop_windows_service(session, service, timeout=120):
>> +    """
>> +    Stop a Windows service using sc.
>> +    If the service is already stopped or is not installed, do nothing.
>> +
>> +    @param service: The name of the service
>> +    @param timeout: Time duration to wait for service to stop
>> +    @raise: error.TestError is raised if the service can't be stopped
>> +    """
>> +    end_time = time.time() + timeout
>> +    while time.time() < end_time:
>> +        o = session.get_command_output("sc stop %s" % service, timeout=60)
>> +        # FAILED 1060 means the service isn't installed.
>> +        # FAILED 1062 means the service hasn't been started.
>> +        if re.search(r"\bFAILED (1060|1062)\b", o, re.I):
>> +            break
>> +        time.sleep(1)
>> +    else:
>> +        raise error.TestError("Could not stop service '%s'" % service)
> 
> Hi Michael, 
> 
> How about combine those two function together ? we can also use it do other setup.
> 
>    def setup_windows_service(session, service, action, timeout=120):
>        ...
>        # FAILED 1060 means the service isn't installed.
>        # FAILED 1062 means the service hasn't been started.
>        # FAILED 1056 means the service is already running.
>        dict = {
>        #"$action" : ["$fail_str", "$break_str"]
>        "stop": ["", "(1060|1062)"],
>        "start": ["1060", "1056"],
>        ...
>        ...
>        }
> 
>        end_time = time.time() + timeout
>        while time.time() < end_time:
>            o = session.get_command_output("sc %s %s" % service, action, timeout=60)
>            if re.search(r"\bFAILED %s\b" % dict[action][0], o, re.I):
>                raise error.TestError("..... %s, %s" % (action, dict[action][0]))
>            if re.search(r"\bFAILED %s\b" % dict[action][1], o, re.I):
>                break
>            ...
>            ...
>            time.sleep(1)
>        else:
>            raise error.TestError("Could not %s service '%s'" % (action, service))

Personally I think this looks more complicated than having two separate
functions.

As for using the function to do other things, what other things did you
have in mind?  This function runs 'sc start' or 'sc stop' repeatedly
with no parameters until an error message is printed.  I don't know of
any other 'sc' operation that can work this way.  ('sc pause' and 'sc
continue' won't display error messages when the service is already
paused/resumed.  'sc config' and 'sc control' require additional
parameters.)

>> +def start_windows_service(session, service, timeout=120):
>> +    """
>> +    Start a Windows service using sc.
>> +    If the service is already running, do nothing.
>> +    If the service isn't installed, fail.
>> +
>> +    @param service: The name of the service
>> +    @param timeout: Time duration to wait for service to start
>> +    @raise: error.TestError is raised if the service can't be started
>> +    """
>> +    end_time = time.time() + timeout
>> +    while time.time() < end_time:
>> +        o = session.get_command_output("sc start %s" % service, timeout=60)
>> +        # FAILED 1060 means the service isn't installed.
>> +        if re.search(r"\bFAILED 1060\b", o, re.I):
>> +            raise error.TestError("Could not start service '%s' "
>> +                                  "(service not installed)" % service)
>> +        # FAILED 1056 means the service is already running.
>> +        if re.search(r"\bFAILED 1056\b", o, re.I):
>> +            break
>> +        time.sleep(1)
>> +    else:
>> +        raise error.TestError("Could not start service '%s'" % service)
>> +
>> +
>>  def get_time(session, time_command, time_filter_re, time_format):
>>      """
>>      Return the host time and guest time.  If the guest time cannot be fetched
>> -- 
>> 1.5.4.1
>>
>> --
>> 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
> --
> 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

--
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


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux