def sleep_method1():
    try:
        log.info('sleep by wait time')
        power_manager = PowerManagerFactory("AC")
        power_manager.AC.open_power_manager_from_control_panel()
        power_manager.AC.switch()
        power_manager.AC.set(pms=pms.AC.Minutes_before_system_sleep,
                             radio="on",
                             text="{}".format('1'))
        with PrepareWakeUp(time=80) as w:
            power_manager.AC.apply()
            w.wait(60)
        to_os = ScreenSaver()
        to_os.resume_lock_screen_by_mouse()
        time_gap = w.get_max_time_gap()
        w.set_max_time_gap(0)
        power_manager.AC.set(pms=pms.AC.Minutes_before_system_sleep,
                             radio="on",
                             text="{}".format('30'))
        power_manager.AC.apply()
        time.sleep(5)
        power_manager.AC.close_all_power_manager()
        return time_gap
    except:
        log.warning(traceback.format_exc())
        return '0'
def sleep_method2(f):
    try:
        with PrepareWakeUp(time=0) as w:
            f()
        to_os = ScreenSaver()
        to_os.resume_lock_screen_by_mouse()
        time_gap = w.get_max_time_gap()
        w.set_max_time_gap(0)
        return time_gap
    except:
        log.warning(traceback.format_exc())
        return '0'
def step_1(**kwargs):
    log = kwargs.get("log")
    try:
        screensaver = ScreenSaver()
        screensaver.set_default_setting()
        log.info("set screen saver default success")
        pmcf.SwitchThinProMode("user")
        return True
    except:
        log.error(traceback.format_exc())
        log.error("set screen saver default fail")
        return False
def step_7_8(**kwargs):
    log = kwargs.get("log")
    case_name = kwargs.get("case_name")
    user_password = kwargs.get("user_password", "1")
    try:
        log.info("start set the user password")
        set_user_password(password=user_password)
        os.system("mclient --quiet set root/screensaver/lockScreenUser 1"
                  )  # enable require password for general users
        os.system("mclient commit")
        log.info("enable require password for general users")
        pmcf.SwitchThinProMode("user")
        screensaver = ScreenSaver()
        log.info("lock screen")
        screensaver.lock_screen_by_hotkey()  # lock screen
        time.sleep(2)
        pyautogui.click()
        time.sleep(2)
        if not wait_element(pic("_screen_lock_by_user")):
            log.error("not found the lock screen dialog")
            pyautogui.click()
            return [False, "not found the lock screen dialog"]
        log.info("found the lock screen dialog")
        pyautogui.typewrite(user_password)
        time.sleep(1)
        pyautogui.press("enter")
        time.sleep(2)
        if wait_element(pic("_screen_lock_by_user")):
            log.error("unlock fail")
            log.debug(
                "unlock fail",
                cf.get_current_dir(
                    'Test_Report', 'img',
                    '{}.png'.format(case_name.replace(' ', '_'))))
            screensaver.resume_screensaver_by_keyboard()
            pyautogui.screenshot(
                cf.get_current_dir("Test_Report/screen_lock_citrix_error.png"))
            return [False, "unlock fail"]
        log.info("unlock success")
        return [True, "unlock success"]
    except:
        log.error(traceback.format_exc())
        return [False, traceback.format_exc()]
def lock_screen():
    log.info("press ctrl alt s to lock screen")
    ScreenSaver.lock_screen_by_hotkey()
    if not linux_check_locked() or click_icon('start'):
        log.info("screen not locked, try again")
        ScreenSaver.lock_screen_by_command()
