Пример #1
0
 def _custom_click_handler(self, wait_ajax):
     """Handler called from pytest_selenium"""
     if self.is_dimmed and not self._force:
         logger.info("Not clicking {} because it is dimmed".format(repr(self)))
         return
     sel.wait_for_element(self, timeout=5)
     return sel.click(self, no_custom_handler=True, wait_ajax=wait_ajax)
Пример #2
0
 def create(self):
     domain = "ManageIQ (Locked)"
     sel.force_navigate('catalog_item_new', context={'provider_type': self.item_type})
     sel.wait_for_element(basic_info_form.name_text)
     fill(basic_info_form, {'name_text': self.name,
                            'description_text': self.description,
                            'display_checkbox': self.display_in,
                            'select_catalog': self.catalog,
                            'select_dialog': self.dialog})
     if self.item_type != "Orchestration":
         sel.click(basic_info_form.field_entry_point)
         dynamic_tree.click_path("Datastore", domain, "Service", "Provisioning",
                                 "StateMachines", "ServiceProvision_Template", "default")
         sel.click(basic_info_form.apply_btn)
     tabstrip.select_tab("Request Info")
     # Address BZ1321631
     tabstrip.select_tab("Environment")
     tabstrip.select_tab("Catalog")
     template = template_select_form.template_table.find_row_by_cells({
         'Name': self.catalog_name,
         'Provider': self.provider
     })
     sel.click(template)
     web_ui.fill(request_form, {
         'instance_name': self.vm_name,
         'instance_type': self.instance_type,
         'guest_keypair': self.guest_keypair,
         'availability_zone': self.availability_zone,
         'cloud_tenant': self.cloud_tenant,
         'cloud_network': self.cloud_network,
         'security_groups': self.security_groups[0],  # not supporting multiselect now,
                                                      # just take first value
     })
     sel.click(template_select_form.add_button)
     flash.assert_success_message('Service Catalog Item "{}" was added'.format(self.name))
Пример #3
0
 def create(self):
     sel.force_navigate('catalog_item_new', context={'provider_type': self.item_type})
     sel.wait_for_element(basic_info_form.name_text)
     fill(basic_info_form, {'name_text': self.name,
                            'description_text': self.description,
                            'display_checkbox': self.display_in,
                            'select_catalog': self.catalog,
                            'select_dialog': self.dialog})
     tabstrip.select_tab("Request Info")
     template = template_select_form.template_table.find_row_by_cells({
         'Name': self.catalog_name,
         'Provider': self.provider
     })
     sel.click(template)
     web_ui.fill(request_form, {
         'instance_name': self.vm_name,
         'instance_type': self.instance_type,
         'guest_keypair': self.guest_keypair,
         'availability_zone': self.availability_zone,
         'cloud_tenant': self.cloud_tenant,
         'cloud_network': self.cloud_network,
         'security_groups': self.security_groups[0],  # not supporting multiselect now,
                                                      # just take first value
     })
     sel.click(template_select_form.add_button)
     flash.assert_success_message('Service Catalog Item "%s" was added' % self.name)
Пример #4
0
    def update(self, updates, cancel=False, validate_credentials=False):
        """Updates the manager through UI

        args:
            updates (dict): Data to change.
            cancel (bool): Whether to cancel out of the update.  The cancel is done
                after all the new information has been filled in the UI.
            validate_credentials (bool): Whether to validate credentials - if True and the
                credentials are invalid, an error will be raised.

        Note:
            utils.update use is recommended over use of this method.
        """
        navigate_to(self, 'Edit')
        # Workaround - without this, update was failing on downstream appliance
        sel.wait_for_ajax()
        sel.wait_for_element(properties_form.name_text)

        fill(properties_form, self._form_mapping(**updates))
        fill(credential_form, updates.get('credentials', None), validate=validate_credentials)
        self._submit(cancel, edit_manager_btn)
        name = updates['name'] or self.name
        if not cancel:
            flash.assert_message_match('{} Provider "{}" was updated'.format(self.type, name))

        self.__dict__.update(**updates)
Пример #5
0
    def create(self):
        sel.force_navigate('catalog_item_new',
                           context={'provider_type': self.item_type})
        sel.wait_for_element(basic_info_form.name_text)
        catalog = fakeobject_or_object(self.catalog, "name", "<Unassigned>")
        dialog = fakeobject_or_object(self.dialog, "name", "<No Dialog>")

        fill(basic_info_form, {'name_text': self.name,
                               'description_text': self.description,
                               'display_checkbox': self.display_in,
                               'select_catalog': catalog.name,
                               'select_dialog': dialog.name,
                               'select_orch_template': self.orch_template,
                               'select_provider': self.provider_type,
                               'select_config_template': self.config_template})
        if self.item_type != "Orchestration" and self.item_type != "AnsibleTower":
            sel.click(basic_info_form.field_entry_point)
            dynamic_tree.click_path("Datastore", self.domain, "Service", "Provisioning",
                                    "StateMachines", "ServiceProvision_Template", "default")
            sel.click(basic_info_form.apply_btn)
        if self.catalog_name is not None and self.provisioning_data is not None:
            tabstrip.select_tab("Request Info")
            # Address BZ1321631
            tabstrip.select_tab("Environment")
            tabstrip.select_tab("Catalog")
            template = template_select_form.template_table.find_row_by_cells({
                'Name': self.catalog_name,
                'Provider': self.provider
            })
            sel.click(template)
            request_form.fill(self.provisioning_data)
        sel.click(template_select_form.add_button)
