Example #1
0
    def get_destroy_status(self):
        """
        Return the current status of destroy operation

        """
        self.navigate_clusters_page(timeout=300)
        time.sleep(10)
        locator = format_locator(self.acm_page_nav["cc_table_entry"],
                                 self.cluster_name)
        if not self.check_element_presence(
            (locator[1], locator[0]), timeout=300):
            # Cluster deletion has happened
            self.destroy_status = "Done"
        else:
            self.do_click(locator=locator, timeout=300)
            loc = format_locator(
                self.acm_page_nav["cc_cluster_being_destroyed_heading"],
                self.cluster_name,
            )
            if not self.check_element_presence(
                    locator=(By.XPATH, loc[0]),
                    timeout=300,
            ):
                log.error("Cluster destroy status msg missing")
                self.destroy_status = "Failed"
            else:
                elapsed_time = int(time.time() - self.destroy_start_time)
                if elapsed_time > self.cluster_destroy_timeout:
                    self.destroy_status = "Failed"
                    self.destroy_failed_reason = "timeout"
Example #2
0
    def create_pvc_ui(self, project_name, sc_name, pvc_name, access_mode,
                      pvc_size, vol_mode):
        """
        Create PVC via UI.

        Args:
            project_name (str): name of test project
            sc_name (str): storage class name
            pvc_name (str): the name of pvc
            access_mode (str): access mode
            pvc_size (str): the size of pvc (GB)
            vol_mode (str): volume mode type

        """
        self.navigate_persistentvolumeclaims_page()

        logger.info(f"Search test project {project_name}")
        self.do_click(self.pvc_loc["pvc_project_selector"])
        self.do_send_keys(self.pvc_loc["search-project"], text=project_name)

        logger.info(f"Select test project {project_name}")
        self.do_click(
            format_locator(self.pvc_loc["test-project-link"], project_name))

        logger.info("Click on 'Create Persistent Volume Claim'")
        self.do_click(self.pvc_loc["pvc_create_button"])

        logger.info("Select Storage Class")
        self.do_click(self.pvc_loc["pvc_storage_class_selector"])
        self.do_click(
            format_locator(self.pvc_loc["storage_class_name"], sc_name))

        logger.info("Select PVC name")
        self.do_send_keys(self.pvc_loc["pvc_name"], pvc_name)

        logger.info("Select Access Mode")
        self.do_click(self.pvc_loc[access_mode])

        logger.info("Select PVC size")
        self.do_send_keys(self.pvc_loc["pvc_size"], text=pvc_size)

        if (sc_name != constants.DEFAULT_STORAGECLASS_CEPHFS
                and access_mode == "ReadWriteOnce"):
            logger.info(
                f"Test running on OCP version: {get_running_ocp_version()}")

            logger.info(f"Selecting Volume Mode of type {vol_mode}")
            self.do_click(self.pvc_loc[vol_mode])

        logger.info("Create PVC")
        self.do_click(self.pvc_loc["pvc_create"])
        time.sleep(1)
Example #3
0
    def verify_pvc_resize_ui(self, project_name, pvc_name, expected_capacity):
        """
        Verifying PVC resize via UI

        Args:
            project_name (str): name of test project
            pvc_name (str): the name of pvc
            expected_capacity (str): the new size of pvc (GiB)

        """
        self.navigate_persistentvolumeclaims_page()

        logger.info(f"Search and Select test project {project_name}")
        self.do_click(self.pvc_loc["pvc_project_selector"])
        self.do_send_keys(self.pvc_loc["search-project"], text=project_name)
        self.do_click(
            format_locator(self.pvc_loc["test-project-link"], project_name))

        logger.info(
            f"Search for {pvc_name} inside test project {project_name}")
        self.do_send_keys(self.pvc_loc["search_pvc"], text=pvc_name)

        logger.info(f"Go to PVC {pvc_name} Page")
        self.do_click(get_element_type(pvc_name))

        is_expected_capacity = self.wait_until_expected_text_is_found(
            format_locator(self.pvc_loc["expected-capacity"],
                           expected_capacity),
            expected_text=expected_capacity,
            timeout=300,
        )

        is_capacity = self.wait_until_expected_text_is_found(
            format_locator(self.pvc_loc["new-capacity"], expected_capacity),
            expected_text=expected_capacity,
            timeout=300,
        )

        if not is_expected_capacity:
            logger.error("Expected capacity text is not found")

        if not is_capacity:
            logger.error("Capacity text is not found")

        if is_expected_capacity and is_capacity:
            return True
        else:
            return False
