diff --git a/ods_ci/tests/Resources/CLI/AcceleratorProfiles/AcceleratorProfiles.resource b/ods_ci/tests/Resources/CLI/AcceleratorProfiles/AcceleratorProfiles.resource index c017f9d2a..2cf6e67f2 100644 --- a/ods_ci/tests/Resources/CLI/AcceleratorProfiles/AcceleratorProfiles.resource +++ b/ods_ci/tests/Resources/CLI/AcceleratorProfiles/AcceleratorProfiles.resource @@ -10,7 +10,7 @@ ${ACCELERATOR_RESOURCES_DIRPATH}= tests/Resources/Files/accelerator Create An Accelerator Profile Via CLI [Documentation] Create an instance of Accelerator Profile using OC [Arguments] ${name} ${ns}=${APPLICATIONS_NAMESPACE} - ${status}= Run Keyword And Return Status Oc Create kind=AcceleratorProfile + ${status}= Run Keyword And Return Status Oc Apply kind=AcceleratorProfile ... src=${ACCELERATOR_RESOURCES_DIRPATH}/${name}.yaml namespace=${ns} ... template_data={test_name: '${TEST_NAME}', test_ns: '${ns}'} Should Be Equal As Integers ${status} ${TRUE} diff --git a/ods_ci/tests/Resources/Common.robot b/ods_ci/tests/Resources/Common.robot index 0effa0e3f..64e227dac 100644 --- a/ods_ci/tests/Resources/Common.robot +++ b/ods_ci/tests/Resources/Common.robot @@ -24,18 +24,20 @@ Begin Web Test ... ODH dashboard, checking that the spawner is in a ready state before ... handing control over to the test suites. [Arguments] ${username}=${TEST_USER.USERNAME} ${password}=${TEST_USER.PASSWORD} - ... ${auth_type}=${TEST_USER.AUTH_TYPE} + ... ${auth_type}=${TEST_USER.AUTH_TYPE} ${jupyter_login}=${TRUE} Set Library Search Order SeleniumLibrary RHOSi Setup Open Browser ${ODH_DASHBOARD_URL} browser=${BROWSER.NAME} options=${BROWSER.OPTIONS} Login To RHODS Dashboard ${username} ${password} ${auth_type} Wait For RHODS Dashboard To Load - Launch Jupyter From RHODS Dashboard Link - Login To Jupyterhub ${username} ${password} ${auth_type} - ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account - Fix Spawner Status - Go To ${ODH_DASHBOARD_URL} + IF ${jupyter_login} + Launch Jupyter From RHODS Dashboard Link + Login To Jupyterhub ${username} ${password} ${auth_type} + ${authorization_required}= Is Service Account Authorization Required + IF ${authorization_required} Authorize JupyterLab Service Account + Fix Spawner Status + Go To ${ODH_DASHBOARD_URL} + END End Web Test [Arguments] ${username}=${TEST_USER.USERNAME} @@ -119,11 +121,21 @@ Get All Text Under Element ${elements}= Get WebElements ${parent_element} ${text_list}= Create List FOR ${element} IN @{elements} - ${text}= Get Element Attribute ${element} textContent + ${text}= Run Keyword And Ignore Error + ... Get Element Attribute ${element} textContent Append To List ${text_list} ${text} END RETURN ${text_list} +Scroll And Input Text Into Element + [Documentation] Scrolls element into view and inputs text into the element + [Arguments] ${element} ${text} + Scroll Element Into View ${element} + ${text_entered}= Run Keyword And Return Status Input Text ${element} ${text} + IF ${text_entered} RETURN + Click Element ${element} + Press Keys NONE ${text} + Get All Strings That Contain [Documentation] Returns new list of strings, for each item in ${list_of_strings} that contains ${substring_to_search} [Arguments] ${list_of_strings} ${substring_to_search} @@ -597,3 +609,13 @@ Skip If Cluster Type Is Managed [Documentation] Skips test if cluster type is Managed ${cluster_type}= Is Cluster Type Self-Managed Skip If condition=${cluster_type}==False msg=This test is skipped for Managed cluster + +Delete All ${resource_type} In Namespace By Name + [Documentation] Force delete all ${resource_type} named '${resource_type}' in namespace '${namespace}' + [Arguments] ${namespace} ${resource_name} + ${list_resources} = Set Variable oc -n ${namespace} get ${resource_type} -o name | grep /${resource_name} + ${xargs_patch} = Set Variable xargs -rt oc -n ${namespace} patch --type=json -p '[{"op": "add", "path": "/metadata/ownerReferences", "value": null}]' + ${xargs_delete} = Set Variable xargs -rt oc -n ${namespace} delete + ${result} = Run Process ${list_resources} | ${xargs_patch} && ${list_resources} | ${xargs_delete} + ... shell=true stderr=STDOUT + Log ${result.stdout} console=yes diff --git a/ods_ci/tests/Resources/Page/Components/Menu.robot b/ods_ci/tests/Resources/Page/Components/Menu.robot index 3a2f2853b..92be3751b 100644 --- a/ods_ci/tests/Resources/Page/Components/Menu.robot +++ b/ods_ci/tests/Resources/Page/Components/Menu.robot @@ -1,6 +1,7 @@ *** Settings *** -Library JupyterLibrary -Library String +Resource ../ODH/ODHDashboard/ODHDashboard.robot +Library String +Library JupyterLibrary *** Keywords *** Navigate To Page @@ -17,6 +18,7 @@ Navigate To Page IF "${is_menu_expanded}" == "false" Menu.Click Menu ${menu} Wait Until Page Contains ${submenu} Menu.Click Submenu ${submenu} + Run Keyword And Ignore Error Wait For Dashboard Page Title ${submenu} Click Menu [Arguments] diff --git a/ods_ci/tests/Resources/Page/ODH/JupyterHub/Elyra.resource b/ods_ci/tests/Resources/Page/ODH/JupyterHub/Elyra.resource index bacd975b6..a898d9441 100644 --- a/ods_ci/tests/Resources/Page/ODH/JupyterHub/Elyra.resource +++ b/ods_ci/tests/Resources/Page/ODH/JupyterHub/Elyra.resource @@ -122,7 +122,7 @@ Switch To Pipeline Execution Page ${login-required} = Is OpenShift Login Visible IF ${login-required} Login To Openshift ${TEST_USER.USERNAME} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account RETURN ${handle} Set Runtime Image In All Nodes diff --git a/ods_ci/tests/Resources/Page/ODH/JupyterHub/JupyterHubSpawner.robot b/ods_ci/tests/Resources/Page/ODH/JupyterHub/JupyterHubSpawner.robot index d3595208c..40c749e6e 100644 --- a/ods_ci/tests/Resources/Page/ODH/JupyterHub/JupyterHubSpawner.robot +++ b/ods_ci/tests/Resources/Page/ODH/JupyterHub/JupyterHubSpawner.robot @@ -372,7 +372,7 @@ Spawn Notebook With Arguments # robocop: disable IF ${oauth_prompt_visible} Click Button Log in with OpenShift Run Keyword And Warn On Failure Login To Openshift ${username} ${password} ${auth_type} ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account Wait Notebook To Be Loaded ${image} ${version} ${spawn_fail} = Has Spawn Failed @@ -410,7 +410,7 @@ Launch JupyterHub Spawner From Dashboard Launch Jupyter From RHODS Dashboard Link Login To Jupyterhub ${username} ${password} ${auth} ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account Fix Spawner Status #Wait Until Page Contains Element xpath://span[@id='jupyterhub-logo'] Wait Until Page Contains Start server @@ -700,7 +700,7 @@ Log In N Users To JupyterLab And Launch A Notebook For Each Of Them Login To Jupyterhub ${username} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} Page Should Not Contain 403 : Forbidden ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account Fix Spawner Status Spawn Notebook With Arguments END @@ -718,7 +718,7 @@ CleanUp JupyterHub For N Users Login To Jupyterhub ${username} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} Page Should Not Contain 403 : Forbidden ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account #Fix Spawner Status stops the current notebook, handling the different possible states Fix Spawner Status END diff --git a/ods_ci/tests/Resources/Page/ODH/JupyterHub/JupyterLabLauncher.robot b/ods_ci/tests/Resources/Page/ODH/JupyterHub/JupyterLabLauncher.robot index 64e2f168b..d6509e2e4 100644 --- a/ods_ci/tests/Resources/Page/ODH/JupyterHub/JupyterLabLauncher.robot +++ b/ods_ci/tests/Resources/Page/ODH/JupyterHub/JupyterLabLauncher.robot @@ -225,9 +225,15 @@ Clean Up User Notebook Fail msg=This command requires ${admin_username} to be connected to the cluster (oc login ...) END +Clean All Standalone Notebooks + [Documentation] Deletes all Standalone Jupyter Notebooks in ${NOTEBOOKS_NAMESPACE} + Delete All Notebooks In Namespace By Name ${NOTEBOOKS_NAMESPACE} jupyter-nb + Delete All Services In Namespace By Name ${NOTEBOOKS_NAMESPACE} jupyter-nb + Delete Folder In User Notebook [Documentation] Delete recursively the folder /opt/app-root/src/${folder} in ${username}'s notebook PVC. -... Note: this command requires ${admin_username} to be logged to the cluster (oc login ...) and to have the user's notebook pod running (e.g. jupyterhub-nb-ldap-2duser1) + ... Note: this command requires ${admin_username} to be logged to the cluster (oc login ...) + ... and to have the user's notebook pod running (e.g. jupyterhub-nb-ldap-2duser1) [Arguments] ${admin_username} ${username} ${folder} # Verify that ${admin_username} is connected to the cluster diff --git a/ods_ci/tests/Resources/Page/ODH/JupyterHub/LoginJupyterHub.robot b/ods_ci/tests/Resources/Page/ODH/JupyterHub/LoginJupyterHub.robot index def459516..63de4b442 100644 --- a/ods_ci/tests/Resources/Page/ODH/JupyterHub/LoginJupyterHub.robot +++ b/ods_ci/tests/Resources/Page/ODH/JupyterHub/LoginJupyterHub.robot @@ -18,7 +18,7 @@ Is Service Account Authorization Required ${result} = Run Keyword And Return Status Should Start With ${title} Authorize service account RETURN ${result} -Authorize jupyterhub service account +Authorize JupyterLab Service Account Wait Until Page Contains Authorize Access Checkbox Should Be Selected user:info Click Element approve diff --git a/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDashboard.robot b/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDashboard.robot index d4bf1d0fb..5de7321fc 100644 --- a/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDashboard.robot +++ b/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDashboard.robot @@ -1,11 +1,12 @@ *** Settings *** Resource ../../../Page/Components/Components.resource Resource ../../../Page/OCPDashboard/UserManagement/Groups.robot -Resource ../../../Common.robot -Resource ../JupyterHub/ODHJupyterhub.resource +Resource ../../../Common.robot +Resource ../JupyterHub/ODHJupyterhub.resource Resource ../../../Page/ODH/ODHDashboard/ResourcesPage.resource Resource ../../../Page/ODH/ODHDashboard/ODHDashboardSettings.resource -Resource ../../../OCP.resource +Resource ../../../Page/ODH/ODHDashboard/ODHDataScienceProject/Projects.resource +Resource ../../../OCP.resource Library JupyterLibrary @@ -869,7 +870,7 @@ Handle Deletion Confirmation Modal Click Action From Actions Menu [Documentation] Clicks an action from Actions menu (3-dots menu on the right) [Arguments] ${item_title} ${action} ${item_type}=${NONE} - ${item_row}= Set Variable //tr[td[@data-label="Name"]//*[text()="${item_title}"]] + ${item_row}= Set Variable //tr[td[contains(translate(@data-label, 'NAME', 'name'), 'name')]//*[text()="${item_title}"]] ${action_btn}= Set Variable //button[@role="menuitem" and starts-with(.,"${action}")] Click Element xpath=${item_row}//button[@aria-label="Kebab toggle"] IF "${item_type}" != "${NONE}" diff --git a/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDashboardSettings.resource b/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDashboardSettings.resource index f981cb747..6e89cbbb8 100644 --- a/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDashboardSettings.resource +++ b/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDashboardSettings.resource @@ -15,7 +15,7 @@ ${ADMIN_GROUPS_SECTION}= //div[@data-testid="data-science-administrator-group ${ADMIN_GROUPS_LIST}= ${ADMIN_GROUPS_SECTION}//div[@role="group" and @aria-label="Current selections"] ${USER_GROUPS_SECTION}= //div[@data-testid="data-science-user-groups"] ${USER_GROUPS_LIST}= ${USER_GROUPS_SECTION}//div[@role="group" and @aria-label="Current selections"] -${SAVE_BUTTON}= //button[@data-testid="save-new-button"] +${SAVE_BUTTON}= //button[contains(., "Save changes")] *** Keywords *** Add OpenShift Groups To Data Science Administrators @@ -51,7 +51,7 @@ Launch Dashboard And Check User Management Option Is Available For The User Launch Dashboard ocp_user_name=${username} ocp_user_pw=${password} ocp_user_auth_type=${auth_type} ... dashboard_url=${ODH_DASHBOARD_URL} browser=${BROWSER.NAME} browser_options=${BROWSER.OPTIONS} ${authorization_required}= Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account IF ${settings_should_be} # Wait up to 2 minutes as a workaround for bug RHOAIENG-11116 Menu.Navigate To Page Settings User management timeout=2m @@ -86,11 +86,13 @@ Save Changes In User Management Setting [Documentation] Save User Management Settings In Dashboard [Arguments] ${timeout}=3s Press Keys None ESC + Scroll Element Into View ${SAVE_BUTTON} ${button_enabled}= Run Keyword And Return Status ... Wait Until Element Is Enabled ${SAVE_BUTTON} IF ${button_enabled} Click Button ${SAVE_BUTTON} - Sleep ${timeout} reason=Wait for Dashboard to apply the updated configuration... + Wait Until Keyword Succeeds 30 1 + ... Wait Until Page Contains changes saved END AdminGroups In OdhDashboardConfig CRD Should Be @@ -119,6 +121,7 @@ Clear User Management Settings Set Pod Toleration Via UI [Documentation] Sets toleration using admin UI [Arguments] ${toleration} + Scroll Element Into View ${TOLERATION_CHECKBOX} Wait Until Page Contains Element xpath:${TOLERATION_CHECKBOX} Sleep 2s ${selected} = Run Keyword And Return Status Checkbox Should Be Selected xpath:${TOLERATION_CHECKBOX} @@ -141,17 +144,7 @@ Disable Pod Toleration Via UI Save Changes In Cluster Settings [Documentation] Clicks on the "Save changes" button in Cluster settings and ... waits until "Cluster settings changes saved" is shown - Scroll Element Into View xpath://button[.="Save changes"] - Wait Until Page Contains Element xpath://button[.="Save changes"][@aria-disabled="false"] timeout=15s - Click Button Save changes - ${clicked}= Run Keyword And Return Status - ... Wait Until Page Contains Element xpath://button[.="Save changes"][@aria-disabled="true"] - IF ${clicked} == ${FALSE} - Capture Page Screenshot - Click Button Save changes - END - Wait Until Keyword Succeeds 30 1 - ... Wait Until Page Contains Cluster settings changes saved + Save Changes In User Management Setting # New setting applies after a few seconds, empirically >15s. # Sleep here to make sure it is applied. Sleep 30s diff --git a/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDashboardSettingsAcceleratorProfiles.resource b/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDashboardSettingsAcceleratorProfiles.resource index 5ac98753c..dd698a291 100644 --- a/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDashboardSettingsAcceleratorProfiles.resource +++ b/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDashboardSettingsAcceleratorProfiles.resource @@ -10,9 +10,9 @@ ${EDIT_ACCELERATOR_PROFILE_BTN}= //table[@id='accelerator-profile-table']//sp ${DELETE_ACCELERATOR_PROFILE_BTN}= //table[@id='accelerator-profile-table']//span[text()='Delete']/ancestor::button ${ACCELERATOR_PROFILE_GRID_COLUMN_NAME}= //table[@id='accelerator-profile-table']//td[@data-label='Name'] ${ACCELERATOR_PROFILE_SEARCH_INPUT}= //input[@aria-label="Search input"] -${ACCELERATOR_NAME}= //input[@id="accelerator-name"] -${ACCELERATOR_IDENTIFIER}= //input[@id="accelerator-identifier"] -${ACCELERATOR_DESCRIPTION}= //textarea[@id="accelerator-description"] +${ACCELERATOR_NAME}= //input[@data-testid="accelerator-profile-name"] +${ACCELERATOR_IDENTIFIER}= //input[@data-testid="accelerator-identifier-input"] +${ACCELERATOR_DESCRIPTION}= //textarea[@data-testid="accelerator-profile-description"] ${ACCELERATOR_ENABLED_SWITCH}= //input[@id="accelerator-enabled"]/following-sibling::span ${ACCELERATOR_ADD_TOLERATION_BTN}= //button[@data-testid="add-toleration-button"] ${ACCELERATOR_ADD_TOLERATION_MODAL_FORM}= //div[contains(@id, "pf-modal-part")]//span[text()="Add toleration"] @@ -28,8 +28,6 @@ ${ACCELERATOR_TOLERATION_ADD_OR_UPDATE_BUTTON}= //button[@data-testid="modal- ${ACCELERATOR_EDIT_NAV_MENU_TOLERATIONS}= //nav[@aria-label="Jump to section"]//span[text()="Tolerations"] ${ACCELERATOR_EDIT_TOLERATION_KEBAB_BTN}= //section[@aria-label="Tolerations"]//table//button[@aria-label="Kebab toggle"] ${ACCELERATOR_EDIT_TOLERATION_MODAL_FORM}= //div[contains(@id, "pf-modal-part")]//span[text()="Edit toleration"] -${ACCELERATOR_DISABLE_MODAL_DISABLE_BUTTON}= //span[text()='Disable accelerator profile']/ancestor::header/following::footer/button[text()='Disable'] -${ACCELERATOR_DELETE_MODAL_DELETE_BUTTON}= //span[text()='Delete accelerator profile?']/ancestor::header/following::footer/button[text()='Delete'] ${ACCELERATOR_DELETE_MODAL_INPUT}= //input[@id="delete-modal-input"] @@ -67,8 +65,8 @@ Disable Accelerator Profile ... view: Settings -> Accelerator profiles [Arguments] ${name} Click On The Enable Switch From Accelerator Profile ${name} - Wait Until Page Contains Element ${ACCELERATOR_DISABLE_MODAL_DISABLE_BUTTON} - Click Button ${ACCELERATOR_DISABLE_MODAL_DISABLE_BUTTON} + Wait Until Page Contains Element ${GENERIC_DISABLE_BTN_XP} + Click Button ${GENERIC_DISABLE_BTN_XP} Search For Accelerator Profile In Grid [Documentation] Search for and specific Accelerator Profile in the grid @@ -108,10 +106,10 @@ Create An Accelerator Profile Via UI Wait Until Element Is Visible ${ACCELERATOR_ADD_TOLERATION_MODAL_FORM} # Select Operator Click Button ${ACCELERATOR_TOLERATION_OPERATOR_DROPDOWN} - Click Element //li[@data-testid="dropdown-item ${tol_operator}"] + Click Element //li[@data-testid="${tol_operator}"] # Select Effect Click Button ${ACCELERATOR_TOLERATION_EFFECT_DROPDOWN} - Click Element //li[@data-testid="dropdown-item ${tol_effect}"] + Click Element //li[@data-testid="${tol_effect}"] # Input Key and value Input Text ${ACCELERATOR_TOLERATION_KEY} ${tol_key} Input Text ${ACCELERATOR_TOLERATION_VALUE} ${tol_value} @@ -150,17 +148,18 @@ Edit Accelerator Profile END IF "${tolerations}" != "${EMPTY}" ${first_kebab}= Catenate SEPARATOR= ${ACCELERATOR_EDIT_TOLERATION_KEBAB_BTN} [1] - Click Button ${first_kebab} + Click Element ${ACCELERATOR_EDIT_NAV_MENU_TOLERATIONS} + Click Element ${first_kebab} Wait Until Element Is Visible ${first_kebab}/following::div//span[text()="Edit"] timeout=10 Click Element ${first_kebab}/following::div//span[text()="Edit"] Wait Until Element Is Visible ${ACCELERATOR_EDIT_TOLERATION_MODAL_FORM} timeout=10 IF "${tol_operator}" != "${EMPTY}" - Click Button ${ACCELERATOR_TOLERATION_OPERATOR_DROPDOWN} - Click Element //li[@data-testid="dropdown-item ${tol_operator}"] + Click Element ${ACCELERATOR_TOLERATION_OPERATOR_DROPDOWN} + Click Element //li[@data-testid="${tol_operator}"] END IF "${tol_effect}" != "${EMPTY}" - Click Button ${ACCELERATOR_TOLERATION_EFFECT_DROPDOWN} - Click Element //li[@data-testid="dropdown-item ${tol_effect}"] + Click Element ${ACCELERATOR_TOLERATION_EFFECT_DROPDOWN} + Click Element //li[@data-testid="${tol_effect}"] END IF "${tol_key}" != "${EMPTY}" Clear Element And Input Text ${ACCELERATOR_TOLERATION_KEY} ${tol_key} diff --git a/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/DataConnections.resource b/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/DataConnections.resource index b2de37cb5..9c71895e9 100644 --- a/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/DataConnections.resource +++ b/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/DataConnections.resource @@ -6,17 +6,16 @@ Resource Projects.resource *** Variables *** + ${S3_NAME_DC_INPUT}= xpath=//input[@data-testid="connection-name-desc-name"] -${S3_KEY_DC_INPUT}= xpath=//div[@data-testid="field short-text AWS_ACCESS_KEY_ID"]//input -${S3_SECRET_DC_INPUT}= xpath=//div[@data-testid="field hidden AWS_SECRET_ACCESS_KEY"]//input -${S3_ENDPOINT_DC_INPUT}= xpath=//div[@data-testid="field short-text AWS_S3_ENDPOINT"]//input -${S3_REGION_DC_INPUT}= xpath=//div[@data-testid="field short-text AWS_DEFAULT_REGION"]//input -${DC_SECTION}= xpath=//section[@id="data-connections"] +${S3_KEY_DC_INPUT}= xpath=//*[contains(@data-testid,"AWS_ACCESS_KEY_ID")]//input +${S3_SECRET_DC_INPUT}= xpath=//*[contains(@data-testid,"AWS_SECRET_ACCESS_KEY")]//input +${S3_ENDPOINT_DC_INPUT}= xpath=//*[contains(@data-testid,"AWS_S3_ENDPOINT")]//input +${S3_REGION_DC_INPUT}= xpath=//*[contains(@data-testid,"AWS_DEFAULT_REGION")]//input +${S3_BUCKET_DC_INPUT}= xpath=//*[contains(@data-testid,"AWS_S3_BUCKET")]//input +${DC_SECTION}= xpath=//*[@data-testid="connection-table"] ${DC_ADD_BTN_1}= xpath=//*[@data-testid="create-connection-button"] ${DC_ADD_BTN_2}= xpath=//button[@data-testid="add-connection-button"] -${S3_BUCKET_DC_INPUT}= xpath=//div[@data-testid="field short-text AWS_S3_BUCKET"]//input -${S3_DC_SUBMIT_BTN}= xpath=//*[@data-testid="modal-submit-button"] -${DC_WORKBENCH_SELECTOR}= xpath=//div[@data-testid="connect-existing-workbench-group"]//ul/li ${CONNECTION_TYPE_DROPDOWN}= xpath=//label[@for="connection-type"]/parent::div/parent::div//input @@ -36,7 +35,7 @@ Create S3 Data Connection END Select Connection Type From Add Connection Modal S3 compatible object storage - v1 Fill Data Connection Form ${project_title} ${dc_name} ${aws_access_key} ${aws_secret_access} - ... ${S3_DC_SUBMIT_BTN} aws_s3_endpoint=${aws_s3_endpoint} aws_region=${aws_region} + ... aws_s3_endpoint=${aws_s3_endpoint} aws_region=${aws_region} ... connected_workbench=${connected_workbench} press_cancel=${press_cancel} ... aws_bucket_name=${aws_bucket_name} @@ -45,42 +44,36 @@ Edit S3 Data Connection [Arguments] ${project_title} ${dc_name} ${aws_access_key} ${aws_secret_access} ${new_dc_name}=${dc_name} ... ${aws_s3_endpoint}=${S3.AWS_DEFAULT_ENDPOINT} ${aws_region}=${S3.AWS_DEFAULT_REGION} ... ${connected_workbench}=${NONE} ${press_cancel}=${FALSE} ${aws_bucket_name}=${NONE} - ODHDashboard.Click Action From Actions Menu item_title=${dc_name} action=Edit + Click Action From Actions Menu item_title=${dc_name} action=Edit Fill Data Connection Form ${project_title} ${new_dc_name} ${aws_access_key} ${aws_secret_access} - ... ${S3_DC_SUBMIT_BTN} aws_s3_endpoint=${aws_s3_endpoint} aws_region=${aws_region} + ... aws_s3_endpoint=${aws_s3_endpoint} aws_region=${aws_region} ... connected_workbench=${connected_workbench} press_cancel=${press_cancel} ... aws_bucket_name=${aws_bucket_name} -Set Connection Between Data Connection And Workbench - [Documentation] Connects a DataConnection to an existent workbench - [Arguments] ${workbench_title} - Wait Until Element Is Enabled xpath=//button[@aria-label="Notebook select"] - Click Element xpath=//button[@aria-label="Notebook select"] - Wait Until Page Contains Element ${DC_WORKBENCH_SELECTOR}/button[.="${workbench_title}"] - Click Element ${DC_WORKBENCH_SELECTOR}/button[.="${workbench_title}"] - Data Connection Should Be Listed [Documentation] Checks a Data Connection is listed in DS Project details page [Arguments] ${name} ${type} ${connected_workbench} - ${connection}= Set Variable ${DC_SECTION}//tr[td[@data-label="Name"]//div[.="${name}"]] + Move To Tab tab_title=Connections + ${connection}= Set Variable ${DC_SECTION}//tr[td[@data-label="Name"]//*[.="${name}"]] Run Keyword And Continue On Failure Page Should Contain Element ${connection} - Run Keyword And Continue On Failure Page Should Contain Element ${connection}/td[.=" ${type}"] + Run Keyword And Continue On Failure Page Should Contain Element ${connection}//*[contains(.,"${type}")] IF "${connected_workbench}" == "${NONE}" Run Keyword And Continue On Failure Page Should Contain Element - ... ${connection}/td[.="No connections"] + ... ${connection}//*[@data-label="Connected resources" and .="-"] ELSE FOR ${index} ${workbench_title} IN ENUMERATE @{connected_workbench} Log ${index}: ${workbench_title} Run Keyword And Continue On Failure Page Should Contain Element - ... ${connection}/td[@data-label="Connected workbenches"]//*[.="${workbench_title}"] + ... ${connection}/td[@data-label="Connected resources"]//*[.="${workbench_title}"] END END Data Connection Should Not Be Listed [Documentation] Checks a Data Connection is not listed in DS Project details page [Arguments] ${name} - Run Keyword And Continue On Failure Wait Until Page Does Not Contain Element - ... ${DC_SECTION}//tr[td[@data-label="Name"]/*/div[.="${name}"]] + Move To Tab tab_title=Connections + ${connection}= Set Variable ${DC_SECTION}//tr[td[@data-label="Name"]//*[.="${name}"]] + Run Keyword And Continue On Failure Wait Until Page Does Not Contain Element ${connection} Get Openshift Secret From Data Connection [Documentation] Retrieves name of Openshift secret corresponding to a given S3 Data Connection based on Dispayed name in DS Project details page @@ -91,43 +84,44 @@ Get Openshift Secret From Data Connection Delete Data Connection [Documentation] Deletes a Data Connection from DS Project details page [Arguments] ${name} ${press_cancel}=${FALSE} - ODHDashboard.Click Action From Actions Menu item_title=${name} action=Delete + Click Action From Actions Menu item_title=${name} action=Delete Handle Deletion Confirmation Modal item_title=${name} item_type=data connection press_cancel=${press_cancel} Fill Data Connection Form [Documentation] Data Connection Form can be used in the create or edit - [Arguments] ${project_title} ${dc_name} ${aws_access_key} ${aws_secret_access} ${action_btn} + [Arguments] ${project_title} ${dc_name} ${aws_access_key} ${aws_secret_access} ... ${aws_s3_endpoint}=${S3.AWS_DEFAULT_ENDPOINT} ${aws_region}=${S3.AWS_DEFAULT_REGION} ... ${connected_workbench}=${NONE} ${press_cancel}=${FALSE} ${aws_bucket_name}=${NONE} Wait Until Page Contains Element ${S3_NAME_DC_INPUT} - Input Text ${S3_NAME_DC_INPUT} ${dc_name} - Input Text ${S3_KEY_DC_INPUT} ${aws_access_key} - Input Text ${S3_SECRET_DC_INPUT} ${aws_secret_access} - Input Text ${S3_ENDPOINT_DC_INPUT} ${aws_s3_endpoint} - Input Text ${S3_REGION_DC_INPUT} ${aws_region} - Input Text ${S3_BUCKET_DC_INPUT} ${aws_bucket_name} + Scroll And Input Text Into Element ${S3_NAME_DC_INPUT} ${dc_name} + Scroll And Input Text Into Element ${S3_KEY_DC_INPUT} ${aws_access_key} + Scroll And Input Text Into Element ${S3_SECRET_DC_INPUT} ${aws_secret_access} + Scroll And Input Text Into Element ${S3_ENDPOINT_DC_INPUT} ${aws_s3_endpoint} + Scroll And Input Text Into Element ${S3_REGION_DC_INPUT} ${aws_region} + Scroll And Input Text Into Element ${S3_BUCKET_DC_INPUT} ${aws_bucket_name} + IF ${press_cancel} + Click Button ${GENERIC_CANCEL_BTN_XP} + ELSE + Wait Until Element Is Enabled ${GENERIC_CREATE_BTN_XP} + Click Button ${GENERIC_CREATE_BTN_XP} + END + Wait Until Generic Modal Disappears + Wait Until Project Is Open project_title=${project_title} IF "${connected_workbench}" == "${NONE}" Log msg=you are not connecting any workbenchs to ${dc_name} DataConnection ELSE - Run Keyword And Continue On Failure - ... Element Should Be Enabled xpath=//div[contains(@class,"modal")]//button[@aria-label="Notebook select"] FOR ${workbench_title} IN @{connected_workbench} - Set Connection Between Data Connection And Workbench ${workbench_title} - Run Keyword And Continue On Failure Element Should Be Enabled ${S3_DC_SUBMIT_BTN} + Move To Tab tab_title=Workbenches + Click Action From Actions Menu item_title=${workbench_title} action=Edit + Add Existing Data Connection In Workbench data_connection=${dc_name} + Click Element ${GENERIC_SUBMIT_BTN_XP} + Wait Until Element Is Not Visible ${GENERIC_SUBMIT_BTN_XP} 10s END END - IF ${press_cancel} == ${TRUE} - Click Button ${GENERIC_CANCEL_BTN} - ELSE - Wait Until Element Is Enabled ${action_btn} - Click Button ${action_btn} - END - Wait Until Generic Modal Disappears - Wait Until Project Is Open project_title=${project_title} Get Data Connection Form Values [Arguments] ${dc_name} - ODHDashboard.Click Action From Actions Menu item_title=${dc_name} action=Edit + Click Action From Actions Menu item_title=${dc_name} action=Edit Wait Until Page Contains Element ${S3_NAME_DC_INPUT} ${s3_name} Get Element Attribute ${S3_NAME_DC_INPUT} value ${s3_key} Get Element Attribute ${S3_KEY_DC_INPUT} value diff --git a/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/Permissions.resource b/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/Permissions.resource index 909703cdd..355e9ccbb 100644 --- a/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/Permissions.resource +++ b/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/Permissions.resource @@ -34,16 +34,14 @@ Assign ${permission_type} Permissions To User ${username} In Project ${project_t Change ${username} Permissions To ${permission_type} [Documentation] Change the level of permission ${permission_type} for the given user ${username} ... in the currently open DS Project in UI - Permissions.Click Action From Actions Menu username=${username} - ... action=Edit + Click Action From Actions Menu item_title=${username} action=Edit Select Permission Type permission_type=${permission_type} Save Permission Remove ${username} Permissions [Documentation] Remove the access to the given user ${username} ... from the currently open DS Project in UI - Permissions.Click Action From Actions Menu username=${username} - ... action=Delete + Click Action From Actions Menu item_title=${username} action=Delete Select Permission Type [Documentation] Set the dropdown for selecting the level of permission of a user @@ -72,13 +70,6 @@ Assign ${permission_type} Permissions To Group ${group_name} Select Permission Type permission_type=${permission_type} Save Permission -Click Action From Actions Menu - [Documentation] Click an action from Actions menu (3-dots menu on the right) - [Arguments] ${username} ${action} - Click Element xpath=//tr[td[@data-label="Username"]//*[text()="${username}"]]//button[@aria-label="Kebab toggle"] # robocop: disable - Wait Until Page Contains Element xpath=//tr[td[@data-label="Username"]//*[text()="${username}"]]//button[@aria-label="Kebab toggle"]/following-sibling::div//li/button/span/span[text()="${action}"] # robocop: disable - Click Element xpath=//tr[td[@data-label="Username"]//*[text()="${username}"]]//button[@aria-label="Kebab toggle"]/following-sibling::div//li/button/span/span[text()="${action}"] # robocop: disable - Get OpenShift RoleBinding [Documentation] Fetch the RoleBinding object defining the level of permission of a ... given subject ${subject_name} (i.e., user or group) to the given namespace ${namespace} diff --git a/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/Projects.resource b/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/Projects.resource index a87b5b55b..89fe7e151 100644 --- a/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/Projects.resource +++ b/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/Projects.resource @@ -10,10 +10,13 @@ ${TITLE_INPUT_XP}= xpath=//input[@id="manage-project-modal-name"] ${DESCR_INPUT_XP}= xpath=//textarea[@id="manage-project-modal-description"] ${RESOURCE_EDIT_BTN_XP}= xpath=//button[.="Edit resource name"] ${RESOURCE_INPUT_XP}= css:[data-testid="manage-project-modal-resourceName"] -${GENERIC_CREATE_BTN_XP}= xpath=//*[@role="dialog"]//button[.="Create" or starts-with(., "Create")] -${GENERIC_CANCEL_BTN_XP}= xpath=//*[@role="dialog"]//button[.="Cancel" or starts-with(., "Cancel")] -${GENERIC_DELETE_BTN_XP}= xpath=//*[@role="dialog"]//button[.="Delete" or starts-with(., "Delete")] -${GENERIC_STOP_BTN_XP}= xpath=//*[@role="dialog"]//button[.="Stop" or starts-with(., "Stop")] +${GENERIC_CREATE_BTN_XP}= xpath=//*[@role="dialog"]//button[@aria-label="Create" or .="Create" or starts-with(., "Create")] +${GENERIC_CANCEL_BTN_XP}= xpath=//*[@role="dialog"]//button[@aria-label="Cancel" or .="Cancel" or starts-with(., "Cancel")] +${GENERIC_DELETE_BTN_XP}= xpath=//*[@role="dialog"]//button[@aria-label="Delete" or .="Delete" or starts-with(., "Delete")] +${GENERIC_STOP_BTN_XP}= xpath=//*[@role="dialog"]//button[@aria-label="Stop" or .="Stop" or starts-with(., "Stop")] +${GENERIC_CLOSE_BTN_XP}= xpath=//*[@role="dialog"]//button[@aria-label="Close" or .="Close" or starts-with(., "Close")] +${GENERIC_DISABLE_BTN_XP}= xpath=//*[@role="dialog"]//button[@aria-label="Disable" or .="Disable" or starts-with(., "Disable")] +${GENERIC_SUBMIT_BTN_XP}= xpath=//button[contains(@data-testid,"submit-button")] # TODO: Update to latter option once the change is pulled from ODH into downstream! ${PROJECT_CREATE_BTN_XP}= xpath=//button[@data-testid="create-data-science-project"] ${ACTIONS_BTN_XP}= xpath=//div/button[@aria-label="Actions"] @@ -272,37 +275,25 @@ Delete Project Via CLI By Display Name Should Be Equal As Integers ${rc} ${0} END -#robocop: disable: line-too-long Workbench Status Should Be From Projects Home Page [Documentation] Checks the workbench status is the expected one, from the DS Project home page - [Arguments] ${workbench_title} ${status} ${project_title} - ${namespace}= Get Openshift Namespace From Data Science Project project_title=${project_title} - ${_} ${workbench_cr_name}= Get Openshift Notebook CR From Workbench workbench_title=${workbench_title} - ... namespace=${namespace} - - ${xpath_exists}= Run Keyword And Return Status - ... Element Should Be Visible xpath=//a[@data-testid="notebook-route-link" and text()="${workbench_title}"] - - IF not ${xpath_exists} - Click Element xpath=//td[@data-testid="notebook-column-expand"] - ELSE - Log XPath element found, no need to click alternative + [Arguments] ${project_title} ${workbench_title} ${status}=${NONE} + ${wb_status_row}= Set Variable //tr[contains(., "${workbench_title}")]//td[@data-label="Status"] + ${project_expended}= Run Keyword And Return Status Element Should Be Visible ${wb_status_row} + IF not ${project_expended} + Click Element xpath=//tr[contains(.,"${project_title}")]//td[@data-testid="notebook-column-expand"] END - -# We need to wait it to render - ${status_xpath}= Set Variable //a[text()="${workbench_title}"]/ancestor::tr//td[@data-label="Status"]//*[text()="${status}"] - Run Keyword And Continue On Failure Wait Until Element Is Visible ${status_xpath} timeout=10s - Run Keyword And Continue On Failure Page Should Contain Element ${status_xpath} + # Wait for workbench status + Run Keyword If "${status}"!="${NONE}" + ... Wait Until Element Is Visible ${wb_status_row}//*[text()="${status}"] timeout=30s Start Workbench From Projects Home Page [Documentation] Triggers the workbench "start" process from DS Projects home page. ... It needs ${workbench_title} and ${project_title} at least. If ${namespace} and/or ... ${workbench_cr_name} are given too, the kw spares one or two calls to openshift API server [Arguments] ${workbench_title} ${project_title} ${namespace}=${EMPTY} ${workbench_cr_name}=${EMPTY} - ${is_stopped}= Run Keyword And Return Status - ... Workbench Status Should Be From Projects Home Page workbench_title=${workbench_title} - ... status=${WORKBENCH_STATUS_STOPPED} - ... project_title=${project_title} + ${is_stopped}= Run Keyword And Return Status Workbench Status Should Be From Projects Home Page + ... project_title=${project_title} workbench_title=${workbench_title} status=${WORKBENCH_STATUS_STOPPED} IF ${is_stopped} == ${TRUE} IF "${workbench_cr_name}" == "${EMPTY}" IF "${namespace}" == "${EMPTY}" @@ -312,11 +303,9 @@ Start Workbench From Projects Home Page ... Get Openshift Notebook CR From Workbench workbench_title=${workbench_title} ... namespace=${namespace} END - ${kebab_button}= Set Variable xpath=//a[@data-testid="notebook-route-link" and text()="${workbench_title}"]/ancestor::tr[@data-testid="project-notebooks-table-row"]//button[@aria-label="Kebab toggle"] - Wait Until Element Is Visible ${kebab_button} timeout=10s - Click Element ${kebab_button} - ${start_button}= Set Variable xpath=//a[@data-testid="notebook-route-link" and text()="${workbench_title}"]/ancestor::tr[@data-testid="project-notebooks-table-row"]//button[@data-testid="notebook-start-action"] - Wait Until Element Is Visible ${start_button} timeout=10s + Workbench Status Should Be From Projects Home Page project_title=${project_title} workbench_title=${workbench_title} + ${start_button}= Set Variable xpath=//tr[contains(.,"${workbench_title}")]//button[@data-testid="notebook-start-action"] + Wait Until Element Is Visible ${start_button} timeout=30s Click Element ${start_button} ELSE Fail msg=Cannot start ${workbench_title} workbench because it is not stopped. @@ -331,26 +320,22 @@ Stop Workbench From Projects Home Page ... ${workbench_cr_name} are given too, the kw spares one or two calls to openshift API server [Arguments] ${workbench_title} ${project_title} ${namespace}=${EMPTY} ... ${workbench_cr_name}=${EMPTY} ${press_cancel}=${FALSE} - ${is_started}= Run Keyword And Return Status - ... Workbench Status Should Be From Projects Home Page workbench_title=${workbench_title} - ... status=${WORKBENCH_STATUS_RUNNING} - ... project_title=${project_title} - ${is_starting}= Run Keyword And Return Status - ... Workbench Status Should Be From Projects Home Page workbench_title=${workbench_title} - ... status=${WORKBENCH_STATUS_STARTING} - ... project_title=${project_title} + ${is_started}= Run Keyword And Return Status Workbench Status Should Be From Projects Home Page + ... project_title=${project_title} workbench_title=${workbench_title} status=${WORKBENCH_STATUS_RUNNING} + ${is_starting}= Run Keyword And Return Status Workbench Status Should Be From Projects Home Page + ... project_title=${project_title} workbench_title=${workbench_title} status=${WORKBENCH_STATUS_STARTING} IF ${is_started} == ${TRUE} or ${is_starting} == ${TRUE} IF "${workbench_cr_name}" == "${EMPTY}" IF "${namespace}" == "${EMPTY}" - ${namespace}= Get Openshift Namespace From Data Science Project project_title=${project_title} + ${namespace}= + ... Get Openshift Namespace From Data Science Project project_title=${project_title} END - ${_} ${workbench_cr_name}= Get Openshift Notebook CR From Workbench workbench_title=${workbench_title} namespace=${namespace} + ${_} ${workbench_cr_name}= + ... Get Openshift Notebook CR From Workbench workbench_title=${workbench_title} namespace=${namespace} END - ${kebab_button}= Set Variable xpath=//a[@data-testid="notebook-route-link" and text()="${workbench_title}"]/ancestor::tr[@data-testid="project-notebooks-table-row"]//button[@aria-label="Kebab toggle"] - Wait Until Element Is Visible ${kebab_button} timeout=10s - Click Element ${kebab_button} - ${stop_button}= Set Variable xpath=//a[@data-testid="notebook-route-link" and text()="${workbench_title}"]/ancestor::tr[@data-testid="project-notebooks-table-row"]//button[@data-testid="notebook-stop-action"] - Wait Until Element Is Visible ${stop_button} timeout=10s + Workbench Status Should Be From Projects Home Page project_title=${project_title} workbench_title=${workbench_title} + ${stop_button}= Set Variable xpath=//tr[contains(.,"${workbench_title}")]//button[@data-testid="notebook-stop-action"] + Wait Until Element Is Visible ${stop_button} timeout=30s Click Element ${stop_button} Handle Stop Workbench Confirmation Modal workbench_title=${workbench_title} ... press_cancel=${press_cancel} @@ -364,13 +349,13 @@ Wait Until Workbench Is Started From Projects Home Page [Documentation] Waits until the workbench status is "RUNNING", from the DS Project home page [Arguments] ${workbench_title} ${project_title} ${timeout}=60s Wait Until Keyword Succeeds ${timeout} 5s Workbench Status Should Be From Projects Home Page - ... workbench_title=${workbench_title} status=${WORKBENCH_STATUS_RUNNING} project_title=${project_title} + ... project_title=${project_title} workbench_title=${workbench_title} status=${WORKBENCH_STATUS_RUNNING} Wait Until Workbench Is Stopped From Projects Home Page [Documentation] Waits until the workbench status is "STOPPED", from the DS Project home page [Arguments] ${workbench_title} ${project_title} ${timeout}=30s Wait Until Keyword Succeeds ${timeout} 5s Workbench Status Should Be From Projects Home Page - ... workbench_title=${workbench_title} status=${WORKBENCH_STATUS_STOPPED} project_title=${project_title} + ... project_title=${project_title} workbench_title=${workbench_title} status=${WORKBENCH_STATUS_STOPPED} Launch And Access Workbench From Projects Home Page [Documentation] Launches a running workbench from DS Projects home page. @@ -378,9 +363,9 @@ Launch And Access Workbench From Projects Home Page ... ${password}=${TEST_USER_3.PASSWORD} ${auth_type}=${TEST_USER_3.AUTH_TYPE} ... ${expected_ide}=JupyterLab ${is_started}= Run Keyword And Return Status Workbench Status Should Be From Projects Home Page - ... workbench_title=${workbench_title} status=${WORKBENCH_STATUS_RUNNING} project_title=${project_title} + ... project_title=${project_title} workbench_title=${workbench_title} status=${WORKBENCH_STATUS_RUNNING} IF ${is_started} == ${TRUE} - Click Element xpath=//a[@data-testid="notebook-route-link" and text()="${workbench_title}"] + Click Element //a[@data-testid="notebook-route-link" and contains(.,"${workbench_title}")] Switch Window NEW Access To Workbench username=${username} password=${password} ... auth_type=${auth_type} expected_ide=${expected_ide} @@ -392,7 +377,7 @@ Workbench Launch Link Should Be Disabled [Documentation] Checks the workbench launch link is disabled from DS Projects home page. [Arguments] ${workbench_title} ${project_title} ${link_status}= Get Element Attribute - ... xpath=//a[@data-testid="notebook-route-link" and text()="${workbench_title}"] aria-disabled + ... xpath=//a[@data-testid="notebook-route-link" and contains(.,"${workbench_title}")] aria-disabled Should Be Equal As Strings ${link_status} true ... msg=Workbench launch link should be disabled for workbench ${workbench_title} in project ${project_title} @@ -516,6 +501,7 @@ Overview Tab Should Be Accessible Move To Tab [Documentation] Open one of the tabs in a DS Project details page (e.g., Permissions) [Arguments] ${tab_title} + Wait Until Element Is Visible xpath://span[text()="${tab_title}"] timeout=10s Click Element xpath://span[text()="${tab_title}"] Sleep 1s reason=The tab page needs to load content according to user permissions Maybe Wait For Dashboard Loading Spinner Page diff --git a/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/Storages.resource b/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/Storages.resource index 95ec3b667..3dac960b6 100644 --- a/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/Storages.resource +++ b/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/Storages.resource @@ -9,10 +9,10 @@ Resource Projects.resource ${STORAGE_SECTION_XP}= xpath=//div[@data-testid="section-cluster-storages"] ${STORAGE_NAME_INPUT_XP}= xpath=//input[@name="create-new-storage-name"] ${STORAGE_DESCR_INPUT_XP}= xpath=//textarea[@name="create-new-storage-description"] -${STORAGE_SIZE_INPUT_XP}= xpath=//input[@aria-label="Input"] +${STORAGE_SIZE_INPUT_XP}= xpath=//input[@type="number"] ${STORAGE_SIZE_PLUS_BTN_XP}= xpath=//div/button[@aria-label="Plus"] -${STORAGE_MOUNT_DIR_INPUT_XP}= xpath=//input[@aria-label="mount-path-folder-value"] -${STORAGE_WORKBENCH_SELECTOR_XP}= xpath=//div[contains(@class,"modal")]//ul/li +${STORAGE_MOUNT_DIR_INPUT_XP}= xpath=//input[@data-testid="mount-path-folder-value"] +${STORAGE_WORKBENCH_SELECTOR_XP}= xpath=//*[@data-testid="cluster-storage-workbench-select"] ${STORAGE_ADD_BTN_1_XP}= ${STORAGE_SECTION_XP}//button[.="Add cluster storage"] ${STORAGE_SUBMIT_BTN_XP}= xpath=//footer//button[@data-testid="modal-submit-button"] @@ -29,7 +29,7 @@ Storage Should Be Listed Run Keyword And Continue On Failure Page Should Contain Element ${STORAGE_SECTION_XP}//tr[td[@data-label="Name"]//*/div[text()="${name}"]]/td[text()="No connections"] ELSE FOR ${index} ${workbench_title} IN ENUMERATE @{connected_workbench} - Run Keyword And Continue On Failure Page Should Contain Element ${STORAGE_SECTION_XP}//tr[td[@data-label="Name"]//div[text()="${name}"]]/td[@data-label="Connected workbenches"]//*[contains(text(),"${workbench_title}")] + Run Keyword And Continue On Failure Page Should Contain Element ${STORAGE_SECTION_XP}//tr[td[@data-label="Name"]//div[text()="${name}"]]//*[contains(text(),"${workbench_title}")] END END @@ -105,7 +105,7 @@ Create PersistentVolume Storage ELSE Click Button ${STORAGE_ADD_BTN_1_XP} END - Fill In New PV Data ${name} ${description} ${size} ${connected_workbench} + Fill In New PV Data ${name} ${size} ${description} ${connected_workbench} IF ${press_cancel} == ${TRUE} Click Button ${GENERIC_CANCEL_BTN_XP} ELSE @@ -117,16 +117,17 @@ Create PersistentVolume Storage Fill In New PV Data [Documentation] Compiles the modal for creating a new PersistenVolume storage in DS Project details page - [Arguments] ${name} ${description} ${size} ${connected_workbench}=${NONE} + [Arguments] ${name} ${size} ${description}=${NONE} ${connected_workbench}=${NONE} ${mount_dir}=${NONE} ${is_storage_modal}= Run Keyword And Return Status Page Should Contain Element ${STORAGE_SUBMIT_BTN_XP} Wait Until Page Contains Element ${STORAGE_NAME_INPUT_XP} IF ${is_storage_modal} Run Keyword And Continue On Failure Element Should Be Disabled ${STORAGE_SUBMIT_BTN_XP} Clear Element Text ${STORAGE_NAME_INPUT_XP} Input Text ${STORAGE_NAME_INPUT_XP} ${name} Wait Until Page Contains Element ${STORAGE_DESCR_INPUT_XP} - IF ${is_storage_modal} Run Keyword And Continue On Failure Element Should Be Enabled ${STORAGE_SUBMIT_BTN_XP} - Input Text ${STORAGE_DESCR_INPUT_XP} ${description} - Clear Element Text ${STORAGE_SIZE_INPUT_XP} + # IF ${is_storage_modal} Run Keyword And Continue On Failure Element Should Be Enabled ${STORAGE_SUBMIT_BTN_XP} + IF "${description}" != "${NONE}" Input Text ${STORAGE_DESCR_INPUT_XP} ${description} + Double Click Element ${STORAGE_SIZE_INPUT_XP} + Press Keys ${STORAGE_SIZE_INPUT_XP} DELETE IF ${size} > 1 FOR ${counter} IN RANGE 1 ${size} Click Element ${STORAGE_SIZE_PLUS_BTN_XP} @@ -134,10 +135,17 @@ Fill In New PV Data END IF "${connected_workbench}" == "${NONE}" Log msg=Creating PV Storage '${name}' without a Workbench console=True + ${add_mount}= Run Keyword And Return Status + ... Element Should Be Visible ${STORAGE_MOUNT_DIR_INPUT_XP} + IF ${add_mount} + IF "${mount_dir}" == "${NONE}" + ${mount_dir}= Generate Mount Name ${name} + END + IF "${mount_dir}[0]" == "/" Click Element xpath=//input[@id="mount-path-radio-custom"] + Input Text ${STORAGE_MOUNT_DIR_INPUT_XP} ${mount_dir} + END ELSE Log msg=Creating PV Storage '${name}' for Workbenches: @{connected_workbench} console=True - Run Keyword And Continue On Failure Element Should Be Enabled - ... xpath=//div[contains(@class,"modal")]//input[contains(@placeholder,"Select a workbench to connect")] FOR ${workbench_title} IN @{connected_workbench} ${mount_dir}= Generate Mount Name ${workbench_title} Set Connection Between PV And Workbench ${workbench_title} ${mount_dir} @@ -148,12 +156,12 @@ Fill In New PV Data Set Connection Between PV And Workbench [Documentation] Connects a PV to an existent workbench [Arguments] ${workbench_title} ${mount_dir} - Wait Until Element Is Enabled xpath=//button[@aria-label="Options menu"] - Click Element xpath=//button[@aria-label="Options menu"] - Wait Until Page Contains Element ${STORAGE_WORKBENCH_SELECTOR_XP}/button[text()="${workbench_title}"] - Click Element ${STORAGE_WORKBENCH_SELECTOR_XP}/button[text()="${workbench_title}"] + Click Button //button[@data-testid="add-workbench-button"] + Run Keyword And Ignore Error Click Element ${STORAGE_WORKBENCH_SELECTOR_XP}//button + Run Keyword And Ignore Error Click Element //button[contains(.,"${workbench_title}")] + Click Element xpath=//td[@data-label="Path format"]//button[@aria-label="Options menu"] + Click Element xpath=//*[@data-testid="Custom"]//button Wait Until Page Contains Element ${STORAGE_MOUNT_DIR_INPUT_XP} - Run Keyword And Continue On Failure Element Should Be Disabled ${STORAGE_SUBMIT_BTN_XP} Input Text ${STORAGE_MOUNT_DIR_INPUT_XP} ${mount_dir} Delete Storage @@ -187,9 +195,7 @@ Delete All PVC In Project From CLI [Documentation] Deletes All PVCs in a project from CLI [Arguments] ${project_title} ${ns_name}= Get Openshift Namespace From Data Science Project project_title=${project_title} - ${result}= Run Process - ... oc delete pvc -n ${ns_name} --all shell=yes - Should Be True ${result.rc} == 0 msg=${result.stderr} + ${result}= Run Process oc delete pvc -n ${ns_name} --all --timeout\=30s shell=yes Generate Mount Name [Documentation] Generate a supported mount directory name (lower case and dashes only) from string '${str}' diff --git a/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/Workbenches.resource b/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/Workbenches.resource index 6beb30255..663d5e6f4 100644 --- a/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/Workbenches.resource +++ b/ods_ci/tests/Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/Workbenches.resource @@ -11,6 +11,7 @@ ${PV_MOUNT_PATH}= ods-ci-test-path ${WORKBENCH_SECTION_XP}= xpath=//div[@data-testid="section-workbenches"] ${WORKBENCH_CREATE_BTN_XP}= xpath=//button[@data-testid="create-workbench-button"] ${WORKBENCH_CREATE_BTN_2_XP}= xpath=//button[@id="create-button"] +${WORKBENCH_CANCEL_BTN_XP}= xpath=//button[@id="cancel-button"] ${WORKBENCH_NAME_INPUT_XP}= xpath=//input[@name="workbench-name"] ${WORKBENCH_DESCR_TXT_XP}= xpath=//textarea[@name="workbench-description"] ${WORKBENCH_IMAGE_MENU_BTN_XP}= xpath=//*[@data-testid="workbench-image-stream-selection"] # robocop: disable @@ -24,12 +25,13 @@ ${WORKBENCH_ACCELERATOR_PLUS_BUTTON_XPATH}= xpath=${WORKBENCH_ACCELERATOR_INP ${WORKBENCH_SIZE_ITEM_BTN_XP}= xpath=//*[@data-testid="container-size-group"]//button ${WORKBENCH_GPU_MENU_BTN_XP}= xpath=//section[@id="deployment-size"]//button[contains(@aria-labelledby,"gpu-numbers")] # robocop: disable ${WORKBENCH_GPU_ITEM_BTN_XP}= xpath=//ul[@data-id="gpu-select"]/li/button -${WORKBENCH_ADD_VAR_BTN_XP}= xpath=//button[text()="Add variable"] +${WORKBENCH_ADD_VAR_BTN_XP}= xpath=//button[@data-testid="add-variable-button"] ${WORKBENCH_USE_CONNECTION_CHK_XP}= xpath=//input[@name="enable-data-connection-checkbox"] -${WORKBENCH_EXISTING_CONNECTION_RAD_XP}= xpath=//input[@name="existing-data-connection-type-radio"] +${WORKBENCH_EXISTING_CONNECTION_RAD_XP}= xpath=//button[@data-testid="attach-existing-connection-button"] ${WORKBENCH_STATUS_STOPPED}= Stopped ${WORKBENCH_STATUS_RUNNING}= Running ${WORKBENCH_STATUS_STARTING}= Starting +${WORKBENCH_STATUS_FAILED}= Failed ${WORKBENCH_IMAGE_VER_LABEL}= //label[@for="workbench-image-version-selection"] ${WORKBENCH_IMAGE_VER_BUTTON}= ${WORKBENCH_IMAGE_VER_LABEL}/../..//button ${WORKBENCH_IMAGE_VER_DROPDOWN}= //*[@id="workbench-image-version-selection"] @@ -43,6 +45,7 @@ ${KEYVALUE_TYPE}= Key / value ${UPLOAD_TYPE}= Upload ${ENV_VARIABLES_SECTION_XP}= xpath=//section[@aria-label="Environment variables"] ${ENV_DATA_CONNECTION_SECTION_XP}= xpath=//section[@aria-label="Connections"] +${DC_WORKBENCH_SELECTOR}= xpath=//*[@id="select-connection"] ${ERROR_ICON_XP}= span[contains(@class,'pf-m-danger')] @@ -85,12 +88,13 @@ Create Workbench Click Element //*[@data-testid="existing-storage-button"] Select An Existent PV ${pv_name} ${PV_MOUNT_PATH} ELSE IF ${pv_existent} == ${FALSE} - # Use the `Jump to section` links in the page to scroll the section into view - Click Element //a[@href="#cluster-storage"] - Click Element xpath=//input[@name="persistent-new-storage-type-radio"] - Fill In New PV Data name=${pv_name} description=${pv_description} size=${pv_size} Log msg=Delete PVC '${pv_name}' before creating new one via the Workbench dialog Delete PVC In Project From CLI pvc_title=${pv_name} project_title=${prj_title} + # Use the `Jump to section` links in the page to scroll the section into view + Click Element //a[@href="#cluster-storage"] + Click Element //*[@data-testid="create-storage-button"] + Fill In New PV Data name=${pv_name} size=${pv_size} description=${pv_description} + Click Button ${STORAGE_SUBMIT_BTN_XP} ELSE Log msg="pv_existent" argument not set, using default PV settings level=WARN Delete PVC In Project From CLI pvc_title=${workbench_title} project_title=${prj_title} @@ -152,19 +156,12 @@ Add Existing Data Connection In Workbench [Documentation] Adds the data connection through the workbench creation page [Arguments] ${data_connection} # Use the `Jump to section` links in the page to scroll the section into view - Click Element //a[@href="#data-connections"] - Click Element ${WORKBENCH_USE_CONNECTION_CHK_XP} - # Use the `Jump to section` again to move the expanded form into view - Click Element //a[@href="#data-connections"] + Click Element ${ENV_DATA_CONNECTION_SECTION_XP} Click Element ${WORKBENCH_EXISTING_CONNECTION_RAD_XP} - Select Existing Data Connection In Workbench data_connection=${data_connection} - -Select Existing Data Connection In Workbench - [Documentation] Selects the existing data connection in the workbench creation page from a dropdown list - [Arguments] ${data_connection} - Click Element ${ENV_DATA_CONNECTION_SECTION_XP}//input[contains(@placeholder,"Select a data connection")] - Wait Until Page Contains Element xpath=//ul[@role="listbox"]/li/button[text()="${data_connection}"] - Click Element xpath=//ul[@role="listbox"]/li/button[text()="${data_connection}"] + Run Keyword And Ignore Error Click Element //button[@aria-label="Connections"] + Click Element xpath=//*[.="${data_connection}"] + Run Keyword And Ignore Error Click Element //button[@aria-label="Connections"] + Click Element xpath=//button[@data-testid="attach-button"] Select Environment Variable Types [Documentation] Selects the type of environment variable in the workbench creation page: Secret vs Config Map @@ -172,13 +169,13 @@ Select Environment Variable Types Run Keyword And Continue On Failure Wait Until Page Contains Element ... ${ENV_VARIABLES_SECTION_XP}/div[contains(@class, "-l-split")][${variable_index}]//button[@aria-label="Options menu"] Click Element ${ENV_VARIABLES_SECTION_XP}/div[contains(@class, "-l-split")][${variable_index}]//button[@aria-label="Options menu"] - Wait Until Page Contains Element xpath=//ul[@role="listbox"]/li/button[text()="${k8s_type}"] - Click Element xpath=//ul[@role="listbox"]/li/button[text()="${k8s_type}"] + Wait Until Page Contains Element xpath=//ul[@role="listbox"]/li/button[contains(.,"${k8s_type}")] + Click Element xpath=//ul[@role="listbox"]/li/button[contains(.,"${k8s_type}")] Run Keyword And Continue On Failure - ... Wait Until Page Contains Element ${ENV_VARIABLES_SECTION_XP}//button[div/span[text()="Select one"]] - Click Element ${ENV_VARIABLES_SECTION_XP}/div[contains(@class, "-l-split")][${variable_index}]//button[div/span[text()="Select one"]] - Wait Until Page Contains Element xpath=//ul[@role="listbox"]/li/button[text()="${input_type}"] - Click Element xpath=//ul[@role="listbox"]/li/button[text()="${input_type}"] + ... Wait Until Page Contains Element ${ENV_VARIABLES_SECTION_XP}//button[contains(.,"Select one")] + Click Element ${ENV_VARIABLES_SECTION_XP}/div[contains(@class, "-l-split")][${variable_index}]//button[contains(.,"Select one")] + Wait Until Page Contains Element xpath=//ul[@role="listbox"]/li/button[contains(.,"${input_type}")] + Click Element xpath=//ul[@role="listbox"]/li/button[contains(.,"${input_type}")] Remove All Environment Variables [Documentation] Removes all the added environment variables from the workbench creation page @@ -261,7 +258,7 @@ Select Workbench Container Size Click Element ${WORKBENCH_SIZE_SIDE_MENU_BTN} Wait Until Page Contains Element ${WORKBENCH_SIZE_MENU_BTN_XP} Click Element ${WORKBENCH_SIZE_MENU_BTN_XP} - ${workbench_size_button_click}= Set Variable ${WORKBENCH_SIZE_ITEM_BTN_XP}//span[text()="${size_name}"] + ${workbench_size_button_click}= Set Variable xpath=//button[contains(.,"${size_name}")] Wait Until Page Contains Element ${workbench_size_button_click} Click Element ${workbench_size_button_click} @@ -305,13 +302,12 @@ Status Error Icon Should Appear Wait Until Workbench Is Started [Documentation] Waits until workbench status is "RUNNING" in the DS Project details page - [Arguments] ${workbench_title} ${timeout}=60s ${status}=${WORKBENCH_STATUS_RUNNING} - Wait Until Page Contains Element - ... ${WORKBENCH_SECTION_XP}//td[@data-label="Name"]//*[.="${workbench_title}"]/../../../td[@data-label="Status"]//span[text()="${status}"] - ... timeout=${timeout} + [Arguments] ${workbench_title} ${timeout}=40s + Wait Until Keyword Succeeds ${timeout} 5s Workbench Status Should Be + ... workbench_title=${workbench_title} status=${WORKBENCH_STATUS_RUNNING} Wait Until Workbench Is Stopped - [Documentation] Waits until workbench status is "RUNNING" in the DS Project details page + [Documentation] Waits until workbench status is "STOPPED" in the DS Project details page [Arguments] ${workbench_title} ${timeout}=40s Wait Until Keyword Succeeds ${timeout} 5s Workbench Status Should Be ... workbench_title=${workbench_title} status=${WORKBENCH_STATUS_STOPPED} @@ -322,10 +318,15 @@ Wait Until Workbench Is Restarting Wait Until Keyword Succeeds ${timeout} 5s Workbench Status Should Be ... workbench_title=${workbench_title} status=${WORKBENCH_STATUS_STARTING} +Wait Until Workbench Is Failed + [Documentation] Waits until workbench status is "FAIL" in the DS Project details page + [Arguments] ${workbench_title} ${timeout}=40s + Wait Until Keyword Succeeds ${timeout} 5s Workbench Status Should Be + ... workbench_title=${workbench_title} status=${WORKBENCH_STATUS_FAILED} + Start Workbench [Documentation] Starts a workbench from the DS Project details page [Arguments] ${workbench_title} ${timeout}=60s - ${is_stopped}= Run Keyword And Return Status Workbench Status Should Be ... workbench_title=${workbench_title} status=${WORKBENCH_STATUS_STOPPED} IF ${is_stopped} == ${TRUE} @@ -343,7 +344,7 @@ Access To Workbench IF ${oauth_prompt_visible} Click Button Log in with OpenShift Run Keyword And Warn On Failure Login To Openshift ${username} ${password} ${auth_type} ${authorization_required}= Is Service Account Authorization Required - IF ${authorization_required} Authorize Jupyterhub Service Account + IF ${authorization_required} Authorize JupyterLab Service Account IF "${expected_ide}"=="VSCode" Wait Until Page Contains Element xpath://div[@class="menubar-menu-button"] timeout=60s Wait Until Page Contains Element xpath://div[@class="monaco-dialog-box"] timeout=60s @@ -464,26 +465,14 @@ Get Openshift Notebook CR From Workbench ... shell=yes RETURN ${result.rc} ${result.stdout} -Start Workbench Should Fail - [Documentation] Checks the workbench fails to start - [Arguments] ${workbench_title} - ${failed}= Run Keyword And Return Status - ... Wait Until Workbench Is Started workbench_title=${workbench_title} - IF ${failed} != ${FALSE} Fail msg=Workbench is expected to fail starting... - Run Keyword And Continue On Failure Wait Until Keyword Succeeds 30 times 2s - ... Status Error Icon Should Appear workbench_title=${workbench_title} - Workbench Should Be Listed ${workbench_title} timeout=30s - Wait Until Keyword Succeeds 20 times 2s - ... Status Error Icon Should Appear workbench_title=${workbench_title} - Open Notebook Event Log - [Documentation] Opens the event log of the given workbench + [Documentation] Opens the event log of a "Starting" workbench and verify an event message in UI [Arguments] ${workbench_title} ${exp_preview_text}=${NONE} - Click Element - ... ${WORKBENCH_SECTION_XP}//tr[td[@data-label="Name"]/*[div[text()="${workbench_title}"]]]/td[@data-label="Status"]//p[text()="${WORKBENCH_STATUS_STARTING}"] # robocop: disable - Page Should Contain Event Log Preview expected_text=${exp_preview_text} - Click Element xpath=//div[contains(@class,"popover")]//footer/button[text()="Event log"] - Wait Until Generic Modal Appears + Click Element //tr[contains(., "${workbench_title}")]//*[@data-testid="notebook-status-text"] + Wait Until Page Contains Element xpath=//*[contains(.,"Workbench status")] + IF "${exp_preview_text}" != "${NONE}" + Page Should Contain Element xpath=//*[contains(.,"${exp_preview_text}")] + END Event Log Should Report The Failure [Documentation] Checks that the Event log modal reports the @@ -492,49 +481,43 @@ Event Log Should Report The Failure Page Should Contain Event Log expected_progress_text=${exp_progress_text} ... expected_result_text=${exp_result_text} -Cancel Workbench Startup From Event Log - [Documentation] Clicks the Cancel button in Workbench statup event log - Click Element ${KFNBC_MODAL_CANCEL_XPATH} +Stop Workbench Startup From Event Log + [Documentation] Clicks the Stop button (twice) in Workbench startup event log + Click Element ${GENERIC_STOP_BTN_XP} + ${stop_present}= Run Keyword And Return Status + ... Page Should Contain Element ${GENERIC_STOP_BTN_XP} + IF ${stop_present} Click Element ${GENERIC_STOP_BTN_XP} Wait Until Generic Modal Disappears Close Event Log - [Documentation] Closes the event log which was previously opened by the robot + [Documentation] Closes the event log (if it was not already closed) ${cancel_present}= Run Keyword And Return Status - ... Page Should Contain Element ${KFNBC_MODAL_CANCEL_XPATH} - IF ${cancel_present} == ${TRUE} - Click Element ${KFNBC_MODAL_CANCEL_XPATH} + ... Page Should Contain Element ${GENERIC_CANCEL_BTN_XP} + IF ${cancel_present} + Click Element ${GENERIC_CANCEL_BTN_XP} ELSE - Click Element ${KFNBC_MODAL_X_XPATH} + ${close_present}= Run Keyword And Return Status + ... Page Should Contain Element ${GENERIC_CANCEL_BTN_XP} + IF ${close_present} Click Element ${GENERIC_CLOSE_BTN_XP} END Wait Until Generic Modal Disappears -Page Should Contain Event Log Preview - [Documentation] Check if a preview of the event log is displayed when - ... user clicks on "Starting..." status label - [Arguments] ${expected_text}=${NONE} - Wait Until Page Contains Element xpath=//div[contains(@class,"popover")]//h6[text()="Notebook status"] - IF "${expected_text}" != "${NONE}" - Page Should Contain Element - ... xpath=//div[contains(@class,"popover")]//div[contains(text(),"${expected_text}")] - END - Wait Until Page Contains Element - ... xpath=//div[contains(@class,"popover")]//footer/button[text()="Event log"] - Page Should Contain Event Log [Documentation] Checks if the event log is displayed [Arguments] ${expected_progress_text}=${NONE} ${expected_result_text}=${NONE} - Is Generic Modal Displayed - Run Keyword And Continue On Failure Page Should Contain Starting server + Click Element xpath=//button[contains(.,"Event log")] + Wait Until Generic Modal Appears + Run Keyword And Continue On Failure Page Should Contain Starting workbench Run Keyword And Continue On Failure Page Should Contain Event log Run Keyword And Continue On Failure Page Should Contain Element css:ul[data-id="event-logs"] ${text}= Get Text css:ul[data-id="event-logs"] IF "${expected_progress_text}" != "${NONE}" Page Should Contain Element - ... xpath=//div[@data-id="progress-bar"]//div[contains(text(),"${expected_progress_text}")] + ... xpath=//*[@data-id="progress-bar"]//*[contains(text(),"${expected_progress_text}")] END IF "${expected_result_text}" != "${NONE}" Page Should Contain Element - ... xpath=//div[contains(@class,"alert")]//h4[contains(text(),"${expected_result_text}")] + ... xpath=//*[contains(@class,"alert")]//*[contains(text(),"${expected_result_text}")] END Capture Page Screenshot @@ -598,6 +581,12 @@ Delete Workbench From CLI END END +Delete All Workbenches In Project From CLI + [Documentation] Deletes All Workbenches (Notebooks) in a project from CLI + [Arguments] ${project_title} + ${ns_name}= Get Openshift Namespace From Data Science Project project_title=${project_title} + ${result}= Run Process oc delete notebook -n ${ns_name} --all --timeout\=30s shell=yes + Get Workbench Pod [Documentation] Retrieves info of a workbench pod: namespace, CR resource name and pod definition [Arguments] ${workbench_title} ${project_title} diff --git a/ods_ci/tests/Tests/0100__platform/0101__deploy/0101__installation/0101__post_install.robot b/ods_ci/tests/Tests/0100__platform/0101__deploy/0101__installation/0101__post_install.robot index b9db7373a..31d1f4791 100644 --- a/ods_ci/tests/Tests/0100__platform/0101__deploy/0101__installation/0101__post_install.robot +++ b/ods_ci/tests/Tests/0100__platform/0101__deploy/0101__installation/0101__post_install.robot @@ -437,7 +437,7 @@ Launch Notebook And Stop It # robocop: disable Launch Jupyter From RHODS Dashboard Link Login To Jupyterhub ${TEST_USER.USERNAME} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize Jupyterhub Service Account + IF ${authorization_required} Authorize JupyterLab Service Account Wait Until Page Contains Start a notebook server Fix Spawner Status Spawn Notebook With Arguments image=minimal-notebook diff --git a/ods_ci/tests/Tests/0100__platform/0102__monitor_and_manage/0101__metrics/0101__metrics.robot b/ods_ci/tests/Tests/0100__platform/0102__monitor_and_manage/0101__metrics/0101__metrics.robot index 8bd428e32..00defde73 100644 --- a/ods_ci/tests/Tests/0100__platform/0102__monitor_and_manage/0101__metrics/0101__metrics.robot +++ b/ods_ci/tests/Tests/0100__platform/0102__monitor_and_manage/0101__metrics/0101__metrics.robot @@ -142,7 +142,7 @@ Iterative Image Test Login To Jupyterhub ${TEST_USER.USERNAME} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} Page Should Not Contain 403 : Forbidden ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account Fix Spawner Status Spawn Notebook With Arguments image=${image} Run Cell And Check Output print("Hello World!") Hello World! diff --git a/ods_ci/tests/Tests/0100__platform/0102__monitor_and_manage/0101__metrics/0102__billing_metrics.robot b/ods_ci/tests/Tests/0100__platform/0102__monitor_and_manage/0101__metrics/0102__billing_metrics.robot index 08d154f0c..452e3dd09 100644 --- a/ods_ci/tests/Tests/0100__platform/0102__monitor_and_manage/0101__metrics/0102__billing_metrics.robot +++ b/ods_ci/tests/Tests/0100__platform/0102__monitor_and_manage/0101__metrics/0102__billing_metrics.robot @@ -198,7 +198,7 @@ Iterative Image Test Login To Jupyterhub ${TEST_USER.USERNAME} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} Page Should Not Contain 403 : Forbidden ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account Fix Spawner Status Spawn Notebook With Arguments image=${image} Run Cell And Check Output print("Hello World!") Hello World! @@ -220,7 +220,7 @@ CleanUp JupyterHub Login To Jupyterhub ${TEST_USER.USERNAME} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} Page Should Not Contain 403 : Forbidden ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account # Additional check on running server ${control_panel_visible} = Control Panel Is Visible IF ${control_panel_visible}==True diff --git a/ods_ci/tests/Tests/0100__platform/0102__monitor_and_manage/0102__alerts/0102__alerts.robot b/ods_ci/tests/Tests/0100__platform/0102__monitor_and_manage/0102__alerts/0102__alerts.robot index c2aef8d13..874038d2d 100644 --- a/ods_ci/tests/Tests/0100__platform/0102__monitor_and_manage/0102__alerts/0102__alerts.robot +++ b/ods_ci/tests/Tests/0100__platform/0102__monitor_and_manage/0102__alerts/0102__alerts.robot @@ -255,7 +255,7 @@ Fill Up User PVC # robocop: disable:too-many-calls-in-keyword Launch Jupyter From RHODS Dashboard Link Login To Jupyterhub ${TEST_USER.USERNAME} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account Fix Spawner Status Spawn Notebook With Arguments image=science-notebook Clone Git Repository And Run ${notebook_repo} ${notebook_path} diff --git a/ods_ci/tests/Tests/0200__rhoai_upgrade/0202__during_upgrade.robot b/ods_ci/tests/Tests/0200__rhoai_upgrade/0202__during_upgrade.robot index 740cc93f2..b0c467722 100644 --- a/ods_ci/tests/Tests/0200__rhoai_upgrade/0202__during_upgrade.robot +++ b/ods_ci/tests/Tests/0200__rhoai_upgrade/0202__during_upgrade.robot @@ -90,7 +90,7 @@ Launch Notebook Launch Jupyter From RHODS Dashboard Link Login To Jupyterhub ${username} ${password} ${auth_type} ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize Jupyterhub Service Account + IF ${authorization_required} Authorize JupyterLab Service Account Fix Spawner Status # robocop: disable Spawn Notebook With Arguments diff --git a/ods_ci/tests/Tests/0400__ods_dashboard/0408__ods_dashboard_settings_pod_tolerations.robot b/ods_ci/tests/Tests/0400__ods_dashboard/0408__ods_dashboard_settings_pod_tolerations.robot index da85f843e..c32a869c0 100644 --- a/ods_ci/tests/Tests/0400__ods_dashboard/0408__ods_dashboard_settings_pod_tolerations.robot +++ b/ods_ci/tests/Tests/0400__ods_dashboard/0408__ods_dashboard_settings_pod_tolerations.robot @@ -3,9 +3,9 @@ Resource ../../Resources/Page/ODH/ODHDashboard/ODHDashboard.resource Resource ../../Resources/Page/OCPDashboard/Pods/Pods.robot Resource ../../Resources/Page/ODH/ODHDashboard/ODHDashboardSettings.resource Library ../../../libs/Helpers.py -Suite Setup Begin Web Test -Suite Teardown Teardown -Test Tags Dashboard +Suite Setup Suite Setup +Suite Teardown Suite Teardown +Test Tags Dashboard *** Variables *** @@ -15,25 +15,22 @@ Test Tags Dashboard *** Test Cases *** Test Setting Unsupported Pod Toleration Via UI [Documentation] Sets a Pod toleration via the admin UI - [Tags] Sanity Tier1 + [Tags] Sanity ... ODS-1788 + Clean All Standalone Notebooks Menu.Navigate To Page Settings Cluster settings Wait Until Page Contains Notebook pod tolerations FOR ${toleration} IN @{UNSUPPORTED_TOLERATIONS} Verify Unsupported Toleration Is Not Allowed ${toleration} END -Test Setting Pod Toleration Via UI - [Documentation] Sets a Pod toleration via the admin UI - [Tags] Sanity Tier1 - ... ODS-1684 +Verify Toleration Is Applied To Pod + [Documentation] Sets Toleration via the admin UI, and verifies Pod spawns with expected toleration + [Tags] Sanity + ... ODS-1684 ODS-1685 + Menu.Navigate To Page Settings Cluster settings Set Pod Toleration Via UI TestToleration Save Changes In Cluster Settings - -Verify Toleration Is Applied To Pod - [Documentation] Verifies Pod spawns with toleration - [Tags] Sanity Tier1 - ... ODS-1685 Launch JupyterHub Spawner From Dashboard Spawn Notebook With Arguments image=minimal-notebook Verify Server Pod Has The Expected Toleration TestToleration @@ -50,16 +47,6 @@ Verify Server Pod Has The Expected Toleration List Should Contain Value ${received} ${expected} ... msg=Unexpected Pod Toleration -Teardown - [Documentation] Removes tolerations and cleans up - Clean Up Server - Stop JupyterLab Notebook Server - Menu.Navigate To Page Settings Cluster settings - Wait Until Page Contains Element xpath://input[@id="tolerations-enabled-checkbox"] - Click Element xpath://input[@id="tolerations-enabled-checkbox"] - Save Changes In Cluster Settings - Close Browser - Verify Unsupported Toleration Is Not Allowed [Documentation] Test an unsupported pod toleration and expect it ... to not be allowed. @@ -67,3 +54,17 @@ Verify Unsupported Toleration Is Not Allowed Set Pod Toleration Via UI ${toleration} Page Should Contain Toleration key must consist of alphanumeric characters, '-', '_' or '.', and must start and end with an alphanumeric character. Element Should Be Disabled xpath://button[.="Save changes"] + +Suite Setup + [Documentation] Setup for the Toleration tests + Begin Web Test jupyter_login=${FALSE} + Clean All Standalone Notebooks + +Suite Teardown + [Documentation] Removes Tolerations and cleans up + Clean All Standalone Notebooks + Open ODS Dashboard With Admin User + Menu.Navigate To Page Settings Cluster settings + Disable Pod Toleration Via UI + Save Changes In Cluster Settings + Close Browser diff --git a/ods_ci/tests/Tests/0400__ods_dashboard/0409__ods_dashboard_settings_accelerator_profiles.robot b/ods_ci/tests/Tests/0400__ods_dashboard/0409__ods_dashboard_settings_accelerator_profiles.robot index 47860bc17..1effbf6b5 100644 --- a/ods_ci/tests/Tests/0400__ods_dashboard/0409__ods_dashboard_settings_accelerator_profiles.robot +++ b/ods_ci/tests/Tests/0400__ods_dashboard/0409__ods_dashboard_settings_accelerator_profiles.robot @@ -33,7 +33,7 @@ ${ACC_TOLERATION_SECONDS}= 15 Create An Accelerator Profile From Accelerator Profiles Administration UI [Documentation] Create an Accelerator Profile instance from the Administration UI and verify it's content [Tags] RHOAIENG-3349 - ... Sanity Tier1 + ... Sanity [Setup] Open Dashboard And Navigate To Accelerator Profiles From Settings Create An Accelerator Profile Via UI ${ACC_NAME}1 ${ACC_IDENTIFIER} ... ${ACC_DESCRIPTION} ${ACC_ENABLED} tolerations=yes @@ -54,7 +54,7 @@ Create An Accelerator Profile From Accelerator Profiles Administration UI Modify An Accelerator Profile Using Accelerator Profiles Administration UI [Documentation] Modify an Accelerator Profile instance from the Administration UI and verify it's content [Tags] RHOAIENG-3349 - ... Sanity Tier1 + ... Sanity [Setup] Run Keywords Create An Accelerator Profile Via CLI ${ACC_NAME}2 ... AND ... Open Dashboard And Navigate to Accelerator Profiles From Settings @@ -80,7 +80,7 @@ Delete Tolerations from an Accelerator Profile Using Accelerator Profiles Admini [Documentation] Delete Tolerations from an Accelerator Profile instance from the Administration UI and ... verify it's content [Tags] RHOAIENG-3349 - ... Sanity Tier1 + ... Sanity [Setup] Run Keywords Create An Accelerator Profile Via CLI ${ACC_NAME}3 ... AND ... Open Dashboard And Navigate to Accelerator Profiles From Settings @@ -91,7 +91,7 @@ Delete Tolerations from an Accelerator Profile Using Accelerator Profiles Admini Disable an Accelerator Profile From The Accelerator Profile Edit View [Documentation] Disable an An accelerator profile from the Edit Accelerator Profile view [Tags] RHOAIENG-3349 - ... Sanity Tier1 + ... Sanity [Setup] Run Keywords Create An Accelerator Profile Via CLI ${ACC_NAME}4 ... AND ... Open Dashboard And Navigate to Accelerator Profiles From Settings @@ -102,7 +102,7 @@ Disable an Accelerator Profile From The Accelerator Profile Edit View Enable an Accelerator Profile From The Accelerator Profile Edit View [Documentation] Enable an An accelerator profile from the Edit Accelerator Profile view [Tags] RHOAIENG-3349 - ... Sanity Tier1 + ... Sanity [Setup] Run Keywords Create An Accelerator Profile Via CLI ${ACC_NAME}5 ... AND ... Open Dashboard And Navigate to Accelerator Profiles From Settings @@ -113,7 +113,7 @@ Enable an Accelerator Profile From The Accelerator Profile Edit View Disable an Accelerator Profile From The Grid of the Accelerator Profile View [Documentation] Disable an An accelerator profile from the Edit Accelerator Profile view [Tags] RHOAIENG-3349 - ... Sanity Tier1 + ... Sanity [Setup] Run Keywords Create An Accelerator Profile Via CLI ${ACC_NAME}6 ... AND ... Open Dashboard And Navigate to Accelerator Profiles From Settings @@ -124,7 +124,7 @@ Disable an Accelerator Profile From The Grid of the Accelerator Profile View Enable an Accelerator Profile From The Grid of the Accelerator Profile View [Documentation] Enable an An accelerator profile from the Accelerator Profile view [Tags] RHOAIENG-3349 - ... Sanity Tier1 + ... Sanity [Setup] Run Keywords Create An Accelerator Profile Via CLI ${ACC_NAME}7 ... AND ... Open Dashboard And Navigate to Accelerator Profiles From Settings @@ -135,7 +135,7 @@ Enable an Accelerator Profile From The Grid of the Accelerator Profile View Delete an Accelerator Profile From The Grid of the Accelerator Profile View [Documentation] Delete an An accelerator profile from the Accelerator Profile view [Tags] RHOAIENG-3349 - ... Sanity Tier1 + ... Sanity [Setup] Run Keywords Create An Accelerator Profile Via CLI ${ACC_NAME}8 ... AND ... Open Dashboard And Navigate to Accelerator Profiles From Settings @@ -147,7 +147,7 @@ Delete an Accelerator Profile From The Grid of the Accelerator Profile View Teardown Settings Accelerator Profiles [Documentation] Sets the default values In User Management Settings ... and runs the RHOSi Teardown - Delete All Accelerator Profiles Which Starts With ${ACC_NAME} + Run Keyword And Ignore Error Delete All Accelerator Profiles Which Starts With ${ACC_NAME} RHOSi Teardown Open Dashboard And Navigate to Accelerator Profiles From Settings diff --git a/ods_ci/tests/Tests/0400__ods_dashboard/0410__ods_dashboard_projects/0410__ods_dashboard_projects.robot b/ods_ci/tests/Tests/0400__ods_dashboard/0410__ods_dashboard_projects/0410__ods_dashboard_projects.robot index d1746b403..4a4101f3e 100644 --- a/ods_ci/tests/Tests/0400__ods_dashboard/0410__ods_dashboard_projects/0410__ods_dashboard_projects.robot +++ b/ods_ci/tests/Tests/0400__ods_dashboard/0410__ods_dashboard_projects/0410__ods_dashboard_projects.robot @@ -9,7 +9,7 @@ Resource ../../../Resources/Page/ODH/ODHDashboard/ODHDataScienceProjec Resource ../../../Resources/Page/ODH/ODHDashboard/ODHDataScienceProject/DataConnections.resource Suite Setup Project Suite Setup Suite Teardown Project Suite Teardown -Test Setup Launch Data Science Project Main Page +Test Setup Delete Testing Workbenches Test Teardown SeleniumLibrary.Close All Browsers Test Tags Dashboard @@ -45,7 +45,7 @@ ${DC_S3_AWS_SECRET_ACCESS_KEY}= custom dummy secret access key ${DC_S3_AWS_ACCESS_KEY}= custom dummy access key id ${DC_S3_ENDPOINT}= custom.endpoint.s3.com ${DC_S3_REGION}= ods-ci-region -${DC_S3_TYPE}= Object storage +${DC_S3_TYPE}= object storage @{IMAGE_LIST} Minimal Python CUDA PyTorch Standard Data Science TensorFlow ${ENV_SECRET_FILEPATH}= tests/Resources/Files/env_vars_secret.yaml ${ENV_CM_FILEPATH}= tests/Resources/Files/env_vars_cm.yaml @@ -128,8 +128,6 @@ Verify User Can Create And Start A Workbench With Existent PV Storage Run Keyword And Continue On Failure Wait Until Workbench Is Started workbench_title=${WORKBENCH_2_TITLE} ${ns_name}= Get Openshift Namespace From Data Science Project project_title=${PRJ_TITLE} Check Corresponding Notebook CR Exists workbench_title=${WORKBENCH_2_TITLE} namespace=${ns_name} - [Teardown] Clean Project From Workbench Resources workbench_title=${WORKBENCH_2_TITLE} - ... project_title=${PRJ_TITLE} pvc_title=${pv_name} Verify User Can Create A PV Storage [Tags] Sanity @@ -156,11 +154,6 @@ Verify User Can Create A PV Storage ... type=Persistent storage connected_workbench=${workbenches} Check Corresponding PersistentVolumeClaim Exists storage_name=${pv_name} namespace=${ns_name} Storage Size Should Be name=${pv_name} namespace=${ns_name} size=${PV_SIZE} - [Teardown] Run Keywords - ... Clean Project From Workbench Resources workbench_title=${WORKBENCH_TITLE} - ... project_title=${PRJ_TITLE} pvc_title=${pv_name} - ... AND - ... Delete PVC In Project From CLI pvc_title=${pv_name} project_title=${PRJ_TITLE} Verify User Can Create And Start A Workbench Adding A New PV Storage [Tags] Sanity @@ -176,7 +169,6 @@ Verify User Can Create And Start A Workbench Adding A New PV Storage ... storage=Persistent pv_existent=${FALSE} ... pv_name=${pv_name} pv_description=${PV_DESCRIPTION} pv_size=${PV_SIZE} Workbench Should Be Listed workbench_title=${WORKBENCH_3_TITLE} - Workbench Status Should Be workbench_title=${WORKBENCH_3_TITLE} status=${WORKBENCH_STATUS_STARTING} Run Keyword And Continue On Failure Wait Until Workbench Is Started workbench_title=${WORKBENCH_3_TITLE} Check Corresponding Notebook CR Exists workbench_title=${WORKBENCH_3_TITLE} namespace=${ns_name} ${connected_woksps}= Create List ${WORKBENCH_3_TITLE} @@ -184,11 +176,9 @@ Verify User Can Create And Start A Workbench Adding A New PV Storage Storage Should Be Listed name=${pv_name} description=${PV_DESCRIPTION} ... type=Persistent storage connected_workbench=${connected_woksps} Storage Size Should Be name=${pv_name} namespace=${ns_name} size=${PV_SIZE} - [Teardown] Clean Project From Workbench Resources workbench_title=${WORKBENCH_3_TITLE} - ... project_title=${PRJ_TITLE} pvc_title=${pv_name} Verify User Can Create A S3 Data Connection And Connect It To Workbenches - [Tags] Sanity + [Tags] Tier1 ... ODS-1825 ODS-1972 [Documentation] Verifies users can add a Data connection to AWS S3 Create Workbench workbench_title=${WORKBENCH_TITLE} workbench_description=${WORKBENCH_DESCRIPTION} @@ -204,7 +194,6 @@ Verify User Can Create A S3 Data Connection And Connect It To Workbenches Stop Workbench workbench_title=${WORKBENCH_2_TITLE} from_running=${FALSE} Wait Until Workbench Is Started workbench_title=${WORKBENCH_TITLE} ${ns_name}= Get Openshift Namespace From Data Science Project project_title=${PRJ_TITLE} - Open Data Science Project Details Page project_title=${PRJ_TITLE} tab_id=connections Create S3 Data Connection project_title=${PRJ_TITLE} dc_name=${DC_S3_NAME} ... aws_access_key=${DC_S3_AWS_SECRET_ACCESS_KEY} ... aws_secret_access=${DC_S3_AWS_SECRET_ACCESS_KEY} @@ -221,10 +210,6 @@ Verify User Can Create A S3 Data Connection And Connect It To Workbenches Open Data Science Project Details Page project_title=${PRJ_TITLE} tab_id=workbenches Run Keyword And Continue On Failure Wait Until Workbench Is Started workbench_title=${WORKBENCH_TITLE} Workbench Status Should Be workbench_title=${WORKBENCH_2_TITLE} status=${WORKBENCH_STATUS_STOPPED} - [Teardown] Run Keywords - ... Clean Project From Workbench Resources workbench_title=${WORKBENCH_2_TITLE} project_title=${PRJ_TITLE} - ... AND - ... Clean Project From Workbench Resources workbench_title=${WORKBENCH_TITLE} project_title=${PRJ_TITLE} Verify User Can Delete A Persistent Storage [Tags] Sanity @@ -268,18 +253,14 @@ Verify user can create a workbench with an existing data connection ... prj_title=${PRJ_TITLE} image_name=${NB_IMAGE} deployment_size=Small ... storage=Persistent pv_existent=${NONE} pv_name=${NONE} pv_description=${NONE} pv_size=${NONE} ... data_connection=${data_connection_name} - # The Workbench and the Data connection appear on the project details page. Workbench Should Be Listed workbench_title=${WORKBENCH_TITLE} - # The data connection has the workbench name in the "Connected workbenches" column + # The data connection has the workbench name in the "Connected resources" column ${workbenches}= Create List ${WORKBENCH_TITLE} Open Data Science Project Details Page project_title=${PRJ_TITLE} tab_id=connections Data Connection Should Be Listed name=${data_connection_name} type=${DC_S3_TYPE} ... connected_workbench=${workbenches} - [Teardown] Clean Project From Workbench Resources workbench_title=${WORKBENCH_TITLE} - ... project_title=${PRJ_TITLE} - Verify User Can Create A Workbench With Environment Variables [Tags] Sanity ... ODS-1864 @@ -300,7 +281,6 @@ Verify User Can Create A Workbench With Environment Variables ... username=${TEST_USER_3.USERNAME} password=${TEST_USER_3.PASSWORD} ... auth_type=${TEST_USER_3.AUTH_TYPE} Environment Variables Should Be Available In Jupyter exp_env_variables=${envs_list} - [Teardown] Clean Project From Workbench Resources workbench_title=${WORKBENCH_4_TITLE} project_title=${PRJ_TITLE} Verify User Can Create Environment Variables By Uploading YAML Secret/ConfigMap [Tags] Sanity @@ -326,13 +306,12 @@ Verify User Can Create Environment Variables By Uploading YAML Secret/ConfigMap ${test_envs_list}= Create List ${test_envs_var_secret} ${test_envs_var_cm} Environment Variables Should Be Displayed According To Their Type ... workbench_title=${WORKBENCH_4_TITLE} exp_env_variables=${test_envs_list} + Open Data Science Project Details Page project_title=${PRJ_TITLE} tab_id=workbenches Wait Until Workbench Is Started workbench_title=${WORKBENCH_4_TITLE} Launch And Access Workbench workbench_title=${WORKBENCH_4_TITLE} ... username=${TEST_USER_3.USERNAME} password=${TEST_USER_3.PASSWORD} ... auth_type=${TEST_USER_3.AUTH_TYPE} Environment Variables Should Be Available In Jupyter exp_env_variables=${test_envs_list} - [Teardown] Clean Project From Workbench Resources workbench_title=${WORKBENCH_4_TITLE} - ... project_title=${PRJ_TITLE} pvc_title=${WORKBENCH_4_TITLE}-PV Verify User Can Log Out And Return To Project From Jupyter Notebook # robocop: disable [Tags] Sanity @@ -367,8 +346,6 @@ Verify User Can Log Out And Return To Project From Jupyter Notebook # robocop Open Workbench workbench_title=${WORKBENCH_TITLE} Run Keyword And Ignore Error ... Log In Should Be Requested - [Teardown] Clean Project From Workbench Resources workbench_title=${WORKBENCH_TITLE} - ... project_title=${PRJ_TITLE} Verify Event Log Is Accessible While Starting A Workbench [Tags] Sanity @@ -390,42 +367,32 @@ Verify Event Log Is Accessible While Starting A Workbench ... expected_result_text=Success Close Event Log Wait Until Project Is Open project_title=${PRJ_TITLE} - [Teardown] Clean Project From Workbench Resources workbench_title=${WORKBENCH_6_TITLE} - ... project_title=${PRJ_TITLE} Verify User Can Cancel Workbench Start From Event Log - [Tags] Sanity + [Tags] Tier1 ... ODS-1975 [Documentation] Verify user can cancel workbench start from event log - Create Workbench workbench_title=${WORKBENCH_TITLE} workbench_description=${WORKBENCH_DESCRIPTION} ... prj_title=${PRJ_TITLE} image_name=${NB_IMAGE} deployment_size=Small ... storage=Persistent pv_name=${NONE} pv_existent=${NONE} ... pv_description=${NONE} pv_size=${NONE} ... press_cancel=${FALSE} envs=${NONE} - Workbench Status Should Be workbench_title=${WORKBENCH_TITLE} status=${WORKBENCH_STATUS_STARTING} - Open Notebook Event Log workbench_title=${WORKBENCH_TITLE} Page Should Contain Event Log - Cancel Workbench Startup From Event Log + Stop Workbench Startup From Event Log Wait Until Workbench Is Stopped workbench_title=${WORKBENCH_TITLE} - Workbench Status Should Be workbench_title=${WORKBENCH_TITLE} status=${WORKBENCH_STATUS_STOPPED} - Wait Until Keyword Succeeds 5 min 5s ... Run Keyword And Expect Error EQUALS:ResourceOperationFailed: Get failed\nReason: Not Found ... Get Workbench Pod project_title=${PRJ_TITLE} workbench_title=${WORKBENCH_TITLE} - [Teardown] Clean Project From Workbench Resources workbench_title=${WORKBENCH_TITLE} project_title=${PRJ_TITLE} - Verify Error Is Reported When Workbench Fails To Start # robocop: disable [Tags] Sanity ... ODS-1973 [Documentation] Verify UI informs users about workbenches failed to start. ... At the moment the test is considering only the scenario where ... the workbench fails for Insufficient resources. - [Teardown] Delete Workbench workbench_title=${WORKBENCH_5_TITLE} Create Workbench workbench_title=${WORKBENCH_5_TITLE} workbench_description=${WORKBENCH_5_DESCRIPTION} ... prj_title=${PRJ_TITLE} image_name=${NB_IMAGE} deployment_size=X Large ... storage=Persistent pv_name=${NONE} pv_existent=${NONE} @@ -433,28 +400,26 @@ Verify Error Is Reported When Workbench Fails To Start # robocop: disable ... press_cancel=${FALSE} envs=${NONE} Workbench Status Should Be workbench_title=${WORKBENCH_5_TITLE} ... status=${WORKBENCH_STATUS_STARTING} - Start Workbench Should Fail workbench_title=${WORKBENCH_5_TITLE} + Wait Until Workbench Is Failed workbench_title=${WORKBENCH_5_TITLE} Open Notebook Event Log workbench_title=${WORKBENCH_5_TITLE} ... exp_preview_text=Insufficient Event Log Should Report The Failure exp_progress_text=Insufficient resources to start ... exp_result_text=FailedScheduling - Close Event Log + Stop Workbench Startup From Event Log Wait Until Project Is Open project_title=${PRJ_TITLE} + [Teardown] Delete Workbench From CLI workbench_title=${WORKBENCH_5_TITLE} + ... project_title=${PRJ_TITLE} Verify Users Can Start, Stop, Launch And Delete A Workbench - [Tags] Smoke + [Tags] Tier1 ... ODS-1813 ODS-1815 ODS-1817 [Documentation] Verifies users can start, stop, launch and delete a running workbench from project details page - [Setup] Run Keywords - ... Launch Data Science Project Main Page - ... AND - ... Create Workbench workbench_title=${WORKBENCH_TITLE} workbench_description=${WORKBENCH_DESCRIPTION} + Create Workbench workbench_title=${WORKBENCH_TITLE} workbench_description=${WORKBENCH_DESCRIPTION} ... prj_title=${PRJ_TITLE} image_name=${NB_IMAGE} deployment_size=Small ... storage=Persistent pv_name=${NONE} pv_existent=${NONE} ... pv_description=${NONE} pv_size=${NONE} ... press_cancel=${FALSE} envs=${NONE} - ... AND - ... Wait Until Workbench Is Started workbench_title=${WORKBENCH_TITLE} + Wait Until Workbench Is Started workbench_title=${WORKBENCH_TITLE} Stop Workbench workbench_title=${WORKBENCH_TITLE} press_cancel=${TRUE} Stop Workbench workbench_title=${WORKBENCH_TITLE} Wait Until Workbench Is Stopped workbench_title=${WORKBENCH_TITLE} @@ -472,25 +437,17 @@ Verify Users Can Start, Stop, Launch And Delete A Workbench Workbench Should Not Be Listed workbench_title=${WORKBENCH_TITLE} Check Workbench CR Is Deleted workbench_title=${WORKBENCH_TITLE} project_title=${PRJ_TITLE} # PV storage should not get deleted - [Teardown] Run Keywords - ... Clean Project From Workbench Resources workbench_title=${WORKBENCH_TITLE} project_title=${PRJ_TITLE} - ... AND - ... SeleniumLibrary.Close Browser Verify Users Can Start, Stop And Launch A Workbench From DS Projects Home Page - [Tags] Sanity + [Tags] Tier1 ... ODS-1818 ODS-1823 [Documentation] Verifies users can start, stop, launch and delete a running workbench from project details page - [Setup] Run Keywords - ... Launch Data Science Project Main Page - ... AND - ... Create Workbench workbench_title=${WORKBENCH_TITLE} workbench_description=${WORKBENCH_DESCRIPTION} + Create Workbench workbench_title=${WORKBENCH_TITLE} workbench_description=${WORKBENCH_DESCRIPTION} ... prj_title=${PRJ_TITLE} image_name=${NB_IMAGE} deployment_size=Small ... storage=Persistent pv_name=${NONE} pv_existent=${NONE} ... pv_description=${NONE} pv_size=${NONE} ... press_cancel=${FALSE} envs=${NONE} - ... AND - ... Wait Until Workbench Is Started workbench_title=${WORKBENCH_TITLE} + Wait Until Workbench Is Started workbench_title=${WORKBENCH_TITLE} Open Data Science Projects Home Page Wait Until Project Is Listed project_title=${PRJ_TITLE} Stop Workbench From Projects Home Page workbench_title=${WORKBENCH_TITLE} project_title=${PRJ_TITLE} @@ -502,10 +459,6 @@ Verify Users Can Start, Stop And Launch A Workbench From DS Projects Home Page # TODO: Following Keyword should rather be called within "JupyterHub" Suite Verify Workbench Image In Jupyter Lab workbench_title=${WORKBENCH_TITLE} ... image=${NB_IMAGE} project_title=${PRJ_TITLE} - [Teardown] Run Keywords - ... Clean Project From Workbench Resources workbench_title=${WORKBENCH_TITLE} project_title=${PRJ_TITLE} - ... AND - ... SeleniumLibrary.Close Browser Verify User Can Delete A Data Science Project [Tags] Smoke @@ -521,10 +474,7 @@ Verify User Can Access Only Its Owned Projects ... ODS-1868 [Documentation] Verifies each user can access only they owned projects. Except for ... cluster and dedicated admins which should be able to fetch all the DS Projects - [Setup] Run Keywords - ... SeleniumLibrary.Close All Browsers - ... AND - ... Delete Project Via CLI By Display Name displayed_name=${PRJ_TITLE} + Delete Project Via CLI By Display Name displayed_name=${PRJ_TITLE} Launch Data Science Project Main Page username=${TEST_USER_3.USERNAME} password=${TEST_USER_3.PASSWORD} Open Data Science Projects Home Page Create Data Science Project title=${PRJ_1_USER3} description=${EMPTY} @@ -588,10 +538,15 @@ Project Suite Setup Project Suite Teardown [Documentation] Suite teardown steps after testing DS Projects. It Deletes ... all the DS projects created by the tests and run RHOSi teardown - SeleniumLibrary.Close All Browsers Delete List Of Projects Via CLI ocp_projects=${PROJECTS_TO_DELETE} RHOSi Teardown +Delete Testing Workbenches + [Documentation] Setup/Teardown to delete all the DS workbenches created by the tests + Delete All Workbenches In Project From CLI project_title=${PRJ_TITLE} + Delete All PVC In Project From CLI project_title=${PRJ_TITLE} + Launch Data Science Project Main Page + Set Variables For User Access Test [Documentation] Creates titles for testing projects used in basic access testing Set Suite Variable ${PRJ_1_USER3} ${PRJ_TITLE}-${TEST_USER_3.USERNAME}-#1 @@ -703,13 +658,13 @@ Environment Variables Should Be Displayed According To Their Type ... It goes to "Edit workbench" page and compare the environment variables ... settings with the ones which were inserted during workbench creation. [Arguments] ${workbench_title} ${exp_env_variables} - ODHDashboard.Click Action From Actions Menu item_title=${workbench_title} item_type=workbench action=Edit + Click Action From Actions Menu item_title=${workbench_title} item_type=workbench action=Edit Click Element xpath://a[@href="#environment-variables"] - Sleep 2s FOR ${idx} ${env_variable_dict} IN ENUMERATE @{exp_env_variables} start=1 ${n_pairs}= Get Length ${env_variable_dict.keys()} ${input_type}= Set Variable ${env_variable_dict}[input_type] Remove From Dictionary ${env_variable_dict} input_type + Sleep 2s Environment Variable Type Should Be expected_type=${input_type} var_idx=${idx} FOR ${pair_idx} ${key} ${value} IN ENUMERATE &{env_variable_dict} Log ${pair_idx}-${key}-${value} @@ -717,13 +672,15 @@ Environment Variables Should Be Displayed According To Their Type ... var_pair_idx=${pair_idx} expected_key=${key} expected_value=${value} type=${input_type} END END - Click Button ${GENERIC_CANCEL_BTN_XP} Capture Page Screenshot + Click Button ${WORKBENCH_CANCEL_BTN_XP} + # TODO: Remove this workaround for "Cancel Button not responding" Bug: + Run Keyword And Ignore Error Click Button ${WORKBENCH_CANCEL_BTN_XP} Environment Variable Type Should Be [Arguments] ${expected_type} ${var_idx} ${displayed_type}= Get Text - ... ${ENV_VARIABLES_SECTION_XP}/div[(contains(@class, "-l-split"))][${var_idx}]//div[contains(@class,"pf-v6-c-select")]/button//span[contains(@class,'toggle-text')] # robocop: disable:line-too-long + ... ${ENV_VARIABLES_SECTION_XP}/div[(contains(@class, "-l-split"))][${var_idx}]//*[@data-testid="environment-variable-type-select"] # robocop: disable:line-too-long Run Keyword And Continue On Failure Should Be Equal As Strings ${displayed_type} ${expected_type} Environment Variable Key/Value Fields Should Be Correctly Displayed diff --git a/ods_ci/tests/Tests/0400__ods_dashboard/0410__ods_dashboard_projects/0410__ods_dashboard_projects_permissions_mgmt.robot b/ods_ci/tests/Tests/0400__ods_dashboard/0410__ods_dashboard_projects/0410__ods_dashboard_projects_permissions_mgmt.robot index 89341efc9..247ca5c41 100644 --- a/ods_ci/tests/Tests/0400__ods_dashboard/0410__ods_dashboard_projects/0410__ods_dashboard_projects_permissions_mgmt.robot +++ b/ods_ci/tests/Tests/0400__ods_dashboard/0410__ods_dashboard_projects/0410__ods_dashboard_projects_permissions_mgmt.robot @@ -27,7 +27,7 @@ ${PRJ_USER_C_TITLE}= ${PRJ_BASE_TITLE}-${TEST_USER_4.USERNAME} *** Test Cases *** Verify User Can Make Their Owned DS Project Accessible To Other Users # robocop: disable [Documentation] Verify user can give access permissions for their DS Projects to other users - [Tags] Tier1 Smoke + [Tags] Smoke ... ODS-2194 ODS-2201 Switch To User ${USER_B} Move To Tab Permissions @@ -38,10 +38,12 @@ Verify User Can Make Their Owned DS Project Accessible To Other Users # roboc Verify User Can Modify And Revoke Access To DS Projects From Other Users # robocop: disable [Documentation] Verify user can modify/remove access permissions for their DS Projects to other users - [Tags] Tier1 Sanity + [Tags] Sanity ... ODS-2202 Switch To User ${USER_B} Move To Tab Permissions + Assign Contributor Permissions To User ${USER_C} + Assign Admin Permissions To User ${USER_A} Change ${USER_C} Permissions To Admin Change ${USER_A} Permissions To Contributor Refresh Pages @@ -53,7 +55,7 @@ Verify User Can Modify And Revoke Access To DS Projects From Other Users # ro ${USER_C} Should Not Have Access To ${PRJ_USER_B_TITLE} Verify User Can Assign Access Permissions To User Groups - [Tags] Tier1 Sanity + [Tags] Sanity ... ODS-2208 [Setup] Restore Permissions Of The Project Switch To User ${USER_B} @@ -79,7 +81,8 @@ Verify User Can Assign Access Permissions To User Groups ${USER_C} Should Not Have Access To ${PRJ_USER_B_TITLE} Verify Project Sharing Does Not Override Dashboard Permissions - [Tags] Tier1 ODS-2223 + [Tags] Tier1 + ... ODS-2223 [Setup] Set RHODS Users Group To rhods-users Launch Data Science Project Main Page username=${OCP_ADMIN_USER.USERNAME} password=${OCP_ADMIN_USER.PASSWORD} ... ocp_user_auth_type=${OCP_ADMIN_USER.AUTH_TYPE} diff --git a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/autoscaling-gpus.robot b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/autoscaling-gpus.robot index 0d1009354..6c395a0ed 100644 --- a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/autoscaling-gpus.robot +++ b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/autoscaling-gpus.robot @@ -67,7 +67,7 @@ Spawn Notebook And Trigger Autoscale IF ${oauth_prompt_visible} Click Button Log in with OpenShift Run Keyword And Warn On Failure Login To Openshift ${TEST_USER.USERNAME} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account Wait Until Page Contains Element xpath://div[@id="jp-top-panel"] timeout=60s Maybe Close Popup Open New Notebook In Jupyterlab Menu diff --git a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/image-iteration.robot b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/image-iteration.robot index d28aa990d..055d74860 100644 --- a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/image-iteration.robot +++ b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/image-iteration.robot @@ -48,7 +48,7 @@ Iterative Image Test Launch Jupyter From RHODS Dashboard Link Login To Jupyterhub ${TEST_USER.USERNAME} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account Fix Spawner Status Spawn Notebook With Arguments image=${image} Run Cell And Check Output print("Hello World!") Hello World! diff --git a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/long-running-test-generic-ds.robot b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/long-running-test-generic-ds.robot index 23a127895..b9ab33a84 100644 --- a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/long-running-test-generic-ds.robot +++ b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/long-running-test-generic-ds.robot @@ -31,6 +31,6 @@ Launch JupyterLab Launch Jupyter From RHODS Dashboard Link Login To Jupyterhub ${TEST_USER.USERNAME} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account Fix Spawner Status Spawn Notebooks And Set S3 Credentials image=science-notebook diff --git a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/networkpolicy-test.robot b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/networkpolicy-test.robot index c004433c6..1ffaa2d25 100644 --- a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/networkpolicy-test.robot +++ b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/networkpolicy-test.robot @@ -39,7 +39,7 @@ Open Browser And Start Notebook As First User Launch Jupyter From RHODS Dashboard Link Login To Jupyterhub ${TEST_USER.USERNAME} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize Jupyterhub Service Account + IF ${authorization_required} Authorize JupyterLab Service Account Wait Until Page Contains Start a notebook server Fix Spawner Status Spawn Notebook With Arguments image=minimal-notebook @@ -61,7 +61,7 @@ Open Browser And Start Notebook As Second User With Env Vars Launch Jupyter From RHODS Dashboard Link Login To Jupyterhub ${TEST_USER_2.USERNAME} ${TEST_USER_2.PASSWORD} ${TEST_USER_2.AUTH_TYPE} ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize Jupyterhub Service Account + IF ${authorization_required} Authorize JupyterLab Service Account Wait Until Page Contains Start a notebook server Fix Spawner Status &{first_pod_details} = Create Dictionary pod_ip=${pod_ip} pod_login=${pod_login_name} diff --git a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/plugin-verification.robot b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/plugin-verification.robot index dee77d01e..b5cea5fca 100644 --- a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/plugin-verification.robot +++ b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/plugin-verification.robot @@ -30,7 +30,7 @@ Test User Notebook Plugin in JupyterLab Login To RHODS Dashboard ${TEST_USER.USERNAME} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} Launch JupyterHub Spawner From Dashboard ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account Remove All Spawner Environment Variables Get the List of Plugins from RHODS notebook images Verify the Plugins for each JL images diff --git a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-jupyterlab-flask-notebook.robot b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-jupyterlab-flask-notebook.robot index 6b5af75f2..45f64f3c3 100644 --- a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-jupyterlab-flask-notebook.robot +++ b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-jupyterlab-flask-notebook.robot @@ -24,7 +24,7 @@ Can Login to Jupyterhub [Tags] Tier2 Login To Jupyterhub ${TEST_USER.USERNAME} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account #Wait Until Page Contains Element xpath://span[@id='jupyterhub-logo'] Wait Until Page Contains Start a notebook server diff --git a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-jupyterlab-git-notebook.robot b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-jupyterlab-git-notebook.robot index 3509bfb29..34b652bf8 100644 --- a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-jupyterlab-git-notebook.robot +++ b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-jupyterlab-git-notebook.robot @@ -24,7 +24,7 @@ Can Login to Jupyterhub [Tags] Tier1 Login To Jupyterhub ${TEST_USER.USERNAME} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account #Wait Until Page Contains Element xpath://span[@id='jupyterhub-logo'] Wait Until Page Contains Start a notebook server diff --git a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-jupyterlab-notebook.robot b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-jupyterlab-notebook.robot index eb075dde4..9e11e6e20 100644 --- a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-jupyterlab-notebook.robot +++ b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-jupyterlab-notebook.robot @@ -27,7 +27,7 @@ Can Login to Jupyterhub [Tags] Sanity Login To Jupyterhub ${TEST_USER.USERNAME} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account #Wait Until Page Contains Element xpath://span[@id='jupyterhub-logo'] Wait Until Page Contains Start a notebook server @@ -65,7 +65,7 @@ Verify A Default Image Is Provided And Starts Successfully Spawn Notebook Run Keyword And Warn On Failure Login To Openshift ${TEST_USER.USERNAME} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account Run Keyword And Continue On Failure Wait Until Page Contains Element xpath://div[@id="jp-top-panel"] timeout=60s Open New Notebook In Jupyterlab Menu Verify Notebook Name And Image Tag user_data=${user_data} diff --git a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-jupyterlab-time.robot b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-jupyterlab-time.robot index 4119f3ac4..a869969b1 100644 --- a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-jupyterlab-time.robot +++ b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-jupyterlab-time.robot @@ -74,7 +74,7 @@ Spawn and Stop Server Spawn Notebook Run Keyword And Warn On Failure Login To Openshift ${TEST_USER.USERNAME} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account # If this fails we waited for 60s. Avg. time will be thrown off, might be acceptable # given that we weren't able to spawn? Run Keyword And Continue On Failure Wait Until Page Contains Element xpath://div[@id="jp-top-panel"] timeout=60s diff --git a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-minimal-image.robot b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-minimal-image.robot index 44a9f9828..de15419eb 100644 --- a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-minimal-image.robot +++ b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-minimal-image.robot @@ -26,7 +26,7 @@ Can Launch Jupyterhub Can Login to Jupyterhub Login To Jupyterhub ${TEST_USER.USERNAME} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account #Wait Until Page Contains Element xpath://span[@id='jupyterhub-logo'] Wait Until Page Contains Start a notebook server diff --git a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-s3-cc-fraud.robot b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-s3-cc-fraud.robot index 7a293aa83..ff7f0b126 100644 --- a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-s3-cc-fraud.robot +++ b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test-s3-cc-fraud.robot @@ -24,7 +24,7 @@ Can Login to Jupyterhub [Tags] Sanity Login To Jupyterhub ${TEST_USER.USERNAME} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account #Wait Until Page Contains Element xpath://span[@id='jupyterhub-logo'] Wait Until Page Contains Start a notebook server diff --git a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test.robot b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test.robot index d4b81d47b..eac3d6db8 100644 --- a/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test.robot +++ b/ods_ci/tests/Tests/0500__ide/0501__ide_jupyterhub/test.robot @@ -36,7 +36,7 @@ Can Login To Jupyterhub ... ODS-936 Login To Jupyterhub ${TEST_USER.USERNAME} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account Wait Until Page Contains Start a notebook server Can Spawn Notebook @@ -75,7 +75,7 @@ Can Spawn Notebook IF ${oauth_prompt_visible} Click Button Log in with OpenShift Login To Openshift ${TEST_USER.USERNAME} ${TEST_USER.PASSWORD} ${TEST_USER.AUTH_TYPE} ${authorization_required} = Is Service Account Authorization Required - IF ${authorization_required} Authorize jupyterhub service account + IF ${authorization_required} Authorize JupyterLab Service Account Wait Until Page Contains Element xpath://div[@id="jp-top-panel"] timeout=60s Sleep 3 Maybe Close Popup