Пример #6
0
 def _custom_click_handler(self, wait_ajax):
     """Handler called from pytest_selenium"""
     if self.is_dimmed and not self._force:
         logger.error("Could not click %s because it was dimmed", repr(self))
         return
     sel.wait_for_element(self, timeout=5)
     return sel.click(self, no_custom_handler=True, wait_ajax=wait_ajax)
Пример #7
0
 def create(self):
     sel.force_navigate('catalog_item_new',
                        context={'provider_type': self.item_type})
     sel.wait_for_element(basic_info_form.name_text)
     fill(basic_info_form, {'name_text': self.name,
                            'description_text': self.description,
                            'display_checkbox': self.display_in,
                            'select_catalog': self.catalog,
                            'select_dialog': self.dialog,
                            'select_orch_template': self.orch_template,
                            'select_provider': self.provider_type})
     if current_version() >= "5.4":
         sel.click(basic_info_form.field_entry_point)
         dynamic_tree.click_path("Datastore", self.domain, "Service", "Provisioning",
                                 "StateMachines", "ServiceProvision_Template", "default")
         sel.click(basic_info_form.apply_btn)
     if(self.catalog_name is not None):
         tabstrip.select_tab("Request Info")
         template = template_select_form.template_table.find_row_by_cells({
             'Name': self.catalog_name,
             'Provider': self.provider
         })
         sel.click(template)
         request_form.fill(self.provisioning_data)
     sel.click(template_select_form.add_button)
Пример #8
0
    def set_retirement_date(self, when, warn=None):
        """Sets the retirement date for this Vm object.

        It incorporates some magic to make it work reliably since the retirement form is not very
        pretty and it can't be just "done".

        Args:
            when: When to retire. :py:class:`str` in format mm/dd/yy of
                :py:class:`datetime.datetime` or :py:class:`utils.timeutil.parsetime`.
            warn: When to warn, fills the select in the form in case the ``when`` is specified.
        """
        self.load_details()
        lcl_btn("Set Retirement Date")
        if callable(self.retire_form.date_retire):
            # It is the old functiton
            sel.wait_for_element("#miq_date_1")
        else:
            sel.wait_for_element(self.retire_form.date_retire)
        if when is None:
            try:
                wait_for(lambda: sel.is_displayed(retire_remove_button), num_sec=5, delay=0.2)
                sel.click(retire_remove_button)
                wait_for(lambda: not sel.is_displayed(retire_remove_button), num_sec=10, delay=0.2)
                sel.click(form_buttons.save)
            except TimedOutError:
                pass
        else:
            if sel.is_displayed(retire_remove_button):
                sel.click(retire_remove_button)
                wait_for(lambda: not sel.is_displayed(retire_remove_button), num_sec=15, delay=0.2)
            fill(self.retire_form.date_retire, when)
            wait_for(lambda: sel.is_displayed(retire_remove_button), num_sec=15, delay=0.2)
            if warn is not None:
                fill(self.retire_form.warn, warn)
            sel.click(form_buttons.save)
Пример #9
0
 def update(self, updates):
     navigate_to(self, 'Edit')
     # Workaround - form is appearing after short delay
     sel.wait_for_element(self.tenant_form.description)
     fill(self.tenant_form, updates, action=self.save_changes)
     flash.assert_success_message(
         'Project "{}" was saved'.format(updates.get('name', self.name)))
Пример #10
0
 def _retrieve_ext_auth_user_groups(self):
     navigate_to(self, 'Add')
     fill(self.group_form, {'lookup_ldap_groups_chk': True,
                            'user_to_look_up': self.user_to_lookup,
                            },)
     sel.wait_for_element(form_buttons.retrieve)
     sel.click(form_buttons.retrieve)
Пример #11
0
def _repo_nav_fn(context):
    repo = context['repository']
    if current_version() >= '5.4':
        quadicon = Quadicon(repo.name, "repository")
        sel.click(quadicon.locate())
    else:
        sel.click(_repo_row(repo.name)[1])
    sel.wait_for_element(repo._detail_page_identifying_loc)
Пример #12
0
 def _retrieve_ldap_user_groups(self):
     navigate_to(self, 'Add')
     fill(self.group_form, {'lookup_ldap_groups_chk': True,
                            'user_to_look_up': self.user_to_lookup,
                            'username': self.ldap_credentials.principal,
                            'password': self.ldap_credentials.secret,
                            },)
     sel.wait_for_element(form_buttons.retrieve)
     sel.click(form_buttons.retrieve)