Example #4
0
    def delete_pvc_ui(self, pvc_name, project_name):
        """
        Delete pvc via UI

        Args:
            pvc_name (str): Name of the pvc
            project_name (str): name of test project

        """
        self.navigate_persistentvolumeclaims_page()

        logger.info(f"Select test project {project_name}")
        self.do_click(self.pvc_loc["pvc_project_selector"])
        self.do_send_keys(self.pvc_loc["search-project"], text=project_name)
        self.do_click(
            format_locator(self.pvc_loc["test-project-link"], project_name))

        logger.info(
            f"Search for {pvc_name} inside test project {project_name}")
        self.do_send_keys(self.pvc_loc["search_pvc"], text=pvc_name)

        logger.info(f"Go to PVC {pvc_name} Page")
        self.do_click(get_element_type(pvc_name))

        logger.info("Click on Actions")
        self.do_click(self.pvc_loc["pvc_actions"])

        logger.info("Click on 'Delete PVC'")
        self.do_click(self.pvc_loc["pvc_delete"])

        logger.info("Confirm PVC Deletion")
        self.do_click(self.pvc_loc["confirm_pvc_deletion"])
        time.sleep(1)
Example #5
0
    def submariner_validation_ui(self):
        """
        Checks available status of imported clusters after submariner creation

        """

        self.navigate_clusters_page()
        self.page_has_loaded(retries=15, sleep_time=5)
        self.do_click(locator=self.acm_page_nav["Clusters_page"])
        log.info("Click on Cluster sets")
        self.do_click(self.page_nav["cluster-sets"])
        self.page_has_loaded(retries=15, sleep_time=5)
        log.info("Click on the cluster set created")
        self.do_click(
            format_locator(
                locator=self.page_nav["cluster-set-selection"],
                string_to_insert=cluster_set_name,
            ))
        log.info("Click on 'Submariner add-ons' tab")
        self.do_click(self.page_nav["submariner-tab"])
        log.info("Checking connection status of both the imported clusters")
        self.wait_until_expected_text_is_found(
            locator=self.page_nav["connection-status-1"],
            expected_text="Healthy",
            timeout=600,
        )
        self.wait_until_expected_text_is_found(
            locator=self.page_nav["connection-status-2"],
            expected_text="Healthy",
            timeout=600,
        )
        log.info("Checking agent status of both the imported clusters")
        self.wait_until_expected_text_is_found(
            locator=self.page_nav["agent-status-1"],
            expected_text="Healthy",
            timeout=600,
        )
        self.wait_until_expected_text_is_found(
            locator=self.page_nav["agent-status-2"],
            expected_text="Healthy",
            timeout=600,
        )
        log.info(
            "Checking if nodes of both the imported clusters are labeled or not"
        )
        self.wait_until_expected_text_is_found(
            locator=self.page_nav["node-label-1"],
            expected_text="Nodes labeled",
            timeout=600,
        )
        self.wait_until_expected_text_is_found(
            locator=self.page_nav["node-label-2"],
            expected_text="Nodes labeled",
            timeout=600,
        )
        self.take_screenshot()
        log.info("Submariner add-ons creation is successful")
Example #6
0
 def goto_cluster_details_page(self):
     self.navigate_clusters_page()
     locator = format_locator(self.acm_page_nav["cc_table_entry"],
                              self.cluster_name)
     self.do_click(locator=locator)
     self.do_click(locator=self.acm_page_nav["cc_cluster_details_page"],
                   timeout=100)
     self.choose_expanded_mode(True,
                               self.acm_page_nav["cc_details_toggle_icon"])
