From 2bf89e93569c3670b58d71b7160224e8b65724e7 Mon Sep 17 00:00:00 2001 From: danfengliu Date: Tue, 10 Nov 2020 17:33:09 +0800 Subject: [PATCH] Add docker-hub login before docker-hub pull Due to docker-hub pull request rate limitation, we will use registed account to pull image from docker-hub, therefore add docker-hub login in API tests. Signed-off-by: danfengliu --- .github/workflows/build-package.yml | 2 +- tests/apitests/python/library/artifact.py | 2 +- tests/apitests/python/library/cnab.py | 5 ++ tests/apitests/python/library/docker_api.py | 49 ++++++++++-------- tests/apitests/python/library/repository.py | 4 +- tests/apitests/python/test_proxy_cache.py | 6 +-- .../apitests/python/test_push_cnab_bundle.py | 29 ++++------- .../python/test_replication_from_dockerhub.py | 3 +- tests/apitests/python/testutils.py | 17 ++++--- tests/ci/api_run.sh | 4 +- tests/resources/APITest-Util.robot | 2 +- tests/resources/CNAB_Util.robot | 5 +- tests/resources/Docker-Util.robot | 18 ++++++- .../Harbor-Pages/Configuration.robot | 15 ------ tests/resources/Harbor-Pages/GC.robot | 2 - .../Harbor-Pages/Project-Helmcharts.robot | 6 --- .../Harbor-Pages/Project-Repository.robot | 2 - .../Harbor-Pages/Project-Webhooks.robot | 2 - tests/resources/Harbor-Pages/Project.robot | 10 ---- .../resources/Harbor-Pages/Replication.robot | 8 +-- tests/resources/Harbor-Pages/ToolKit.robot | 8 --- .../resources/Harbor-Pages/UserProfile.robot | 1 - tests/resources/Harbor-Pages/Verify.robot | 3 +- tests/resources/Nightly-Util.robot | 5 +- tests/resources/TestCaseBody.robot | 2 - tests/resources/Util.robot | 6 +-- .../Group0-Util/cnab_push_bundle.sh | 13 +++++ .../Group0-Util/docker_push_manifest_list.sh | 10 ++-- tests/robot-cases/Group1-Nightly/Common.robot | 51 +++++++++---------- .../Group1-Nightly/Common_GC.robot | 3 -- tests/robot-cases/Group1-Nightly/LDAP.robot | 2 +- .../robot-cases/Group1-Nightly/Nightly.robot | 3 -- .../Group1-Nightly/Replication.robot | 33 ++++++------ .../robot-cases/Group1-Nightly/Schedule.robot | 36 ++++++------- tests/robot-cases/Group3-Upgrade/data.json | 31 ++--------- tests/robot-cases/Group3-Upgrade/prepare.py | 4 +- tests/robot-cases/Group3-Upgrade/run.sh | 4 +- 37 files changed, 188 insertions(+), 218 deletions(-) diff --git a/.github/workflows/build-package.yml b/.github/workflows/build-package.yml index 2a021358f..241689ff8 100644 --- a/.github/workflows/build-package.yml +++ b/.github/workflows/build-package.yml @@ -95,7 +95,7 @@ jobs: uploader ${harbor_online_build_bundle}.asc $harbor_target_bucket uploader harbor-offline-installer-latest.tgz $harbor_target_bucket uploader harbor-offline-installer-latest.tgz.asc $harbor_target_bucket - echo "::set-env name=BUILD_BUNDLE::$harbor_offline_build_bundle" + echo "BUILD_BUNDLE=$harbor_offline_build_bundle" >> $GITHUB_ENV - name: Slack Notification uses: sonots/slack-notice-action@v3 with: diff --git a/tests/apitests/python/library/artifact.py b/tests/apitests/python/library/artifact.py index ee2fc8868..b6ec3dcd8 100644 --- a/tests/apitests/python/library/artifact.py +++ b/tests/apitests/python/library/artifact.py @@ -118,7 +118,7 @@ class Artifact(base.Base, object): None: False, }.get(artifact, True) - def waiting_for_reference_exist(self, project_name, repo_name, reference, ignore_not_found = True, period = 60, loop_count = 18, **kwargs): + def waiting_for_reference_exist(self, project_name, repo_name, reference, ignore_not_found = True, period = 60, loop_count = 20, **kwargs): _loop_count = loop_count while True: print("Waiting for reference {} round...".format(_loop_count)) diff --git a/tests/apitests/python/library/cnab.py b/tests/apitests/python/library/cnab.py index f0b7231dc..add51d259 100644 --- a/tests/apitests/python/library/cnab.py +++ b/tests/apitests/python/library/cnab.py @@ -3,6 +3,7 @@ import base import json import docker_api +from testutils import DOCKER_USER, DOCKER_PWD def load_bundle(service_image, invocation_image): bundle_file = "./tests/apitests/python/bundle_data/bundle.json" @@ -41,6 +42,10 @@ def cnab_push_bundle(bundle_file, target): def push_cnab_bundle(harbor_server, user, password, service_image, invocation_image, target, auto_update_bundle = True): docker_api.docker_info_display() + + #Add docker login command to avoid pull request access rate elimitation by docker hub + docker_api.docker_login_cmd("", DOCKER_USER, DOCKER_PWD, enable_manifest = False) + docker_api.docker_login_cmd(harbor_server, user, password, enable_manifest = False) bundle_file = load_bundle(service_image, invocation_image) fixed_bundle_file = cnab_fixup_bundle(bundle_file, target, auto_update_bundle = auto_update_bundle) diff --git a/tests/apitests/python/library/docker_api.py b/tests/apitests/python/library/docker_api.py index a512b9a0c..2f892ca4c 100644 --- a/tests/apitests/python/library/docker_api.py +++ b/tests/apitests/python/library/docker_api.py @@ -3,6 +3,7 @@ import base import subprocess import json +from testutils import DOCKER_USER, DOCKER_PWD try: import docker @@ -17,13 +18,17 @@ def docker_info_display(): ret = base.run_command(command) print("Command return: ", ret) -def docker_login_cmd(harbor_host, user, password, cfg_file = "./tests/apitests/python/update_docker_cfg.sh", enable_manifest = True): - command = ["sudo", "docker", "login", harbor_host, "-u", user, "-p", password] +def docker_login_cmd(harbor_host, username, password, cfg_file = "./tests/apitests/python/update_docker_cfg.sh", enable_manifest = True): + if username == "" or password == "": + print("[Warnig]: No docker credential was provided.") + return + command = ["sudo", "docker", "login", harbor_host, "-u", username, "-p", password] print( "Docker Login Command: ", command) base.run_command(command) if enable_manifest == True: try: ret = subprocess.check_output([cfg_file], shell=False) + print("docker login cmd ret:", ret) except subprocess.CalledProcessError as exc: raise Exception("Failed to update docker config, error is {} {}.".format(exc.returncode, exc.output)) @@ -46,30 +51,30 @@ def docker_manifest_push(index): manifest_list.append(line[-71:]) return index_sha256, manifest_list -def docker_manifest_push_to_harbor(index, manifests, harbor_server, user, password, cfg_file = "./tests/apitests/python/update_docker_cfg.sh"): - docker_login_cmd(harbor_server, user, password, cfg_file=cfg_file) +def docker_manifest_push_to_harbor(index, manifests, harbor_server, username, password, cfg_file = "./tests/apitests/python/update_docker_cfg.sh"): + docker_login_cmd(harbor_server, username, password, cfg_file=cfg_file) docker_manifest_create(index, manifests) return docker_manifest_push(index) -def list_repositories(harbor_host, user, password, n = None, last = None): +def list_repositories(harbor_host, username, password, n = None, last = None): if n is not None and last is not None: - command = ["curl", "-s", "-u", user+":"+password, "https://"+harbor_host+"/v2/_catalog"+"?n=%d"%n+"&last="+last, "--insecure"] + command = ["curl", "-s", "-u", username+":"+password, "https://"+harbor_host+"/v2/_catalog"+"?n=%d"%n+"&last="+last, "--insecure"] elif n is not None: - command = ["curl", "-s", "-u", user+":"+password, "https://"+harbor_host+"/v2/_catalog"+"?n=%d"%n, "--insecure"] + command = ["curl", "-s", "-u", username+":"+password, "https://"+harbor_host+"/v2/_catalog"+"?n=%d"%n, "--insecure"] else: - command = ["curl", "-s", "-u", user+":"+password, "https://"+harbor_host+"/v2/_catalog", "--insecure"] + command = ["curl", "-s", "-u", username+":"+password, "https://"+harbor_host+"/v2/_catalog", "--insecure"] print( "List Repositories Command: ", command) ret = base.run_command(command) repos = json.loads(ret).get("repositories","") return repos -def list_image_tags(harbor_host, repository, user, password, n = None, last = None): +def list_image_tags(harbor_host, repository, username, password, n = None, last = None): if n is not None and last is not None: - command = ["curl", "-s", "-u", user+":"+password, "https://"+harbor_host+"/v2/"+repository+"/tags/list"+"?n=%d"%n+"&last="+last, "--insecure"] + command = ["curl", "-s", "-u", username+":"+password, "https://"+harbor_host+"/v2/"+repository+"/tags/list"+"?n=%d"%n+"&last="+last, "--insecure"] elif n is not None: - command = ["curl", "-s", "-u", user+":"+password, "https://"+harbor_host+"/v2/"+repository+"/tags/list"+"?n=%d"%n, "--insecure"] + command = ["curl", "-s", "-u", username+":"+password, "https://"+harbor_host+"/v2/"+repository+"/tags/list"+"?n=%d"%n, "--insecure"] else: - command = ["curl", "-s", "-u", user+":"+password, "https://"+harbor_host+"/v2/"+repository+"/tags/list", "--insecure"] + command = ["curl", "-s", "-u", username+":"+password, "https://"+harbor_host+"/v2/"+repository+"/tags/list", "--insecure"] print( "List Image Tags Command: ", command) ret = base.run_command(command) tags = json.loads(ret).get("tags","") @@ -81,10 +86,17 @@ class DockerAPI(object): self.DCLIENT2 = docker.from_env() def docker_login(self, registry, username, password, expected_error_message = None): - if expected_error_message is "": + if username == "" or password == "": + print("[Warnig]: No docker credential was provided.") + return + if expected_error_message == "": expected_error_message = None + if registry == "docker": + registry = None + ret = "" try: - self.DCLIENT.login(registry = registry, username=username, password=password) + ret = self.DCLIENT.login(registry = registry, username=username, password=password) + return ret except docker.errors.APIError as err: if expected_error_message is not None: print( "docker login error:", str(err)) @@ -100,20 +112,18 @@ class DockerAPI(object): _tag = "latest" if expected_error_message is "": expected_error_message = None - caught_err = False ret = "" try: self.DCLIENT.pull(r'{}:{}'.format(image, _tag)) return ret except Exception as err: - caught_err = True if expected_error_message is not None: print( "docker image pull error:", str(err)) if str(err).lower().find(expected_error_message.lower()) < 0: raise Exception(r"Pull image: Return message {} is not as expected {}".format(str(err), expected_error_message)) else: raise Exception(r" Docker pull image {} failed, error is [{}]".format (image, str(err))) - if caught_err == False: + else: if expected_error_message is not None: if str(ret).lower().find(expected_error_message.lower()) < 0: raise Exception(r" Failed to catch error [{}] when pull image {}, return message: {}".format (expected_error_message, image, str(ret))) @@ -155,10 +165,10 @@ class DockerAPI(object): format (harbor_registry, ret)) def docker_image_build(self, harbor_registry, tags=None, size=1, expected_error_message = None): - caught_err = False ret = "" try: baseimage='busybox:latest' + self.DCLIENT.login(username=DOCKER_USER, password=DOCKER_PWD) if not self.DCLIENT.images(name=baseimage): self.DCLIENT.pull(baseimage) c=self.DCLIENT.create_container(image='busybox:latest',command='dd if=/dev/urandom of=test bs=1M count=%d' % size ) @@ -182,14 +192,13 @@ class DockerAPI(object): image = self.DCLIENT2.images.get(repo) return repo, image.id except Exception as err: - caught_err = True if expected_error_message is not None: print( "docker image build error:", str(err)) if str(err).lower().find(expected_error_message.lower()) < 0: raise Exception(r"Push image: Return message {} is not as expected {}".format(str(err), expected_error_message)) else: raise Exception(r" Docker build image {} failed, error is [{}]".format (harbor_registry, str(err))) - if caught_err == False: + else: if expected_error_message is not None: if str(ret).lower().find(expected_error_message.lower()) < 0: raise Exception(r" Failed to catch error [{}] when build image {}, return message: {}". diff --git a/tests/apitests/python/library/repository.py b/tests/apitests/python/library/repository.py index 06cf51747..873009370 100644 --- a/tests/apitests/python/library/repository.py +++ b/tests/apitests/python/library/repository.py @@ -5,6 +5,7 @@ import base import swagger_client from docker_api import DockerAPI from swagger_client.rest import ApiException +from testutils import DOCKER_USER, DOCKER_PWD def pull_harbor_image(registry, username, password, image, tag, expected_login_error_message = None, expected_error_message = None): _docker_api = DockerAPI() @@ -18,11 +19,12 @@ def pull_harbor_image(registry, username, password, image, tag, expected_login_e def push_image_to_project(project_name, registry, username, password, image, tag, expected_login_error_message = None, expected_error_message = None, profix_for_image = None, new_image=None): print("Start to push image {}/{}/{}:{}".format(registry, project_name, image, tag) ) _docker_api = DockerAPI() + _docker_api.docker_login("docker", DOCKER_USER, DOCKER_PWD) + _docker_api.docker_image_pull(image, tag = tag) _docker_api.docker_login(registry, username, password, expected_error_message = expected_login_error_message) time.sleep(2) if expected_login_error_message != None: return - _docker_api.docker_image_pull(image, tag = tag) time.sleep(2) original_name = image image = new_image or image diff --git a/tests/apitests/python/test_proxy_cache.py b/tests/apitests/python/test_proxy_cache.py index 69249b646..d8c8c59f2 100644 --- a/tests/apitests/python/test_proxy_cache.py +++ b/tests/apitests/python/test_proxy_cache.py @@ -5,7 +5,7 @@ import unittest import urllib import sys -from testutils import ADMIN_CLIENT, suppress_urllib3_warning +from testutils import ADMIN_CLIENT, suppress_urllib3_warning, DOCKER_USER, DOCKER_PWD from testutils import harbor_server from testutils import TEARDOWN from library.base import _random_name @@ -65,9 +65,9 @@ class TestProxyCache(unittest.TestCase): #1. Create a new registry; if registry_type == "docker-hub": - user_namespace = "danfengliu" + user_namespace = DOCKER_USER access_key = user_namespace - access_secret = "Aa123456" + access_secret = DOCKER_PWD registry = "https://hub.docker.com" # Memo: ctr will not send image pull request if manifest list already exist, so we pull different manifest list for different registry; index_for_ctr = dict(image = "alpine", tag = "3.12.0") diff --git a/tests/apitests/python/test_push_cnab_bundle.py b/tests/apitests/python/test_push_cnab_bundle.py index 3a1e6aa12..86854394b 100644 --- a/tests/apitests/python/test_push_cnab_bundle.py +++ b/tests/apitests/python/test_push_cnab_bundle.py @@ -12,7 +12,6 @@ from library.project import Project from library.user import User from library.repository import Repository from library.artifact import Artifact -from library.docker_api import DockerAPI class TestProjects(unittest.TestCase): @suppress_urllib3_warning @@ -44,12 +43,11 @@ class TestProjects(unittest.TestCase): Test step and expected result: 1. Create a new user(UA); 2. Create a new project(PA) by user(UA); - 3. Pull images for bundle; - 4. Push bundle to harbor as repository(RA); - 5. Get repository from Harbor successfully; - 6. Verfiy bundle name; - 7. Get artifact by sha256; - 8. Verify artifact information. + 3. Push bundle to harbor as repository(RA); + 4. Get repository from Harbor successfully; + 5. Verfiy bundle name; + 6. Get artifact by sha256; + 7. Verify artifact information. Tear down: 1. Delete repository(RA) by user(UA); 2. Delete project(PA); @@ -63,31 +61,26 @@ class TestProjects(unittest.TestCase): #2. Create a new project(PA) by user(UA); TestProjects.project_push_bundle_id, TestProjects.project_push_bundle_name = self.project.create_project(metadata = {"public": "false"}, **TestProjects.USER_CLIENT) - #3. Pull images for bundle; - _docker_api = DockerAPI() - _docker_api.docker_image_pull("alpine", tag = "latest") - _docker_api.docker_image_pull("haproxy", tag = "latest") - - #4. Push bundle to harbor as repository(RA); + #3. Push bundle to harbor as repository(RA); target = harbor_server + "/" + TestProjects.project_push_bundle_name + "/" + self.cnab_repo_name + ":" + self.cnab_tag reference_sha256 = library.cnab.push_cnab_bundle(harbor_server, user_name, self.user_push_cnab_password, "alpine:latest", "haproxy:latest", target) - #5. Get repository from Harbor successfully; + #4. Get repository from Harbor successfully; index_data = self.repo.get_repository(TestProjects.project_push_bundle_name, self.cnab_repo_name, **TestProjects.USER_CLIENT) - #5.2 Cnab bundle can be pulled by ctr successfully; + #4.2 Cnab bundle can be pulled by ctr successfully; # This step might not successful since ctr does't support cnab fully, it might be uncomment sometime in future. # Please keep them in comment! #library.containerd.ctr_images_pull(user_name, self.user_push_cnab_password, target) #library.containerd.ctr_images_list(oci_ref = target) - #6. Verfiy bundle name; + #5. Verfiy bundle name; self.assertEqual(index_data.name, TestProjects.project_push_bundle_name + "/" + self.cnab_repo_name) - #7. Get artifact by sha256; + #6. Get artifact by sha256; artifact = self.artifact.get_reference_info(TestProjects.project_push_bundle_name, self.cnab_repo_name, reference_sha256, **TestProjects.USER_CLIENT) - #8. Verify artifact information; + #7. Verify artifact information; self.assertEqual(artifact.type, 'CNAB') self.assertEqual(artifact.digest, reference_sha256) diff --git a/tests/apitests/python/test_replication_from_dockerhub.py b/tests/apitests/python/test_replication_from_dockerhub.py index 21833230d..de088de5d 100644 --- a/tests/apitests/python/test_replication_from_dockerhub.py +++ b/tests/apitests/python/test_replication_from_dockerhub.py @@ -10,6 +10,7 @@ from library.registry import Registry from library.artifact import Artifact from library.repository import Repository import swagger_client +from testutils import DOCKER_USER, DOCKER_PWD class TestProjects(unittest.TestCase): @suppress_urllib3_warning @@ -75,7 +76,7 @@ class TestProjects(unittest.TestCase): expected_project_id = TestProjects.project_add_rule_id, **TestProjects.USER_add_rule_CLIENT) #3. Create a new registry; - TestProjects.registry_id, _ = self.registry.create_registry("https://hub.docker.com", registry_type="docker-hub", access_key = "", access_secret = "", insecure=False, **ADMIN_CLIENT) + TestProjects.registry_id, _ = self.registry.create_registry("https://hub.docker.com", registry_type="docker-hub", access_key = DOCKER_USER, access_secret = DOCKER_PWD, insecure=False, **ADMIN_CLIENT) #4. Create a pull-based rule for this registry; TestProjects.rule_id, rule_name = self.replication.create_replication_policy(src_registry=swagger_client.Registry(id=int(TestProjects.registry_id)), diff --git a/tests/apitests/python/testutils.py b/tests/apitests/python/testutils.py index 9a9844dab..10ed9f9d3 100644 --- a/tests/apitests/python/testutils.py +++ b/tests/apitests/python/testutils.py @@ -4,14 +4,16 @@ import sys import warnings from functools import wraps -sys.path.insert(0, os.environ["SWAGGER_CLIENT_PATH"]) +sys.path.insert(0, os.environ.get("SWAGGER_CLIENT_PATH", '')) path=os.getcwd() + "/library" sys.path.insert(0, path) path=os.getcwd() + "/tests/apitests/python/library" sys.path.insert(0, path) - +path=os.getcwd() + "/tests/apitests/python/" +sys.path.insert(0, path) +print(sys.path) import v2_swagger_client from swagger_client.rest import ApiException import swagger_client.models @@ -20,15 +22,17 @@ from pprint import pprint admin_user = "admin" admin_pwd = "Harbor12345" -harbor_server = os.environ["HARBOR_HOST"] +harbor_server = os.environ.get("HARBOR_HOST", '') #CLIENT=dict(endpoint="https://"+harbor_server+"/api") ADMIN_CLIENT=dict(endpoint = os.environ.get("HARBOR_HOST_SCHEMA", "https")+ "://"+harbor_server+"/api/v2.0", username = admin_user, password = admin_pwd) CHART_API_CLIENT=dict(endpoint = os.environ.get("HARBOR_HOST_SCHEMA", "https")+ "://"+harbor_server+"/api", username = admin_user, password = admin_pwd) USER_ROLE=dict(admin=0,normal=1) TEARDOWN = os.environ.get('TEARDOWN', 'true').lower() in ('true', 'yes') notary_url = os.environ.get('NOTARY_URL', 'https://'+harbor_server+':4443') +DOCKER_USER = os.environ.get('DOCKER_USER', '') +DOCKER_PWD = os.environ.get('DOCKER_PWD', '') -def GetProductApi(username, password, harbor_server= os.environ["HARBOR_HOST"]): +def GetProductApi(username, password, harbor_server= os.environ.get("HARBOR_HOST", '')): cfg = swagger_client.Configuration() cfg.host = "https://"+harbor_server+"/api/v2.0" @@ -40,7 +44,7 @@ def GetProductApi(username, password, harbor_server= os.environ["HARBOR_HOST"]): api_instance = swagger_client.ProductsApi(api_client) return api_instance -def GetRepositoryApi(username, password, harbor_server= os.environ["HARBOR_HOST"]): +def GetRepositoryApi(username, password, harbor_server= os.environ.get("HARBOR_HOST", '')): cfg = v2_swagger_client.Configuration() cfg.host = "https://"+harbor_server+"/api/v2.0" @@ -71,8 +75,7 @@ def suppress_urllib3_warning(func): warnings.filterwarnings(action="ignore", message="unclosed", category=ResourceWarning) - warnings.filterwarnings(action='ignore', - message='Unverified HTTPS request') + warnings.filterwarnings(action='ignore', message='Unverified HTTPS request') func(*args) return inner_func diff --git a/tests/ci/api_run.sh b/tests/ci/api_run.sh index e4701fb97..67d753715 100755 --- a/tests/ci/api_run.sh +++ b/tests/ci/api_run.sh @@ -31,7 +31,7 @@ set +e docker ps # run db auth api cases if [ "$1" = 'DB' ]; then - docker run -i --privileged -v $DIR/../../:/drone -v $DIR/../:/ca -w /drone $E2E_IMAGE robot -v ip:$2 -v ip1: -v HARBOR_PASSWORD:Harbor12345 /drone/tests/robot-cases/Group1-Nightly/Setup.robot /drone/tests/robot-cases/Group0-BAT/API_DB.robot + docker run -i --privileged -v $DIR/../../:/drone -v $DIR/../:/ca -w /drone $E2E_IMAGE robot -v DOCKER_USER:${DOCKER_USER} -v DOCKER_PWD:${DOCKER_PWD} -v ip:$2 -v ip1: -v HARBOR_PASSWORD:Harbor12345 /drone/tests/robot-cases/Group1-Nightly/Setup.robot /drone/tests/robot-cases/Group0-BAT/API_DB.robot elif [ "$1" = 'LDAP' ]; then # run ldap api cases python $DIR/../../tests/configharbor.py -H $IP -u $HARBOR_ADMIN -p $HARBOR_ADMIN_PASSWD -c auth_mode=ldap_auth \ @@ -40,7 +40,7 @@ elif [ "$1" = 'LDAP' ]; then ldap_search_password=admin \ ldap_base_dn=dc=example,dc=com \ ldap_uid=cn - docker run -i --privileged -v $DIR/../../:/drone -v $DIR/../:/ca -w /drone $E2E_IMAGE robot -v ip:$2 -v ip1: -v HARBOR_PASSWORD:Harbor12345 /drone/tests/robot-cases/Group1-Nightly/Setup.robot /drone/tests/robot-cases/Group0-BAT/API_LDAP.robot + docker run -i --privileged -v $DIR/../../:/drone -v $DIR/../:/ca -w /drone $E2E_IMAGE robot -v DOCKER_USER:${DOCKER_USER} -v DOCKER_PWD:${DOCKER_PWD} -v ip:$2 -v ip1: -v HARBOR_PASSWORD:Harbor12345 /drone/tests/robot-cases/Group1-Nightly/Setup.robot /drone/tests/robot-cases/Group0-BAT/API_LDAP.robot else rc=999 fi diff --git a/tests/resources/APITest-Util.robot b/tests/resources/APITest-Util.robot index cad3d44a6..d608276d3 100644 --- a/tests/resources/APITest-Util.robot +++ b/tests/resources/APITest-Util.robot @@ -12,7 +12,7 @@ Harbor API Test ${current_dir}= Run pwd Log To Console ${current_dir} Log To Console ${ip} - ${rc} ${output}= Run And Return Rc And Output SWAGGER_CLIENT_PATH=${current_dir}/harborclient HARBOR_HOST=${ip} python ${testcase_name} + ${rc} ${output}= Run And Return Rc And Output SWAGGER_CLIENT_PATH=${current_dir}/harborclient HARBOR_HOST=${ip} DOCKER_USER=${DOCKER_USER} DOCKER_PWD=${DOCKER_PWD} python ${testcase_name} Log To Console ${output} Log ${output} Should Be Equal As Integers ${rc} 0 \ No newline at end of file diff --git a/tests/resources/CNAB_Util.robot b/tests/resources/CNAB_Util.robot index cb2735113..11a777c0a 100644 --- a/tests/resources/CNAB_Util.robot +++ b/tests/resources/CNAB_Util.robot @@ -19,7 +19,8 @@ Library Process *** Keywords *** CNAB Push Bundle - [Arguments] ${ip} ${user} ${pwd} ${target} ${bundle_file} - ${rc} ${output}= Run And Return Rc And Output ./tests/robot-cases/Group0-Util/cnab_push_bundle.sh ${ip} ${user} ${pwd} ${target} ${bundle_file} + [Arguments] ${ip} ${user} ${pwd} ${target} ${bundle_file} ${docker_user} ${docker_pwd} + ${rc} ${output}= Run And Return Rc And Output ./tests/robot-cases/Group0-Util/cnab_push_bundle.sh ${ip} ${user} ${pwd} ${target} ${bundle_file} ${docker_user} ${docker_pwd} + Log To Console ${output} Log ${output} Should Be Equal As Integers ${rc} 0 \ No newline at end of file diff --git a/tests/resources/Docker-Util.robot b/tests/resources/Docker-Util.robot index a22f1688c..afb51fd0c 100644 --- a/tests/resources/Docker-Util.robot +++ b/tests/resources/Docker-Util.robot @@ -156,6 +156,15 @@ Prepare Docker Cert Wait Unitl Command Success cp harbor_ca.crt /usr/local/share/ca-certificates/ Wait Unitl Command Success update-ca-certificates +Prepare Docker Cert For Nightly + [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 /usr/local/share/ca-certificates/ + #Add pivotal ecs cert for docker manifest push test. + Wait Unitl Command Success cp /ecs_ca/vmwarecert.crt /usr/local/share/ca-certificates/ + Wait Unitl Command Success update-ca-certificates + Kill Local Docker Daemon [Arguments] ${handle} ${dockerd-pid} Terminate Process ${handle} @@ -175,7 +184,7 @@ Docker Login Docker Pull [Arguments] ${image} - ${output}= Retry Keyword N Times When Error 10 Wait Unitl Command Success docker pull ${image} + ${output}= Retry Keyword N Times When Error 2 Wait Unitl Command Success docker pull ${image} Log ${output} Log To Console Docker Pull: ${output} [Return] ${output} @@ -197,17 +206,22 @@ Docker Push Index Docker Image Can Not Be Pulled [Arguments] ${image} FOR ${idx} IN RANGE 0 30 + ${out}= Run Keyword And Ignore Error Docker Login "" ${DOCKER_USER} ${DOCKER_PWD} + Log To Console Return value is ${out} ${out}= Run Keyword And Ignore Error Command Should be Failed docker pull ${image} Exit For Loop If '${out[0]}'=='PASS' + Log To Console Docker pull return value is ${out} Sleep 3 END Log To Console Cannot Pull Image From Docker - Pull Log: ${out[1]} Should Be Equal As Strings '${out[0]}' 'PASS' Docker Image Can Be Pulled - [Arguments] ${image} ${period}=60 ${times}=10 + [Arguments] ${image} ${period}=60 ${times}=2 FOR ${n} IN RANGE 1 ${times} Sleep ${period} + ${out}= Run Keyword And Ignore Error Docker Login "" ${DOCKER_USER} ${DOCKER_PWD} + Log To Console Return value is ${out} ${out}= Run Keyword And Ignore Error Docker Pull ${image} Log To Console Return value is ${out[0]} Exit For Loop If '${out[0]}'=='PASS' diff --git a/tests/resources/Harbor-Pages/Configuration.robot b/tests/resources/Harbor-Pages/Configuration.robot index 876cf02c2..879d940b6 100644 --- a/tests/resources/Harbor-Pages/Configuration.robot +++ b/tests/resources/Harbor-Pages/Configuration.robot @@ -35,13 +35,11 @@ Init LDAP Sleep 1 Input Text xpath=//*[@id='ldapUid'] cn Sleep 1 - Capture Page Screenshot Disable Ldap Verify Cert Checkbox Retry Element Click xpath=${config_auth_save_button_xpath} Sleep 2 Retry Element Click xpath=/html/body/harbor-app/harbor-shell/clr-main-container/div/div/config/div/div/div/button[3] Sleep 1 - Capture Page Screenshot Switch To Configure Retry Element Click xpath=${configuration_xpath} @@ -72,7 +70,6 @@ Test Ldap Connection # ldap checkbox unchecked, click test connection to verify success. Sleep 1 Retry Element Click xpath=${test_ldap_xpath} - Capture Page Screenshot Wait Until Page Contains Connection to LDAP server is verified timeout=15 Test LDAP Server Success @@ -83,7 +80,6 @@ Disable Ldap Verify Cert Checkbox Mouse Down xpath=//*[@id='clr-checkbox-ldapVerifyCert'] Mouse Up xpath=//*[@id='clr-checkbox-ldapVerifyCert'] Sleep 2 - Capture Page Screenshot Ldap Verify Cert Checkbox Should Be Disabled Ldap Verify Cert Checkbox Should Be Disabled @@ -99,7 +95,6 @@ Set Pro Create Admin Only Retry Element Click xpath=//select[@id='proCreation']//option[@value='adminonly'] Sleep 1 Retry Element Click xpath=${config_system_save_button_xpath} - Capture Page Screenshot AdminCreateOnly.png Set Pro Create Every One Retry Element Click xpath=${configuration_xpath} @@ -112,7 +107,6 @@ Set Pro Create Every One Sleep 1 Retry Element Click xpath=${config_system_save_button_xpath} Sleep 2 - Capture Page Screenshot EveryoneCreate.png Disable Self Reg Retry Element Click xpath=${configuration_xpath} @@ -121,7 +115,6 @@ Disable Self Reg Sleep 1 Self Reg Should Be Disabled Retry Element Click xpath=${config_auth_save_button_xpath} - Capture Page Screenshot DisableSelfReg.png Sleep 1 Enable Self Reg @@ -130,7 +123,6 @@ Enable Self Reg Sleep 1 Self Reg Should Be Enabled Retry Element Click xpath=${config_auth_save_button_xpath} - Capture Page Screenshot EnableSelfReg.png Sleep 1 Self Reg Should Be Disabled @@ -183,7 +175,6 @@ Check Verify Remote Cert Mouse Down xpath=//*[@id='clr-checkbox-verifyRemoteCert'] Mouse Up xpath=//*[@id='clr-checkbox-verifyRemoteCert'] Retry Element Click xpath=${config_save_button_xpath} - Capture Page Screenshot RemoteCert.png Sleep 1 Switch To System Replication @@ -276,7 +267,6 @@ Create New Labels Sleep 1 Input Text xpath=//*[@id='description'] global Retry Element Click xpath=//div/form/section/label[4]/button[2] - Capture Page Screenshot Wait Until Page Contains ${labelname} Update A Label @@ -288,7 +278,6 @@ Update A Label Input Text xpath=//*[@id='name'] ${labelname}1 Sleep 1 Retry Element Click xpath=//hbr-create-edit-label//form/section//button[2] - Capture Page Screenshot Wait Until Page Contains ${labelname}1 Delete A Label @@ -297,7 +286,6 @@ Delete A Label Sleep 1 Retry Element Click xpath=//button[contains(.,'Delete')] Sleep 3 - Capture Page Screenshot Retry Element Click xpath=//clr-modal//div//button[contains(.,'DELETE')] Wait Until Page Contains Element //*[@id='contentAll']//div[contains(.,'${labelname}')]/../div/clr-icon[@shape='success-standard'] @@ -334,7 +322,6 @@ Delete Top Item In System CVE Allowlist Retry Element Click ${configuration_system_wl_delete_a_cve_id_icon} END Retry Element Click ${config_system_save_button_xpath} - Capture Page Screenshot Get Project Count Quota Text From Project Quotas List [Arguments] ${project_name} @@ -352,13 +339,11 @@ Get Project Storage Quota Text From Project Quotas List Check Automatic Onboarding And Save Retry Element Click ${cfg_auth_automatic_onboarding_checkbox} Retry Element Click xpath=${config_auth_save_button_xpath} - Capture Page Screenshot Set User Name Claim And Save [Arguments] ${type} Retry Text Input ${cfg_auth_user_name_claim_input} ${type} Retry Element Click xpath=${config_auth_save_button_xpath} - Capture Page Screenshot Select Distribution [Arguments] ${name} diff --git a/tests/resources/Harbor-Pages/GC.robot b/tests/resources/Harbor-Pages/GC.robot index 0d111fb95..9c3dc562c 100644 --- a/tests/resources/Harbor-Pages/GC.robot +++ b/tests/resources/Harbor-Pages/GC.robot @@ -22,9 +22,7 @@ Resource ../../resources/Util.robot GC Now [Arguments] ${harbor_url} ${login_user} ${login_pwd} ${untag}=${false} Switch To Garbage Collection - Capture Page Screenshot Run Keyword If '${untag}' == '${true}' Retry Element Click xpath=${checkbox_delete_untagged_artifacts} - Capture Page Screenshot Click GC Now Logout Harbor Sleep 2 diff --git a/tests/resources/Harbor-Pages/Project-Helmcharts.robot b/tests/resources/Harbor-Pages/Project-Helmcharts.robot index a4bb2ac49..0a5066429 100644 --- a/tests/resources/Harbor-Pages/Project-Helmcharts.robot +++ b/tests/resources/Harbor-Pages/Project-Helmcharts.robot @@ -20,20 +20,17 @@ Upload Chart files Retry Double Keywords When Error Retry Element Click xpath=${upload_action_button} Retry Wait Until Page Not Contains Element xpath=${upload_action_button} Retry Double Keywords When Error Retry Element Click xpath=${upload_chart_button} Retry Wait Until Page Contains Element xpath=${upload_action_button} Retry Wait Until Page Contains ${prometheus_chart_name} - Capture Page Screenshot ${harbor_file_path} Set Variable ${current_dir}/${harbor_chart_filename} ${harbor_prov_file_path} Set Variable ${current_dir}/${harbor_chart_prov_filename} Choose File xpath=${chart_file_browse} ${harbor_file_path} Choose File xpath=${chart_prov_browse} ${harbor_prov_file_path} Retry Double Keywords When Error Retry Element Click xpath=${upload_action_button} Retry Wait Until Page Not Contains Element xpath=${upload_action_button} Retry Wait Until Page Contains ${harbor_chart_name} - Capture Page Screenshot Go Into Chart Version [Arguments] ${chart_name} Retry Element Click xpath=//hbr-helm-chart//a[contains(., '${chart_name}')] Sleep 3 - Capture Page Screenshot viewchartversion.png Go Into Chart Detail [Arguments] ${version_name} @@ -47,10 +44,7 @@ Multi-delete Chart Files Retry Element Click //clr-dg-row[contains(.,'${obj}')]//label END #Retry Element Click xpath=${version_checkbox} - Capture Page Screenshot Retry Double Keywords When Error Retry Element Click xpath=${version_delete} Retry Wait Until Page Contains Element ${version_confirm_delete} - Capture Page Screenshot Retry Double Keywords When Error Retry Element Click ${version_confirm_delete} Retry Wait Until Page Not Contains Element xpath=${version_confirm_delete} Retry Wait Element xpath=//clr-dg-placeholder[contains(.,\"We couldn\'t find any charts!\")] - Capture Page Screenshot diff --git a/tests/resources/Harbor-Pages/Project-Repository.robot b/tests/resources/Harbor-Pages/Project-Repository.robot index 0f94df7f7..dddb4e4c7 100644 --- a/tests/resources/Harbor-Pages/Project-Repository.robot +++ b/tests/resources/Harbor-Pages/Project-Repository.robot @@ -20,7 +20,6 @@ Resource ../../resources/Util.robot View Repo Scan Details [Arguments] @{vulnerabilities_level} Retry Element Click xpath=${first_repo_xpath} - Capture Page Screenshot FOR ${item} IN @{vulnerabilities_level} Retry Wait Until Page Contains Element //hbr-artifact-vulnerabilities//clr-dg-row[contains(.,'${item}')] END @@ -30,6 +29,5 @@ View Repo Scan Details View Scan Error Log Retry Wait Until Page Contains View Log Retry Element Click xpath=${view_log_xpath} - Capture Page Screenshot viewlog.png diff --git a/tests/resources/Harbor-Pages/Project-Webhooks.robot b/tests/resources/Harbor-Pages/Project-Webhooks.robot index 5f29ca403..78eab24fe 100644 --- a/tests/resources/Harbor-Pages/Project-Webhooks.robot +++ b/tests/resources/Harbor-Pages/Project-Webhooks.robot @@ -16,7 +16,6 @@ Create A New Webhook Retry Text Input ${webhook_name_xpath} ${webhook_name} Retry Text Input ${webhook_endpoint_id_xpath} ${webhook_endpoint_url} Retry Double Keywords When Error Retry Element Click ${create_webhooks_continue_button_xpath} Retry Wait Until Page Not Contains Element ${create_webhooks_continue_button_xpath} - Capture Page Screenshot Retry Wait Until Page Contains ${webhook_name} Update A Webhook @@ -35,7 +34,6 @@ Update A Webhook Retry Text Input ${webhook_endpoint_id_xpath} ${new_webhook_enpoint} Retry Double Keywords When Error Retry Element Click ${edit_webhooks_save_button_xpath} Retry Wait Until Page Not Contains Element ${edit_webhooks_save_button_xpath} Retry Wait Until Page Contains ${new_webhook_name} - Capture Page Screenshot Enable/Disable State of Same Webhook [Arguments] ${webhook_name} diff --git a/tests/resources/Harbor-Pages/Project.robot b/tests/resources/Harbor-Pages/Project.robot index 45050b16d..6e687fafc 100644 --- a/tests/resources/Harbor-Pages/Project.robot +++ b/tests/resources/Harbor-Pages/Project.robot @@ -24,16 +24,13 @@ Create An New Project And Go Into Project Navigate To Projects Retry Button Click xpath=${create_project_button_xpath} Log To Console Project Name: ${projectname} - Capture Page Screenshot Retry Text Input xpath=${project_name_xpath} ${projectname} ${element_project_public}= Set Variable xpath=${project_public_xpath} Run Keyword If '${public}' == 'true' Run Keywords Wait Until Element Is Visible And Enabled ${element_project_public} AND Retry Element Click ${element_project_public} Run Keyword If '${count_quota}'!='${null}' Input Count Quota ${count_quota} Run Keyword If '${storage_quota}'!='${null}' Input Storage Quota ${storage_quota} ${storage_quota_unit} Run Keyword If '${proxy_cache}' == '${true}' Run Keywords Mouse Down ${project_proxy_cache_switcher_id} AND Mouse Up ${project_proxy_cache_switcher_id} AND Retry Element Click ${project_registry_select_id} AND Retry Element Click xpath=//select[@id='registry']//option[contains(.,'${registry}')] - Capture Page Screenshot Retry Double Keywords When Error Retry Element Click ${create_project_OK_button_xpath} Retry Wait Until Page Not Contains Element ${create_project_OK_button_xpath} - Capture Page Screenshot Sleep 2 Go Into Project ${projectname} has_image=${false} @@ -102,7 +99,6 @@ Search Private Projects Retry Element Click xpath=//select Retry Element Click xpath=//select/option[@value=1] Sleep 1 - Capture Page Screenshot SearchPrivateProjects.png Make Project Private [Arguments] ${projectname} @@ -164,7 +160,6 @@ Advanced Search Should Display # it's not a common keywords, only used into log case. Do Log Advanced Search - Capture Page Screenshot LogAdvancedSearch.png Retry Wait Until Page Contains Element xpath=//clr-dg-row[contains(.,'artifact') and contains(.,'pull')] Retry Wait Until Page Contains Element xpath=//clr-dg-row[contains(.,'artifact') and contains(.,'create')] Retry Wait Until Page Contains Element xpath=//clr-dg-row[contains(.,'artifact') and contains(.,'delete')] @@ -193,7 +188,6 @@ Do Log Advanced Search Retry Element Click xpath=//audit-log//hbr-filter//clr-icon Retry Text Input xpath=//audit-log//hbr-filter//input harbor Sleep 1 - Capture Page Screenshot LogAdvancedSearch2.png ${rc} = Get Element Count //audit-log//clr-dg-row Should Be Equal As Integers ${rc} 0 @@ -239,7 +233,6 @@ Go Into Index And Contain Artifacts FOR ${n} IN RANGE 1 10 ${out} Run Keyword And Ignore Error Page Should Contain Element ${artifact_rows} limit=${limit} Exit For Loop If '${out[0]}'=='PASS' - Capture Page Screenshot gointo_${tag_name}.png Sleep 3 END Run Keyword If '${out[0]}'=='FAIL' Capture Page Screenshot @@ -268,7 +261,6 @@ Edit Repo Info Input Text xpath=//*[@id='info-edit-textarea'] test_description_info Retry Element Click xpath=//*[@id='edit-save'] Retry Wait Until Page Contains test_description_info - Capture Page Screenshot Switch To Project Label Retry Element Click xpath=//project-detail//a[contains(.,'Labels')] @@ -281,7 +273,6 @@ Switch To Project Repo Add Labels To Tag [Arguments] ${tagName} ${labelName} Retry Element Click xpath=//clr-dg-row[contains(.,'${tagName}')]//label - Capture Page Screenshot add_${labelName}.png Retry Element Click xpath=//clr-dg-action-bar//clr-dropdown//span Retry Element Click xpath=//clr-dropdown-menu//clr-dropdown//button[contains(.,'Add Labels')] Retry Element Click xpath=//clr-dropdown//div//label[contains(.,'${labelName}')] @@ -301,7 +292,6 @@ Filter Labels In Tags Retry Element Click xpath=//*[@id='filterArea']//div//button[contains(.,'${labelName2}')] Retry Element Click xpath=//*[@id='filterArea']//hbr-filter/span/clr-icon Sleep 2 - Capture Page Screenshot filter_${labelName2}.png Retry Wait Until Page Contains Element xpath=//clr-dg-row[contains(.,'${labelName2}')] Retry Wait Until Page Not Contains Element xpath=//clr-dg-row[contains(.,'${labelName1}')] diff --git a/tests/resources/Harbor-Pages/Replication.robot b/tests/resources/Harbor-Pages/Replication.robot index ee28427c4..6c3463d4a 100644 --- a/tests/resources/Harbor-Pages/Replication.robot +++ b/tests/resources/Harbor-Pages/Replication.robot @@ -25,7 +25,6 @@ Filter Replication Rule Retry Element Click ${filter_rules_btn} Retry Text Input ${filter_rules_input} ${ruleName} Retry Wait Until Page Contains Element ${rule_name_element} - Capture Page Screenshot filter_replic_${ruleName}.png Filter Registry [Arguments] ${registry_name} @@ -35,7 +34,6 @@ Filter Registry Retry Element Click ${filter_registry_btn} Retry Text Input ${filter_registry_input} ${registry_name} Retry Wait Until Page Contains Element ${registry_name_element} - Capture Page Screenshot filter_repistry_${registry_name}.png Select Dest Registry [Arguments] ${endpoint} @@ -73,8 +71,8 @@ Create A New Endpoint Retry Text Input xpath=${destination_name_xpath} ${name} Run Keyword If '${provider}' == 'harbor' Run keyword Retry Text Input xpath=${destination_url_xpath} ${url} Run Keyword If '${provider}' == 'aws-ecr' or '${provider}' == 'google-gcr' Run keyword Select Destination URL ${url} - Run Keyword If '${provider}' != 'google-gcr' Retry Text Input xpath=${destination_username_xpath} ${username} - Retry Text Input xpath=${destination_password_xpath} ${pwd} + Run Keyword If '${provider}' != 'google-gcr' and '${username}' != '${null}' Retry Text Input xpath=${destination_username_xpath} ${username} + Run Keyword If '${pwd}' != '${null}' Retry Text Input xpath=${destination_password_xpath} ${pwd} #cancel verify cert since we use a selfsigned cert Retry Element Click ${destination_insecure_xpath} Run Keyword If '${save}' == 'Y' Run keyword Retry Double Keywords When Error Retry Element Click ${replication_save_xpath} Retry Wait Until Page Not Contains Element ${replication_save_xpath} @@ -274,7 +272,5 @@ Executions Result Count Should Be [Arguments] ${expected_status} ${expected_trigger_type} ${expected_result_count} Sleep 10 ${count}= Get Element Count xpath=//clr-dg-row[contains(.,'${expected_status}') and contains(.,'${expected_trigger_type}')] - Capture Page Screenshot Should Be Equal As Integers ${count} ${expected_result_count} - Capture Page Screenshot diff --git a/tests/resources/Harbor-Pages/ToolKit.robot b/tests/resources/Harbor-Pages/ToolKit.robot index 2cfc0b5c3..46dd526c2 100644 --- a/tests/resources/Harbor-Pages/ToolKit.robot +++ b/tests/resources/Harbor-Pages/ToolKit.robot @@ -25,7 +25,6 @@ Delete Success Retry Wait Until Page Contains Element //*[@id='contentAll']//div[contains(.,'${obj}')]/../div/clr-icon[@shape='success-standard'] END Sleep 1 - Capture Page Screenshot Delete Fail [Arguments] @{obj} @@ -33,7 +32,6 @@ Delete Fail Retry Wait Until Page Contains Element //*[@id='contentAll']//div[contains(.,'${obj}')]/../div/clr-icon[@shape='error-standard'] END Sleep 1 - Capture Page Screenshot Filter Object #Filter project repo user tag. @@ -64,13 +62,10 @@ Multi-delete Object Retry Element Click ${element} END Sleep 1 - Capture Page Screenshot Retry Element Click ${delete_btn} Sleep 1 - Capture Page Screenshot Retry Element Click ${repo_delete_on_card_view_btn} Sleep 1 - Capture Page Screenshot Sleep 1 # This func cannot support as the delete user flow changed. @@ -81,15 +76,12 @@ Multi-delete Artifact Retry Element Click ${element} END Sleep 1 - Capture Page Screenshot Retry Element Click ${artifact_action_xpath} Sleep 1 Retry Element Click ${artifact_action_delete_xpath} Sleep 1 - Capture Page Screenshot Retry Element Click ${repo_delete_on_card_view_btn} Sleep 1 - Capture Page Screenshot Sleep 1 Multi-delete User diff --git a/tests/resources/Harbor-Pages/UserProfile.robot b/tests/resources/Harbor-Pages/UserProfile.robot index 8d58d999e..7ca6cb695 100644 --- a/tests/resources/Harbor-Pages/UserProfile.robot +++ b/tests/resources/Harbor-Pages/UserProfile.robot @@ -41,6 +41,5 @@ Update User Comment Logout Harbor Retry Element Click ${head_admin_xpath} Retry Link Click Log Out - Capture Page Screenshot Logout.png Sleep 2 Wait Until Keyword Succeeds 5x 1 Retry Wait Until Page Contains Element ${sign_in_title_xpath} \ No newline at end of file diff --git a/tests/resources/Harbor-Pages/Verify.robot b/tests/resources/Harbor-Pages/Verify.robot index b741c360a..836bd1123 100644 --- a/tests/resources/Harbor-Pages/Verify.robot +++ b/tests/resources/Harbor-Pages/Verify.robot @@ -350,12 +350,13 @@ Verify Replicationrule ${endpoint0}= Set Variable @{endpoint}[0] Log To Console -----endpoint0-----${endpoint0}------------ @{endpoint_type}= Get Value From Json ${json} $.endpoint[?(@.name=${endpoint0})].type + @{endpoint_url}= Get Value From Json ${json} $.endpoint[?(@.name=${endpoint0})].url Retry Textfield Value Should Be ${filter_name_id} @{name_filters}[0] Retry Textfield Value Should Be ${filter_tag_id} @{tag_filters}[0] Retry Textfield Value Should Be ${rule_name_input} ${replicationrule} Retry Textfield Value Should Be ${dest_namespace_xpath} @{dest_namespace}[0] Log To Console -----endpoint_type-----@{endpoint_type}[0]------------ - ${registry}= Set Variable If "@{endpoint_type}[0]"=="harbor" ${endpoint0}-https://${IP} ${endpoint0}-https://hub.docker.com + ${registry}= Set Variable If "@{endpoint_type}[0]"=="harbor" ${endpoint0}-@{endpoint_url}[0] ${endpoint0}-https://hub.docker.com Log To Console -------registry---${registry}------------ Run Keyword If '@{is_src_registry}[0]' == '${true}' Retry List Selection Should Be ${src_registry_dropdown_list} ${registry} ... ELSE Retry List Selection Should Be ${dest_registry_dropdown_list} ${registry} diff --git a/tests/resources/Nightly-Util.robot b/tests/resources/Nightly-Util.robot index 630b89450..852e5597e 100644 --- a/tests/resources/Nightly-Util.robot +++ b/tests/resources/Nightly-Util.robot @@ -51,12 +51,15 @@ Nightly Test Setup For Nightly Run Keyword Start Docker Daemon Locally Log To Console Start Containerd Daemon Locally ... Run Keyword Start Containerd Daemon Locally + #Prepare docker image for push special image keyword in replication test + Docker Pull ${LOCAL_REGISTRY}/${LOCAL_REGISTRY_NAMESPACE}/busybox:latest + Docker Tag ${LOCAL_REGISTRY}/${LOCAL_REGISTRY_NAMESPACE}/busybox:latest busybox:latest CA Setup For Nightly [Arguments] ${ip} ${HARBOR_PASSWORD} ${cert}=/ca/ca.crt Run cp ${cert} harbor_ca.crt Generate Certificate Authority For Chrome ${HARBOR_PASSWORD} - Prepare Docker Cert ${ip} + Prepare Docker Cert For Nightly ${ip} Prepare Helm Cert Collect Nightly Logs diff --git a/tests/resources/TestCaseBody.robot b/tests/resources/TestCaseBody.robot index e211a6b04..ede514c6f 100644 --- a/tests/resources/TestCaseBody.robot +++ b/tests/resources/TestCaseBody.robot @@ -212,7 +212,6 @@ Helm CLI Push Without Sign In Harbor Switch To Project Charts Go Into Chart Version ${harbor_chart_name} Retry Wait Until Page Contains ${harbor_chart_version} - Capture Page Screenshot Helm3 CLI Push Without Sign In Harbor [Arguments] ${sign_in_user} ${sign_in_pwd} @@ -221,7 +220,6 @@ Helm3 CLI Push Without Sign In Harbor Helm Repo Push ${sign_in_user} ${sign_in_pwd} ${harbor_chart_filename} helm_repo_name=${HARBOR_URL}/chartrepo/project${d} helm_cmd=helm3 Switch To Project Charts Retry Double Keywords When Error Go Into Chart Version ${harbor_chart_name} Retry Wait Until Page Contains ${harbor_chart_version} - Capture Page Screenshot #Important Note: All CVE IDs in CVE Allowlist cases must unique! Body Of Verfiy System Level CVE Allowlist diff --git a/tests/resources/Util.robot b/tests/resources/Util.robot index 7f5610fcc..06f5f972c 100644 --- a/tests/resources/Util.robot +++ b/tests/resources/Util.robot @@ -213,7 +213,7 @@ Clear Field Of Characters END Wait Unitl Command Success - [Arguments] ${cmd} ${times}=8 + [Arguments] ${cmd} ${times}=2 FOR ${n} IN RANGE 1 ${times} Log Trying ${cmd}: ${n} ... console=True ${rc} ${output}= Run And Return Rc And Output ${cmd} @@ -237,7 +237,6 @@ Retry Keyword N Times When Error Log To Console Trying ${keyword} elements @{elements} ${n} times ... ${out} Run Keyword And Ignore Error ${keyword} @{elements} Log To Console Return value is ${out} and ${out[0]} - Capture Page Screenshot Run Keyword If '${keyword}'=='Make Swagger Client' Exit For Loop If '${out[0]}'=='PASS' and '${out[1]}'=='0' ... ELSE Exit For Loop If '${out[0]}'=='PASS' Sleep 10 @@ -264,14 +263,13 @@ Retry Double Keywords When Error FOR ${n} IN RANGE 1 ${times} Log To Console Trying ${keyword1} and ${keyword2} ${n} times ... ${out1} Run Keyword And Ignore Error ${keyword1} ${element1} - Capture Page Screenshot Sleep 1 ${out2} Run Keyword And Ignore Error ${keyword2} ${element2} - Capture Page Screenshot Log To Console Return value is ${out1[0]} ${out2[0]} Exit For Loop If '${out2[0]}'=='PASS' Sleep 1 END + Capture Page Screenshot Return From Keyword If ${DoAssert} == ${false} '${out2[0]}' Should Be Equal As Strings '${out2[0]}' 'PASS' diff --git a/tests/robot-cases/Group0-Util/cnab_push_bundle.sh b/tests/robot-cases/Group0-Util/cnab_push_bundle.sh index c45df9969..0d45eaed5 100755 --- a/tests/robot-cases/Group0-Util/cnab_push_bundle.sh +++ b/tests/robot-cases/Group0-Util/cnab_push_bundle.sh @@ -1,12 +1,25 @@ #!/bin/bash +set -x IP=$1 USER=$2 PWD=$3 TARGET=$4 BUNDLE_FILE=$5 +DOCKER_USER=$6 +DOCKER_PWD=$7 +echo $DOCKER_USER echo $IP +TOKEN=$(curl --user "$DOCKER_USER:$DOCKER_PWD" "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token) +curl -v -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest 2>&1 | grep RateLimit + +docker login -u $DOCKER_USER -p $DOCKER_PWD docker login $IP -u $USER -p $PWD + cnab-to-oci fixup $BUNDLE_FILE --target $TARGET --bundle fixup_bundle.json --auto-update-bundle + +TOKEN=$(curl --user "$DOCKER_USER:$DOCKER_PWD" "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token) +curl -v -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest 2>&1 | grep RateLimit + cnab-to-oci push fixup_bundle.json --target $TARGET --auto-update-bundle \ No newline at end of file diff --git a/tests/robot-cases/Group0-Util/docker_push_manifest_list.sh b/tests/robot-cases/Group0-Util/docker_push_manifest_list.sh index db4dba452..55edafe12 100755 --- a/tests/robot-cases/Group0-Util/docker_push_manifest_list.sh +++ b/tests/robot-cases/Group0-Util/docker_push_manifest_list.sh @@ -1,4 +1,6 @@ #!/bin/bash +set -x +set -e IP=$1 USER=$2 @@ -12,9 +14,11 @@ docker login $IP -u $USER -p $PWD cat /$HOME/.docker/config.json -sed -i '$d' /$HOME/.docker/config.json -sed -i '$d' /$HOME/.docker/config.json -echo -e "\n },\n \"experimental\": \"enabled\"\n}" >> /$HOME/.docker/config.json +if [ $(cat /$HOME/.docker/config.json |grep experimental |wc -l) -eq 0 ];then + sudo sed -i '$d' /$HOME/.docker/config.json + sudo sed -i '$d' /$HOME/.docker/config.json + sudo echo -e "},\n \"experimental\": \"enabled\"\n}" >> /$HOME/.docker/config.json +fi cat /$HOME/.docker/config.json diff --git a/tests/robot-cases/Group1-Nightly/Common.robot b/tests/robot-cases/Group1-Nightly/Common.robot index 2ffb5c2bc..9eef9be60 100644 --- a/tests/robot-cases/Group1-Nightly/Common.robot +++ b/tests/robot-cases/Group1-Nightly/Common.robot @@ -29,6 +29,28 @@ Test Case - Sign With Admin Sign In Harbor ${HARBOR_URL} ${HARBOR_ADMIN} ${HARBOR_PASSWORD} Close Browser +Test Case - Push CNAB Bundle and Display + [Tags] run-once + Init Chrome Driver + ${d}= Get Current Date result_format=%m%s + + Sign In Harbor ${HARBOR_URL} user010 Test1@34 + Create An New Project And Go Into Project test${d} + + ${target}= Set Variable ${ip}/test${d}/cnab${d}:cnab_tag${d} + Retry Keyword N Times When Error 5 CNAB Push Bundle ${ip} user010 Test1@34 ${target} ./tests/robot-cases/Group0-Util/bundle.json ${DOCKER_USER} ${DOCKER_PWD} + + Go Into Project test${d} + Wait Until Page Contains test${d}/cnab${d} + + Go Into Repo test${d}/cnab${d} + Wait Until Page Contains cnab_tag${d} + Go Into Project test${d} + Wait Until Page Contains test${d}/cnab${d} + Go Into Repo test${d}/cnab${d} + Go Into Index And Contain Artifacts cnab_tag${d} limit=3 + Close Browser + Test Case - Create An New Project Init Chrome Driver ${d}= Get Current Date result_format=%m%s @@ -494,10 +516,8 @@ Test Case - Project Quotas Control Under Copy Sleep 2 Go Into Project project_b_${d} Sleep 2 - Capture Page Screenshot Retry Wait Until Page Contains Element xpath=//clr-dg-cell[contains(.,'${image_a}')]/a Retry Wait Until Page Not Contains Element xpath=//clr-dg-cell[contains(.,'${image_b}')]/a - Capture Page Screenshot Close Browser Test Case - Webhook CRUD @@ -611,27 +631,6 @@ Test Case - Push Docker Manifest Index and Display Go Into Index And Contain Artifacts index_tag${d} limit=2 Close Browser -Test Case - Push CNAB Bundle and Display - Init Chrome Driver - ${d}= Get Current Date result_format=%m%s - - Sign In Harbor ${HARBOR_URL} user010 Test1@34 - Create An New Project And Go Into Project test${d} - - ${target}= Set Variable ${ip}/test${d}/cnab${d}:cnab_tag${d} - Retry Keyword N Times When Error 5 CNAB Push Bundle ${ip} user010 Test1@34 ${target} ./tests/robot-cases/Group0-Util/bundle.json - - Go Into Project test${d} - Wait Until Page Contains test${d}/cnab${d} - - Go Into Repo test${d}/cnab${d} - Wait Until Page Contains cnab_tag${d} - Go Into Project test${d} - Wait Until Page Contains test${d}/cnab${d} - Go Into Repo test${d}/cnab${d} - Go Into Index And Contain Artifacts cnab_tag${d} limit=3 - Close Browser - Test Case - Push Helm Chart and Display Init Chrome Driver ${d}= Get Current Date result_format=%m%s @@ -694,10 +693,10 @@ Test Case - Read Only Mode Close Browser Test Case - Proxy Cache - [Tags] proxy_cache + [Tags] run-once ${d}= Get Current Date result_format=%m%s ${registry}= Set Variable https://hub.docker.com/ - ${user_namespace}= Set Variable danfengliu + ${user_namespace}= Set Variable ${DOCKER_USER} ${image}= Set Variable for_proxy ${tag}= Set Variable 1.0 ${manifest_index}= Set Variable index081597864867 @@ -705,7 +704,7 @@ Test Case - Proxy Cache Init Chrome Driver Sign In Harbor ${HARBOR_URL} ${HARBOR_ADMIN} ${HARBOR_PASSWORD} Switch To Registries - Create A New Endpoint docker-hub e1${d} ${registry} ${user_namespace} Aa123456 + Create A New Endpoint docker-hub e1${d} ${registry} ${user_namespace} ${DOCKER_PWD} Create An New Project And Go Into Project project${d} proxy_cache=${true} registry=e1${d} Cannot Push image ${ip} ${HARBOR_ADMIN} ${HARBOR_PASSWORD} project${d} busybox:latest err_msg=can not push artifact to a proxy project Pull Image ${ip} ${HARBOR_ADMIN} ${HARBOR_PASSWORD} project${d} ${user_namespace}/${image} tag=${tag} diff --git a/tests/robot-cases/Group1-Nightly/Common_GC.robot b/tests/robot-cases/Group1-Nightly/Common_GC.robot index dac172780..0eb1aceb0 100644 --- a/tests/robot-cases/Group1-Nightly/Common_GC.robot +++ b/tests/robot-cases/Group1-Nightly/Common_GC.robot @@ -80,11 +80,8 @@ Test Case - Project Quotas Control Under GC ${image_a_size}= Set Variable 321.03MB ${image_a_ver}= Set Variable 6.8.3 Sign In Harbor ${HARBOR_URL} ${HARBOR_ADMIN} ${HARBOR_PASSWORD} - Capture Page Screenshot Create An New Project And Go Into Project project${d} storage_quota=${storage_quota} storage_quota_unit=${storage_quota_unit} - Capture Page Screenshot Cannot Push image ${ip} ${HARBOR_ADMIN} ${HARBOR_PASSWORD} project${d} ${image_a}:${image_a_ver} err_msg=will exceed the configured upper limit of 200.0 MiB - Capture Page Screenshot GC Now ${HARBOR_URL} ${HARBOR_ADMIN} ${HARBOR_PASSWORD} Retry GC Should Be Successful 4 ${null} @{param} Create List project${d} diff --git a/tests/robot-cases/Group1-Nightly/LDAP.robot b/tests/robot-cases/Group1-Nightly/LDAP.robot index 29151a42f..451c86faf 100644 --- a/tests/robot-cases/Group1-Nightly/LDAP.robot +++ b/tests/robot-cases/Group1-Nightly/LDAP.robot @@ -119,7 +119,7 @@ Test Case - Ldap Group Admin DN Setting Logout Harbor Sign In Harbor ${HARBOR_URL} mike zhu88jie Switch To Registries - Create A New Endpoint docker-hub edp1${d} https://hub.docker.com/ danfengliu Aa123456 Y + Create A New Endpoint harbor edp1${d} https://cicd.harbor.vmwarecna.net ${null} ${null} Y Test Case - Run LDAP Group Related API Test diff --git a/tests/robot-cases/Group1-Nightly/Nightly.robot b/tests/robot-cases/Group1-Nightly/Nightly.robot index 83b8a4db6..ac6d28473 100644 --- a/tests/robot-cases/Group1-Nightly/Nightly.robot +++ b/tests/robot-cases/Group1-Nightly/Nightly.robot @@ -133,7 +133,6 @@ Test Case - User View Projects Create An New Project test${d}2 Create An New Project test${d}3 Switch To Log - Capture Page Screenshot UserViewProjects.png Wait Until Page Contains test${d}1 Wait Until Page Contains test${d}2 Wait Until Page Contains test${d}3 @@ -368,9 +367,7 @@ TestCase - Project Admin Add Labels To Repo # Add labels Switch To Project Label Create New Labels label111 - Capture Page Screenshot CreateLabel1.png Create New Labels label22 - Capture Page Screenshot CreateLabel2.png Sleep 2 Switch To Project Repo Go Into Repo project${d}/redis diff --git a/tests/robot-cases/Group1-Nightly/Replication.robot b/tests/robot-cases/Group1-Nightly/Replication.robot index 51b297f0d..e45903e6e 100644 --- a/tests/robot-cases/Group1-Nightly/Replication.robot +++ b/tests/robot-cases/Group1-Nightly/Replication.robot @@ -14,6 +14,7 @@ *** Settings *** Documentation Harbor BATs +Library ../../apitests/python/testutils.py Library ../../apitests/python/library/repository.py Resource ../../resources/Util.robot Default Tags Replication @@ -39,7 +40,6 @@ Test Case - Pro Replication Rules Add Init Chrome Driver Sign In Harbor ${HARBOR_URL} ${HARBOR_ADMIN} ${HARBOR_PASSWORD} Switch To Registries - Capture Page Screenshot Switch To Replication Manage Check New Rule UI Without Endpoint Close Browser @@ -56,14 +56,14 @@ Test Case - Harbor Endpoint Verification Endpoint Is Unpingable Close Browser -Test Case - DockerHub Endpoint Add +##Test Case - DockerHub Endpoint Add #This case need vailid info and selfsign cert - Init Chrome Driver - ${d}= Get Current Date result_format=%m%s - Sign In Harbor ${HARBOR_URL} ${HARBOR_ADMIN} ${HARBOR_PASSWORD} - Switch To Registries - Create A New Endpoint docker-hub edp1${d} https://hub.docker.com/ danfengliu Aa123456 Y - Close Browser + ##Init Chrome Driver + ##${d}= Get Current Date result_format=%m%s + ##Sign In Harbor ${HARBOR_URL} ${HARBOR_ADMIN} ${HARBOR_PASSWORD} + ##Switch To Registries + ##Create A New Endpoint docker-hub edp1${d} https://hub.docker.com/ ${DOCKER_USER} ${DOCKER_PWD} Y + ##Close Browser Test Case - Harbor Endpoint Add #This case need vailid info and selfsign cert @@ -105,10 +105,11 @@ Test Case - Replication Rule Edit ${cron_str}= Set Variable 10 10 10 * * * Sign In Harbor ${HARBOR_URL} ${HARBOR_ADMIN} ${HARBOR_PASSWORD} Switch To Registries - Create A New Endpoint docker-hub ${endpoint1} https://hub.docker.com/ danfengliu Aa123456 Y + #Due to docker-hub access limitation, remove docker-hub endpoint + Create A New Endpoint harbor ${endpoint1} https://cicd.harbor.vmwarecna.net ${null} ${null} Y Create A New Endpoint harbor ${endpoint2} https://${ip} ${HARBOR_ADMIN} ${HARBOR_PASSWORD} Y Switch To Replication Manage - Create A Rule With Existing Endpoint ${rule_name_old} pull danfengliu/* image ${endpoint1} project${d} + Create A Rule With Existing Endpoint ${rule_name_old} pull nightly/a* image ${endpoint1} project${d} Edit Replication Rule By Name ${rule_name_old} # Change rule-name, source-registry, filter, trigger-mode for edition verification Clear Field Of Characters ${rule_name_input} 30 @@ -141,9 +142,9 @@ Test Case - Replication Rule Delete ${rule_name}= Set Variable rule_testabc${d} Sign In Harbor ${HARBOR_URL} ${HARBOR_ADMIN} ${HARBOR_PASSWORD} Switch To Registries - Create A New Endpoint docker-hub ${endpoint1} https://hub.docker.com/ danfengliu Aa123456 Y + Create A New Endpoint harbor ${endpoint1} https://${ip} ${HARBOR_ADMIN} ${HARBOR_PASSWORD} Y Switch To Replication Manage - Create A Rule With Existing Endpoint ${rule_name} pull danfengliu/* image ${endpoint1} project${d} + Create A Rule With Existing Endpoint ${rule_name} pull ${DOCKER_USER}/* image ${endpoint1} project${d} Ensure Delete Replication Rule By Name ${rule_name} Close Browser @@ -154,11 +155,11 @@ Test Case - Replication Of Pull Images from DockerHub To Self Sign In Harbor ${HARBOR_URL} ${HARBOR_ADMIN} ${HARBOR_PASSWORD} Create An New Project And Go Into Project project${d} Switch To Registries - Create A New Endpoint docker-hub e${d} https://hub.docker.com/ danfengliu Aa123456 Y + Create A New Endpoint docker-hub e${d} https://hub.docker.com/ ${DOCKER_USER} ${DOCKER_PWD} Y Switch To Replication Manage - Create A Rule With Existing Endpoint rule${d} pull danfengliu/{cent*,mariadb} image e${d} project${d} + Create A Rule With Existing Endpoint rule${d} pull ${DOCKER_USER}/{cent*,mariadb} image e${d} project${d} Select Rule And Replicate rule${d} - #In docker-hub, under repository danfengliu, there're only 2 images: centos,mariadb. + #In docker-hub, under repository ${DOCKER_USER}, there're only 2 images: centos,mariadb. Image Should Be Replicated To Project project${d} centos Image Should Be Replicated To Project project${d} mariadb Close Browser @@ -275,7 +276,7 @@ Test Case - Replication Of Pull Images from Google-GCR To Self Close Browser Test Case - Replication Of Push Images to DockerHub Triggered By Event - Body Of Replication Of Push Images to Registry Triggered By Event docker-hub https://hub.docker.com/ danfengliu Aa123456 danfengliu + Body Of Replication Of Push Images to Registry Triggered By Event docker-hub https://hub.docker.com/ ${DOCKER_USER} ${DOCKER_PWD} ${DOCKER_USER} #Due to issue of delete event replication #Test Case - Replication Of Push Images to Google-GCR Triggered By Event diff --git a/tests/robot-cases/Group1-Nightly/Schedule.robot b/tests/robot-cases/Group1-Nightly/Schedule.robot index 742899cd7..91969e6d6 100644 --- a/tests/robot-cases/Group1-Nightly/Schedule.robot +++ b/tests/robot-cases/Group1-Nightly/Schedule.robot @@ -39,14 +39,15 @@ Test Case - Scan Schedule Job Retry Wait Until Page Contains Element ${not_scanned_icon} Switch To Vulnerability Page ${flag}= Set Variable ${false} - :FOR ${i} IN RANGE 999999 - \ ${minite}= Get Current Date result_format=%M - \ ${minite_int} = Convert To Integer ${minite} - \ ${left} = Evaluate ${minite_int}%10 - \ Log To Console ${i}/${left} - \ Sleep 55 - \ Run Keyword If ${left} <= 3 and ${left} != 0 Run Keywords Set Scan Schedule custom value=* */10 * * * * AND Set Suite Variable ${flag} ${true} - \ Exit For Loop If '${flag}' == '${true}' + FOR ${i} IN RANGE 999999 + ${minite}= Get Current Date result_format=%M + ${minite_int} = Convert To Integer ${minite} + ${left} = Evaluate ${minite_int}%10 + Log To Console ${i}/${left} + Sleep 55 + Run Keyword If ${left} <= 3 and ${left} != 0 Run Keywords Set Scan Schedule custom value=* */10 * * * * AND Set Suite Variable ${flag} ${true} + Exit For Loop If '${flag}' == '${true}' + END # After scan custom schedule is set, image should stay in unscanned status. Log To Console Sleep for 300 seconds...... Sleep 300 @@ -73,17 +74,18 @@ Test Case - Replication Schedule Job Sign In Harbor ${HARBOR_URL} ${HARBOR_ADMIN} ${HARBOR_PASSWORD} Create An New Project And Go Into Project ${project_name} Switch To Registries - Create A New Endpoint docker-hub e${d} https://hub.docker.com/ danfengliu Aa123456 Y + Create A New Endpoint harbor e${d} https://cicd.harbor.vmwarecna.net ${null} ${null} Y Switch To Replication Manage ${flag}= Set Variable ${false} - :FOR ${i} IN RANGE 999999 - \ ${minite}= Get Current Date result_format=%M - \ ${minite_int} = Convert To Integer ${minite} - \ ${left} = Evaluate ${minite_int}%10 - \ Log To Console ${i}/${left} - \ Run Keyword If ${left} <= 3 and ${left} != 0 Run Keywords Create A Rule With Existing Endpoint rule${d} pull danfengliu/* image e${d} ${project_name} mode=Scheduled cron=* */10 * * * * AND Set Suite Variable ${flag} ${true} - \ Sleep 40 - \ Exit For Loop If '${flag}' == '${true}' + FOR ${i} IN RANGE 999999 + ${minite}= Get Current Date result_format=%M + ${minite_int} = Convert To Integer ${minite} + ${left} = Evaluate ${minite_int}%10 + Log To Console ${i}/${left} + Run Keyword If ${left} <= 3 and ${left} != 0 Run Keywords Create A Rule With Existing Endpoint rule${d} pull nightly/{mariadb,centos} image e${d} ${project_name} mode=Scheduled cron=* */10 * * * * AND Set Suite Variable ${flag} ${true} + Sleep 40 + Exit For Loop If '${flag}' == '${true}' + END # After replication schedule is set, project should contain 2 images. Log To Console Sleep for 720 seconds...... diff --git a/tests/robot-cases/Group3-Upgrade/data.json b/tests/robot-cases/Group3-Upgrade/data.json index 511bd4b2d..d18155382 100644 --- a/tests/robot-cases/Group3-Upgrade/data.json +++ b/tests/robot-cases/Group3-Upgrade/data.json @@ -28,38 +28,15 @@ ], "endpoint":[ { - "url":"http://url", - "name":"endpoint1", - "user":"admin", - "pass":"Harbor12345", - "insecure":true, - "type":"harbor" - }, - { - "url":"https://hub.docker.com", + "url":"https://harbor-repo.vmware.com", "name":"endpoint_for_proxy_cache", "user":"", "pass":"", "insecure":false, - "type":"docker-hub" + "type":"harbor" } ], "replicationrule":[ - { - "project":"project1", - "endpoint":"endpoint1", - "trigger":"Manual", - "rulename":"rulename", - "is_src_registry":false, - "dest_namespace":"rule1-namespace", - "trigger_type":"event_based", - "cron":"", - "deletion":true, - "enabled":true, - "override":true, - "name_filters":"namefilter1", - "tag_filters":"tagfilter1" - }, { "project":"library", "endpoint":"endpoint_for_proxy_cache", @@ -203,7 +180,7 @@ "storage_unit_for_verify":"GB", "replications":{ "rulename":"ruleproject1", - "endpointname":"endpoint1", + "endpointname":"endpoint_for_proxy_cache", "trigger":"Manual" }, "labels":[ @@ -325,7 +302,7 @@ "storage_unit_for_verify":"TB", "replications":{ "rulename":"rulename1", - "endpointname":"endpoint1", + "endpointname":"endpoint_for_proxy_cache", "trigger":"Manual" }, "labels":[ diff --git a/tests/robot-cases/Group3-Upgrade/prepare.py b/tests/robot-cases/Group3-Upgrade/prepare.py index 9b8cdce85..95d9ad3df 100644 --- a/tests/robot-cases/Group3-Upgrade/prepare.py +++ b/tests/robot-cases/Group3-Upgrade/prepare.py @@ -192,8 +192,6 @@ class HarborAPI: body=dict(body=payload) request(url+"targets", 'post', **body) elif kwargs["branch"] == 2: - if registry_type == "harbor": - endpointurl = endpoint_url payload = { "credential":{ "access_key":""+username+"", @@ -223,6 +221,7 @@ class HarborAPI: request(url+"policies/replication", 'post', **body) elif kwargs["branch"] == 2: r = request(url+"registries?name="+replicationrule["endpoint"]+"", 'get') + print("response:", r) targetid = r.json()[0]['id'] if replicationrule["is_src_registry"] is True: registry = r'"src_registry": { "id": '+str(targetid)+r'},' @@ -638,6 +637,7 @@ def do_data_creation(): # Make sure to create endpoint first, it's for proxy cache project creation. for endpoint in data["endpoint"]: + print("endpoint:", endpoint) harborAPI.add_endpoint(endpoint["url"], endpoint["name"], endpoint["user"], endpoint["pass"], endpoint["insecure"], endpoint["type"], version=args.version) for distribution in data["distributions"]: diff --git a/tests/robot-cases/Group3-Upgrade/run.sh b/tests/robot-cases/Group3-Upgrade/run.sh index b6266a704..142f0274c 100755 --- a/tests/robot-cases/Group3-Upgrade/run.sh +++ b/tests/robot-cases/Group3-Upgrade/run.sh @@ -1,7 +1,9 @@ #!/bin/bash IP=$1 HARBOR_VERSION=$2 +DOCKER_USER=$3 +DOCKER_PWD=$4 robot -v ip:$IP -v ip1: -v HARBOR_PASSWORD:Harbor12345 /drone/tests/robot-cases/Group1-Nightly/Setup.robot cd /drone/tests/robot-cases/Group3-Upgrade -python ./prepare.py -e $IP -v $HARBOR_VERSION -l /drone/tests/apitests/python/ +DOCKER_USER=$DOCKER_USER DOCKER_PWD=$DOCKER_PWD python ./prepare.py -e $IP -v $HARBOR_VERSION -l /drone/tests/apitests/python/