2018-09-19 18:57:15 +02:00
# Copyright Project Harbor Authors
2017-08-07 08:02:38 +02:00
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License
*** Settings ***
Documentation This resource provides any keywords related to the Harbor private registry appliance
Resource ../../resources/Util.robot
*** Variables ***
${HARBOR_VERSION} v1.1.1
*** Keywords ***
Go Into Project
2018-12-25 08:44:44 +01:00
[Arguments] ${project} ${has_image}=${true}
2019-02-22 07:11:56 +01:00
Retry Wait Element ${search_input}
2018-12-25 08:44:44 +01:00
Input Text ${search_input} ${project}
2019-02-22 07:11:56 +01:00
Retry Wait Until Page Contains ${project}
Retry Element Click xpath=//*[@id='project-results']//clr-dg-cell[contains(.,'${project}')]/a
2019-01-16 06:39:36 +01:00
#To prevent waiting for a fixed-period of time for page loading and failure caused by exception, we add loop to re-run <Wait Until Element Is Visible And Enabled> when
# exception was caught.
:For ${n} IN RANGE 1 5
\ ${out} Run Keyword If ${has_image}==${false} Run Keyword And Ignore Error Wait Until Element Is Visible And Enabled xpath=//clr-dg-placeholder[contains(.,\"We couldn\'t find any repositories!\")]
\ ... ELSE Run Keyword And Ignore Error Wait Until Element Is Visible And Enabled xpath=//clr-dg-cell[contains(.,'${project}/')]
\ Log To Console ${out[0]}
\ ${result} Set Variable If '${out[0]}'=='PASS' ${true} ${false}
\ Run Keyword If ${result} == ${true} Exit For Loop
\ Sleep 1
Should Be Equal ${result} ${true}
2017-08-07 08:02:38 +02:00
Add User To Project Admin
2017-09-07 12:29:05 +02:00
[Arguments] ${project} ${user}
2019-03-15 10:18:44 +01:00
# *** this keyword has not been used ***
2017-12-25 03:33:52 +01:00
Go Into Project
2019-03-15 10:18:44 +01:00
Retry Element Click xpath=${project_member_tag_xpath}
Retry Element Click xpath=${project_member_add_button_xpath}
Retry Text Input xpath=${project_member_add_username_xpath} ${user}
Retry Element Click xpath=${project_member_add_admin_xpath}
Retry Element Click xpath=${project_member_add_save_button_xpath}
2017-09-07 12:29:05 +02:00
Sleep 4
2019-02-22 07:11:56 +01:00
2017-08-07 08:02:38 +02:00
Search Project Member
2017-09-07 12:29:05 +02:00
[Arguments] ${project} ${user}
2019-03-15 10:18:44 +01:00
# *** this keyword has not been used ***
2017-09-07 12:29:05 +02:00
Go Into Project ${project}
2019-03-15 10:18:44 +01:00
Retry Element Click xpath=//clr-dg-cell//a[contains(.,'${project}')]
Retry Element Click xpath=${project_member_search_button_xpath}
Retry Element Click xpath=${project_member_search_text_xpath}
Retry Wait Until Page Contains ${user}
2019-02-22 07:11:56 +01:00
2017-08-07 08:02:38 +02:00
Change Project Member Role
2017-09-07 12:29:05 +02:00
[Arguments] ${project} ${user} ${role}
2019-03-15 10:18:44 +01:00
Retry Element Click xpath=//clr-dg-cell//a[contains(.,'${project}')]
Retry Element Click xpath=${project_member_tag_xpath}
2019-08-01 09:10:54 +02:00
Retry Element Click xpath=//project-detail//clr-dg-row[contains(.,'${user}')]//clr-checkbox-wrapper
2017-12-21 04:00:12 +01:00
#change role
2019-03-15 10:18:44 +01:00
Retry Element Click ${project_member_action_xpath}
Retry Element Click //button[contains(.,'${role}')]
Retry Wait Until Page Not Contains Element ${project_member_set_role_xpath}
#Precondition is that only 1 member is in the list.
Retry Wait Until Page Contains ${role}
2017-09-07 12:29:05 +02:00
User Can Change Role
[arguments] ${username}
2019-03-15 10:18:44 +01:00
Retry Element Click xpath=//clr-dg-row[contains(.,'${username}')]//input/../label
2019-09-05 09:13:13 +02:00
Retry Element Click xpath=//*[@id='member-action']
2017-12-21 04:00:12 +01:00
Page Should Not Contain Element xpath=//button[@disabled='' and contains(.,'Admin')]
2017-09-07 12:29:05 +02:00
User Can Not Change Role
[arguments] ${username}
2019-03-15 10:18:44 +01:00
Retry Element Click xpath=//clr-dg-row[contains(.,'${username}')]//input/../label
2019-09-05 09:13:13 +02:00
Retry Element Click xpath=//*[@id='member-action']
2017-12-21 04:00:12 +01:00
Page Should Contain Element xpath=//button[@disabled='' and contains(.,'Admin')]
2017-09-07 12:29:05 +02:00
2017-12-21 04:00:12 +01:00
#this keyworkd seems will not use any more, will delete in the future
2017-09-07 12:29:05 +02:00
Non-admin View Member Account
[arguments] ${times}
2017-12-21 04:00:12 +01:00
Xpath Should Match X Times //clr-dg-row-master ${times}
2017-09-07 12:29:05 +02:00
User Can Not Add Member
2018-08-08 04:40:35 +02:00
Page Should Contain Element xpath=//button[@disabled='' and contains(.,'User')]
2017-09-07 12:29:05 +02:00
Add Guest Member To Project
[arguments] ${member}
2019-02-22 07:11:56 +01:00
Retry Element Click xpath=${project_member_add_button_xpath}
Retry Text Input xpath=${project_member_add_username_xpath} ${member}
2017-09-07 12:29:05 +02:00
#select guest
Mouse Down xpath=${project_member_guest_radio_checkbox}
Mouse Up xpath=${project_member_guest_radio_checkbox}
2019-04-09 07:41:56 +02:00
Retry Double Keywords When Error Retry Element Click xpath=${project_member_add_confirmation_ok_xpath} Retry Wait Until Page Not Contains Element xpath=${project_member_add_confirmation_ok_xpath}
2017-09-07 12:29:05 +02:00
Delete Project Member
[arguments] ${member}
2019-03-15 10:18:44 +01:00
Retry Element Click xpath=//clr-dg-row[contains(.,'${member}')]//input/../label
Retry Element Click ${member_action_xpath}
Retry Element Click ${delete_action_xpath}
Retry Element Click ${repo_delete_on_card_view_btn}
Retry Wait Element xpath=${project_member_xpath}
2018-07-19 11:02:09 +02:00
Sleep 1
2017-09-07 12:29:05 +02:00
User Should Be Owner Of Project
[Arguments] ${user} ${pwd} ${project}
Sign In Harbor ${HARBOR_URL} ${user} ${pwd}
Go Into Project ${project}
Switch To Member
User Can Not Change Role ${user}
Push image ${ip} ${user} ${pwd} ${project} hello-world
Logout Harbor
User Should Not Be A Member Of Project
2019-05-23 09:43:59 +02:00
[Arguments] ${user} ${pwd} ${project} ${is_oidc_mode}=${false}
Run Keyword If ${is_oidc_mode} == ${false} Sign In Harbor ${HARBOR_URL} ${user} ${pwd}
... ELSE Sign In Harbor With OIDC User ${HARBOR_URL} username=${user}
2019-05-24 09:22:28 +02:00
${pwd_oidc}= Run Keyword And Return If ${is_oidc_mode} == ${true} Get Secrete By API ${HARBOR_URL}
${password}= Set Variable If ${is_oidc_mode} == ${true} ${pwd_oidc} ${pwd}
2017-09-07 12:29:05 +02:00
Project Should Not Display ${project}
Logout Harbor
2019-05-24 09:22:28 +02:00
Cannot Pull image ${ip} ${user} ${password} ${project} ${ip}/${project}/hello-world
Cannot Push image ${ip} ${user} ${password} ${project} hello-world
2017-09-07 12:29:05 +02:00
Manage Project Member
2019-05-23 09:43:59 +02:00
[Arguments] ${admin} ${pwd} ${project} ${user} ${op} ${has_image}=${true} ${is_oidc_mode}=${false}
Run Keyword If ${is_oidc_mode} == ${false} Sign In Harbor ${HARBOR_URL} ${admin} ${pwd}
... ELSE Sign In Harbor With OIDC User ${HARBOR_URL} username=${admin}
2018-12-25 08:44:44 +01:00
Go Into Project ${project} ${has_image}
2017-09-07 12:29:05 +02:00
Switch To Member
Run Keyword If '${op}' == 'Add' Add Guest Member To Project ${user}
... ELSE IF '${op}' == 'Remove' Delete Project Member ${user}
... ELSE Change Project Member Role ${project} ${user} ${role}
Logout Harbor
Change User Role In Project
2019-05-23 09:43:59 +02:00
[Arguments] ${admin} ${pwd} ${project} ${user} ${role} ${is_oidc_mode}=${false}
Run Keyword If ${is_oidc_mode} == ${false} Sign In Harbor ${HARBOR_URL} ${admin} ${pwd}
... ELSE Sign In Harbor With OIDC User ${HARBOR_URL} username=${admin}
2019-08-05 10:13:39 +02:00
Retry Wait Element Visible //clr-dg-cell//a[contains(.,'${project}')]
2017-09-07 12:29:05 +02:00
Change Project Member Role ${project} ${user} ${role}
Logout Harbor
User Should Be Guest
2019-05-23 09:43:59 +02:00
[Arguments] ${user} ${pwd} ${project} ${is_oidc_mode}=${false}
Run Keyword If ${is_oidc_mode} == ${false} Sign In Harbor ${HARBOR_URL} ${user} ${pwd}
... ELSE Sign In Harbor With OIDC User ${HARBOR_URL} username=${user}
2019-05-24 09:22:28 +02:00
${pwd_oidc}= Run Keyword And Return If ${is_oidc_mode} == ${true} Get Secrete By API ${HARBOR_URL}
${password}= Set Variable If ${is_oidc_mode} == ${true} ${pwd_oidc} ${pwd}
2017-09-07 12:29:05 +02:00
Project Should Display ${project}
Go Into Project ${project}
Switch To Member
User Can Not Add Member
2017-12-21 04:00:12 +01:00
Page Should Contain Element xpath=//clr-dg-row[contains(.,'${user}')]//clr-dg-cell[contains(.,'Guest')]
2017-09-07 12:29:05 +02:00
Logout Harbor
2019-05-24 09:22:28 +02:00
Pull image ${ip} ${user} ${password} ${project} hello-world
Cannot Push image ${ip} ${user} ${password} ${project} hello-world
2017-09-07 12:29:05 +02:00
User Should Be Developer
2019-05-23 09:43:59 +02:00
[Arguments] ${user} ${pwd} ${project} ${is_oidc_mode}=${false}
Run Keyword If ${is_oidc_mode} == ${false} Sign In Harbor ${HARBOR_URL} ${user} ${pwd}
... ELSE Sign In Harbor With OIDC User ${HARBOR_URL} username=${user}
2019-05-24 09:22:28 +02:00
${pwd_oidc}= Run Keyword And Return If ${is_oidc_mode} == ${true} Get Secrete By API ${HARBOR_URL}
${password}= Set Variable If ${is_oidc_mode} == ${true} ${pwd_oidc} ${pwd}
2017-09-07 12:29:05 +02:00
Project Should Display ${project}
Go Into Project ${project}
Switch To Member
User Can Not Add Member
2017-12-21 04:00:12 +01:00
Page Should Contain Element xpath=//clr-dg-row[contains(.,'${user}')]//clr-dg-cell[contains(.,'Developer')]
2017-09-07 12:29:05 +02:00
Logout Harbor
2019-05-24 09:22:28 +02:00
Push Image With Tag ${ip} ${user} ${password} ${project} hello-world v1
2017-09-07 12:29:05 +02:00
User Should Be Admin
2019-05-23 09:43:59 +02:00
[Arguments] ${user} ${pwd} ${project} ${guest} ${is_oidc_mode}=${false}
Run Keyword If ${is_oidc_mode} == ${false} Sign In Harbor ${HARBOR_URL} ${user} ${pwd}
... ELSE Sign In Harbor With OIDC User ${HARBOR_URL} username=${user}
2019-05-24 09:22:28 +02:00
${pwd_oidc}= Run Keyword And Return If ${is_oidc_mode} == ${true} Get Secrete By API ${HARBOR_URL}
${password}= Set Variable If ${is_oidc_mode} == ${true} ${pwd_oidc} ${pwd}
2017-09-07 12:29:05 +02:00
Project Should Display ${project}
Go Into Project ${project}
Switch To Member
Add Guest Member To Project ${guest}
User Can Change Role ${guest}
2017-12-21 04:00:12 +01:00
Page Should Contain Element xpath=//clr-dg-row[contains(.,'${user}')]//clr-dg-cell[contains(.,'Admin')]
2017-09-07 12:29:05 +02:00
Logout Harbor
2019-05-24 09:22:28 +02:00
Push Image With Tag ${ip} ${user} ${password} ${project} hello-world v2
2018-01-02 11:28:48 +01:00
2019-02-22 07:11:56 +01:00
User Should Be Master
2019-05-23 09:43:59 +02:00
[Arguments] ${user} ${pwd} ${project} ${is_oidc_mode}=${false}
Run Keyword If ${is_oidc_mode} == ${false} Sign In Harbor ${HARBOR_URL} ${user} ${pwd}
... ELSE Sign In Harbor With OIDC User ${HARBOR_URL} username=${user}
2019-05-24 09:22:28 +02:00
${pwd_oidc}= Run Keyword And Return If ${is_oidc_mode} == ${true} Get Secrete By API ${HARBOR_URL}
${password}= Set Variable If ${is_oidc_mode} == ${true} ${pwd_oidc} ${pwd}
2019-02-22 07:11:56 +01:00
Project Should Display ${project}
Go Into Project ${project}
Delete Repo ${project}
Switch To Member
Page Should Contain Element xpath=//clr-dg-row[contains(.,'${user}')]//clr-dg-cell[contains(.,'Master')]
Logout Harbor
2019-05-24 09:22:28 +02:00
Push Image With Tag ${ip} ${user} ${password} ${project} hello-world v3
2019-02-22 07:11:56 +01:00
2018-01-02 11:28:48 +01:00
Project Should Have Member
[Arguments] ${project} ${user}
Sign In Harbor ${HARBOR_URL} %{HARBOR_ADMIN} %{HARBOR_PASSWORD}
Go Into Project ${project}
Switch To Member
Page Should Contain Element xpath=//clr-dg-cell[contains(., '${user}')]
Logout Harbor