Example #7
0
    def create_pvc_ui(self, project_name, sc_name, pvc_name, access_mode,
                      pvc_size, vol_mode):
        """
        Create PVC via UI.
        Args:
            project_name (str): name of test project
            sc_name (str): storage class name
            pvc_name (str): the name of pvc
            access_mode (str): access mode
            pvc_size (str): the size of pvc (GB)
            vol_mode (str): volume mode type
        """
        self.navigate_persistentvolumeclaims_page()

        logger.info(f"Search test project {project_name}")
        self.do_click(self.pvc_loc["pvc_project_selector"])
        self.do_send_keys(self.pvc_loc["search-project"], text=project_name)

        self.wait_for_namespace_selection(project_name=project_name)

        logger.info("Click on 'Create Persistent Volume Claim'")
        self.do_click(self.pvc_loc["pvc_create_button"])

        logger.info("Click on Storage Class selection")
        self.do_click(self.pvc_loc["pvc_storage_class_selector"])

        logger.info("Select the Storage Class type")
        self.do_click(
            format_locator(self.pvc_loc["storage_class_name"], sc_name))

        logger.info("Enter PVC name")
        self.do_send_keys(self.pvc_loc["pvc_name"], pvc_name)

        logger.info("Select Access Mode")
        self.do_click(self.pvc_loc[access_mode])

        logger.info("Select PVC size")
        self.do_send_keys(self.pvc_loc["pvc_size"], text=pvc_size)

        ocs_version = version.get_semantic_ocs_version_from_config()
        if (not self.ocp_version_full == version.VERSION_4_6
                and not ocs_version == version.VERSION_4_6):
            if (sc_name != constants.DEFAULT_STORAGECLASS_CEPHFS
                    and access_mode == "ReadWriteOnce"):
                if (sc_name !=
                        constants.DEFAULT_EXTERNAL_MODE_STORAGECLASS_CEPHFS
                        and access_mode == "ReadWriteOnce"):
                    logger.info(
                        f"Test running on OCP version: {get_running_ocp_version()}"
                    )

                    logger.info(f"Selecting Volume Mode of type {vol_mode}")
                    self.do_click(self.pvc_loc[vol_mode])

        logger.info("Create PVC")
        self.do_click(self.pvc_loc["pvc_create"])
Example #8
0
    def verify_pvc_ui(
        self, pvc_size, access_mode, vol_mode, sc_type, pvc_name, project_name
    ):
        """
        Verifying PVC details via UI

        Args:
            pvc_size (str): the size of pvc (GB)
            access_mode (str): access mode
            vol_mode (str): volume mode type
            sc_type (str): storage class type
            pvc_name (str): the name of pvc
            project_name (str): name of test project


        """
        self.navigate_persistentvolumeclaims_page()

        logger.info(f"Search and Select test project {project_name}")
        self.do_click(self.pvc_loc["pvc_project_selector"])
        self.do_send_keys(self.pvc_loc["search-project"], text=project_name)
        self.do_click(format_locator(self.pvc_loc["test-project-link"], project_name))

        logger.info(f"Search for {pvc_name} inside test project {project_name}")
        self.do_send_keys(self.pvc_loc["search_pvc"], text=pvc_name)

        logger.info(f"Go to PVC {pvc_name} Page")
        self.do_click(self.pvc_loc[pvc_name])

        logger.info("Checking status of Pvc")
        self.wait_until_expected_text_is_found(
            locator=self.pvc_loc["pvc-status"], expected_text="Bound"
        )

        pvc_size_new = f"{pvc_size} GiB"
        self.check_element_text(expected_text=pvc_size_new)
        logger.info(f"Verifying pvc size : {pvc_size_new}")

        pvc_access_mode_new = f"{access_mode}"
        self.check_element_text(expected_text=pvc_access_mode_new)
        logger.info(f"Verifying access mode : {pvc_access_mode_new}")

        if (
            sc_type
            in (
                constants.DEFAULT_STORAGECLASS_RBD_THICK,
                constants.DEFAULT_STORAGECLASS_RBD,
            )
            and (access_mode == "ReadWriteOnce")
        ):
            pvc_vol_mode_new = f"{vol_mode}"
            self.check_element_text(expected_text=pvc_vol_mode_new)
            logger.info(f"Verifying volume mode : {pvc_vol_mode_new}")
