def is_fb_running(cls):
        result = False

        if PlatformHelper.is_Linux():
            cmd = "service filebeat status"
            cmd_output = CmdHelper.run(cmd)
            LogHelper.debug(cmd_output)
            if cmd_output.find("running") >= 0:
                result = True

        if PlatformHelper.is_mac():
            cmd = "ps aux | grep 'filebeat -c' | grep -v 'grep'"
            output = CmdHelper.run(cmd)
            if output.find("filebeat") >= 0:
                result = True

        if PlatformHelper.is_win():
            cmd = "sc query filebeat"
            output = CmdHelper.run(cmd)
            if output.find("RUNNING") >= 0:
                result = True

        if result:
            LogHelper.debug("filebeat is running")
        else:
            LogHelper.info("filebeat is not running")

        return result
    def kill_fb(cls):
        """
        kill file beat process
        :return:
        """
        result = False

        if PlatformHelper.is_mac() or PlatformHelper.is_Linux():
            cmd = "ps aux | grep 'filebeat -c' | grep -v 'grep'"
            output = CmdHelper.run(cmd)
            process_id = output.split()[1]
            kill_fb_cmd = "kill -9 %s" % process_id
            output = CmdHelper.run(kill_fb_cmd)

        if PlatformHelper.is_win():
            cmd = "sc stop filebeat"
            output = CmdHelper.run(cmd)

        LogHelper.debug(output)
        if cls.is_fb_running():
            LogHelper.error(
                "filebeat service CAN NOT be stopped successfully.")
        else:
            LogHelper.info("filebeat service is stopped")
            result = True

        return result
Exemple #3
0
    def wait_for_download_complete():
        time.sleep(10)  # This is to wait the download process to start
        download_path = ConfigAdapter.get_testdata_path().replace("\\\\", "\\")
        temp_file = ''
        for file in os.listdir(download_path):
            if re.match(r'restore_.*\.part$', file):
                temp_file = os.path.join(download_path, file)
        if temp_file == '':
            # KPIHelper.log_error(category="Web", kpiname="Download", result="SUCCESS", message="Download Completed.")
            LogHelper.info('Download Completed!')
            return True
        else:
            time.sleep(5)
            for i in range(100):
                if os.path.isfile(temp_file):
                    time.sleep(4)
                else:
                    # KPIHelper.log_error(category="Web", kpiname="Download", result="SUCCESS", message="Download Completed.")
                    LogHelper.info('Download Completed!')
                    return True

            # KPIHelper.log_error(category="Web", kpiname="Download", result="Fail", message="Timeout.")
            LogHelper.error('ERROR: Download Failed!')

            return False