Пример #13
0
 def create(self):
     sel.force_navigate('catalog_new')
     sel.wait_for_element(form.name_text)
     web_ui.fill(form, {'name_text': self.name,
                        'description_text': self.description,
                        'button_multiselect': self.items},
                 action=form.add_button)
     flash_str = 'Catalog "{}" was saved'
     flash.assert_success_message(flash_str.format(self.name))
Пример #14
0
    def create(self):
        # Create has sequential forms, the first is only the provider type
        navigate_to(self, 'Add')
        # For element not found exception (To be removed)
        sel.sleep(5)
        sel.select("//select[@id='st_prov_type']",
                   self.provider_type or self.item_type or 'Generic')

        sel.wait_for_element(basic_info_form.name_text)
        catalog = fakeobject_or_object(self.catalog, "name", "Unassigned")
        dialog = fakeobject_or_object(self.dialog, "name", "No Dialog")

        # Need to provide the (optional) provider name to the form, not the object
        provider_name = None
        provider_required_types = ['AnsibleTower', 'Orchestration']
        if self.item_type in provider_required_types \
                or self.provider_type in provider_required_types:
            provider_name = self.provider.name
        # For tests where orchestration template is None
        orch_template = None
        if self.orch_template:
            orch_template = self.orch_template.template_name

        fill(basic_info_form, {'name_text': self.name,
                               'description_text': self.description,
                               'display_checkbox': self.display_in,
                               'select_catalog': catalog.name,
                               'select_dialog': dialog.name,
                               'select_orch_template': orch_template,
                               'select_provider': provider_name,
                               'select_config_template': self.config_template})
        if not (self.item_type in provider_required_types):
            sel.click(basic_info_form.field_entry_point)
            if version.current_version() < "5.7":
                dynamic_tree.click_path("Datastore", self.domain, "Service", "Provisioning",
                                     "StateMachines", "ServiceProvision_Template", "default")
            else:
                entry_tree.click_path("Datastore", self.domain, "Service", "Provisioning",
                    "StateMachines", "ServiceProvision_Template", "default")
            sel.click(basic_info_form.apply_btn)
        if version.current_version() >= "5.7" and self.item_type == "AnsibleTower":
            sel.click(basic_info_form.retirement_entry_point)
            entry_tree.click_path("Datastore", self.domain, "Service", "Retirement",
                    "StateMachines", "ServiceRetirement", "Generic")
            sel.click(basic_info_form.apply_btn)
        if self.catalog_name is not None \
                and self.provisioning_data is not None \
                and not isinstance(self.provider, NoneType):
            tabstrip.select_tab("Request Info")
            tabstrip.select_tab("Catalog")
            template = template_select_form.template_table.find_row_by_cells({
                'Name': self.catalog_name,
                'Provider': self.provider.name
            })
            sel.click(template)
            request_form.fill(self.provisioning_data)
        sel.click(template_select_form.add_button)
Пример #15
0
 def update(self, updates):
     sel.force_navigate("cfg_tenant_project_edit", context={"tenant": self})
     # Workaround - without this, update was failing sometimes
     sel.wait_for_ajax()
     # Workaround - form is appearing after short delay
     sel.wait_for_element(self.tenant_form.description)
     fill(self.tenant_form, updates, action=self.save_changes)
     flash.assert_success_message(
         'Project "{}" was saved'.format(updates.get('name', self.name)))
Пример #16
0
 def add_element(self, *element_data):
     for each_element in element_data:
         plus_btn("Add a new Element to this Box")
         sel.wait_for_element(element_form.ele_label)
         # Workaround to refresh the fields, select other values (text area box and checkbox)and
         # then select "text box"
         fill(element_form, {'choose_type': "Text Area Box"})
         fill(element_form, {'choose_type': "Check Box"})
         fill(element_form, each_element)
         self.element_type(each_element)
Пример #17
0
def _find_and_click_sm(context):
    """Incorporates searching through the page listing and clicking in the table. Also ensures
    waiting for the transition as there is no ajax hook."""
    sm_name = _get_sm_name(context["storage_manager"])
    for page in paginator.pages():
        if sel.is_displayed("#no_records_div"):
            break
        if list_page.managers_table.click_cell("name", sm_name):
            sel.wait_for_element("#textual_div")  # No ajax wait there :(
            return
    raise StorageManagerNotFound("Storage manager with name '{}' not found!".format(sm_name))
Пример #18
0
def delete(cancel=False):
    """Delete currently opened request

    Args:
        cancel: Whether to cancel the deletion.
    """
    sel.wait_for_element(buttons.delete)
    sel.click(buttons.delete, wait_ajax=False)
    sel.handle_alert(cancel)
    sel.wait_for_ajax()
    flash.assert_no_errors()
Пример #19
0
 def add_button_group(self):
     sel.force_navigate('catalog_item', context={'catalog': self.catalog,
                                                 'catalog_item': self})
     cfg_btn("Add a new Button Group", invokes_alert=True)
     sel.wait_for_element(button_group_form.btn_group_text)
     fill(button_group_form, {'btn_group_text': "group_text",
                              'btn_group_hvr_text': "descr"})
     select = DHTMLSelect("div#button_div")
     select.select_by_value(1)
     sel.click(button_group_form.add_button)
     flash.assert_success_message('Buttons Group "descr" was added')