Example #9
0
    def wait_for_namespace_selection(self, project_name):
        """
        If you have already navigated to namespace drop-down, this function waits for namespace selection on UI.
        It would be useful to avoid test failures in case of delays/latency in populating the list of projects under the
        namespace drop-down.
        The timeout is hard-coded to 10 seconds in the below function call which is more than sufficient.

        Args:
            project_name (str): Name of the project to be selected

        Returns:
            bool: True if the project is found, raises NoSuchElementException otherwise with a log message
        """

        from ocs_ci.ocs.ui.helpers_ui import format_locator

        if self.ocp_version_full >= version.VERSION_4_10:
            default_projects_is_checked = self.driver.find_element_by_xpath(
                "//span[@class='pf-c-switch__toggle']"
            )

            if (
                default_projects_is_checked.get_attribute("data-checked-state")
                == "false"
            ):
                logger.info("Show default projects")
                self.do_click(self.page_nav["show-default-projects"])

        pvc_loc = locators[self.ocp_version]["pvc"]
        logger.info(f"Wait and select namespace {project_name}")
        wait_for_project = self.wait_until_expected_text_is_found(
            locator=format_locator(pvc_loc["test-project-link"], project_name),
            expected_text=f"{project_name}",
            timeout=10,
        )
        if wait_for_project:
            self.do_click(format_locator(pvc_loc["test-project-link"], project_name))
            logger.info(f"Namespace {project_name} selected")
        else:
            raise NoSuchElementException(f"Namespace {project_name} not found on UI")
Example #10
0
    def destroy_cluster(self):
        """
        ACM UI based destroy cluster,
        select the cluster from UI, click on destroy

        """
        # Navigate to Clusters page
        self.navigate_clusters_page()
        # Click on cluster name from the table
        locator = format_locator(self.acm_page_nav["cc_table_entry"],
                                 self.cluster_name)
        self.do_click(locator=locator)
        # Click on 'Actions' dropdown
        action_dropdown = format_locator(
            self.acm_page_nav["cc_delete_cluster_action_dropdown"],
            f"{self.cluster_name}-actions",
        )
        self.do_click(action_dropdown, timeout=300)
        # From the 'Actions' dropdown click on 'Destroy Cluster'
        self.do_click(locator=self.acm_page_nav["cc_destroy_cluster"],
                      timeout=300)
        # A confirmation window pops up
        # Fill cluster name in the confirmation window's text box
        self.do_click(self.acm_page_nav["cc_destroy_cluster_confirm_textbox"],
                      timeout=300)
        self.do_send_keys(
            self.acm_page_nav["cc_destroy_cluster_confirm_textbox"],
            self.cluster_name)
        # Click on destroy button
        self.do_click(self.acm_page_nav["cc_destroy_button"], timeout=300)
        loc = format_locator(
            self.acm_page_nav["cc_cluster_being_destroyed_heading"],
            self.cluster_name)
        if not self.check_element_presence(locator=(By.XPATH, loc[0]),
                                           timeout=600):
            raise ACMClusterDeployException(
                "Something went wrong with destroy action "
                f"for the cluster {self.cluster_name}")
        self.destroy_status = "Destroying"
        self.destroy_start_time = time.time()
Example #11
0
 def click_platform_and_credentials(self):
     self.navigate_create_clusters_page()
     self.do_click(
         locator=self.acm_page_nav[PLATFORM_XPATH_MAP[self.platform]],
         timeout=100)
     self.do_click(
         locator=self.
         acm_page_nav["cc_infrastructure_provider_creds_dropdown"])
     credential = format_locator(
         self.acm_page_nav["cc_infrastructure_provider_creds_select_creds"],
         self.platform_credential_name,
     )
     self.do_click(locator=credential)
Example #12
0
    def pvc_resize_ui(self, project_name, pvc_name, new_size):
        """
        Resizing pvc via UI

        Args:
            project_name (str): name of test project
            pvc_name (str): the name of pvc
            new_size (int): the new size of pvc (GB)

        """
        self.navigate_persistentvolumeclaims_page()

        logger.info(f"Search and Select test project {project_name}")
        self.do_click(self.pvc_loc["pvc_project_selector"])
        self.do_send_keys(self.pvc_loc["search-project"], text=project_name)
        self.do_click(
            format_locator(self.pvc_loc["test-project-link"], project_name))

        logger.info(
            f"Search for {pvc_name} inside test project {project_name}")
        self.do_send_keys(self.pvc_loc["search_pvc"], text=pvc_name)

        logger.info(f"Go to PVC {pvc_name} Page")
        self.do_click(get_element_type(pvc_name))

        logger.info("Click on Actions")
        self.do_click(self.pvc_loc["pvc_actions"])

        logger.info("Click on Expand PVC from dropdown options")
        self.do_click(self.pvc_loc["expand_pvc"])

        logger.info("Clear the size of existing pvc")
        self.do_clear(self.pvc_loc["resize-value"])

        logger.info("Enter the size of new pvc")
        self.do_send_keys(self.pvc_loc["resize-value"], text=new_size)

        logger.info("Click on Expand Button")
        self.do_click(self.pvc_loc["expand-btn"])