def step_2(**kwargs):
    log = kwargs.get("log")
    case_name = kwargs.get("case_name")
    try:
        pmcf.SwitchThinProMode("user")
        multiuser = vdi_connection.MultiUserManger()
        for _ in range(6):
            user = multiuser.get_a_available_key()
            if user:
                break
            time.sleep(180)
        else:
            log.error("not get a valid user")
            return [False, "not has invalid user"]
        parameters = {'vdi': 'citrix', 'session': 'win10'}
        citrix = vdi_connection.CitrixLinux(
            user=user,
            setting=vdi_setting()["set"]["citrix"]
            ["screen_lock_with_password_step2"],
            parameters=parameters)

        for _ in range(2):
            if citrix.logon(parameters.get("session", "")):
                for _ in range(10):
                    time.sleep(10)
                    if wait_element(pic("_win10_start_icon")):
                        break
                else:
                    log.debug(
                        "log on vdi fail",
                        cf.get_current_dir(
                            'Test_Report', 'img',
                            '{}.png'.format(case_name.replace(' ', '_'))))
                    citrix.logoff()
                    time.sleep(5)
                    continue
                break
        else:
            log.debug(
                "log on vdi fail",
                cf.get_current_dir(
                    'Test_Report', 'img',
                    '{}.png'.format(case_name.replace(' ', '_'))))
            os.system("wmctrl -c 'Citrix Workspace'")
            multiuser.reset_key(user)
            return [False, "log on vdi fail"]
        log.info("logon vdi success")
        screensaver = ScreenSaver()
        screensaver.lock_screen_by_hotkey()
        log.info("lock screen")
        time.sleep(2)
        pyautogui.click()
        time.sleep(2)
        if wait_element(pic("_lock_screen_dialog")):
            log.error("found lock screen dialog")
            citrix.logoff()
            multiuser.reset_key(user)
            return [False, "found lock screen dialog"]
        if wait_element(pic("_win10_start_icon")):
            log.info("unlock screen success")
            citrix.logoff()
            multiuser.reset_key(user)
            return [True, "unlock screen success"]
        log.error("unlock screen fail")
        citrix.logoff()
        multiuser.reset_key(user)
        return [False, "unlock screen fail"]
    except:
        log.error(traceback.format_exc())
        return [False, traceback.format_exc()]
def step_9(**kwargs):
    log = kwargs.get("log")
    case_name = kwargs.get("case_name")
    user_password = kwargs.get("user_password", "1")
    try:
        pmcf.SwitchThinProMode("user")
        multiuser = vdi_connection.MultiUserManger()
        for _ in range(6):
            user = multiuser.get_a_available_key()
            if user:
                break
            time.sleep(180)
        else:
            log.error("not get a valid user")
            return [False, "not has invalid user"]
        parameters = {'vdi': 'citrix', 'session': 'win10'}
        vdi = vdi_connection.CitrixLinux(user=user,
                                         setting=vdi_setting()["set"]["citrix"]
                                         ["screen_lock_with_password_step3"],
                                         parameters=parameters)
        for _ in range(2):
            if vdi.logon(parameters.get("session", "")):
                for _ in range(10):
                    time.sleep(10)
                    if wait_element(pic("_win10_start_icon")):
                        break
                else:
                    log.debug(
                        "log on vdi fail",
                        cf.get_current_dir(
                            'Test_Report', 'img',
                            '{}.png'.format(case_name.replace(' ', '_'))))
                    vdi.logoff()
                    time.sleep(5)
                    continue
                break
        else:
            log.debug(
                "log on vdi fail",
                cf.get_current_dir(
                    'Test_Report', 'img',
                    '{}.png'.format(case_name.replace(' ', '_'))))
            multiuser.reset_key(user)
            return [False, "log on vdi fail"]
        log.info("logon vdi success")
        log.info("start lock screen")
        screensaver = ScreenSaver()
        screensaver.lock_screen_by_hotkey()  # lock screen
        time.sleep(2)
        pyautogui.click()
        if not wait_element(pic("_user_of_credentials")):
            log.error("'user' not in credentials list")
            vdi.logoff()
            multiuser.reset_key(user)
            return [False, "'user' not in credentials list"]
        log.info("'user' in credentials list")
        log.info("try use logon vdi password to unlock")
        pyautogui.typewrite(vdi_user_info()["password"], interval=0.1)
        time.sleep(1)
        pyautogui.press("enter")
        time.sleep(1)
        if not wait_element(pic("_win10_start_icon")):
            log.error("unlock screen fail")
            vdi.logoff()
            multiuser.reset_key(user)
            return [False, "unlock screen fail"]
        log.info("unlock screen success")

        time.sleep(2)
        screensaver.lock_screen_by_hotkey()
        time.sleep(2)
        pyautogui.click()
        if not wait_element(pic("_user_of_credentials")):
            log.error("'user' not in credentials list")
            vdi.logoff()
            multiuser.reset_key(user)
            return [False, "'user' not in credentials list"]
        log.info("'user' in credentials list")
        log.info("try use 'user' to unlock")

        if wait_element(pic("_tool")):
            pyautogui.press("tab", presses=5, interval=0.3)
        else:
            pyautogui.press("tab", presses=9, interval=0.3)
        pyautogui.typewrite("user", interval=0.1)
        pyautogui.press("tab")
        time.sleep(1)
        pyautogui.typewrite(user_password, interval=0.1)
        time.sleep(1)
        pyautogui.press("enter")
        if not wait_element(pic("_win10_start_icon")):
            log.error("unlock screen fail")
            vdi.logoff()
            multiuser.reset_key(user)
            return [False, "'user' not in credentials list"]
        log.info("unlock screen success")
        log.info("start logoff vdi")
        vdi.logoff()
        multiuser.reset_key(user)
        return [True, "success"]
    except:
        log.error(traceback.format_exc())
        return [False, traceback.format_exc()]
