win_sigverif.py 2.1 KB
Newer Older
1 2
import logging
import re
3
import time
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

from virttest import error_context
from virttest import utils_test
from virttest import utils_misc
from virttest.utils_windows import system


@error_context.context_aware
def run(test, params, env):
    """
    sigverif test:
    1) Boot guest with related virtio devices
    2) Run sigverif command(an autoit script) in guest
    3) Open sigverif log and check whether driver is signed

    :param test: QEMU test object
    :param params: Dictionary with the test parameters
    :param env: Dictionary with test environment
    """

    vm = env.get_vm(params["main_vm"])
    session = vm.wait_for_login()
26 27
    vm.send_key('meta_l-d')
    time.sleep(60)
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59

    driver_name = params["driver_name"]
    session = utils_test.qemu.windrv_check_running_verifier(session, vm,
                                                            test, driver_name)

    run_sigverif_cmd = utils_misc.set_winutils_letter(
        session, params["run_sigverif_cmd"])
    sigverif_log = params["sigverif_log"]
    check_sigverif_cmd = params["check_sigverif_cmd"] % driver_name
    clean_sigverif_cmd = params["clean_sigverif_cmd"]

    error_context.context("Run sigverif in windows guest", logging.info)
    session.cmd(clean_sigverif_cmd, ignore_all_errors=True)
    status, output = session.cmd_status_output(run_sigverif_cmd)
    if status != 0:
        test.error(output)

    if not utils_misc.wait_for(lambda: system.file_exists(session,
                               sigverif_log), 180, 0, 5):
        test.error("sigverif logs are not created")

    try:
        error_context.context("Open sigverif logs and check driver signature"
                              " status", logging.info)
        output = session.cmd_output(check_sigverif_cmd)
        pattern = r"%s.sys.*\s{2,}Signed" % driver_name
        if not re.findall(pattern, output, re.M):
            test.fail("%s driver is not digitally signed, details info is:\n %s"
                      % (driver_name, output))
    finally:
        error_context.context("Clean sigverif logs", logging.info)
        session.cmd(clean_sigverif_cmd, ignore_all_errors=True)