Example #13
0
    def create_cluster_prereq(self, timeout=600):
        """
        Perform all prereqs before vsphere cluster creation from ACM

        Args:
            timeout (int): Timeout for any UI operations

        """
        # Create vsphre credentials
        # Click on 'Add credential' in 'Infrastructure provider' page
        self.navigate_create_clusters_page()
        self.refresh_page()
        hard_timeout = config.ENV_DATA.get("acm_ui_hard_deadline", 1200)
        remaining = hard_timeout
        while True:
            ret = self.check_element_presence(
                (By.XPATH,
                 self.acm_page_nav[PLATFORM_XPATH_MAP[self.platform]][0]),
                timeout=300,
            )
            if ret:
                log.info("Found platform icon")
                break
            else:
                if remaining < 0:
                    raise TimeoutException(
                        "Timedout while waiting for platform icon")
                else:
                    remaining -= timeout
                    self.navigate_create_clusters_page()
                    self.refresh_page()

        self.do_click(
            locator=self.acm_page_nav[PLATFORM_XPATH_MAP[self.platform]],
            timeout=100)

        # "Basic vsphere credential info"
        # 1. credential name
        # 2. Namespace
        # 3. Base DNS domain
        self.do_click(locator=self.acm_page_nav["cc_provider_credentials"],
                      timeout=100)
        parent_tab = self.driver.current_window_handle
        tabs = self.driver.window_handles
        self.driver.switch_to.window(tabs[1])
        self.do_click(locator=self.acm_page_nav["cc_provider_creds_vsphere"])

        basic_cred_dict = {
            self.acm_page_nav["cc_provider_creds_vsphere_cred_name"]:
            self.platform_credential_name,
            self.acm_page_nav["cc_provider_creds_vsphere_base_dns"]:
            f"{self.cluster_conf.ENV_DATA['base_domain']}",
        }
        self.fill_multiple_textbox(basic_cred_dict)
        # Credential Namespace is not a text box but a dropdown
        self.do_click(
            self.acm_page_nav["cc_provider_creds_vsphere_cred_namespace"])
        self.do_click(self.acm_page_nav["cc_provider_creds_default_namespace"])

        # click on 'Next' button at the bottom
        self.click_next_button()

        # Detailed VMWare credentials section
        # 1. vCenter server
        # 2. vCenter username
        # 3. vCenter password
        # 4. cVenter root CA certificate
        # 5. vSphere cluster name
        # 6. vSphere datacenter
        # 7. vSphere default  Datastore
        with open(VSPHERE_CA_FILE_PATH, "r") as fp:
            vsphere_ca = fp.read()
        vsphere_creds_dict = {
            self.acm_page_nav["cc_provider_creds_vsphere_vcenter_server"]:
            f"{self.cluster_conf.ENV_DATA['vsphere_server']}",
            self.acm_page_nav["cc_provider_creds_vsphere_username"]:
            f"{self.cluster_conf.ENV_DATA['vsphere_user']}",
            self.acm_page_nav["cc_provider_creds_vsphere_password"]:
            f"{self.cluster_conf.ENV_DATA['vsphere_password']}",
            self.acm_page_nav["cc_provider_creds_vsphere_rootca"]:
            f"{vsphere_ca}",
            self.acm_page_nav["cc_provider_creds_vsphere_clustername"]:
            f"{self.cluster_conf.ENV_DATA['vsphere_cluster']}",
            self.acm_page_nav["cc_provider_creds_vsphere_dc"]:
            f"{self.cluster_conf.ENV_DATA['vsphere_datacenter']}",
            self.acm_page_nav["cc_provider_creds_vsphere_datastore"]:
            f"{self.cluster_conf.ENV_DATA['vsphere_datastore']}",
        }
        self.fill_multiple_textbox(vsphere_creds_dict)
        self.click_next_button()

        # Pull Secret and SSH
        # 1. Pull secret
        # 2. SSH Private key
        # 3. SSH Public key
        with open(os.path.join(DATA_DIR, "pull-secret"), "r") as fp:
            pull_secret = fp.read()
        ssh_pub_key_path = os.path.expanduser(
            self.cluster_conf.DEPLOYMENT["ssh_key"])
        ssh_priv_key_path = os.path.expanduser(
            self.cluster_conf.DEPLOYMENT["ssh_key_private"])

        with open(ssh_pub_key_path, "r") as fp:
            ssh_pub_key = fp.read()

        with open(ssh_priv_key_path, "r") as fp:
            ssh_priv_key = fp.read()

        pull_secret_and_ssh = {
            self.acm_page_nav["cc_provider_creds_vsphere_pullsecret"]:
            f"{pull_secret}",
            self.acm_page_nav["cc_provider_creds_vsphere_ssh_privkey"]:
            f"{ssh_priv_key}",
            self.acm_page_nav["cc_provider_creds_vsphere_ssh_pubkey"]:
            f"{ssh_pub_key}",
        }
        self.fill_multiple_textbox(pull_secret_and_ssh)
        self.click_next_button()
        self.do_click(
            locator=self.acm_page_nav["cc_provider_creds_vsphere_add_button"])
        # Go to credentials tab
        self.do_click(locator=self.acm_page_nav["Credentials"])
        credential_table_entry = format_locator(
            self.acm_page_nav["cc_table_entry"], self.platform_credential_name)
        if not self.check_element_presence(
            (By.XPATH, credential_table_entry[0]), timeout=20):
            raise ACMClusterDeployException(
                "Could not create credentials for vsphere")
        else:
            log.info(
                f"vsphere credential successfully created {self.platform_credential_name}"
            )
        # Get the ips in prereq itself
        from ocs_ci.deployment import vmware

        # Switch context to cluster which we are about to create
        prev_ctx = config.cur_index
        config.switch_ctx(self.cluster_conf.MULTICLUSTER["multicluster_index"])
        self.ips = vmware.assign_ips(self.nvips)
        vmware.create_dns_records(self.ips)
        config.switch_ctx(prev_ctx)
        self.driver.close()
        self.driver.switch_to.window(parent_tab)
        self.driver.switch_to.default_content()