def step_5_6(**kwargs):
    log = kwargs.get("log")
    session = kwargs.get("session")
    case_name = kwargs.get('case_name')
    root_password = kwargs.get("root_password", "1")
    try:
        pmcf.SwitchThinProMode("user")
        multiuser = vdi_connection.MultiUserManger()
        for _ in range(6):
            user = multiuser.get_a_available_key()
            if user:
                break
            time.sleep(180)
        else:
            log.error("not get a valid user")
            return [False, "not has invalid user"]
        citrix = vdi_connection.CitrixLinux(
            user=user,
            setting=vdi_setting()["set"]["citrix"]
            ["screen_lock_with_password_step5"],
            parameters={
                'vdi': 'citrix',
                'session': 'win10'
            })
        if not citrix.import_cert():
            log.error("thinpro import rootca certificate fail")
            multiuser.reset_key(user)
            return [False, "thinpro import rootca certificate fail"]
        citrix.delete_vdi('xen')
        citrix.create_vdi('xen')
        time.sleep(1)
        citrix_id = citrix.vdi_connection_id('xen')[0]
        citrix.set_citrix_connection_from_yml(citrix_id)

        log.info("connect citrix VDI desktop")
        time.sleep(1)
        # os.popen("connection-mgr start {}".format(citrix_id))
        for _ in range(2):
            citrix.connect_vdi_by_pic()

            time.sleep(10)
            if not wait_element(pic("_citrix_input_credentials_dialog")):
                log.debug(
                    "not open input credentials dialog",
                    cf.get_current_dir(
                        'Test_Report', 'img',
                        '{}.png'.format(case_name.replace(' ', '_'))))
                os.system("wmctrl -c 'HP - Citrix Server Error'")
                os.system("wmctrl -c 'Citrix Workspace'")
                time.sleep(5)
                continue
            log.info("input domain, user and password")
            pyautogui.typewrite(r"{}\{}".format(vdi_user_info()["domain"],
                                                user),
                                interval=0.1)
            pyautogui.press("tab")
            pyautogui.typewrite(vdi_user_info()["password"], interval=0.1)
            pyautogui.press("enter")
            log.info(r"user: '******', password: '******'".format(
                vdi_user_info()["domain"], user,
                vdi_user_info()["password"]))
            time.sleep(20)

            if not wait_element(pic("_citrix_workspace_broker")):
                if wait_element(pic("_win10_start_icon")
                                ):  # check whether auto logon vdi desktop
                    log.info("auto logon vdi desktop success")
                    pyautogui.click(1, 1)
                    break
                else:
                    log.debug(
                        "open citrix workspace broker fail",
                        cf.get_current_dir(
                            'Test_Report', 'img',
                            '{}.png'.format(case_name.replace(' ', '_'))))
                    os.system("wmctrl -c 'HP - Citrix Server Error'")
                    os.system("wmctrl -c 'Citrix Workspace'")
                    time.sleep(5)
                    continue
            else:
                log.info("open citrix workspace broker success")
                if not citrix.logon_desktop_by_pic():
                    log.debug(
                        "desktops or target desktop not found",
                        cf.get_current_dir('Test_Report', 'img',
                                           '{}.png'.format(case_name)))
                    os.system("wmctrl -c 'HP - Citrix Server Error'")
                    os.system("wmctrl -c 'Citrix Workspace'")
                    time.sleep(5)
                    continue
                for i in range(15):
                    log.info("wait log on citrix desktop...")
                    time.sleep(10)
                    if wait_element(pic("_win10_start_icon")):
                        log.info("login vdi connection success")
                        break
                    else:
                        continue
                else:
                    log.debug(
                        "login vdi connection fail",
                        cf.get_current_dir(
                            'Test_Report', 'img',
                            '{}.png'.format(case_name.replace(' ', '_'))))
                    os.system("wmctrl -c 'HP - Citrix Server Error'")
                    os.system("wmctrl -c 'Citrix Workspace'")
                    time.sleep(5)
                    continue
                break
        else:
            os.system("wmctrl -c 'Citrix Workspace'")
            multiuser.reset_key(user)
            return [False, "login vdi connection fail"]

        time.sleep(5)
        screensaver = ScreenSaver()
        screensaver.lock_screen_by_hotkey()  # lock screen
        time.sleep(2)
        pyautogui.press("enter")
        time.sleep(2)
        if not wait_element(pic("_lock_screen_dialog")):
            log.error("not found the lock screen dialog")
            citrix.logoff()
            multiuser.reset_key(user)
            return [False, "not found the lock screen dialog"]
        if wait_element(pic("_user_of_credentials")
                        ):  # user in the list of new credentials
            log.error("'user' in credentials dialog")
            citrix.logoff()
            multiuser.reset_key(user)
            return [False, "'user' in credentials dialog"]
        log.info("'user' not in credentials dialog")
        log.info("try use 'root' to unlock")
        if wait_element(pic("_tool")):
            pyautogui.press("tab", presses=5, interval=0.3)
        else:
            pyautogui.press("tab", presses=9, interval=0.3)
        pyautogui.typewrite("root", interval=0.1)
        pyautogui.press("tab")
        pyautogui.typewrite(root_password, interval=0.1)
        pyautogui.press("enter")
        time.sleep(2)

        if not wait_element(pic(
                "_invalid_credentials")):  # check invalid credentials dialog
            log.error("not found invalid credentials dialog")
            citrix.logoff()
            multiuser.reset_key(user)
            return [False, "not found invalid credentials dialog"]
        pyautogui.press("enter")
        cancel = wait_element(pic("_cancel"))
        pyautogui.click(cancel[0])
        time.sleep(1)
        pyautogui.press("enter")
        time.sleep(1)
        pyautogui.typewrite(vdi_user_info()["password"], interval=0.1)
        pyautogui.press("enter")
        time.sleep(2)
        if not wait_element(pic("_win10_start_icon")):
            log.error("into the vdi desktop fail")
            citrix.logoff()
            multiuser.reset_key(user)
            return [False, "into the vdi desktop fail"]
        log.info("into the vdi desktop success")
        log.info("screen can be unlock by the credentials")
        citrix.logoff()
        multiuser.reset_key(user)
        return [True, "screen can be unlock by the credentials"]
    except:
        log.info(traceback.format_exc())
        return [False, traceback.format_exc()]