Пример #20
0
def approve(reason, cancel=False):
    """Approve currently opened request

    Args:
        reason: Reason for approving the request.
        cancel: Whether to cancel the approval.
    """
    sel.wait_for_element(buttons.approve)
    sel.click(buttons.approve)
    fill(fields.reason, reason)
    sel.click(buttons.submit if not cancel else buttons.cancel)
    flash.assert_no_errors()
Пример #21
0
 def systems(self):
     """Returns 'ConfigSystem' objects that are active under this profile"""
     self.navigate()
     # ajax wait doesn't work here
     _header_loc = "//div[contains(@class, 'dhtmlxInfoBarLabel')"\
                   " and contains(normalize-space(text()), 'Configured Systems')]"
     sel.wait_for_element(_header_loc)
     # Unassigned config profile has no tabstrip
     if "unassigned" not in self.name.lower():
         tabs.select_tab("Configured Systems")
     if sel.is_displayed(list_table):
         return [ConfigSystem(row['description'].text, self) for row in list_table.rows()]
     return list()
Пример #22
0
 def get_saved_reports(self):
     navigate_to(self, 'Saved')
     results = []
     try:
         for page in paginator.pages():
             sel.wait_for_element(records_table)
             for row in records_table.rows():
                 results.append(
                     CustomSavedReport(self, sel.text(row.run_at).encode("utf-8"), self.is_candu)
                 )
     except sel.NoSuchElementException:
         pass
     return results
Пример #23
0
 def get_saved_reports(self):
     sel.force_navigate("report_custom_saved", context={"report": self})
     results = []
     try:
         for page in paginator.pages():
             sel.wait_for_element(records_table)
             for row in records_table.rows():
                 results.append(
                     CustomSavedReport(self, sel.text(row.run_at).encode("utf-8"))
                 )
     except sel.NoSuchElementException:
         pass
     return results
Пример #24
0
 def add_button_group(self):
     navigate_to(self, 'Details')
     cfg_btn("Add a new Button Group", invokes_alert=True)
     sel.wait_for_element(button_group_form.btn_group_text)
     fill(button_group_form, {'btn_group_text': "group_text",
                              'btn_group_hvr_text': "descr"})
     if current_version() > "5.5":
         select = AngularSelect("button_image")
         select.select_by_visible_text("Button Image 1")
     else:
         select = DHTMLSelect("div#button_div")
         select.select_by_value(1)
     sel.click(button_group_form.add_button)
     flash.assert_success_message('Buttons Group "descr" was added')
Пример #25
0
 def add_button(self):
     sel.force_navigate('catalog_item', context={'catalog': self.catalog,
                                                 'catalog_item': self})
     cfg_btn('Add a new Button', invokes_alert=True)
     sel.wait_for_element(button_form.btn_text)
     fill(button_form, {'btn_text': "btn_text",
                        'btn_hvr_text': "btn_descr"})
     select = DHTMLSelect("div#button_div")
     select.select_by_value(2)
     fill(button_form, {'select_dialog': self.dialog,
                        'system_process': "Request",
                        'request': "InspectMe"})
     sel.click(button_form.add_button)
     flash.assert_success_message('Button "btn_descr" was added')
Пример #26
0
 def add_button_group(self):
     sel.force_navigate('catalog_item', context={'catalog': self.catalog,
                                                 'catalog_item': self})
     cfg_btn("Add a new Button Group", invokes_alert=True)
     sel.wait_for_element(button_group_form.btn_group_text)
     fill(button_group_form, {'btn_group_text': "group_text",
                              'btn_group_hvr_text': "descr"})
     if current_version() > "5.5":
         select = AngularSelect("button_image")
         select.select_by_visible_text("Button Image 1")
     else:
         select = DHTMLSelect("div#button_div")
         select.select_by_value(1)
     sel.click(button_group_form.add_button)
     flash.assert_success_message('Buttons Group "descr" was added')
Пример #27
0
def force_login_user(*args, **kwargs):
    """
    Force login to CFME using valid username and password; log out if already logged in.

    Args:
        args: A list of arguments to supply to the :py:meth:`login` method.
        kwargs: A dict of keyword arguments to supply to the :py:meth:`login` method.

    Warning:
        Use only with valid credentials.
    """
    if logged_in():
        logout()
    login(*args, **kwargs)
    sel.wait_for_element(page.user_dropdown)
Пример #28
0
 def set_quota(self, **kwargs):
     navigate_to(self, 'ManageQuotas')
     # Workaround - form is appearing after short delay
     sel.wait_for_element(self.quota_form.cpu_txt)
     fill(self.quota_form, {'cpu_cb': kwargs.get('cpu_cb'),
                            'cpu_txt': kwargs.get('cpu'),
                            'memory_cb': kwargs.get('memory_cb'),
                            'memory_txt': kwargs.get('memory'),
                            'storage_cb': kwargs.get('storage_cb'),
                            'storage_txt': kwargs.get('storage'),
                            'vm_cb': kwargs.get('vm_cb'),
                            'vm_txt': kwargs.get('vm'),
                            'template_cb': kwargs.get('template_cb'),
                            'template_txt': kwargs.get('template')},
          action=self.save_changes)
     flash.assert_success_message('Quotas for Tenant "{}" were saved'.format(self.name))