Example #14
0
    def install_submariner_ui(self):
        """
        Installs the Submariner on the ACM Hub cluster and expects 2 OCP clusters to be already imported
        on the Hub Cluster to create a link between them

        """

        self.navigate_clusters_page()
        self.page_has_loaded(retries=15, sleep_time=5)
        self.do_click(locator=self.acm_page_nav["Clusters_page"])
        log.info("Click on Cluster sets")
        self.do_click(self.page_nav["cluster-sets"])
        self.page_has_loaded(retries=15, sleep_time=5)
        log.info("Click on Create cluster set")
        self.do_click(self.page_nav["create-cluster-set"])
        global cluster_set_name
        cluster_set_name = create_unique_resource_name("submariner",
                                                       "clusterset")
        log.info(f"Send Cluster set name '{cluster_set_name}'")
        self.do_send_keys(self.page_nav["cluster-set-name"],
                          text=cluster_set_name)
        log.info("Click on Create")
        self.do_click(self.page_nav["click-create"], enable_screenshot=True)
        time.sleep(1)
        log.info("Click on Manage resource assignments")
        self.do_click(self.page_nav["click-manage-resource-assignments"],
                      enable_screenshot=True)

        log.info(f"Search and select cluster '{cluster_name_a}'")
        self.do_send_keys(self.page_nav["search-cluster"], text=cluster_name_a)
        self.do_click(self.page_nav["select-first-checkbox"],
                      enable_screenshot=True)
        log.info("Clear search by clicking on cross mark")
        self.do_click(self.page_nav["clear-search"])
        log.info(f"Search and select cluster '{cluster_name_b}'")
        self.do_send_keys(self.page_nav["search-cluster"], text=cluster_name_b)
        self.do_click(self.page_nav["select-first-checkbox"],
                      enable_screenshot=True)
        log.info("Clear search by clicking on cross mark [2]")
        self.do_click(self.page_nav["clear-search"])
        log.info("Click on 'Review'")
        self.do_click(self.page_nav["review-btn"], enable_screenshot=True)
        log.info("Click on 'Save' to confirm the changes")
        self.do_click(self.page_nav["confirm-btn"], enable_screenshot=True)
        time.sleep(3)
        log.info("Click on 'Submariner add-ons' tab")
        self.do_click(self.page_nav["submariner-tab"])
        log.info("Click on 'Install Submariner add-ons' button")
        self.do_click(self.page_nav["install-submariner-btn"])
        log.info("Click on 'Target clusters'")
        self.do_click(self.page_nav["target-clusters"])
        log.info(f"Select 1st cluster which is {cluster_name_a}")
        self.do_click(
            format_locator(
                locator=self.page_nav["cluster-name-selection"],
                string_to_insert=cluster_name_a,
            ))
        log.info(f"Select 2nd cluster which is {cluster_name_b}")
        self.do_click(
            format_locator(
                locator=self.page_nav["cluster-name-selection"],
                string_to_insert=cluster_name_b,
            ),
            enable_screenshot=True,
        )
        log.info("Click on Next button")
        self.do_click(self.page_nav["next-btn"])
        log.info("Click on 'Enable NAT-T' to uncheck it")
        self.do_click(self.page_nav["nat-t-checkbox"])
        log.info(
            "Increase the gateway count to 3 by clicking twice on the gateway count add button"
        )
        self.do_click(self.page_nav["gateway-count-btn"])
        self.do_click(self.page_nav["gateway-count-btn"])
        log.info("Click on Next button")
        self.do_click(self.page_nav["next-btn"])
        log.info("Click on 'Enable NAT-T' to uncheck it [2]")
        self.do_click(self.page_nav["nat-t-checkbox"])
        log.info(
            "Increase the gateway count to 3 by clicking twice on the gateway count add button [2]"
        )
        self.do_click(self.page_nav["gateway-count-btn"])
        self.do_click(self.page_nav["gateway-count-btn"])
        log.info("Click on Next button [2]")
        self.do_click(self.page_nav["next-btn"])
        self.take_screenshot()
        log.info("Click on 'Install'")
        self.do_click(self.page_nav["install-btn"])
