diff --git a/tests/resources/Cert-Util.robot b/tests/resources/Cert-Util.robot index d1eb8409a..3df5bd9fe 100644 --- a/tests/resources/Cert-Util.robot +++ b/tests/resources/Cert-Util.robot @@ -27,7 +27,7 @@ Generate Certificate Authority For Chrome ${rc} ${out}= Run And Return Rc And Output certutil -d sql:$HOME/.pki/nssdb -A -t TC -f password${rand}.ca -n "Harbor${rand}" -i ./harbor_ca.crt Log ${out} Should Be Equal As Integers ${rc} 0 - + Generate Certificate Authority # Generates CA (private/ca.key.pem, certs/ca.cert.pem, certs/STARK_ENTERPRISES_ROOT_CA.crt) in OUT_DIR [Arguments] ${CA_NAME}=STARK_ENTERPRISES_ROOT_CA ${OUT_DIR}=/root/ca diff --git a/tests/resources/Docker-Util.robot b/tests/resources/Docker-Util.robot index 5cf5d83c3..74142b000 100644 --- a/tests/resources/Docker-Util.robot +++ b/tests/resources/Docker-Util.robot @@ -107,8 +107,8 @@ Start Docker Daemon Locally Prepare Docker Cert [Arguments] ${ip} Wait Unitl Command Success mkdir -p /etc/docker/certs.d/${ip} - Wait Unitl Command Success cp harbor_ca.crt /etc/docker/certs.d/${ip} - + Wait Unitl Command Success cp harbor_ca.crt /etc/docker/certs.d/${ip} + Kill Local Docker Daemon [Arguments] ${handle} ${dockerd-pid} Terminate Process ${handle} diff --git a/tests/resources/Harbor-Pages/OIDC_Auth.robot b/tests/resources/Harbor-Pages/OIDC_Auth.robot new file mode 100644 index 000000000..f948e52f0 --- /dev/null +++ b/tests/resources/Harbor-Pages/OIDC_Auth.robot @@ -0,0 +1,39 @@ +# Copyright Project Harbor Authors +# +# 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 *** + +*** Keywords *** + +Sign In Harbor With OIDC User + [Arguments] ${url} ${username}=${OIDC_USERNAME} + ${head_username}= Set Variable xpath=//harbor-app/harbor-shell/clr-main-container/navigator/clr-header//clr-dropdown//button[contains(.,'${username}')] + Init Chrome Driver + Go To ${url} + Retry Element Click ${log_oidc_provider_btn} + Retry Text Input ${dex_login_btn} ${username}@example.com + Retry Text Input ${dex_pwd_btn} password + Retry Element Click ${submit_login_btn} + Retry Element Click ${grant_btn} + + #If input box for harbor user name is visible, it means it's the 1st time login of this user, + # but if this user has been logged into harbor successfully, this input box will not show up, + # so there is condition branch for this stituation. + ${isVisible}= Run Keyword And Return Status Element Should Be Visible ${oidc_username_input} + Run Keyword If '${isVisible}' == 'True' Run Keywords Retry Text Input ${oidc_username_input} ${username} AND Retry Element Click ${save_btn} + Retry Wait Element ${head_username} diff --git a/tests/resources/Harbor-Pages/OIDC_Auth_Elements.robot b/tests/resources/Harbor-Pages/OIDC_Auth_Elements.robot new file mode 100644 index 000000000..338c1aff4 --- /dev/null +++ b/tests/resources/Harbor-Pages/OIDC_Auth_Elements.robot @@ -0,0 +1,26 @@ +# Copyright Project Harbor Authors +# +# 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 + +*** Variables *** +${log_oidc_provider_btn} //*[@id='log_oidc'] +${dex_login_btn} //*[@id='login'] +${dex_pwd_btn} //*[@id='password'] +${submit_login_btn} //*[@id='submit-login'] +${grant_btn} xpath=/html/body/div[2]/div/div[2]/div[1]/form/button +${oidc_username_input} //*[@id='oidcUsername'] +${save_btn} //*[@id='saveButton'] +${OIDC_USERNAME} test1 \ No newline at end of file diff --git a/tests/resources/Nightly-Util.robot b/tests/resources/Nightly-Util.robot index 8f60e104a..132053eeb 100644 --- a/tests/resources/Nightly-Util.robot +++ b/tests/resources/Nightly-Util.robot @@ -31,7 +31,7 @@ CA Setup [Arguments] ${ip} ${HARBOR_PASSWORD} ${cert}=/ca/ca.crt Run mv ${cert} harbor_ca.crt Generate Certificate Authority For Chrome ${HARBOR_PASSWORD} - Prepare Docker Cert ${ip} + Prepare Docker Cert ${ip} Collect Nightly Logs [Arguments] ${ip} ${SSH_PWD} ${ip1}==${EMPTY} @@ -45,11 +45,13 @@ Collect Logs SSHLibrary.Get File /var/log/harbor/ui.log SSHLibrary.Get File /var/log/harbor/registry.log SSHLibrary.Get File /var/log/harbor/proxy.log - SSHLibrary.Get File /var/log/harbor/adminserver.log - SSHLibrary.Get File /var/log/harbor/clair.log - SSHLibrary.Get File /var/log/harbor/jobservice.log + SSHLibrary.Get File /var/log/harbor/adminserver.log + SSHLibrary.Get File /var/log/harbor/clair.log + SSHLibrary.Get File /var/log/harbor/jobservice.log SSHLibrary.Get File /var/log/harbor/postgresql.log SSHLibrary.Get File /var/log/harbor/notary-server.log SSHLibrary.Get File /var/log/harbor/notary-signer.log + SSHLibrary.Get File /var/log/harbor/chartmuseum.log + SSHLibrary.Get File /var/log/harbor/registryctl.log Run rename 's/^/${ip}/' *.log Close All Connections \ No newline at end of file diff --git a/tests/resources/TestCaseBody.robot b/tests/resources/TestCaseBody.robot index a8ff69761..83ad7c89a 100644 --- a/tests/resources/TestCaseBody.robot +++ b/tests/resources/TestCaseBody.robot @@ -109,4 +109,15 @@ Body Of Admin Push Signed Image ${rc} ${output}= Run And Return Rc And Output curl -u admin:Harbor12345 -s --insecure -H "Content-Type: application/json" -X GET "https://${ip}/api/repositories/library/tomcat/signatures" Log To Console ${output} Should Be Equal As Integers ${rc} 0 - Should Contain ${output} sha256 \ No newline at end of file + Should Contain ${output} sha256 + +Delete A Project Without Sign In Harbor + [Arguments] ${harbor_ip}=${ip} ${username}=${HARBOR_ADMIN} ${password}=${HARBOR_PASSWORD} + ${d}= Get Current Date result_format=%m%s + Create An New Project project${d} + Push Image ${harbor_ip} ${username} ${password} project${d} hello-world + Project Should Not Be Deleted project${d} + Go Into Project project${d} + Delete Repo project${d} + Navigate To Projects + Project Should Be Deleted project${d} \ No newline at end of file diff --git a/tests/resources/Util.robot b/tests/resources/Util.robot index 9abe570c5..745644b90 100644 --- a/tests/resources/Util.robot +++ b/tests/resources/Util.robot @@ -54,6 +54,8 @@ Resource Harbor-Pages/ToolKit.robot Resource Harbor-Pages/ToolKit_Elements.robot Resource Harbor-Pages/Vulnerability.robot Resource Harbor-Pages/LDAP-Mode.robot +Resource Harbor-Pages/OIDC_Auth.robot +Resource Harbor-Pages/OIDC_Auth_Elements.robot Resource Harbor-Pages/Verify.robot Resource Docker-Util.robot Resource Admiral-Util.robot @@ -196,4 +198,13 @@ Retry Double Keywords When Error \ Exit For Loop If '${out1[0]}'=='PASS' and '${out2[0]}'=='PASS' \ Sleep 2 Should Be Equal As Strings '${out1[0]}' 'PASS' - Should Be Equal As Strings '${out2[0]}' 'PASS' \ No newline at end of file + Should Be Equal As Strings '${out2[0]}' 'PASS' + +Run Curl And Return Json + [Arguments] ${curl_cmd} + ${json_data_file}= Set Variable ${CURDIR}${/}cur_user_info.json + ${rc} ${output}= Run And Return Rc And Output ${curl_cmd} + Should Be Equal As Integers 0 ${rc} + Create File ${json_data_file} ${output} + ${json}= Load Json From File ${json_data_file} + [Return] ${json} \ No newline at end of file diff --git a/tests/robot-cases/Group1-Nightly/Common.robot b/tests/robot-cases/Group1-Nightly/Common.robot index fa36e2dc3..86b559d5e 100644 --- a/tests/robot-cases/Group1-Nightly/Common.robot +++ b/tests/robot-cases/Group1-Nightly/Common.robot @@ -76,15 +76,8 @@ Test Case - Create An New Project Test Case - Delete A Project Init Chrome Driver - ${d}= Get Current Date result_format=%m%s Sign In Harbor ${HARBOR_URL} ${HARBOR_ADMIN} ${HARBOR_PASSWORD} - Create An New Project project${d} - Push Image ${ip} ${HARBOR_ADMIN} ${HARBOR_PASSWORD} project${d} hello-world - Project Should Not Be Deleted project${d} - Go Into Project project${d} - Delete Repo project${d} - Navigate To Projects - Project Should Be Deleted project${d} + Delete A Project Without Sign In Harbor Close Browser Test Case - Read Only Mode diff --git a/tests/robot-cases/Group1-Nightly/LDAP.robot b/tests/robot-cases/Group1-Nightly/LDAP.robot index 37dc3458f..c077fca48 100644 --- a/tests/robot-cases/Group1-Nightly/LDAP.robot +++ b/tests/robot-cases/Group1-Nightly/LDAP.robot @@ -39,7 +39,7 @@ Test Case - Ldap Sign in and out Sign In Harbor ${HARBOR_URL} mike zhu88jie Close Browser -Test Case - System Admin On-board New Member +Test Case - System Admin On-board New Member Init Chrome Driver ${d}= Get Current Date result_format=%m%s Sign In Harbor ${HARBOR_URL} ${HARBOR_ADMIN} ${HARBOR_PASSWORD} @@ -53,7 +53,7 @@ Test Case - System Admin On-board New Member Page Should Contain mike02 Close Browser -Test Case - LDAP User On-borad New Member +Test Case - LDAP User On-borad New Member Init Chrome Driver ${d}= Get Current Date result_format=%m%s Sign In Harbor ${HARBOR_URL} mike03 zhu88jie @@ -70,7 +70,7 @@ Test Case - Home Page Differences With DB Mode Sign In Harbor ${HARBOR_URL} ${HARBOR_ADMIN} ${HARBOR_PASSWORD} Logout Harbor Sleep 2 - Page Should Not Contain Sign up + Page Should Not Contain Sign up Page Should Not Contain Forgot password Close Browser @@ -101,7 +101,7 @@ Test Case - Ldap User Push An Image ${d}= Get Current Date result_format=%m%s Sign In Harbor ${HARBOR_URL} mike zhu88jie Create An New Project project${d} - + Push Image ${ip} mike zhu88jie project${d} hello-world:latest Go Into Project project${d} Wait Until Page Contains project${d}/hello-world diff --git a/tests/robot-cases/Group1-Nightly/OIDC.robot b/tests/robot-cases/Group1-Nightly/OIDC.robot new file mode 100644 index 000000000..882fcf5ba --- /dev/null +++ b/tests/robot-cases/Group1-Nightly/OIDC.robot @@ -0,0 +1,65 @@ +// Copyright Project Harbor Authors +// +// 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 Harbor BATs +Resource ../../resources/Util.robot +Default Tags Nightly + +*** Variables *** +${HARBOR_URL} https://${OIDC_HOSTNAME} +${HARBOR_ADMIN} admin + +*** Test Cases *** +Test Case - Get Harbor Version +#Just get harbor version and log it + Get Harbor Version + +Test Case - OIDC User Sign In + Sign In Harbor With OIDC User ${HARBOR_URL} + Sleep 2 + Sign In Harbor With OIDC User ${HARBOR_URL} test2 + Sleep 2 + Sign In Harbor With OIDC User ${HARBOR_URL} test3 + Sleep 2 + Sign In Harbor With OIDC User ${HARBOR_URL} test4 + Sleep 2 + Sign In Harbor With OIDC User ${HARBOR_URL} test5 + Sleep 2 + Sign In Harbor With OIDC User ${HARBOR_URL} test6 + Sleep 2 + Sign In Harbor With OIDC User ${HARBOR_URL} test7 + Sleep 2 + Sign In Harbor With OIDC User ${HARBOR_URL} test8 + Sleep 2 + Sign In Harbor With OIDC User ${HARBOR_URL} test9 + Sleep 2 + Close Browser + +Test Case - Create An New Project + Sign In Harbor With OIDC User ${HARBOR_URL} + ${d}= Get Current Date result_format=%M%S + Create An New Project test${d} + Close Browser + +Test Case - Delete A Project + Init Chrome Driver + Sign In Harbor With OIDC User ${HARBOR_URL} + ${json}= Run Curl And Return Json curl -s -k -X GET --header 'Accept: application/json' -u '${HARBOR_ADMIN}:${HARBOR_PASSWORD}' 'https://${ip}/api/users/search?username=${OIDC_USERNAME}' + ${user_info}= Set Variable ${json[0]} + ${user_id}= Set Variable ${user_info["user_id"]} + ${json}= Run Curl And Return Json curl -s -k -X GET --header 'Accept: application/json' -u '${HARBOR_ADMIN}:${HARBOR_PASSWORD}' 'https://${ip}/api/users/${user_id}' + ${secret}= Set Variable ${json["oidc_user_meta"]["secret"]} + Delete A Project Without Sign In Harbor harbor_ip=${OIDC_HOSTNAME} username=${OIDC_USERNAME} password=${secret} + Close Browser \ No newline at end of file diff --git a/tests/robot-cases/Group3-Upgrade/verify.robot b/tests/robot-cases/Group3-Upgrade/verify.robot index 797b9d903..1a4d21556 100644 --- a/tests/robot-cases/Group3-Upgrade/verify.robot +++ b/tests/robot-cases/Group3-Upgrade/verify.robot @@ -10,8 +10,8 @@ ${HARBOR_ADMIN} admin *** Test Cases *** Test Case - Upgrade Verify ${data}= Load Json From File ${CURDIR}${/}data.json - Run Keyword Verify User ${data} - Run Keyword Verify Project ${data} + Run Keyword Verify User ${data} + Run Keyword Verify Project ${data} Run Keyword Verify Member Exist ${data} Run Keyword Verify User System Admin Role ${data} Run Keyword Verify Endpoint ${data}