Пример #29
0
 def set_quota(self, **kwargs):
     navigate_to(self, 'ManageQuotas')
     # Workaround - form is appearing after short delay
     sel.wait_for_element(self.quota_form.cpu_txt)
     fill(self.quota_form, {'cpu_cb': kwargs.get('cpu_cb'),
                            'cpu_txt': kwargs.get('cpu'),
                            'memory_cb': kwargs.get('memory_cb'),
                            'memory_txt': kwargs.get('memory'),
                            'storage_cb': kwargs.get('storage_cb'),
                            'storage_txt': kwargs.get('storage'),
                            'vm_cb': kwargs.get('vm_cb'),
                            'vm_txt': kwargs.get('vm'),
                            'template_cb': kwargs.get('template_cb'),
                            'template_txt': kwargs.get('template')},
          action=self.save_changes)
     flash.assert_success_message('Quotas for Tenant "{}" were saved'.format(self.name))
Пример #30
0
def get_detail(properties):
    navigate_to(current_appliance().server, 'About')
    if current_version() < '5.7':
        return InfoBlock.text(*properties).encode(
            "utf-8").strip()
    else:
        locator = '//div[@class="product-versions-pf"]//li'
        sel.wait_for_element(locator)
        for element in sel.elements(locator):
            logger.debug('Checking for detail match for "{}" in  "{}"'.format(properties,
                                                                              element.text))
            match = re.match("{}\s(?P<value>.*)".format(properties), element.text)
            if match:
                return match.group('value')
        else:
            raise ElementOrBlockNotFound('Could not match about detail {}'.format(properties))
Пример #31
0
 def systems(self):
     """Returns 'ConfigSystem' objects that are active under this profile"""
     self.navigate()
     # ajax wait doesn't work here
     _header_loc = "//div[contains(@class, 'dhtmlxInfoBarLabel')"\
                   " and contains(normalize-space(text()), 'Configured Systems')]"
     sel.wait_for_element(_header_loc)
     # Unassigned config profile has no tabstrip
     if "unassigned" not in self.name.lower():
         tabs.select_tab("Configured Systems")
     if sel.is_displayed(list_table):
         return [
             ConfigSystem(row['description'].text, self)
             for row in list_table.rows()
         ]
     return list()
Пример #32
0
 def add_button(self):
     navigate_to(self, 'Details')
     cfg_btn('Add a new Button', invokes_alert=True)
     sel.wait_for_element(button_form.btn_text)
     fill(button_form, {'btn_text': "btn_text",
                        'btn_hvr_text': "btn_descr"})
     if current_version() > "5.5":
         select = AngularSelect("button_image")
         select.select_by_visible_text("Button Image 1")
     else:
         select = DHTMLSelect("div#button_div")
         select.select_by_value(2)
     fill(button_form, {'select_dialog': self.dialog,
                        'system_process': "Request",
                        'request': "InspectMe"})
     sel.click(button_form.add_button)
     flash.assert_success_message('Button "btn_descr" was added')
Пример #33
0
 def create(self):
     domain = "ManageIQ (Locked)"
     sel.force_navigate('catalog_item_new',
                        context={'provider_type': self.item_type})
     sel.wait_for_element(basic_info_form.name_text)
     fill(
         basic_info_form, {
             'name_text': self.name,
             'description_text': self.description,
             'display_checkbox': self.display_in,
             'select_catalog': self.catalog,
             'select_dialog': self.dialog
         })
     if self.item_type != "Orchestration":
         sel.click(basic_info_form.field_entry_point)
         dynamic_tree.click_path("Datastore", domain, "Service",
                                 "Provisioning", "StateMachines",
                                 "ServiceProvision_Template", "default")
         sel.click(basic_info_form.apply_btn)
     tabstrip.select_tab("Request Info")
     # Address BZ1321631
     tabstrip.select_tab("Environment")
     tabstrip.select_tab("Catalog")
     template = template_select_form.template_table.find_row_by_cells({
         'Name':
         self.catalog_name,
         'Provider':
         self.provider
     })
     sel.click(template)
     web_ui.fill(
         request_form,
         {
             'instance_name': self.vm_name,
             'instance_type': self.instance_type,
             'guest_keypair': self.guest_keypair,
             'availability_zone': self.availability_zone,
             'cloud_tenant': self.cloud_tenant,
             'cloud_network': self.cloud_network,
             'security_groups':
             self.security_groups[0],  # not supporting multiselect now,
             # just take first value
         })
     sel.click(template_select_form.add_button)
     flash.assert_success_message(
         'Service Catalog Item "{}" was added'.format(self.name))