def locked_wake_up():
    log.info('wake up tc')
    screen_saver = ScreenSaver()
    screen_saver.resume_lock_screen_by_mouse()
Esempio n. 10
0
def start(case_name, **kwargs):
    try:
        result_file = os.path.join(
            common_function.get_current_dir(), r'Test_Report',
            '{}.yaml'.format(common_function.check_ip_yaml()))
        log.info('Begin to start test {}'.format(case_name))
        common_function.new_cases_result(result_file, case_name)
        SwitchThinProMode(switch_to='admin')
        sleep_time = check_ac_default_value()
        if sleep_time == '30':
            steps = {
                'step_name': 'check the default value on AC',
                'result': 'Pass',
                'expect': '30',
                'actual': '30',
                'note': ''
            }
            common_function.update_cases_result(result_file, case_name, steps)
        else:
            steps = {
                'step_name': 'check the default value on AC',
                'result': 'Fail',
                'expect': '30',
                'actual': 'The default value is wrong',
                'note': ''
            }
            common_function.update_cases_result(result_file, case_name, steps)
            log.info('case {} is end'.format(case_name))
            return False
        with PrepareWakeUp(time=1810) as w:
            w.wait(1810)
        to_os = ScreenSaver()
        to_os.resume_lock_screen_by_mouse()
        last_time_gap = int(w.get_max_time_gap())
        if last_time_gap > 5:
            steps = {
                'step_name':
                'check the os go to verify_s3_work afer 30 minutes',
                'result': 'Pass',
                'expect': 'sleep',
                'actual': 'it is go to sleep',
                'note': ''
            }
            common_function.update_cases_result(result_file, case_name, steps)
        else:
            steps = {
                'step_name':
                'check the os go to verify_s3_work afer 30 minutes',
                'result': 'Fail',
                'expect': 'sleep',
                'actual': 'it is not go to sleep',
                'note': 'time gap: {}, must more than 5'.format(last_time_gap)
            }
            common_function.update_cases_result(result_file, case_name, steps)
            return False
        if last_time_gap > 5:
            steps = {
                'step_name': 'check the os wake up',
                'result': 'Pass',
                'expect': 'wake up',
                'actual': 'System can wake up immediately',
                'note': ''
            }
            common_function.update_cases_result(result_file, case_name, steps)
        else:
            steps = {
                'step_name': 'check the os wake up',
                'result': 'Fail',
                'expect': 'wake up',
                'actual': 'System not wake up immediately',
                'note': ''
            }
            common_function.update_cases_result(result_file, case_name, steps)
        log.info('case {} is end'.format(case_name))
    except:
        log.error(traceback.format_exc())
        error_pic = os.path.join(common_function.get_current_dir(),
                                 r'Test_Report', 'img',
                                 '{}.png'.format(case_name.replace(' ', '_')))
        capture_screen(error_pic)
        pass