From 31d92bf0c507a704d9c8ac4eafebf5a62140e249 Mon Sep 17 00:00:00 2001 From: wangyan Date: Sun, 29 Oct 2017 23:55:03 -0700 Subject: [PATCH] Enable https support in CI testing Add harbor.ca with certutil into Chrome trust store, then can use Chrome headless to access harbor with https And also update Chrome to latest stable version 62 --- .drone.yml | 4 +- .drone.yml.sig | 2 +- tests/resources/Cert-Util.robot | 12 +- tests/resources/Docker-Util.robot | 14 +- tests/resources/Harbor-Util.robot | 184 +++++++----------- tests/resources/SeleniumUtil.robot | 20 +- tests/robot-cases/Group0-BAT/BAT.robot | 48 ++--- .../9-21-admin-push-signed-images.robot | 5 +- 8 files changed, 131 insertions(+), 158 deletions(-) diff --git a/.drone.yml b/.drone.yml index 38303f416..dc4796fae 100644 --- a/.drone.yml +++ b/.drone.yml @@ -11,7 +11,7 @@ pipeline: recursive: false integration-test-on-pr: - image: vmware/harbor-e2e-engine:1.37 + image: vmware/harbor-e2e-engine:1.38 pull: true privileged: true environment: @@ -35,7 +35,7 @@ pipeline: status: success bundle: - image: vmware/harbor-e2e-engine:1.37 + image: vmware/harbor-e2e-engine:1.38 pull: true privileged: true environment: diff --git a/.drone.yml.sig b/.drone.yml.sig index f0ca0dd60..63363d6f1 100644 --- a/.drone.yml.sig +++ b/.drone.yml.sig @@ -1 +1 @@ -eyJhbGciOiJIUzI1NiJ9.IyBIYXJib3IgZHJvbmUuCi0tLQp3b3Jrc3BhY2U6CiAgYmFzZTogL2Ryb25lCiAgcGF0aDogc3JjL2dpdGh1Yi5jb20vdm13YXJlL2hhcmJvcgoKcGlwZWxpbmU6CiAgY2xvbmU6CiAgICBpbWFnZTogcGx1Z2lucy9naXQKICAgIHRhZ3M6IHRydWUKICAgIHJlY3Vyc2l2ZTogZmFsc2UKCiAgaW50ZWdyYXRpb24tdGVzdC1vbi1wcjoKICAgIGltYWdlOiB2bXdhcmUvaGFyYm9yLWUyZS1lbmdpbmU6MS4zNwogICAgcHVsbDogdHJ1ZQogICAgcHJpdmlsZWdlZDogdHJ1ZQogICAgZW52aXJvbm1lbnQ6CiAgICAgIEJJTjogYmluCiAgICAgIEdPUEFUSDogL2Ryb25lCiAgICAgIFNIRUxMOiAvYmluL2Jhc2gKICAgICAgTE9HX1RFTVBfRElSOiBpbnN0YWxsLWxvZ3MKICAgICAgR0lUSFVCX0FVVE9NQVRJT05fQVBJX0tFWTogICR7R0lUSFVCX0FVVE9NQVRJT05fQVBJX0tFWX0KICAgICAgRFJPTkVfU0VSVkVSOiAgJHtEUk9ORV9TRVJWRVJ9CiAgICAgIERST05FX1RPS0VOOiAgJHtEUk9ORV9UT0tFTl9JTlRFfQogICAgICBIQVJCT1JfQURNSU46ICR7SEFSQk9SX0FETUlOfQogICAgICBIQVJCT1JfUEFTU1dPUkQ6ICR7SEFSQk9SX1BBU1NXT1JEfQogICAgICBHU19QUk9KRUNUX0lEOiAke0dTX1BST0pFQ1RfSUR9CiAgICAgIEdTX0NMSUVOVF9FTUFJTDogJHtHU19DTElFTlRfRU1BSUx9CiAgICAgIEdTX1BSSVZBVEVfS0VZOiAke0dTX1BSSVZBVEVfS0VZfQogICAgICBET01BSU46ICR7Q0lfRE9NQUlOfQogICAgICBNQUlMX1BXRDogJHtNQUlMX1BXRH0KICAgIGNvbW1hbmRzOgogICAgICAtIHRlc3RzL2ludGVncmF0aW9uLnNoCiAgICB3aGVuOgogICAgICBzdGF0dXM6IHN1Y2Nlc3MKCiAgYnVuZGxlOgogICAgaW1hZ2U6IHZtd2FyZS9oYXJib3ItZTJlLWVuZ2luZToxLjM3CiAgICBwdWxsOiB0cnVlCiAgICBwcml2aWxlZ2VkOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgQklOOiBiaW4KICAgICAgR09QQVRIOiAvZHJvbmUKICAgICAgU0hFTEw6IC9iaW4vYmFzaAogICAgICBCVUlMRF9OVU1CRVI6ICR7RFJPTkVfQlVJTERfTlVNQkVSfQogICAgY29tbWFuZHM6CiAgICAgIC0gZHUgLWtzIGhhcmJvci1vZmZsaW5lLWluc3RhbGxlci0qLnRneiB8IGF3ayAne3ByaW50ICQxIC8gMTAyNH0nIHwgeyByZWFkIHg7IGVjaG8gJHggTUI7IH0KICAgICAgLSBta2RpciAtcCBidW5kbGUKICAgICAgLSBjcCBoYXJib3Itb2ZmbGluZS1pbnN0YWxsZXItKi50Z3ogYnVuZGxlCiAgICAgIC0gbHMgLWxhIGJ1bmRsZQogICAgd2hlbjoKICAgICAgcmVwbzogdm13YXJlL2hhcmJvcgogICAgICBldmVudDogWyBwdXNoLCB0YWcgXQogICAgICBicmFuY2g6IFsgbWFzdGVyLCByZWxlYXNlLSosIHJlZnMvdGFncy8qIF0KICAgICAgc3RhdHVzOiBzdWNjZXNzCgogIG5vdGlmeS1zbGFjazoKICAgIGltYWdlOiBwbHVnaW5zL3NsYWNrCiAgICB3ZWJob29rOiAke1NMQUNLX1VSTH0KICAgIHVzZXJuYW1lOiBkcm9uZQogICAgdGVtcGxhdGU6ID4KICAgICAgYnVpbGQgaHR0cHM6Ly9jaS52Y25hLmlvL3Ztd2FyZS9oYXJib3Ive3sgYnVpbGQubnVtYmVyIH19IGZpbmlzaGVkIHdpdGggYSB7eyBidWlsZC5zdGF0dXMgfX0gc3RhdHVzLiBQbGVhc2UgZmluZCBsb2dzIGF0IGh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9oYXJib3ItY2ktbG9ncy9pbnRlZ3JhdGlvbl9sb2dzX3t7IGJ1aWxkLm51bWJlciB9fV97eyBidWlsZC5jb21taXQgfX0udGFyLmd6CiAgICB3aGVuOgogICAgICByZXBvOiB2bXdhcmUvaGFyYm9yCiAgICAgIGJyYW5jaDogWyBtYXN0ZXIsIHJlbGVhc2UtKiwgcmVmcy90YWdzLyogXQogICAgICBzdGF0dXM6IFsgZmFpbHVyZSwgc3VjY2VzcyBdCgogIHB1Ymxpc2gtZ2NzLWJ1aWxkczoKICAgIGltYWdlOiBtYXBsYWluL2Ryb25lLWdjczpsYXRlc3QKICAgIHB1bGw6IHRydWUKICAgIHNvdXJjZTogYnVuZGxlCiAgICB0YXJnZXQ6IGhhcmJvci1idWlsZHMKICAgIGFjbDoKICAgICAgLSBhbGxVc2VyczpSRUFERVIKICAgIGNhY2hlX2NvbnRyb2w6IHB1YmxpYyxtYXgtYWdlPTM2MDAKICAgIHdoZW46CiAgICAgIHJlcG86IHZtd2FyZS9oYXJib3IKICAgICAgZXZlbnQ6IFsgcHVzaCwgdGFnIF0KICAgICAgYnJhbmNoOiBbIG1hc3RlciwgcmVsZWFzZS0qIF0KICAgICAgc3RhdHVzOiBzdWNjZXNzCgogIHB1Ymxpc2gtZ2NzLXJlbGVhc2VzOgogICAgaW1hZ2U6IG1hcGxhaW4vZHJvbmUtZ2NzOmxhdGVzdAogICAgcHVsbDogdHJ1ZQogICAgc291cmNlOiBidW5kbGUKICAgIHRhcmdldDogaGFyYm9yLXJlbGVhc2VzCiAgICBhY2w6CiAgICAgIC0gYWxsVXNlcnM6UkVBREVSCiAgICBjYWNoZV9jb250cm9sOiBwdWJsaWMsbWF4LWFnZT0zNjAwCiAgICB3aGVuOgogICAgICByZXBvOiB2bXdhcmUvaGFyYm9yCiAgICAgIGV2ZW50OiBbIHB1c2gsIHRhZyBdCiAgICAgIGJyYW5jaDogWyByZWxlYXNlLSosIHJlZnMvdGFncy8qIF0KICAgICAgc3RhdHVzOiBzdWNjZXNzCgogIHRyaWdnZXI6CiAgICBpbWFnZTogcGx1Z2lucy9kb3duc3RyZWFtCiAgICBzZXJ2ZXI6IGh0dHBzOi8vY2kudmNuYS5pbwogICAgdG9rZW46ICR7RE9XTlNUUkVBTV9UT0tFTn0KICAgIGZvcms6IHRydWUKICAgIHJlcG9zaXRvcmllczoKICAgICAgIC0gdm13YXJlL3ZpYy1wcm9kdWN0CiAgICB3aGVuOgogICAgICByZXBvOiB2bXdhcmUvaGFyYm9yCiAgICAgIGV2ZW50OiBbIHB1c2gsIHRhZyBdCiAgICAgIGJyYW5jaDogWyBtYXN0ZXIsIHJlbGVhc2UtKiwgcmVmcy90YWdzLyogXQogICAgICBzdGF0dXM6IHN1Y2Nlc3MK.pc3_vwqOx7Nf2Yz9LnFrIzik0K6o0f5Dpv2Aludl3B8 \ No newline at end of file +eyJhbGciOiJIUzI1NiJ9.IyBIYXJib3IgZHJvbmUuCi0tLQp3b3Jrc3BhY2U6CiAgYmFzZTogL2Ryb25lCiAgcGF0aDogc3JjL2dpdGh1Yi5jb20vdm13YXJlL2hhcmJvcgoKcGlwZWxpbmU6CiAgY2xvbmU6CiAgICBpbWFnZTogcGx1Z2lucy9naXQKICAgIHRhZ3M6IHRydWUKICAgIHJlY3Vyc2l2ZTogZmFsc2UKCiAgaW50ZWdyYXRpb24tdGVzdC1vbi1wcjoKICAgIGltYWdlOiB2bXdhcmUvaGFyYm9yLWUyZS1lbmdpbmU6MS4zOAogICAgcHVsbDogdHJ1ZQogICAgcHJpdmlsZWdlZDogdHJ1ZQogICAgZW52aXJvbm1lbnQ6CiAgICAgIEJJTjogYmluCiAgICAgIEdPUEFUSDogL2Ryb25lCiAgICAgIFNIRUxMOiAvYmluL2Jhc2gKICAgICAgTE9HX1RFTVBfRElSOiBpbnN0YWxsLWxvZ3MKICAgICAgR0lUSFVCX0FVVE9NQVRJT05fQVBJX0tFWTogICR7R0lUSFVCX0FVVE9NQVRJT05fQVBJX0tFWX0KICAgICAgRFJPTkVfU0VSVkVSOiAgJHtEUk9ORV9TRVJWRVJ9CiAgICAgIERST05FX1RPS0VOOiAgJHtEUk9ORV9UT0tFTl9JTlRFfQogICAgICBIQVJCT1JfQURNSU46ICR7SEFSQk9SX0FETUlOfQogICAgICBIQVJCT1JfUEFTU1dPUkQ6ICR7SEFSQk9SX1BBU1NXT1JEfQogICAgICBHU19QUk9KRUNUX0lEOiAke0dTX1BST0pFQ1RfSUR9CiAgICAgIEdTX0NMSUVOVF9FTUFJTDogJHtHU19DTElFTlRfRU1BSUx9CiAgICAgIEdTX1BSSVZBVEVfS0VZOiAke0dTX1BSSVZBVEVfS0VZfQogICAgICBET01BSU46ICR7Q0lfRE9NQUlOfQogICAgICBNQUlMX1BXRDogJHtNQUlMX1BXRH0KICAgIGNvbW1hbmRzOgogICAgICAtIHRlc3RzL2ludGVncmF0aW9uLnNoCiAgICB3aGVuOgogICAgICBzdGF0dXM6IHN1Y2Nlc3MKCiAgYnVuZGxlOgogICAgaW1hZ2U6IHZtd2FyZS9oYXJib3ItZTJlLWVuZ2luZToxLjM4CiAgICBwdWxsOiB0cnVlCiAgICBwcml2aWxlZ2VkOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgQklOOiBiaW4KICAgICAgR09QQVRIOiAvZHJvbmUKICAgICAgU0hFTEw6IC9iaW4vYmFzaAogICAgICBCVUlMRF9OVU1CRVI6ICR7RFJPTkVfQlVJTERfTlVNQkVSfQogICAgY29tbWFuZHM6CiAgICAgIC0gZHUgLWtzIGhhcmJvci1vZmZsaW5lLWluc3RhbGxlci0qLnRneiB8IGF3ayAne3ByaW50ICQxIC8gMTAyNH0nIHwgeyByZWFkIHg7IGVjaG8gJHggTUI7IH0KICAgICAgLSBta2RpciAtcCBidW5kbGUKICAgICAgLSBjcCBoYXJib3Itb2ZmbGluZS1pbnN0YWxsZXItKi50Z3ogYnVuZGxlCiAgICAgIC0gbHMgLWxhIGJ1bmRsZQogICAgd2hlbjoKICAgICAgcmVwbzogdm13YXJlL2hhcmJvcgogICAgICBldmVudDogWyBwdXNoLCB0YWcgXQogICAgICBicmFuY2g6IFsgbWFzdGVyLCByZWxlYXNlLSosIHJlZnMvdGFncy8qIF0KICAgICAgc3RhdHVzOiBzdWNjZXNzCgogIG5vdGlmeS1zbGFjazoKICAgIGltYWdlOiBwbHVnaW5zL3NsYWNrCiAgICB3ZWJob29rOiAke1NMQUNLX1VSTH0KICAgIHVzZXJuYW1lOiBkcm9uZQogICAgdGVtcGxhdGU6ID4KICAgICAgYnVpbGQgaHR0cHM6Ly9jaS52Y25hLmlvL3Ztd2FyZS9oYXJib3Ive3sgYnVpbGQubnVtYmVyIH19IGZpbmlzaGVkIHdpdGggYSB7eyBidWlsZC5zdGF0dXMgfX0gc3RhdHVzLiBQbGVhc2UgZmluZCBsb2dzIGF0IGh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9oYXJib3ItY2ktbG9ncy9pbnRlZ3JhdGlvbl9sb2dzX3t7IGJ1aWxkLm51bWJlciB9fV97eyBidWlsZC5jb21taXQgfX0udGFyLmd6CiAgICB3aGVuOgogICAgICByZXBvOiB2bXdhcmUvaGFyYm9yCiAgICAgIGJyYW5jaDogWyBtYXN0ZXIsIHJlbGVhc2UtKiwgcmVmcy90YWdzLyogXQogICAgICBzdGF0dXM6IFsgZmFpbHVyZSwgc3VjY2VzcyBdCgogIHB1Ymxpc2gtZ2NzLWJ1aWxkczoKICAgIGltYWdlOiBtYXBsYWluL2Ryb25lLWdjczpsYXRlc3QKICAgIHB1bGw6IHRydWUKICAgIHNvdXJjZTogYnVuZGxlCiAgICB0YXJnZXQ6IGhhcmJvci1idWlsZHMKICAgIGFjbDoKICAgICAgLSBhbGxVc2VyczpSRUFERVIKICAgIGNhY2hlX2NvbnRyb2w6IHB1YmxpYyxtYXgtYWdlPTM2MDAKICAgIHdoZW46CiAgICAgIHJlcG86IHZtd2FyZS9oYXJib3IKICAgICAgZXZlbnQ6IFsgcHVzaCwgdGFnIF0KICAgICAgYnJhbmNoOiBbIG1hc3RlciwgcmVsZWFzZS0qIF0KICAgICAgc3RhdHVzOiBzdWNjZXNzCgogIHB1Ymxpc2gtZ2NzLXJlbGVhc2VzOgogICAgaW1hZ2U6IG1hcGxhaW4vZHJvbmUtZ2NzOmxhdGVzdAogICAgcHVsbDogdHJ1ZQogICAgc291cmNlOiBidW5kbGUKICAgIHRhcmdldDogaGFyYm9yLXJlbGVhc2VzCiAgICBhY2w6CiAgICAgIC0gYWxsVXNlcnM6UkVBREVSCiAgICBjYWNoZV9jb250cm9sOiBwdWJsaWMsbWF4LWFnZT0zNjAwCiAgICB3aGVuOgogICAgICByZXBvOiB2bXdhcmUvaGFyYm9yCiAgICAgIGV2ZW50OiBbIHB1c2gsIHRhZyBdCiAgICAgIGJyYW5jaDogWyByZWxlYXNlLSosIHJlZnMvdGFncy8qIF0KICAgICAgc3RhdHVzOiBzdWNjZXNzCgogIHRyaWdnZXI6CiAgICBpbWFnZTogcGx1Z2lucy9kb3duc3RyZWFtCiAgICBzZXJ2ZXI6IGh0dHBzOi8vY2kudmNuYS5pbwogICAgdG9rZW46ICR7RE9XTlNUUkVBTV9UT0tFTn0KICAgIGZvcms6IHRydWUKICAgIHJlcG9zaXRvcmllczoKICAgICAgIC0gdm13YXJlL3ZpYy1wcm9kdWN0CiAgICB3aGVuOgogICAgICByZXBvOiB2bXdhcmUvaGFyYm9yCiAgICAgIGV2ZW50OiBbIHB1c2gsIHRhZyBdCiAgICAgIGJyYW5jaDogWyBtYXN0ZXIsIHJlbGVhc2UtKiwgcmVmcy90YWdzLyogXQogICAgICBzdGF0dXM6IHN1Y2Nlc3MK.zJ8m0va6puda1z8zxRk0rDeqPYZxfv7E8TRVI3d_1Sg \ No newline at end of file diff --git a/tests/resources/Cert-Util.robot b/tests/resources/Cert-Util.robot index 50c96f2c1..001f3e9ad 100644 --- a/tests/resources/Cert-Util.robot +++ b/tests/resources/Cert-Util.robot @@ -16,6 +16,17 @@ Documentation This resource contains keywords related to creating and using certificates. Requires scripts in infra/integration-image/scripts be available in PATH *** Keywords *** +Generate Certificate Authority For Chrome + # add the ca to chrome trust list to enable https testing. + [Arguments] ${password}=%{HARBOR_PASSWORD} + Log To Console Generate Certificate Authority For Chrome + ${rc} ${out}= Run And Return Rc And Output echo ${password} > password.ca + Log ${out} + Should Be Equal As Integers ${rc} 0 + ${rc} ${out}= Run And Return Rc And Output certutil -d sql:$HOME/.pki/nssdb -A -t TC -f password.ca -n "Harbor" -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 @@ -24,7 +35,6 @@ Generate Certificate Authority Log ${out} Should Be Equal As Integers ${rc} 0 - Generate Wildcard Server Certificate # Generates key and signs with CA for *.DOMAIN (csr/*.DOMAIN.csr.pem, # private/*.DOMAIN.key.pem, certs/*.DOMAIN.cert.pem) in OUT_DIR diff --git a/tests/resources/Docker-Util.robot b/tests/resources/Docker-Util.robot index 16ca3eb51..c3770f3c0 100644 --- a/tests/resources/Docker-Util.robot +++ b/tests/resources/Docker-Util.robot @@ -40,11 +40,11 @@ Push image Log To Console \nRunning docker push ${image}... ${rc}= Run And Return Rc docker pull ${image} ${rc} ${output}= Run And Return Rc And Output docker login -u ${user} -p ${pwd} ${ip} - Log To Console ${output} + Log ${output} Should Be Equal As Integers ${rc} 0 ${rc}= Run And Return Rc docker tag ${image} ${ip}/${project}/${image} ${rc} ${output}= Run And Return Rc And Output docker push ${ip}/${project}/${image} - Log To Console ${output} + Log ${output} Should Be Equal As Integers ${rc} 0 ${rc}= Run And Return Rc docker logout ${ip} @@ -53,11 +53,11 @@ Push Image With Tag Log To Console \nRunning docker push ${image}... ${rc}= Run And Return Rc docker pull ${image} ${rc} ${output}= Run And Return Rc And Output docker login -u ${user} -p ${pwd} ${ip} - Log To Console ${output} + Log ${output} Should Be Equal As Integers ${rc} 0 ${rc}= Run And Return Rc docker tag ${image} ${tag} ${rc} ${output}= Run And Return Rc And Output docker push ${tag} - Log To Console ${output} + Log ${output} Should Be Equal As Integers ${rc} 0 ${rc}= Run And Return Rc docker logout ${ip} @@ -66,7 +66,7 @@ Cannot Pull image ${rc} ${output}= Run And Return Rc And Output docker login -u ${user} -p ${pwd} ${ip} Should Be Equal As Integers ${rc} 0 ${rc} ${output}= Run And Return Rc And Output docker pull ${ip}/${project}/${image} - Log To Console ${output} + Log ${output} Should Not Be Equal As Integers ${rc} 0 Cannot Push image @@ -74,11 +74,11 @@ Cannot Push image Log To Console \nRunning docker push ${image}... ${rc}= Run And Return Rc docker pull ${image} ${rc} ${output}= Run And Return Rc And Output docker login -u ${user} -p ${pwd} ${ip} - Log To Console ${output} + Log ${output} Should Be Equal As Integers ${rc} 0 ${rc}= Run And Return Rc docker tag ${image} ${ip}/${project}/${image} ${rc} ${output}= Run And Return Rc And Output docker push ${ip}/${project}/${image} - Log To Console ${output} + Log ${output} Should Not Be Equal As Integers ${rc} 0 ${rc}= Run And Return Rc docker logout ${ip} diff --git a/tests/resources/Harbor-Util.robot b/tests/resources/Harbor-Util.robot index 95775bd0c..4a6424ee7 100644 --- a/tests/resources/Harbor-Util.robot +++ b/tests/resources/Harbor-Util.robot @@ -24,81 +24,53 @@ ${CLAIR_BUILDER} 1.2.7 *** Keywords *** Install Harbor to Test Server - Log To Console \nStart Docker Daemon - Start Docker Daemon Locally - Sleep 5s - ${rc} ${output}= Run And Return Rc And Output docker ps - Should Be Equal As Integers ${rc} 0 - Log To Console \n${output} - Log To Console \nconfig harbor cfg - Run Keywords Config Harbor cfg - Run Keywords Prepare Cert - Log To Console \ncomplile and up harbor now - Run Keywords Compile and Up Harbor With Source Code + Log To Console \nStart Docker Daemon + Start Docker Daemon Locally + Sleep 5s ${rc} ${output}= Run And Return Rc And Output docker ps Should Be Equal As Integers ${rc} 0 Log To Console \n${output} - -Install Harbor With Notary to Test Server - Log To Console \nStart Docker Daemon - Start Docker Daemon Locally - Sleep 5s - ${rc} ${output}= Run And Return Rc And Output docker ps - Should Be Equal As Integers ${rc} 0 - Log To Console \n${output} Log To Console \nconfig harbor cfg Config Harbor cfg http_proxy=https - ${rc} ${ip}= Run And Return Rc And Output ip addr s eth0 |grep "inet "|awk '{print $2}' |awk -F "/" '{print $1}' - Log ${ip} - ${rc}= Run And Return Rc sed "s/^IP=.*/IP=${ip}/g" -i ./tests/generateCerts.sh - Log ${rc} - ${rc} ${output}= Run And Return Rc And Output ./tests/generateCerts.sh - Should Be Equal As Integers ${rc} 0 - ${rc}= Run And Return Rc mkdir -p /etc/docker/certs.d/${ip}/ - Should Be Equal As Integers ${rc} 0 - ${rc}= Run And Return Rc mkdir -p ~/.docker/tls/${ip}:4443/ - Should Be Equal As Integers ${rc} 0 - ${rc} ${output}= Run And Return Rc And Output cp ./harbor_ca.crt /etc/docker/certs.d/${ip}/ - Log To Console ${output} - Should Be Equal As Integers ${rc} 0 - ${rc} ${output}= Run And Return Rc And Output cp ./harbor_ca.crt ~/.docker/tls/${ip}:4443/ - Log To Console ${output} - Should Be Equal As Integers ${rc} 0 + Prepare Cert Log To Console \ncomplile and up harbor now - Compile and Up Harbor With Source Code with_notary=true + Compile and Up Harbor With Source Code ${rc} ${output}= Run And Return Rc And Output docker ps Should Be Equal As Integers ${rc} 0 Log To Console \n${output} + Generate Certificate Authority For Chrome Up Harbor - [Arguments] ${with_notary}=true ${with_clair}=true - ${rc} ${output}= Run And Return Rc And Output make start -e NOTARYFLAG=${with_notary} CLAIRFLAG=${with_clair} - Log To Console ${rc} - Should Be Equal As Integers ${rc} 0 + [Arguments] ${with_notary}=true ${with_clair}=true + ${rc} ${output}= Run And Return Rc And Output make start -e NOTARYFLAG=${with_notary} CLAIRFLAG=${with_clair} + Log ${rc} + Log ${output} + Should Be Equal As Integers ${rc} 0 Down Harbor - [Arguments] ${with_notary}=true ${with_clair}=true - ${rc} ${output}= Run And Return Rc And Output echo "Y" | make down -e NOTARYFLAG=${with_notary} CLAIRFLAG=${with_clair} - Log To Console ${rc} - Should Be Equal As Integers ${rc} 0 + [Arguments] ${with_notary}=true ${with_clair}=true + ${rc} ${output}= Run And Return Rc And Output echo "Y" | make down -e NOTARYFLAG=${with_notary} CLAIRFLAG=${with_clair} + Log ${rc} + Should Be Equal As Integers ${rc} 0 Package Harbor Offline - [Arguments] ${golang_image}=golang:1.7.3 ${clarity_image}=vmware/harbor-clarity-ui-builder:${CLAIR_BUILDER} ${with_notary}=true ${with_clair}=true ${with_migrator}=true - Log To Console \nStart Docker Daemon - Start Docker Daemon Locally - ${rc} ${output}= Run And Return Rc And Output make package_offline DEVFLAG=false GOBUILDIMAGE=${golang_image} COMPILETAG=compile_golangimage CLARITYIMAGE=${clarity_image} NOTARYFLAG=${with_notary} CLAIRFLAG=${with_clair} MIGRATORFLAG=${with_migrator} HTTPPROXY= - Log To Console ${rc} - Log ${output} - Should Be Equal As Integers ${rc} 0 + [Arguments] ${golang_image}=golang:1.7.3 ${clarity_image}=vmware/harbor-clarity-ui-builder:${CLAIR_BUILDER} ${with_notary}=true ${with_clair}=true ${with_migrator}=true + Log To Console \nStart Docker Daemon + Start Docker Daemon Locally + ${rc} ${output}= Run And Return Rc And Output make package_offline DEVFLAG=false GOBUILDIMAGE=${golang_image} COMPILETAG=compile_golangimage CLARITYIMAGE=${clarity_image} NOTARYFLAG=${with_notary} CLAIRFLAG=${with_clair} MIGRATORFLAG=${with_migrator} HTTPPROXY= + Log ${rc} + Log ${output} + Should Be Equal As Integers ${rc} 0 Switch To LDAP - Down Harbor with_notary=false - ${rc} ${output}= Run And Return Rc And Output rm -rf /data - Log To Console ${rc} - Should Be Equal As Integers ${rc} 0 - Config Harbor cfg auth=ldap_auth - Prepare with_notary=false - Up Harbor with_notary=false + Down Harbor + ${rc} ${output}= Run And Return Rc And Output rm -rf /data + Log ${rc} + Should Be Equal As Integers ${rc} 0 + Prepare Cert + Config Harbor cfg auth=ldap_auth http_proxy=https + Prepare + Up Harbor ${rc}= Run And Return Rc docker pull vmware/harbor-ldap-test:1.1.1 Log ${rc} Should Be Equal As Integers ${rc} 0 @@ -106,81 +78,73 @@ Switch To LDAP Log ${rc} Should Be Equal As Integers ${rc} 0 ${rc} ${output}= Run And Return Rc And Output docker ps + Log ${output} Should Be Equal As Integers ${rc} 0 - -Switch To Notary - Down Harbor with_notary=false - ${rc} ${output}= Run And Return Rc And Output rm -rf /data - Log To Console ${rc} - ${rc} ${output}= Run And Return Rc And Output rm -rf ~/.docker/ - Log To Console ${rc} - Should Be Equal As Integers ${rc} 0 - Config Harbor cfg http_proxy=https - ${rc} ${ip}= Run And Return Rc And Output ip addr s eth0 |grep "inet "|awk '{print $2}' |awk -F "/" '{print $1}' - Log ${ip} - ${rc}= Run And Return Rc sed "s/^IP=.*/IP=${ip}/g" -i ./tests/generateCerts.sh + Generate Certificate Authority For Chrome + +Enabe Notary Client + ${rc} ${output}= Run And Return Rc And Output rm -rf ~/.docker/ Log ${rc} - ${rc} ${output}= Run And Return Rc And Output ./tests/generateCerts.sh - Should Be Equal As Integers ${rc} 0 - ${rc}= Run And Return Rc mkdir -p /etc/docker/certs.d/${ip}/ - Should Be Equal As Integers ${rc} 0 - ${rc}= Run And Return Rc mkdir -p ~/.docker/tls/${ip}:4443/ - Should Be Equal As Integers ${rc} 0 - ${rc} ${output}= Run And Return Rc And Output cp ./harbor_ca.crt /etc/docker/certs.d/${ip}/ - Log To Console ${output} - Should Be Equal As Integers ${rc} 0 - ${rc} ${output}= Run And Return Rc And Output cp ./harbor_ca.crt ~/.docker/tls/${ip}:4443/ - Log To Console ${output} - Should Be Equal As Integers ${rc} 0 - ${rc} ${output}= Run And Return Rc And Output ls -la /etc/docker/certs.d/${ip}/ - Log To Console ${output} - ${rc} ${output}= Run And Return Rc And Output ls -la ~/.docker/tls/${ip}:4443/ - Log To Console ${output} - Prepare - Sleep 3s - Up Harbor - Sleep 30s - ${rc} ${output}= Run And Return Rc And Output docker ps Should Be Equal As Integers ${rc} 0 - Log To Console \n${output} + Log ${ip} + ${rc}= Run And Return Rc mkdir -p /etc/docker/certs.d/${ip}/ + Should Be Equal As Integers ${rc} 0 + ${rc}= Run And Return Rc mkdir -p ~/.docker/tls/${ip}:4443/ + Should Be Equal As Integers ${rc} 0 + ${rc} ${output}= Run And Return Rc And Output cp ./harbor_ca.crt /etc/docker/certs.d/${ip}/ + Log ${output} + Should Be Equal As Integers ${rc} 0 + ${rc} ${output}= Run And Return Rc And Output cp ./harbor_ca.crt ~/.docker/tls/${ip}:4443/ + Log ${output} + Should Be Equal As Integers ${rc} 0 + ${rc} ${output}= Run And Return Rc And Output ls -la /etc/docker/certs.d/${ip}/ + Log ${output} + ${rc} ${output}= Run And Return Rc And Output ls -la ~/.docker/tls/${ip}:4443/ + Log ${output} Prepare - [Arguments] ${with_notary}=true ${with_clair}=true - ${rc} ${output}= Run And Return Rc And Output make prepare -e NOTARYFLAG=${with_notary} CLAIRFLAG=${with_clair} - Log To Console ${rc} - Log To Console ${output} - Should Be Equal As Integers ${rc} 0 + [Arguments] ${with_notary}=true ${with_clair}=true + ${rc} ${output}= Run And Return Rc And Output make prepare -e NOTARYFLAG=${with_notary} CLAIRFLAG=${with_clair} + Log ${rc} + Log ${output} + Should Be Equal As Integers ${rc} 0 Config Harbor cfg # Will change the IP and Protocol in the harbor.cfg [Arguments] ${http_proxy}=http ${auth}=db_auth ${rc} ${output}= Run And Return Rc And Output ip addr s eth0 |grep "inet "|awk '{print $2}' |awk -F "/" '{print $1}' - Log ${output} - ${rc}= Run And Return Rc sed "s/reg.mydomain.com/${output}/" -i ./make/harbor.cfg + ${rc}= Run And Return Rc sed "s/^hostname = .*/hostname = ${output}/g" -i ./make/harbor.cfg Log ${rc} Should Be Equal As Integers ${rc} 0 ${rc}= Run And Return Rc sed "s/^ui_url_protocol = .*/ui_url_protocol = ${http_proxy}/g" -i ./make/harbor.cfg Log ${rc} Should Be Equal As Integers ${rc} 0 - ${rc}= Run And Return Rc sed "s/^auth_mode = .*/auth_mode = ${auth}/g" -i ./make/harbor.cfg + ${rc}= Run And Return Rc sed "s/^auth_mode = .*/auth_mode = ${auth}/g" -i ./make/harbor.cfg Log ${rc} Should Be Equal As Integers ${rc} 0 + ${out}= Run cat ./make/harbor.cfg + Log ${out} Prepare Cert # Will change the IP and Protocol in the harbor.cfg - ${rc}= Run And Return Rc ./tests/generateCerts.sh - Log ${rc} - Should Be Equal As Integers ${rc} 0 + ${rc} ${ip}= Run And Return Rc And Output ip addr s eth0 |grep "inet "|awk '{print $2}' |awk -F "/" '{print $1}' + Log ${ip} + ${rc}= Run And Return Rc sed "s/^IP=.*/IP=${ip}/g" -i ./tests/generateCerts.sh + Log ${rc} + ${out}= Run cat ./tests/generateCerts.sh + Log ${out} + ${rc} ${output}= Run And Return Rc And Output ./tests/generateCerts.sh + Should Be Equal As Integers ${rc} 0 Compile and Up Harbor With Source Code - [Arguments] ${golang_image}=golang:1.7.3 ${clarity_image}=vmware/harbor-clarity-ui-builder:${CLAIR_BUILDER} ${with_notary}=false ${with_clair}=true - ${rc} ${output}= Run And Return Rc And Output docker pull ${clarity_image} + [Arguments] ${golang_image}=golang:1.7.3 ${clarity_image}=vmware/harbor-clarity-ui-builder:${CLAIR_BUILDER} ${with_notary}=true ${with_clair}=true + ${rc} ${output}= Run And Return Rc And Output docker pull ${clarity_image} Log ${output} - Should Be Equal As Integers ${rc} 0 - ${rc} ${output}= Run And Return Rc And Output docker pull ${golang_image} + Should Be Equal As Integers ${rc} 0 + ${rc} ${output}= Run And Return Rc And Output docker pull ${golang_image} Log ${output} - Should Be Equal As Integers ${rc} 0 + Should Be Equal As Integers ${rc} 0 ${rc} ${output}= Run And Return Rc And Output make install GOBUILDIMAGE=${golang_image} COMPILETAG=compile_golangimage CLARITYIMAGE=${clarity_image} NOTARYFLAG=${with_notary} CLAIRFLAG=${with_clair} HTTPPROXY= - Log ${output} - Should Be Equal As Integers ${rc} 0 + Log ${output} + Should Be Equal As Integers ${rc} 0 Sleep 20 diff --git a/tests/resources/SeleniumUtil.robot b/tests/resources/SeleniumUtil.robot index aa567217b..b65703e0f 100644 --- a/tests/resources/SeleniumUtil.robot +++ b/tests/resources/SeleniumUtil.robot @@ -26,15 +26,13 @@ Start Selenium Standalone Server Locally Init Chrome Driver Run pkill chromedriver - Run pkill chrome - ${chrome options}= Evaluate sys.modules['selenium.webdriver'].ChromeOptions() sys - Call Method ${chrome options} add_argument --headless - Call Method ${chrome options} add_argument --disable-gpu + Run pkill chrome + ${chrome options}= Evaluate sys.modules['selenium.webdriver'].ChromeOptions() sys + Call Method ${chrome options} add_argument --headless + Call Method ${chrome options} add_argument --disable-gpu Call Method ${chrome options} add_argument --start-maximized - Call Method ${chrome options} add_argument --ignore-certificate-errors - Call Method ${chrome options} add_argument --disable-web-security - Call Method ${chrome options} add_argument --allow-running-insecure-content - Call Method ${chrome options} add_argument --window-size\=1600,900 - ${chrome options.binary_location} Set Variable /usr/bin/google-chrome - Create Webdriver Chrome Chrome_headless chrome_options=${chrome options} - Sleep 5 \ No newline at end of file + Call Method ${chrome options} add_argument --no-sandbox + Call Method ${chrome options} add_argument --window-size\=1600,900 + ${chrome options.binary_location} Set Variable /usr/bin/google-chrome + Create Webdriver Chrome Chrome_headless chrome_options=${chrome options} + Sleep 5 diff --git a/tests/robot-cases/Group0-BAT/BAT.robot b/tests/robot-cases/Group0-BAT/BAT.robot index fa2affb7d..63530f2f9 100644 --- a/tests/robot-cases/Group0-BAT/BAT.robot +++ b/tests/robot-cases/Group0-BAT/BAT.robot @@ -19,7 +19,7 @@ Suite Setup Install Harbor to Test Server Default Tags BAT *** Variables *** -${HARBOR_URL} http://localhost +${HARBOR_URL} https://${ip} *** Test Cases *** Test Case - Create An New User @@ -84,7 +84,7 @@ Test Case - User View Logs Init Chrome Driver ${d}= Get Current Date result_format=%m%s - Create An New Project With New User url=${HARBOR_URL} username=tester${d} email=tester${d}@vmware.com realname=tester${d} newPassword=Test1@34 comment=harbor projectname=project${d} public=true + Create An New Project With New User url=${HARBOR_URL} username=tester${d} email=tester${d}@vmware.com realname=tester${d} newPassword=Test1@34 comment=harbor projectname=project${d} public=true Push image ${ip} tester${d} Test1@34 project${d} busybox:latest Pull image ${ip} tester${d} Test1@34 project${d} busybox:latest @@ -227,7 +227,7 @@ Test Case - Scan A Tag Summary Chart Should Display latest Close Browser -Test Case-Manage Project Member +Test Case - Manage Project Member Init Chrome Driver ${d}= Get current Date result_format=%m%s @@ -278,6 +278,26 @@ Test Case - Assign Sys Admin Administration Tag Should Display Close Browser +Test Case - Admin Push Signed Image + Enabe Notary Client + + ${rc} ${output}= Run And Return Rc And Output docker pull hello-world:latest + Log ${output} + + Push image ${ip} %{HARBOR_ADMIN} %{HARBOR_PASSWORD} library hello-world:latest + ${rc} ${output}= Run And Return Rc And Output ./tests/robot-cases/Group9-Content-trust/notary-push-image.sh + Log ${output} + Should Be Equal As Integers ${rc} 0 + + ${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 + +Test Case - Admin Push Un-Signed Image + ${rc} ${output}= Run And Return Rc And Output docker push ${ip}/library/hello-world:latest + Log To Console ${output} + Test Case - Ldap Sign in and out Switch To LDAP Init Chrome Driver @@ -305,25 +325,5 @@ Test Case - Ldap User Push An Image Wait Until Page Contains project${d}/hello-world Close Browser -Test Case - Admin Push Signed Image - Switch To Notary - - ${rc} ${output}= Run And Return Rc And Output docker pull hello-world:latest - Log To Console ${output} - - Push image ${ip} %{HARBOR_ADMIN} %{HARBOR_PASSWORD} library hello-world:latest - ${rc} ${output}= Run And Return Rc And Output ./tests/robot-cases/Group9-Content-trust/notary-push-image.sh - Log To Console ${output} - Should Be Equal As Integers ${rc} 0 - - ${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 - -Test Case - Admin Push Un-Signed Image - ${rc} ${output}= Run And Return Rc And Output docker push ${ip}/library/hello-world:latest - Log To Console ${output} - Test Case - Clean Harbor Images - Down Harbor with_notary=true + Down Harbor diff --git a/tests/robot-cases/Group9-Content-trust/9-21-admin-push-signed-images.robot b/tests/robot-cases/Group9-Content-trust/9-21-admin-push-signed-images.robot index a9ab75822..8902973c3 100644 --- a/tests/robot-cases/Group9-Content-trust/9-21-admin-push-signed-images.robot +++ b/tests/robot-cases/Group9-Content-trust/9-21-admin-push-signed-images.robot @@ -19,10 +19,11 @@ Default Tags regression *** Test Cases *** Test Case - Admin Push Signed Image - Install Harbor With Notary to Test Server + Install Harbor to Test Server + Enabe Notary Client ${rc} ${output}= Run And Return Rc And Output ./tests/robot-cases/Group9-Content-trust/notary-push-image.sh - Log To Console ${output} + Log ${output} Should Be Equal As Integers ${rc} 0 ${rc} ${ip}= Run And Return Rc And Output ip addr s eth0 |grep "inet "|awk '{print $2}' |awk -F "/" '{print $1}'