Пример #34
0
 def set_quota(self, **kwargs):
     sel.force_navigate("cfg_tenant_project", context={"tenant": self})
     tb.select("Configuration", "Manage Quotas")
     # Workaround - form is appearing after short delay
     sel.wait_for_element(self.quota_form.cpu_txt)
     fill(self.quota_form, {'cpu_cb': kwargs.get('cpu_cb'),
                           'cpu_txt': kwargs.get('cpu'),
                           'memory_cb': kwargs.get('memory_cb'),
                           'memory_txt': kwargs.get('memory'),
                           'storage_cb': kwargs.get('storage_cb'),
                           'storage_txt': kwargs.get('storage'),
                           'vm_cb': kwargs.get('vm_cb'),
                           'vm_txt': kwargs.get('vm'),
                           'template_cb': kwargs.get('template_cb'),
                           'template_txt': kwargs.get('template')},
         action=self.save_changes)
     flash.assert_success_message('Quotas for Tenant "{}" were saved'.format(self.name))
Пример #35
0
def test_ssa_users(provider, instance, soft_assert):
    """ Tests SSA fetches correct results for users list

    Metadata:
        test_flag: vm_analysis
    """
    username = fauxfactory.gen_alphanumeric()
    expected = None

    # In windows case we can't add new users (yet)
    # So we simply check that user list doesn't cause any Rails errors
    if instance.system_type != WINDOWS:
        # Add a new user
        instance.ssh.run_command("userdel {0} || useradd {0}".format(username))
        expected = instance.ssh.run_command(
            "cat /etc/passwd | wc -l").output.strip('\n')

    instance.smartstate_scan()
    wait_for(lambda: is_vm_analysis_finished(instance.name),
             delay=15,
             timeout="10m",
             fail_func=lambda: tb.select('Reload'))

    # Check that all data has been fetched
    current = instance.get_detail(properties=('Security', 'Users'))
    if instance.system_type != WINDOWS:
        assert current == expected

    # Make sure created user is in the list
    sel.click(InfoBlock("Security", "Users"))
    template = '//div[@id="list_grid"]/div[@class="{}"]/table/tbody'
    users = version.pick({
        version.LOWEST:
        SplitTable(header_data=(template.format("xhdr"), 1),
                   body_data=(template.format("objbox"), 0)),
        "5.5":
        Table('//table'),
    })

    for page in paginator.pages():
        sel.wait_for_element(users)
        if users.find_row('Name', username):
            return
    if instance.system_type != WINDOWS:
        pytest.fail("User {0} was not found".format(username))
Пример #36
0
def get_detail(properties):
    navigate_to(current_appliance().server, 'About')
    if current_version() < '5.7':
        properties = ['Session Information', properties]
        return InfoBlock.text(*properties).encode("utf-8").strip()
    else:
        locator = '//div[@class="product-versions-pf"]//li'
        sel.wait_for_element(locator)
        for element in sel.elements(locator):
            logger.debug('Checking for detail match for "{}" in  "{}"'.format(
                properties, element.text))
            match = re.match("{}\s(?P<value>.*)".format(properties),
                             element.text)
            if match:
                return match.group('value')
        else:
            raise ElementOrBlockNotFound(
                'Could not match about detail {}'.format(properties))
Пример #37
0
 def add_button(self):
     sel.force_navigate('catalog_item', context={'catalog': self.catalog,
                                                 'catalog_item': self})
     cfg_btn('Add a new Button', invokes_alert=True)
     sel.wait_for_element(button_form.btn_text)
     fill(button_form, {'btn_text': "btn_text",
                        'btn_hvr_text': "btn_descr"})
     if current_version() > "5.5":
         select = AngularSelect("button_image")
         select.select_by_visible_text("Button Image 1")
     else:
         select = DHTMLSelect("div#button_div")
         select.select_by_value(2)
     fill(button_form, {'select_dialog': self.dialog,
                        'system_process': "Request",
                        'request': "InspectMe"})
     sel.click(button_form.add_button)
     flash.assert_success_message('Button "btn_descr" was added')
Пример #38
0
    def set_retirement_date(self, when, warn=None):
        """Sets the retirement date for this Vm object.

        It incorporates some magic to make it work reliably since the retirement form is not very
        pretty and it can't be just "done".

        Args:
            when: When to retire. :py:class:`str` in format mm/dd/yyyy of
                :py:class:`datetime.datetime` or :py:class:`utils.timeutil.parsetime`.
            warn: When to warn, fills the select in the form in case the ``when`` is specified.
        """
        # TODO: refactor for retirement nav destinations and widget form fill when child classes
        self.load_details()
        lcl_btn("Set Retirement Date")
        if callable(self.retire_form.date_retire):
            # It is the old functiton
            sel.wait_for_element("#miq_date_1")
        else:
            sel.wait_for_element(self.retire_form.date_retire)
        if when is None:
            try:
                wait_for(lambda: sel.is_displayed(retire_remove_button),
                         num_sec=5,
                         delay=0.2)
                sel.click(retire_remove_button)
                wait_for(lambda: not sel.is_displayed(retire_remove_button),
                         num_sec=10,
                         delay=0.2)
                sel.click(form_buttons.save)
            except TimedOutError:
                pass
        else:
            if sel.is_displayed(retire_remove_button):
                sel.click(retire_remove_button)
                wait_for(lambda: not sel.is_displayed(retire_remove_button),
                         num_sec=15,
                         delay=0.2)
            fill(self.retire_form.date_retire, when)
            wait_for(lambda: sel.is_displayed(retire_remove_button),
                     num_sec=15,
                     delay=0.2)
            if warn is not None:
                fill(self.retire_form.warn, warn)
            sel.click(form_buttons.save)
