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