Exemple #4
0
 def check_entity(self, entity_name):
     """
     in Freyja main page, check a dir or files by its name
     :param entity_name:
     :return:
     """
     #check minus
     #right_click_target = "//tr[contains(@id, '\"{entity_name}\"')]/td[@class='center col col-checkbox']//span".format(entity_name=entity_name)
     #right_click_target = "//span[text()='" + entity_name + "']"
     cb_target = '//tr[contains(@id, "{entity_name}")]/td[1]/div/span[contains(@class, "check")]'.format(
         entity_name=entity_name)
     LogHelper.info(cb_target)
     try:
         self.locate_element(cb_target).click()
         actionPanel = self.locate_element(
             '//div[contains(@class, "panel-toggle") and @title="View Actions pane"]'
         )
         LogHelper.info(str(actionPanel))
         actionPanel.click()
         self.locate_element(
             '//div[text()="Large Download Options..."]').click()
         return True
     except Exception:
         LogHelper.error("Fail to click Large Download Options.")
         return False
    def start_fb(cls):

        if PlatformHelper.is_mac():
            fb_binary_dir = os.path.join(cls.config_path,
                                         cls.package_name.split(".tar.gz")[0])
            os.chdir(fb_binary_dir)
            cmd = "./filebeat -c filebeat.yml &"
            output = os.system(cmd)

        if PlatformHelper.is_Linux():
            cmd = "service filebeat start"
            output = CmdHelper.run(cmd)

        if PlatformHelper.is_win():
            cmd = "sc start filebeat"

            # This is to make sure filebeat service can be started after install
            time.sleep(1)
            output = CmdHelper.run(cmd)

            # service = "Get-WmiObject -ClassWin32_Service-Filter name='filebeat'"
            # service.StartService()
            # service.StopService()

        LogHelper.info("start filebeat result %s" % output)
        return output
    def public_restore_flow(encrypt_type='default', encrypt_key=None):
        # If multiple restore jobs found, then automation will select the latest job to do the restore.
        # Below try catch is to process the multi-restore job scenarios
        try:
            MacFryrElement({'AXRole': 'AXRow'}, -1, 10).left_click()
            LogHelper.info("Multiple restore jobs found, automation will select the latest job to do the restore.")
            MacFryrElement({'AXRole': 'AXButton', 'AXIdentifier': '_NS:29'}).click()
        except:
            LogHelper.info("Only one restore job found, automation will do restore with the default job.")

        MacFryrElement({'AXRole': 'AXRadioButton', 'AXDescription': 'selectNewLocationRadio'}).click()
        MacFryrElement({'AXValue': 'Documents'}).left_click()
        MacFryrElement({'AXIdentifier': '_NS:64'}).mouse_click({'AXValue': 'auto_restore'})
        MacFryrElement({'AXRole': 'AXButton', 'AXIdentifier': '_NS:97'}).click()
        MacFryrElement({'AXRole': 'AXButton', 'AXIdentifier': '_NS:29'}).click()
        if encrypt_type == 'pkey':
            MacFryrElement({'AXRole': 'AXTextField', 'AXIdentifier': '_NS:502'}).force_send(encrypt_key)
            MacFryrElement({'AXRole': 'AXButton', 'AXIdentifier': '_NS:29'}).click()
        elif encrypt_type == 'ckey' or encrypt_type == 'rkey':
            command = 'cp ' + os.path.dirname(os.path.dirname(__file__)) + '/' + encrypt_key + ' ' + ConfigAdapter.get_installer_path()
            CmdHelper.run(command)
            MacFryrElement({'AXRole': 'AXButton', 'AXIdentifier': '_NS:495'}).click()
            MacFryrElement({'AXIdentifier': '_NS:81'}).click()
            MacFryrElement({'AXTitle': 'Macintosh HD'}).click()
            MacFryrElement({'AXIdentifier': '_NS:64'}).mouse_click({'AXValue': 'fryr_installer'})
            MacFryrElement({'AXRole': 'AXButton', 'AXIdentifier': '_NS:97'}).click()
            MacFryrElement({'AXIdentifier': '_NS:64'}).mouse_click({'AXValue': encrypt_key})
            MacFryrElement({'AXRole': 'AXButton', 'AXIdentifier': '_NS:97'}).click()
            MacFryrElement({'AXRole': 'AXButton', 'AXIdentifier': '_NS:29'}).click()
        MacFryrElement({'AXRole': 'AXButton', 'AXIdentifier': '_NS:29'}).click()
def download_files(context):
    root_path = ConfigAdapter.get_testdata_path()
    output_path = ConfigAdapter.get_output_path(product='linux')

    for row in context.table.rows:
        raw_download_path = row.get('path')
        raw_download_output = row.get('output')
        raw_download_ext = row.get('extensions')
        #add other parameters

        args = {}

        download_path = os.path.join(root_path, raw_download_path)
        args['path'] = download_path

        if raw_download_output:
            download_output = os.path.join(output_path, raw_download_output)
            FileHelper.create_directory(download_output)
            args['output'] = download_output
        if raw_download_ext:
            args['extensions'] = raw_download_ext

#TODO: add overwrite as condition
        args['overwrite'] = None
        output = LinuxGUIClient.download_cmd.download(**args)
        LogHelper.info(output)