Example #15
0
    def pvc_clone_ui(
        self,
        project_name,
        pvc_name,
        cloned_pvc_access_mode=constants.ACCESS_MODE_RWO,
        cloned_pvc_name=None,
    ):
        """
        Clone PVC via UI

        Args:
            project_name (str): The name of project
            pvc_name (str): The name of PVC
            cloned_pvc_access_mode (str): Access mode for cloned PVC
            cloned_pvc_name (str): The name for cloned PVC

        """
        clone_name = cloned_pvc_name or f"{pvc_name}-clone"
        self.navigate_persistentvolumeclaims_page()

        logger.info(f"Search and select the project {project_name}")
        self.do_click(self.pvc_loc["pvc_project_selector"])
        self.do_send_keys(self.pvc_loc["search-project"], text=project_name)

        self.wait_for_namespace_selection(project_name=project_name)

        logger.info(f"Search for PVC {pvc_name}")
        self.do_send_keys(self.pvc_loc["search_pvc"], text=pvc_name)

        logger.info(f"Go to PVC {pvc_name} page")
        self.do_click(get_element_type(pvc_name))

        logger.info("Click on Actions")
        self.do_click(self.pvc_loc["pvc_actions"])

        logger.info("Click on Clone PVC from dropdown options")
        self.do_click(self.pvc_loc["clone_pvc"], enable_screenshot=True)

        logger.info("Clear the default name of clone PVC")
        ocs_version = version.get_semantic_ocs_version_from_config()
        if (self.ocp_version_full == version.VERSION_4_6
                and ocs_version == version.VERSION_4_6):
            self.do_clear(
                format_locator(self.pvc_loc["clone_name_input"], clone_name))
        else:
            self.do_clear(self.pvc_loc["clone_name_input"])

        logger.info("Enter the name of clone PVC")
        if (self.ocp_version_full == version.VERSION_4_6
                and ocs_version == version.VERSION_4_6):
            self.do_send_keys(
                format_locator(self.pvc_loc["clone_name_input"], clone_name),
                text=clone_name,
            )
        else:
            self.do_send_keys(self.pvc_loc["clone_name_input"],
                              text=clone_name)

        if (not self.ocp_version_full == version.VERSION_4_6
                and ocs_version == version.VERSION_4_6):
            logger.info("Select Access Mode of clone PVC")
            self.do_click(self.pvc_loc[cloned_pvc_access_mode])

        logger.info("Click on Clone button")
        self.do_click(generic_locators["confirm_action"],
                      enable_screenshot=True)