Пример #39
0
    def systems(self):
        """Returns 'ConfigSystem' objects that are active under this profile"""
        navigate_to(self, 'Details')
        # ajax wait doesn't work here
        _title_loc = "//span[contains(@id, 'explorer_title_text') " \
                     "and contains(normalize-space(text()), 'Configured Systems')]"
        sel.wait_for_element(_title_loc)

        # Unassigned config profile has no tabstrip
        if "unassigned" not in self.name.lower():
            tabs.select_tab("Configured Systems")

        if sel.is_displayed(page.list_table_config_systems):
            row_key = 'hostname'
            return [
                ConfigSystem(row[row_key].text, self)
                for row in page.list_table_config_systems.rows()
            ]
        return list()
Пример #40
0
def test_ssa_groups(provider, instance, soft_assert):
    """ Tests SSA fetches correct results for groups

    Metadata:
        test_flag: vm_analysis
    """
    group = fauxfactory.gen_alphanumeric()
    expected = None

    if instance.system_type != WINDOWS:
        # Add a new group
        instance.ssh.run_command("groupdel {0} || groupadd {0}".format(group))
        expected = instance.ssh.run_command(
            "cat /etc/group | wc -l").output.strip('\n')

    instance.smartstate_scan()
    wait_for(lambda: is_vm_analysis_finished(instance.name),
             delay=15,
             timeout="10m",
             fail_func=lambda: tb.select('Reload'))

    # Check that all data has been fetched
    current = instance.get_detail(properties=('Security', 'Groups'))
    if instance.system_type != WINDOWS:
        assert current == expected

    # Make sure created group is in the list
    sel.click(InfoBlock("Security", "Groups"))
    template = '//div[@id="list_grid"]/div[@class="{}"]/table/tbody'
    groups = version.pick({
        version.LOWEST:
        SplitTable(header_data=(template.format("xhdr"), 1),
                   body_data=(template.format("objbox"), 0)),
        "5.5":
        Table('//table'),
    })

    for page in paginator.pages():
        sel.wait_for_element(groups)
        if groups.find_row('Name', group):
            return
    if instance.system_type != WINDOWS:
        pytest.fail("Group {0} was not found".format(group))
Пример #41
0
def edit_request(cells):
    """Context manager that opens the request for editing and saves or cancels depending on success.

    Args:
        cells: Search data for the requests table.
    """
    if not go_to_request(cells):
        raise Exception("The requst specified by {} not found!".format(str(cells)))
    sel.wait_for_element(buttons.edit)  # It is glitching here ...
    sel.click(buttons.edit)
    from cfme.provisioning import provisioning_form
    try:
        yield provisioning_form
    except Exception as e:
        logger.exception(e)
        sel.click(buttons.cancel)
        raise
    else:
        sel.click(provisioning_form.submit_copy_button)
        flash.assert_no_errors()
Пример #42
0
    def systems(self):
        """Returns 'ConfigSystem' objects that are active under this profile"""
        self.navigate()
        # ajax wait doesn't work here
        _title_loc = version.pick({'5.4':
                        "//div[contains(@class, 'dhtmlxInfoBarLabel')"
                        " and contains(normalize-space(text()), 'Configured Systems')]",
                    '5.5': "//span[contains(@id, 'explorer_title_text')"
                            " and contains(normalize-space(text()), 'Configured Systems')]"})
        sel.wait_for_element(_title_loc)

        # Unassigned config profile has no tabstrip
        if "unassigned" not in self.name.lower():
            tabs.select_tab("Configured Systems")

        if sel.is_displayed(page.list_table_config_systems):
            row_key = version.pick({version.LOWEST: 'host name', '5.5': 'hostname'})
            return [ConfigSystem(row[row_key].text, self) for row in
                    page.list_table_config_systems.rows()]
        return list()
 def create(self):
     navigate_to(self, 'Add')
     fill(label_form, {
         'label': self.label,
         'description_text': self.description,
         'submit_button': self.submit,
         'cancel_button': self.cancel
     })
     plus_btn("Add a new Tab to this Dialog")
     sel.wait_for_element(tab_form.tab_label)
     fill(tab_form, {'tab_label': self.tab_label,
                     'tab_desc': self.tab_desc})
     plus_btn("Add a new Box to this Tab")
     sel.wait_for_element(box_form.box_label)
     fill(box_form, {'box_label': self.box_label,
                     'box_desc': self.box_desc})
     if isinstance(self.element_data, (list, tuple)):
         self.add_element(*self.element_data)
     else:
         self.add_element(self.element_data)
     sel.click(form_buttons.add)
     flash.assert_success_message('Dialog "{}" was added'.format(self.label))