Exemple #8
0
    def exe_cmd(cls, param=None):
        cmd = "{} {}".format(cls._mozyutil, cls._command_name)
        if param is not None:
            cmd = cmd + param

        LogHelper.info("MozyUtil CMD: {cmd}".format(cmd=cmd))
        return CmdHelper.run(cmd)
 def get_encrypted_folder():
     download_path = ConfigAdapter.get_testdata_path().replace("\\\\", "\\")
     for folder in os.listdir(download_path):
         if re.match(r'.*\.zip', folder):
             folder = os.path.join(download_path, folder)
             LogHelper.info("Get encrypted folder path: " + folder)
             return folder
def step_impl(context, file_path):
    testdata_root = ConfigAdapter.get_testdata_path()

    full_file_path = os.path.join(testdata_root, file_path)
    version = LinuxGUIClient.info_cmd.get_last_version(full_file_path)
    LogHelper.info("current version is {version}".format(version=version))
    context.version_before = version
 def get_decrypted_file():
     restore_path = FRYR_CONFIG['WIN_RESTORE']
     for file in os.listdir(restore_path):
         if os.path.isfile(os.path.join(restore_path, file)):
             file = os.path.join(restore_path, file)
             LogHelper.info("Get decrypted file path: " + file)
             return file
def step_impl(context):
    winclient = Windows_Client(RUNNER_CONFIG.get('OEM_CLIENT', "mozypro"))
    result = winclient.controller.search_result_in_history()
    if result[0] == -9:
        LogHelper.info("backup is cancelled successfully")
    else:
        LogHelper.error("backup is cancelled unsuccessfully")
def step_impl(context, number, folder):
    LogHelper.info("start to create files")
    testdata_config = ConfigAdapter.get_testdata_pros()
    testdata_root = os.path.expanduser("~/{folder}".format(folder=folder))
    testdata_dir = testdata_root

    for row in context.table:
        if "file_folder" in row.headings:
            testdata_dir = os.path.join(testdata_root, row.get('file_folder'))
        elif "file_dir" in row.headings:
            testdata_dir = os.path.join(testdata_root, row.get('file_dir'))

        for i in range(0, int(number)):
            file_prefix = row.get("file_prefix") or testdata_config.get(
                "FILE_PREFIX") or "td"
            file_txt = row.get("file_ext") or testdata_config.get(
                "FILE_EXT") or "txt"
            name = row.get('file_name') or testdata_config.get(
                "FILE_NAME") or None
            if name:
                file_name = "%s_%s_%s.%s" % (file_prefix, name, i, file_txt)
            else:
                file_name = "%s_%s.%s" % (file_prefix, i, file_txt)
            file_size = row.get("file_size") or testdata_config.get(
                "FILE_SIZE") or 0

            DataHelper.create_testfile(file_name, testdata_dir, int(file_size))
def step_impl(context):
    testdata_root = ConfigAdapter.get_testdata_path()
    for row in context.table.rows:
        relative_path = row.get('path') or row.get('paths')
        full_path = os.path.join(testdata_root, relative_path)
        LogHelper.info('remove path for %s' % full_path)
        LinuxGUIClient.removebackupdirs_cmd.removebackupdirs(full_path)
 def select_nodes(browser_handle, tree, node_matcher='AXStaticText'):
     import re
     nodes = re.split(r'/', tree)
     nodes = filter(lambda x: len(x) > 0, nodes)
     current_level = -1
     for node in nodes:
         current_level += 1
         LogHelper.info("search {node} node!".format(node=node))
         scroll_area_top = MacUIUtils.wait_element(browser_handle,
                                                   method='findFirstR',
                                                   AXRole='AXScrollArea')
         scroll_areas = MacUIUtils.wait_element(scroll_area_top,
                                                method='findAllR',
                                                AXRole='AXScrollArea')
         sc = scroll_areas[current_level]
         entities = MacUIUtils.wait_element(sc,
                                            method='findAllR',
                                            AXRole=node_matcher)
         result = False
         for entity in entities:
             name = entity.AXValue
             if name == node:
                 LogHelper.info('{name} node found!'.format(name=name))
                 result = True
                 entity.activate()
                 entity.clickMouseButtonLeft(
                     MacUIUtils.__rect_center(entity))
                 time.sleep(1)
                 entity.activate()
             if result:
                 break
         if not result:
             raise Exception(
                 "node {node} is not selected".format(node=node))
             return
 def verify_history(self):
     self.navigate_to()
     self.locate_element(self.xpaths['history_image']).click()
     assert self.locate_element(self.xpaths['history_image']).is_displayed()
     assert self.locate_element(self.xpaths['history_info']).is_displayed()
     LogHelper.info("History Info: " + self.locate_element(self.xpaths['history_info']).text)
     print("History Info: " + self.locate_element(self.xpaths['history_info']).text)
