def add_latest_firmware_bundle(fwbundles): # Adding the latest firmware bundles to the appliance logger.debug("Adding the latest firmware bundles") navigate() uploaded = 0 for fwbundle in fwbundles: spp_repo = fwbundle.repo spp_ext = fwbundle.ext spp_filter = fwbundle.filter logger.debug( "Adding the latest firmware bundle with repo [%s] extension [%s] and filter [%s]" % (spp_repo, spp_ext, spp_filter)) fwbundle.spp = VsphereKeywords().get_LatestBuild_name( spp_repo, "", spp_ext, spp_filter) logger.debug("Latest firmware bundle is [%s]" % fwbundle.spp) uploaded = _add_firmware_bundle(fwbundle, uploaded) CommonOperationFirmwareBundle.refresh_browser_on_firmware_page() if len(fwbundles) == uploaded: logger.debug( "SUCCESS : Added all the Firmware bundles mentioned in the data file." ) return True else: logger.warn( "FAILURE : Not able to add all Firmware Bundles as mentioned in the data file." ) ui_lib.get_s2l().capture_page_screenshot() return False
def storage3par_create_host(self, name, iscsi_names=None, fc_wwns=None, optional=None, strict=False): """ Create a Host Note - passing strict=True will raise an exception if the host exists See createHost in https://pythonhosted.org/python-3parclient/api/hpe3parclient/client.html Example: | Storage3PAR Create Host | name | """ try: self.client.createHost(name, iscsiNames=iscsi_names, FCWwns=fc_wwns, optional=optional) except exceptions.HTTPConflict as ex: if strict: raise ex else: logger.warn(ex) if strict: asserts.assert_true(self.client.getHost(name), 'Failed to create 3PAR host "{}"'.format(name))
def verify_dashboard_panels_removed(cls, dashboard_panel, timeout=5, fail_if_false=False): logger.debug("verify dashboard panels removed [%s]" % dashboard_panel) if not ui_lib.wait_for_element_notvisible(GeneralDashboardElements.ID_DASHBOARD_PANEL % dashboard_panel, timeout, fail_if_false): logger.warn("[%s] has not been removed!" % dashboard_panel) return False else: return True
def delete_storage_volume_template(volume_template, fail_if_false=True): select_storage_template(volume_template) DeleteVolumeTemplates.select_actions_delete() DeleteVolumeTemplates.wait_delete_dialog_shown() DeleteVolumeTemplates.click_yes_delete_button() DeleteVolumeTemplates.wait_delete_dialog_disappear() FusionUIBase.show_activity_sidebar() FusionUIBase.wait_activity_action_ok(volume_template, message="Delete", timeout=20) FusionUIBase.show_activity_sidebar() if CommonOperationVolumeTemplates.wait_volume_template_show_not_found( volume_template, timeout=15, fail_if_false=False): logger.info( "Volume template status appear as 'not found', remove storage system {0} successfully." .format(volume_template)) return True elif CommonOperationVolumeTemplates.verify_volume_template_not_exist( volume_template, timeout=5, fail_if_false=False): logger.info( "Remove volume template {0} successfully".format(volume_template)) return True else: if fail_if_false is True: ui_lib.fail_test("The volume template does not disappear in 20s!") else: logger.warn("The volume template does not disappear in 20s!") return False
def remove_directory_user_or_group(*user_obj): ''' remove active directory or ldap users and groups listed in the dcs_data.xml file ''' # retrieving data from data file if isinstance(user_obj, test_data.DataObj): user_obj = [user_obj] elif isinstance(user_obj, tuple): user_obj = list(user_obj) navigate() error = 0 for userGroup in user_obj: if (userGroup.has_property("domainName")): GeneralUserandGroups.click_user(userGroup.name, userGroup.domainName, True) RemoveUser.click_action_remove_user_button() # make sure the remove dialog is displayed RemoveUser.wait_remove_user_dialog_shown() # delete the user RemoveUser.click_yes_remove_button() RemoveUser.wait_cannot_remove_user_dialog_disappear() if not VerifyUser.verify_user_not_exist( userGroup.name, userGroup.domainName, True): logger.warn("Not able to remove group %s" % userGroup.name) error += 1 else: logger.info("Successfully removed %s" % userGroup.name) if error > 0: return False else: return True
def verify_server_hardware_type(hardware_types_obj): """ Delete Hardware Type Arguments: <servertype> name* -- Specify server hardware type name should be verified. * Required Arguments Example: data/enclosures -> @{TestData.servertypes.VerifyServerTypes.Gen8}} data/enclosures -> @{TestData.servertypes.VerifyServerTypes.Gen9}} <servertypes> <VerifyServerTypes> <Gen8> <servertype name="BL465c Gen8 2" /> </Gen8>> <Gen9> <servertype name="DL180 Gen9 1" /> </Gen9> </VerifyServerTypes> </servertypes> """ navigate() count = 0 for n, sht_obj in enumerate(hardware_types_obj): logger.info("{2} No: {0} --- Total: {1} {2}".format( (n + 1), len(hardware_types_obj), '-' * 14)) logger.info("Verifying a server hardware type is used by ") if not select_server_hardware_type(sht_obj.name): continue # check the sht name is used by server hardware if not _click_used_by_server_hardware(sht_obj.name): continue # navigate to server hardware type page, continue the remaining verification navigate() select_server_hardware_type(sht_obj.name) # check the sht name is used by server profile if not _click_used_by_server_profile(sht_obj.name): continue count += 1 if count == 0: msg = "No target server hardware type exists!" logger.warn(msg) return False if count != len(hardware_types_obj): logger.warn("Not able to verify all server hardware type!") return False return True
def remove_san_manager(name, fail_if_false=True): select_san_manager(name) RemoveSANMangers.select_action_remove() RemoveSANMangers.wait_remove_san_manager_dialog_shown() RemoveSANMangers.click_yes_remove() RemoveSANMangers.wait_remove_san_manager_dialog_disappear() FusionUIBase.show_activity_sidebar() FusionUIBase.wait_activity_action_ok(name, "Remove SAN manager", timeout=50) FusionUIBase.show_activity_sidebar() if CommonOperationSANMangers.wait_san_manager_show_not_found( name, timeout=15, fail_if_false=False): logger.info( "SAN manager status appear as 'not found', remove san manager {0} successfully." .format(name)) return True elif CommonOperationSANMangers.verify_san_manager_not_exist( name, timeout=5, fail_if_false=False): logger.info("Remove SAN manager {0} successfully".format(name)) return True else: if fail_if_false is True: ui_lib.fail_test("The SAN manager does not disappear in 20s!") else: logger.warn("The SAN manager does not disappear in 20s!")
def storage3par_create_vlun(self, volume_name, lun=None, hostname=None, port_pos=None, strict=False, auto=False): """ Create a volume VLUN When creating a VLUN, the volumeName is required. The lun member is not required if auto is set to True. Either hostname or portPos (or both in the case of matched sets) is also required. The noVcn and overrideLowerPriority members are optional. Parameters: volumeName (str) - the name of the volume to be exported lun (int) - The new LUN id hostname (str) - Name of the host which the volume is to be exported. portPos (dict) - System port of VLUN exported to. It includes node number, slos number, and card port number portPos = { 'node': 1, # System node (0-7) 'slot': 2, # PCI bus slot in the node (0-5) 'port': 1} # Port number on the FC card (0-4) Note - passing strict=True will raise an exception if the VLUN exists Example: | Storage3PAR Get VLUN | my_volume | """ try: self.client.createVLUN(volumeName=volume_name, lun=lun, hostname=hostname, portPos=port_pos, auto=auto) except exceptions.HTTPConflict as ex: if strict: raise ex else: logger.warn(ex)
def _click_used_by_server_hardware(sht_name): from FusionLibrary.ui.business_logic.servers.serverhardware import CommonOperationServerHardware try: CommonOperationServerHardwareType.click_used_by_server_hardware() except: logger.warn( "Server hardware type [ %s ] are not used by any server hardware" % sht_name) return False server_name_list = CommonOperationServerHardware.get_server_hardware_list() for server_name in server_name_list: CommonOperationServerHardware.click_server_hardware(server_name) FusionUIBase.select_view_by_name(view_name='Hardware', timeout=8, fail_if_false=False) got_sht_name = CommonOperationServerHardware.get_server_hardware_type( server_name, fail_if_false=False) if got_sht_name != sht_name: ui_lib.get_s2l().capture_page_screenshot() logger.warn( "Server hardware [%s] doesn't have server hardware type [%s]" % (server_name, sht_name)) return False logger.info("Server hardware [%s] has server hardware type [%s]" % (server_name, sht_name)) return True
def _click_used_by_server_profile(sht_name): # check server hardware type information by server profile from FusionLibrary.ui.business_logic.servers.serverprofiles import CommonOperationServerProfile try: CommonOperationServerHardwareType.click_used_by_server_profile() except: logger.warn( "Server hardware type [ %s ] are not used by any server profile" % sht_name) return False server_profile_list = CommonOperationServerProfile.get_server_profile_list( ) for sp_name in server_profile_list: CommonOperationServerProfile.click_server_profile(sp_name) FusionUIBase.select_view_by_name('General', fail_if_false=False) got_sht_name = CommonOperationServerProfile.get_server_hardware_type_of_server_profile( sp_name, fail_if_false=False) if got_sht_name != sht_name: ui_lib.get_s2l().capture_page_screenshot() logger.warn( "Server profile [%s] doesn't have server hardware type [%s]" % (sp_name, sht_name)) return False logger.info("Server profile [%s] has server hardware type [%s]" % (sp_name, sht_name)) return True
def refresh_san_managers(*sanmanager_obj): FusionUIBase.navigate_to_section(SectionType.SAN_MANAGERS) if isinstance(sanmanager_obj, test_data.DataObj): sanmanager_obj = [sanmanager_obj] elif isinstance(sanmanager_obj, tuple): sanmanager_obj = list(sanmanager_obj) count = 0 for n, sanmanager in enumerate(sanmanager_obj): logger.info("{2} No: {0} --- Total: {1} {2}".format( (n + 1), len(sanmanager_obj), '-' * 14)) name = sanmanager.sanip logger.info("Refreshing a san manager with name '{0}'".format(name)) if not select_san_manager(name): count += 1 continue RefreshSANMangers.select_action_refresh() FusionUIBase.show_activity_sidebar() FusionUIBase.wait_activity_action_ok(name, "Refresh SAN manager", timeout=30) FusionUIBase.show_activity_sidebar() CommonOperationSANMangers.wait_san_manager_status_ok(name) logger.info("Refresh san manager {0} successfully".format(name)) if count > 0: logger.warn( "Failure: Not able to refresh some of san managers, please check warning messages." ) return False return True
def delete_networks(*net_obj): """ Delete Network """ FusionUIBase.navigate_to_section(SectionType.NETWORKS) if isinstance(net_obj, test_data.DataObj): net_obj = [net_obj] elif isinstance(net_obj, tuple): net_obj = list(net_obj) count = 0 for n, net in enumerate(net_obj): logger.info("{2} No: {0} --- Total: {1} {2}".format((n + 1), len(net_obj), '-' * 14)) logger.info("Deleting a network with name %s" % net.name) if not select_network(net.name): count += 1 continue delete_network(net.name) if count > 0: logger.warn( "Not able to delete some of networks, please check warning message" ) return False return True
def assign_scope_bulk_networks(*scope_obj): """ Edit Scope """ logger.info("Edit Scope") navigate() if isinstance(scope_obj, test_data.DataObj): scope_obj = [scope_obj] elif isinstance(scope_obj, tuple): scope_obj = list(scope_obj[0]) fail_if_exist = 0 # Looping to edit all the resources present in the resources.txt file for scope in scope_obj: logger.info("Editing scope %s" % scope.name) if scope.has_property("new_name"): if scope.new_name != scope.name and VerifyScopes.verify_scope_existed(scope.new_name, 5, False): fail_if_exist += 1 logger.warn("scope %s already exists, can't edit scope" % scope.new_name) continue # Selecting the given scope if CommonOperationScopes.select_scope(scope.name): # Clicking on edit button and verifying the edit options page CommonOperationScopes.wait_for_scopes_load() EditScopes.click_edit_scope_button() EditScopes.wait_edit_scope_dialog_open() EditScopes.click_add_resources_button() EditScopes.wait_add_resources_dialog_open() EditScopes.input_and_select_resource_category(scope.category) CommonOperationScopes.load_bulk_enets() EditScopes.click_add_button() EditScopes.wait_add_resources_dialog_close() EditScopes.click_ok_button() EditScopes.wait_edit_scope_dialog_close() if fail_if_exist > 0: return FusionUIBase.fail_test_or_return_false("Failed to assign bulk resource") return True
def configure_network(self, body): """ Creates the vSwitch or distributed vSwitch depending on the type provided and its port groups. :param dict body: JSON body :return list: List of results for each network configuration """ if not body.get('config', []): log.warn('No network configurations found') return self.results if not self._validate_and_set_host(body.get('host')): return self.results for net in body['config']: if not net.get('name'): log.warn('Missing required attribute: name') self.results.append({'ports': 'Unknown', 'status': 'Fail'}) continue if net.get('type') == 'vss': self._configure_vswitch(net) elif net.get('type') == 'vds': self._configure_distributed_switch(net) else: log.info('Unknown network type provided {}'.format( net['type'])) self.results.append({'ports': net['name'], 'status': 'Fail'}) log.debug('Results\n{}'.format(self.results)) return self.results
def wait_storage_pool_status_error(cls, storage_pool, storage_system_name, timeout=10, fail_if_false=True): ''' Wait for the storage pool status to be error ''' start = datetime.now() logger.debug("wait storage system '%s' status is ok or warning" % storage_pool) while (datetime.now() - start).total_seconds() < timeout: if ui_lib.wait_for_element_visible(GeneralStoragePoolElements.ID_STATUS_STORAGE_POOL_OK % (storage_pool, storage_system_name), timeout=5, fail_if_false=False): logger.debug("storage system status is ok") return False elif ui_lib.wait_for_element_visible(GeneralStoragePoolElements.ID_STATUS_STORAGE_POOL_WARN % (storage_pool, storage_system_name), timeout=5, fail_if_false=False): logger.debug("storage system status is warning") return False elif ui_lib.wait_for_element_visible(GeneralStoragePoolElements.ID_STATUS_STORAGE_POOL_ERROR % (storage_pool, storage_system_name), timeout=5, fail_if_false=False): logger.debug("storage system status is error") return True else: logger.debug("storage system status is unknown") continue err_msg = "Timeout for waiting for the status of Storage Pool [ %s ] to change to [ error ]." % storage_pool if fail_if_false is False: logger.warn(err_msg) return False else: ui_lib.fail_test(err_msg)
def oa_cli_reset_blade(self, encl): if self._reset_blade(encl) is False: logger.warn("Failed to reset blade(s) on enclosure '%s'" % encl.oa1hostname) raise AssertionError else: logger.info("Successfully reset blade(s) on enclosure '%s'" % encl.oa1hostname)
def verify_sht_exist(cls, hardware_type, timeout=10, fail_if_false=True): logger.debug("verify [ Server hardware type '%s' ] is existing" % hardware_type) locator = GeneralServerHardwareTypeElements.ID_TABLE_SHT % hardware_type ui_lib.scroll_into_view(locator) if ui_lib.wait_for_element_visible(locator, timeout, fail_if_false): return True else: logger.warn("failed to wait for server hardware type '%s' to be visible within %s second(s)" % (hardware_type, timeout)) return False
def get_notification_message(cls, log_prefix="debug", timeout=5): ''' Get the notification message ''' msg = FusionUIBase.get_text(GeneralStoragePoolElements.ID_TEXT_NOTIFICATION_MESSAGE, timeout) resolution = FusionUIBase.get_text(GeneralStoragePoolElements.ID_TEXT_NOTIFICATION_RESOLUTION, timeout) if log_prefix == "debug": logger.debug('Message: %s \nResolution: %s' % (msg, resolution)) else: logger.warn('Message: %s \nResolution: %s' % (msg, resolution))
def edit_san_managers(*sanmanager_obj): """ Edit san managers """ FusionUIBase.navigate_to_section(SectionType.SAN_MANAGERS) if isinstance(sanmanager_obj, test_data.DataObj): sanmanager_obj = [sanmanager_obj] elif isinstance(sanmanager_obj, tuple): sanmanager_obj = list(sanmanager_obj) count = 0 for n, sanmanager in enumerate(sanmanager_obj): logger.info("{2} No: {0} --- Total: {1} {2}".format( (n + 1), len(sanmanager_obj), '-' * 14)) logger.info("Editing a san manager with name '{0}'".format( sanmanager.sanip)) if not select_san_manager(sanmanager.sanip): count += 1 continue EditSANMangers.select_action_edit() EditSANMangers.wait_edit_san_manager_dialog_shown() if getattr(sanmanager, 'newsanip', '') != '': name = sanmanager.newsanip EditSANMangers.input_ip_address_or_host_name(sanmanager.newsanip) else: name = sanmanager.sanip if getattr(sanmanager, 'port', '') != '': EditSANMangers.input_port(sanmanager.port) if getattr(sanmanager, 'sanmanagerssl', '') != '': if sanmanager.sanmanagerssl.lower() == 'true': EditSANMangers.tick_use_ssl() else: EditSANMangers.untick_use_ssl() if getattr(sanmanager, 'username', '') != '': EditSANMangers.input_user_name(sanmanager.username) if getattr(sanmanager, 'password', '') != '': EditSANMangers.input_password(sanmanager.password) EditSANMangers.click_ok_button() status, msg = FusionUIBase.get_error_message_from_dialog(timeout=5) if status is True: ui_lib.fail_test(msg) EditSANMangers.wait_edit_san_manager_dialog_disappear(timeout=10) FusionUIBase.show_activity_sidebar() FusionUIBase.wait_activity_action_ok(sanmanager.sanip, "Update SAN manager", timeout=30) FusionUIBase.show_activity_sidebar() CommonOperationSANMangers.wait_san_manager_status_ok(name) logger.info("Edit san manager {0} successfully".format( sanmanager.sanip)) if count > 0: logger.warn( "Not able to edit some of SAN managers, please check warning messages!" ) return False return True
def edit_scope(*scope_obj): """ Edit Scope """ logger.info("Edit Scope") navigate() if isinstance(scope_obj, test_data.DataObj): scope_obj = [scope_obj] elif isinstance(scope_obj, tuple): scope_obj = list(scope_obj[0]) fail_if_exist = 0 # Looping to edit all the resources present in the resources.txt file for scope in scope_obj: logger.info("Editing scope %s" % scope.name) if scope.has_property("new_name"): if scope.new_name != scope.name and VerifyScopes.verify_scope_existed(scope.new_name, 5, False): fail_if_exist += 1 logger.warn("scope %s already exists, can't edit scope" % scope.new_name) continue have_resource = False # Selecting the given scope if CommonOperationScopes.select_scope(scope.name): # Clicking on edit button and verifying the edit options page CommonOperationScopes.wait_for_scopes_load() EditScopes.click_edit_scope_button() EditScopes.wait_edit_scope_dialog_open() if scope.has_property("new_name"): data = _Verify_Parameter(scope.new_name, "Scope Name") if not (data == "none" or data == ""): EditScopes.input_name(data) # deleting resources if hasattr(scope, 'remove_resources'): for n, resource in enumerate(scope.remove_resources): have_resource = True logger.info("Deleting resource %s from scope" % resource.name) # EditScopes.remove_resources_by_name(resource.name) EditScopes.click_remove_resources_button() EditScopes.input_and_select_remove_resource_category(resource.category) EditScopes.click_remove_resources_button_from_scope() # EditScopes.click_ok_button() # VerifyScopes.verify_resource_deleted(resource.name) # add resources if hasattr(scope, 'add_resources'): for n, resource in enumerate(scope.add_resources): have_resource = _Add_Resource_To_Scope(resource) or have_resource EditScopes.click_ok_button() EditScopes.wait_edit_scope_dialog_close() if have_resource: FusionUIBase.show_activity_sidebar() FusionUIBase.wait_activity_action_ok(scope.name, 'Update', timeout=120, fail_if_false=True) FusionUIBase.show_activity_sidebar() if fail_if_exist > 0: return False return True
def select_san_manager(name): """ Select san manager """ logger.info("Selecting a SAN manager with name {0}".format(name)) if CommonOperationSANMangers.verify_san_manager_exist(name, fail_if_false=False): CommonOperationSANMangers.click_san_manager(name) CommonOperationSANMangers.wait_san_manager_selected(name) return True else: logger.warn("SAN manager '{0}' does not exist".format(name)) return False
def refresh_storage_systems(*storagesys_obj): """ Refresh Storage Systems Arguments: * Required Arguments Example: """ FusionUIBase.navigate_to_section(SectionType.STORAGE_SYSTEMS) if isinstance(storagesys_obj, test_data.DataObj): storagesys_obj = [storagesys_obj] elif isinstance(storagesys_obj, tuple): storagesys_obj = list(storagesys_obj) count = 0 for n, storage in enumerate(storagesys_obj): logger.info("{2} No: {0} --- Total: {1} {2}".format( (n + 1), len(storagesys_obj), '-' * 14)) if getattr(storage, 'simplename', '') != '': storage_simple_name = storage.simplename else: storage_simple_name = storage.name.lower().split('.')[0] logger.info("Refreshing a storage system with name %s" % storage_simple_name) if not select_storage_system(storage_simple_name): count += 1 continue RefreshStorageSystems.select_actions_refresh() # RefreshStorageSystems.wait_general_state_refreshing(timeout=8) FusionUIBase.show_activity_sidebar() FusionUIBase.wait_activity_action_ok(storage_simple_name, "Refresh", timeout=30) FusionUIBase.show_activity_sidebar() if storage.StorageSystemType == 'StoreServ': RefreshStorageSystems.wait_storeserv_state_managed(timeout=10) elif storage.StorageSystemType == 'StoreVirtual': RefreshStorageSystems.wait_storevirtual_state_managed(timeout=10) else: RefreshStorageSystems.wait_nimble_state_managed(timeout=10) CommonOperationStorageSystems.wait_storage_system_status_ok( storage_simple_name) logger.info("Refresh storage system {0} successfully".format( storage_simple_name)) if count > 0: logger.warn( "Failure: Not able to refresh some of storage systems, please check all warning messages" ) return False return True
def get_notification_message(cls, log_prefix="debug", timeout=5): """ On the Volume Sets Page, get the notification message """ msg = FusionUIBase.get_text( GeneralVolumeSetElements.ID_TEXT_NOTIFICATION_MESSAGE, timeout) resolution = FusionUIBase.get_text( GeneralVolumeSetElements.ID_TEXT_NOTIFICATION_RESOLUTION, timeout) if log_prefix == "debug": logger.debug('Message: %s \nResolution: %s' % (msg, resolution)) else: logger.warn('Message: %s \nResolution: %s' % (msg, resolution))
def create_alert_filter_with_predefined_criteria(*alert_obj): """ Create alert filter with alert criteria and Scope Arguments: name* -- Name of alert as a string. email* -- Email for sending the notification. scope* -- Scope name. criteria* -- Alert criteria is the alert state with which we can filter the alert. * Required Arguments Example: date/alerts-> @{TestData.alerts} <alertFilter_with_predefined_criteria> <alert name="Alert1" criteria="predefined" email="*****@*****.**"> <add_predefined_criteria> <criteria status="All critical or warning alerts"/> </add_predefined_criteria> <add_scope> <scope name="Scope 1"/> </add_scope> </alert> </alertFilter_with_predefined_criteria> """ navigate() if isinstance(alert_obj, test_data.DataObj): alert_obj = [alert_obj] elif isinstance(alert_obj, tuple): alert_obj = list(alert_obj[0]) fail_if_exist = 0 for alert in alert_obj: if VerifyAlertFilter.verify_alert_exist_in_alert_table( alert.name, 5, False) is True: fail_if_exist += 1 logger.warn("filter %s already exists" % alert.name) continue _navigate_to_add_alert_filter_page(alert.name, alert.email) CreateAlertNotificationFilter.click_predefined_allalerts() for n, criteria in enumerate(alert.add_predefined_criteria): CreateAlertNotificationFilter.select_predefined_criteria( criteria.status) CreateAlertNotificationFilter.click_scope_for_alert_filter() for n, scope in enumerate(alert.add_scope): CreateAlertNotificationFilter.click_scope_name(scope.name) CreateAlertNotificationFilter.click_scope_for_alert_filter() CreateAlertNotificationFilter.input_email_address_for_alert_filter( alert.email) CreateAlertNotificationFilter.click_add_alert_filter() CreateAlertNotificationFilter.click_ok_edit_notification() VerifyAlertFilter.verify_alert_is_created(alert.name, timeout=20) if fail_if_exist > 0: ui_lib.fail_test( "not all of the filter(s) is successfully created - %s filter already exist " % fail_if_exist) return True
def fusion_srm_ilo_api_reset_rib(self): """ Reset the iLO/RILOE board of current logged iLo Example: | Fusion Srm Delete All Sso Certs | """ logger.info("trying to reset iLO via 'ilo_client.reset_rib() ...'") if self.ilo_client.reset_rib() is True: logger.info("iLO '%s' reset is successfully done" % self.ilo_client.hostname) return True else: logger.warn("iLO '%s' reset is NOT successfully done" % self.ilo_client.hostname) return False
def validate_server_hardware_types_name_without_number_exist( hardware_types_obj): """Validate if expected server hardware types name without tailing number exsit in system Arguments: <servertype> name* -- Name of server hardware type as a string. (don't include tailing number in name) * Required Arguments Example: data/enclosures -> @{TestData.verifyservertypesname} <verifyservertypesname> <servertype name="BL420c Gen8" /> <servertype name="BL460c G7" /> </verifyservertypesname> """ navigate() count = 0 hardware_types_obj = [item for n, item in enumerate(hardware_types_obj)] verified_sht_names = [] # get all server hardware types name sht_names = CommonOperationServerHardwareType.get_sht_list() logger.info( "About to verify all server hardware types name without number: %r" % sht_names) for sht_obj in hardware_types_obj: for name in sht_names: if name.startswith(sht_obj.name) is True: if name not in verified_sht_names: verified_sht_names.append(name) logger.info( "Expected server hardware type '%s' exists in SHT page" % sht_obj.name) break else: logger.warn( "Expected server hardware type '%s' not exsit in SHT page" % sht_obj.name) logger.debug(verified_sht_names) if len(verified_sht_names) != len(hardware_types_obj): logger.warn("Not all expected server hardware types exist in SHT page") return False return True
def select_network(name): """ Select Network """ logger.info("Selecting a network with name {0}".format(name)) if CommonOperationNetworks.verify_locate_error_exists(): selenium2lib = ui_lib.get_s2l() selenium2lib.reload_page() if CommonOperationNetworks.verify_network_exist(name, fail_if_false=False): CommonOperationNetworks.click_network(name) CommonOperationNetworks.wait_network_selected(name) return True else: logger.warn("Network '{0}' does not exist".format(name)) return False
def click_firmware_bundle(cls, spp_name, firmware_version, timeout=5, fail_if_false=True): firmware_bundle_name = spp_name + ', ' + firmware_version logger.debug("Select firmware_bundle [%s]" % firmware_bundle_name) if not ui_lib.wait_for_element_and_click(FusionFirmwareBundlePage.ID_TABLE_FIRMWARE_BUNDLE % (spp_name, firmware_version), timeout=timeout, fail_if_false=fail_if_false): logger.warn("Failed to select firmware bundle") return False str_title = ui_lib.get_text(FusionFirmwareBundlePage.ID_FWDRIVER_TITLE, timeout=timeout, fail_if_false=fail_if_false) if firmware_bundle_name.strip() == str_title.strip(): logger.info("Selected the Firmware Bundle %s with version %s successfully" % (spp_name, firmware_version)) return True else: msg = "Fail in selecting Firmware Bundle %s with version %s" % (spp_name, firmware_version) return FusionUIBase.fail_test_or_return_false(msg, fail_if_false=fail_if_false)
def check_enum(cls, val, ref_data_key): """ :param val: :type val: :param ref_data_key: key of the Reference Data dictionary's item :type ref_data_key: :return: :rtype: """ if ref_data_key not in cls.ReferenceData.keys(): logger.warn("given key '%s' is not existing in reference data '%s'" % (ref_data_key, cls.ReferenceData.keys())) return False ref_data_value = cls.ReferenceData[ref_data_key] logger.debug("checking given value '%s' should be in reference enum data '%s' ..." % (val, ref_data_value)) if val in ref_data_value: logger.debug("given value '%s' for '%s' is found in reference data" % (val, ref_data_key)) return True else: if val is None or val.strip().lower() in ('undefined', 'not-defined', 'not defined'): logger.warn("given value '%s' for '%s' shows the attribute is not defined in test data file" % (val, ref_data_key)) elif val.strip() == '': logger.warn("given value '%s' for '%s' is empty, please remove this attribute from test data file if you want to use the default option from UI" % (val, ref_data_key)) else: msg = "<test data invalid>: given value '%s' for '%s' is NOT found in reference values: %s" % (val, ref_data_key, ref_data_value) logger.warn(msg) ui_lib.fail_test(msg) return False
def _shell_cmd(cmd, powershell=False): """ Executes the command using Subprocess module :param list cmd: Command to be executed :param bool powershell: True when shell should be PowerShell :return str: Output of the executed command :raise: AssertionError """ r = run_command(cmd, powershell) if r.get('return_code') != 0: log.warn('Error in executing command.\n {}'.format(r.get('error'))) raise AssertionError("Command returned with an error.") return r