Пример #44
0
    def update(self, updates, cancel=False, validate_credentials=False):
        """Updates the manager through UI

        args:
            updates (dict): Data to change.
            cancel (bool): Whether to cancel out of the update.  The cancel is done
                after all the new information has been filled in the UI.
            validate_credentials (bool): Whether to validate credentials - if True and the
                credentials are invalid, an error will be raised.

        Note:
            utils.update use is recommended over use of this method.
        """
        sel.force_navigate('infrastructure_config_manager_edit', context={'manager': self})
        # Workaround - without this, update was failing on downstream appliance
        sel.wait_for_ajax()
        sel.wait_for_element(properties_form.name_text)

        fill(properties_form, self._form_mapping(**updates))
        fill(credential_form, updates.get('credentials', None), validate=validate_credentials)
        self._submit(cancel, edit_manager_btn)
        name = updates['name'] or self.name
        if not cancel:
            flash.assert_message_match('{} Provider "{}" was updated'.format(self.type, name))
Пример #45
0
 def create(self):
     sel.force_navigate('service_dialog_new')
     fill(
         label_form, {
             'label': self.label,
             'description_text': self.description,
             'submit_button': self.submit,
             'cancel_button': self.cancel
         })
     if (self.tab_label is not None):
         btn_marker = version.pick({
             'default': "Add a New Tab to this Dialog",
             '5.3': "Add a new Tab to this Dialog"
         })
         plus_btn(btn_marker)
         sel.wait_for_element(tab_form.tab_label)
         fill(tab_form, {
             'tab_label': self.tab_label,
             'tab_desc': self.tab_desc
         })
     if (self.box_label is not None):
         btn_marker = version.pick({
             'default': "Add a New Box to this Tab",
             '5.3': "Add a new Box to this Tab"
         })
         plus_btn(btn_marker)
         sel.wait_for_element(box_form.box_label)
         fill(box_form, {
             'box_label': self.box_label,
             'box_desc': self.box_desc
         })
     if (self.ele_label is not None):
         btn_marker = version.pick({
             'default': "Add a New Element to this Box",
             '5.3': "Add a new Element to this Box"
         })
         plus_btn(btn_marker)
         sel.wait_for_element(element_form.ele_label)
         fill(
             element_form, {
                 'ele_label': self.ele_label,
                 'ele_name': self.ele_name,
                 'ele_desc': self.ele_desc,
                 'choose_type': self.choose_type,
                 'default_text_box': self.default_text_box
             })
     form_buttons.add()
     flash.assert_no_errors()
Пример #46
0
 def create(self, *element_data):
     sel.force_navigate('service_dialog_new')
     fill(
         label_form, {
             'label': self.label,
             'description_text': self.description,
             'submit_button': self.submit,
             'cancel_button': self.cancel
         })
     plus_btn({
         version.LOWEST: "Add a New Tab to this Dialog",
         "5.3": "Add a new Tab to this Dialog"
     })
     sel.wait_for_element(tab_form.tab_label)
     fill(tab_form, {
         'tab_label': self.tab_label,
         'tab_desc': self.tab_desc
     })
     plus_btn({
         version.LOWEST: "Add a New Box to this Tab",
         "5.3": "Add a new Box to this Tab"
     })
     sel.wait_for_element(box_form.box_label)
     fill(box_form, {
         'box_label': self.box_label,
         'box_desc': self.box_desc
     })
     for each_element in element_data:
         plus_btn({
             version.LOWEST: "Add a New Element to this Box",
             "5.3": "Add a new Element to this Box"
         })
         sel.wait_for_element(element_form.ele_label)
         # Workaround to refresh the fields, select other values (text area box and checkbox)and
         # then select "text box"
         fill(element_form, {'choose_type': "Text Area Box"})
         fill(element_form, {'choose_type': "Check Box"})
         fill(element_form, each_element)
         self.element_type(each_element)
     sel.click(form_buttons.add)
     flash.assert_no_errors()
Пример #47
0
def _all_servicedialogs_add_new(context):
    service_dialog_tree.click_path('All Dialogs')
    cfg_btn('Add a new Dialog')
    sel.wait_for_element(label_form.label)
Пример #48
0
def _new_button(_context):
    cfg_btn('Add a new Button')
    sel.wait_for_element(button_form.btn_text)
Пример #49
0
def _all_servicedialogs_add_new(context):
    cfg_btn('Add a new Dialog')
    sel.wait_for_element(label_form.label)
Пример #50
0
 def step(self):
     accordion.tree("Dashboards", "All Dashboards", "All Groups",
                    self.obj.group)
     toolbar.select("Configuration", "Add a new Dashboard")
     sel.wait_for_element(Dashboard.form.name)
 def step(self):
     cfg_btn('Add a new Dialog')
     sel.wait_for_element(label_form.label)
Пример #52
0
def _new_button_group(_context):
    cfg_btn('Add a new Button Group')
    sel.wait_for_element(button_group_form.btn_group_text)