Exemple #17
0
def worker_setup(task=None):
    try:
        LogHelper.info("Retrieve task to setup worker.")
        worker_info = ConfigHelper.load(os.path.dirname(__file__), "worker_info.yaml")
        return worker_info
    except SoftTimeLimitExceeded:
        return {}
 def get_encrypted_file():
     download_path = ConfigAdapter.get_testdata_path().replace("\\\\", "\\")
     for file in os.listdir(download_path):
         if os.path.isfile(os.path.join(download_path, file)):
             file = os.path.join(download_path, file)
             LogHelper.info("Get encrypted file path: " + file)
             return file
    def download_and_install(cls, build, job):

        volume_name = cls.get_subdir()
        if volume_name is not None:
            CmdHelper.run("diskutil eject '" + volume_name + "'")

        LogHelper.info(
            "Prepare download Mozy Restore Manager from jenkins, build number is "
            + job)
        jh = JenkinsHelper(GLOBAL_CONFIG["JENKINS"]["URL"],
                           GLOBAL_CONFIG["JENKINS"]["USERNAME"],
                           GLOBAL_CONFIG["JENKINS"]["KEY"])
        dest = ConfigAdapter.get_installer_path('MACFRYR')

        LogHelper.info('Clean up existing files')
        for file in FileHelper.find_file(dest, '*'):
            LogHelper.debug('Delete file %s' % file)
            FileHelper.delete_file(file)
        pattern = 'mozy-fryr'
        packages = jh.download_packages(jh.get_packages(job, build, pattern),
                                        dest=dest)

        TARGET_APP = '/Applications/Mozy Restore Manager.app'
        if os.path.exists(TARGET_APP):
            shutil.rmtree(TARGET_APP)
        image_path = packages[0]

        mount_cmd = 'sudo hdiutil attach {package}'.format(package=image_path)
        CmdHelper.run(mount_cmd)

        volume_name = cls.get_subdir()
        ORIGIN_APP = '/Volumes/' + volume_name + '/Mozy Restore Manager.app'
        shutil.copytree(ORIGIN_APP, TARGET_APP)
def after_tag(context, tag):
    if tag == "mac_teardown":
        cmd = str('''osascript -e 'tell application "System Preferences" to quit' ''')
        output = CmdHelper.run(cmd)
        LogHelper.info(output)
        # cmd = str('''osascript -e 'tell application "MozyPro Restore" to quit' ''')
        # output = CmdHelper.run(cmd)

    if tag.lower() == 'web_teardown':
        pass

    if tag.lower() == 'macfryr_teardown':
        cmd = str('sudo pkill "Mozy Restore Manager"')
        output = CmdHelper.run(cmd)
        LogHelper.info(output)

    if tag.lower() == 'winfryr_teardown':
        close_fryr = 'taskkill /F /IM MozyRestoreManager.exe'
        output = CmdHelper.run(close_fryr)
        LogHelper.info(output)
        close_ff = 'taskkill /F /IM firefox.exe'
        output = CmdHelper.run(close_ff)
        LogHelper.info(output)

    if tag.lower() == 'winfryr_lsh_teardown':
        close_lsh_fryr = 'taskkill /F /IM MozyLshRestoreManager.exe'
        try:
            output = CmdHelper.run(close_lsh_fryr)
        except Exception:
            LogHelper.info(output)
 def get_mzdx_path():
     download_path = ConfigAdapter.get_download_path().replace("\\\\", "\\")
     for file in os.listdir(download_path):
         if re.match(r'export_.*\.mzdx$', file):
             file = os.path.join(download_path, file)
             LogHelper.info("Get mzd target path: " + file)
             return file
    def download_and_install(cls, build=-1, job='', pattern=r''):
        if build == 0:
            # keep current build
            return True

        if not pattern:
            pattern = cls.default_pattern

        if not job:
            job = cls.default_job

        version = MacController().get_version()
        LogHelper.info('Current build number is {}'.format(version))

        if version == 0:  # not installed
            package = cls.download_package(job=job,
                                           build=build,
                                           pattern=pattern)
            result = cls.install_package(package[0])
        elif build == -1 or version != build:
            cls.uninstall_package()
            package = cls.download_package(job=job,
                                           build=build,
                                           pattern=pattern)
            result = cls.install_package(package[0])

        else:
            # not install happen
            result = True
        return result
 def get_mzd_path():
     download_path = ConfigAdapter.get_testdata_path()
     for file in os.listdir(download_path):
         if re.match(r'restore_.*\.mzd$', file):
             file = os.path.join(download_path, file)
             LogHelper.info("Get mzd target path: " + file)
             return file
Exemple #24
0
def main():
    # ----create log files for runner-----
    logger_path = ConfigAdapter.get_log_path()
    logfile = os.path.join(logger_path, PlatformHelper.get_ip_address(), "worker_logger.log")
    LogHelper.create_logger(logfile,
                            fmt=PlatformHelper.get_ip_address() + " %(asctime)s %(levelname)s " + "worker" + " | %(message)s |")

    LogHelper.info("Worker %s" %(PlatformHelper.get_ip_address()))
Exemple #25
0
def step_impl(context):
    is_installed = LinuxClient().controller.is_client_installed()
    LogHelper.info("Check Whether Linux Client Installed successfully")
    try:
        is_installed.should.equal(True)
    except AssertionError as e:
        LogHelper.error(e.message)
        raise e
 def get_archive_path():
     download_path = ConfigAdapter.get_installer_path().replace(
         "\\\\", "\\")
     for file in os.listdir(download_path):
         if re.match(r'.*\.zip$', file):
             file = os.path.join(download_path, file)
             LogHelper.info("Get archive target path: " + file)
             return file
Exemple #27
0
def step_impl(context, mode):
    if mode.lower() == 'continuous':
        LogHelper.info('set continuous mode')
        LinuxGUIClient.continuous_cmd.set_continuous()
    elif mode.lower() == 'on-demand':
        LogHelper.info('set on-demand mode')
        LinuxGUIClient.continuous_cmd.set_on_demand()
    else:
        ValueError('unexpected mode %s' % mode)
 def click_radio_button(radio_button_handle):
     LogHelper.info('click radio button {}'.format(
         radio_button_handle.AXTitle))
     try:
         radio_button_handle.Press()
     except ErrorCannotComplete as e:
         LogHelper.error(e.message)
     except Error as e:
         LogHelper.error(e.message)
Exemple #29
0
def step_impl(context):
    result = LinuxGUIClient.history_cmd.get_continuous_mode_summary()
    change_processed = result.get('changes_processed')
    LogHelper.info("changes proccessed is %s" % change_processed)
    if change_processed is not None:
        context.change_processed_before = int(change_processed)
    else:
        context.change_processed_before = 0
    print(context.change_processed_before)
 def verify_ui(self):
     try:
         self.locate_element(self.xpaths['folder_list']).is_displayed()
         LogHelper.info('Folder list is displayed for ' + self.machine_name)
     except:
         LogHelper.error('Folder list is not displayed for ' +
                         self.machine_name)
         raise AssertionError('Folder list is not displayed for ' +
                              self.machine_name)