Build image sample for test in local

Change source of most of test image samples from docker-hub to local building ones, so it will cost less docker-hub pull requests.
And some of cases like push cnab, they have to use docker-hub, but image samples in cnab test will cost 17 quotas, in this PR, we
replace those samples, now cnab case will cost 6 quotas.

Signed-off-by: danfengliu <danfengl@vmware.com>
This commit is contained in:
danfengliu 2020-12-10 18:11:58 +08:00
parent 703debf691
commit 4215c90057
21 changed files with 84 additions and 63 deletions

View File

@ -95,7 +95,9 @@ class DockerAPI(object):
registry = None registry = None
ret = "" ret = ""
try: try:
print("Docker login: {}:{}:{}".format(registry,username,password))
ret = self.DCLIENT.login(registry = registry, username=username, password=password) ret = self.DCLIENT.login(registry = registry, username=username, password=password)
print("Docker image login commond return:", ret)
return ret return ret
except docker.errors.APIError as err: except docker.errors.APIError as err:
if expected_error_message is not None: if expected_error_message is not None:
@ -114,7 +116,8 @@ class DockerAPI(object):
expected_error_message = None expected_error_message = None
ret = "" ret = ""
try: try:
self.DCLIENT.pull(r'{}:{}'.format(image, _tag)) ret = self.DCLIENT.pull(r'{}:{}'.format(image, _tag))
print("Docker image pull commond return:", ret)
return ret return ret
except Exception as err: except Exception as err:
if expected_error_message is not None: if expected_error_message is not None:
@ -135,19 +138,23 @@ class DockerAPI(object):
_tag = base._random_name("tag") _tag = base._random_name("tag")
if tag is not None: if tag is not None:
_tag = tag _tag = tag
ret = ""
try: try:
self.DCLIENT.tag(image, harbor_registry, _tag, force=True) ret = self.DCLIENT.tag(image, harbor_registry, _tag, force=True)
print("Docker image tag commond return:", ret)
return harbor_registry, _tag return harbor_registry, _tag
except docker.errors.APIError as err: except docker.errors.APIError as err:
raise Exception(r" Docker tag image {} failed, error is [{}]".format (image, str(err))) raise Exception(r" Docker tag image {} failed, error is [{}]".format (image, str(err)))
def docker_image_push(self, harbor_registry, tag, expected_error_message = None): def docker_image_push(self, harbor_registry, tag, expected_error_message = None):
ret = None ret = ""
if expected_error_message is "": if expected_error_message is "":
expected_error_message = None expected_error_message = None
try: try:
ret = self.DCLIENT.push(harbor_registry, tag) ret = self.DCLIENT.push(harbor_registry, tag)
print("Docker image push commond return:", ret)
except Exception as err: except Exception as err:
print( "docker image push catch Exception:", str(err))
if expected_error_message is not None: if expected_error_message is not None:
print( "docker image push error:", str(err)) print( "docker image push error:", str(err))
if str(err).lower().find(expected_error_message.lower()) < 0: if str(err).lower().find(expected_error_message.lower()) < 0:
@ -155,10 +162,14 @@ class DockerAPI(object):
else: else:
raise Exception(r" Docker push image {} failed, error is [{}]".format (harbor_registry, message)) raise Exception(r" Docker push image {} failed, error is [{}]".format (harbor_registry, message))
else: else:
print( "docker image push does not catch Exception:", str(expected_error_message))
if expected_error_message is not None: if expected_error_message is not None:
if str(ret).lower().find(expected_error_message.lower()) < 0: if str(ret).lower().find(expected_error_message.lower()) < 0:
raise Exception(r" Failed to catch error [{}] when push image {}, return message: {}". raise Exception(r" Failed to catch error [{}] when push image {}, return message: {}".
format (expected_error_message, harbor_registry, str(ret))) format (expected_error_message, harbor_registry, str(ret)))
else:
print("docker image push action return expected error message [{}]".format(expected_error_message))
else: else:
if str(ret).lower().find("errorDetail".lower()) >= 0: if str(ret).lower().find("errorDetail".lower()) >= 0:
raise Exception(r" It's was not suppose to catch error when push image {}, return message is [{}]". raise Exception(r" It's was not suppose to catch error when push image {}, return message is [{}]".
@ -170,6 +181,7 @@ class DockerAPI(object):
baseimage='busybox:latest' baseimage='busybox:latest'
self.DCLIENT.login(username=DOCKER_USER, password=DOCKER_PWD) self.DCLIENT.login(username=DOCKER_USER, password=DOCKER_PWD)
if not self.DCLIENT.images(name=baseimage): if not self.DCLIENT.images(name=baseimage):
print( "docker pull is triggered when building {}".format(harbor_registry))
self.DCLIENT.pull(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 ) c=self.DCLIENT.create_container(image='busybox:latest',command='dd if=/dev/urandom of=test bs=1M count=%d' % size )
self.DCLIENT.start(c) self.DCLIENT.start(c)
@ -184,13 +196,14 @@ class DockerAPI(object):
self.DCLIENT.tag(firstrepo, repo) self.DCLIENT.tag(firstrepo, repo)
for tag in tags: for tag in tags:
repo="%s:%s" % (harbor_registry, tag) repo="%s:%s" % (harbor_registry, tag)
self.DCLIENT.push(repo) ret = self.DCLIENT.push(repo)
print("docker_image_push ret:", ret)
print("build image %s with size %d" % (repo, size)) print("build image %s with size %d" % (repo, size))
self.DCLIENT.remove_image(repo) self.DCLIENT.remove_image(repo)
self.DCLIENT.remove_container(c) self.DCLIENT.remove_container(c)
self.DCLIENT.pull(repo) #self.DCLIENT.pull(repo)
image = self.DCLIENT2.images.get(repo) #image = self.DCLIENT2.images.get(repo)
return repo, image.id return repo
except Exception as err: except Exception as err:
if expected_error_message is not None: if expected_error_message is not None:
print( "docker image build error:", str(err)) print( "docker image build error:", str(err))
@ -199,10 +212,14 @@ class DockerAPI(object):
else: else:
raise Exception(r" Docker build image {} failed, error is [{}]".format (harbor_registry, str(err))) raise Exception(r" Docker build image {} failed, error is [{}]".format (harbor_registry, str(err)))
else: else:
print("docker image build does not catch Exception:", str(expected_error_message))
print("Docker build -> docker image push ret:", ret)
if expected_error_message is not None: if expected_error_message is not None:
if str(ret).lower().find(expected_error_message.lower()) < 0: if str(ret).lower().find(expected_error_message.lower()) < 0:
raise Exception(r" Failed to catch error [{}] when build image {}, return message: {}". raise Exception(r" Failed to catch error [{}] when build image {}, return message: {}".
format (expected_error_message, harbor_registry, str(ret))) format (expected_error_message, harbor_registry, str(ret)))
else:
print("docker image build return expected error message [{}]".format(expected_error_message))
else: else:
if str(ret).lower().find("errorDetail".lower()) >= 0: if str(ret).lower().find("errorDetail".lower()) >= 0:
raise Exception(r" It's was not suppose to catch error when push image {}, return message is [{}]".format (harbor_registry, ret)) raise Exception(r" It's was not suppose to catch error when push image {}, return message is [{}]".format (harbor_registry, ret))

View File

@ -38,6 +38,13 @@ def push_image_to_project(project_name, registry, username, password, image, tag
return r'{}/{}'.format(project_name, image), new_tag return r'{}/{}'.format(project_name, image), new_tag
def push_self_build_image_to_project(project_name, registry, username, password, image, tag, size=2, expected_login_error_message = None, expected_error_message = None):
_docker_api = DockerAPI()
_docker_api.docker_login(registry, username, password, expected_error_message = expected_login_error_message)
push_special_image_to_project(project_name, registry, username, password, image, tags=[tag], size=size, expected_login_error_message = expected_login_error_message, expected_error_message = expected_error_message)
return r'{}/{}'.format(project_name, image), tag
def push_special_image_to_project(project_name, registry, username, password, image, tags=None, size=1, expected_login_error_message=None, expected_error_message = None): def push_special_image_to_project(project_name, registry, username, password, image, tags=None, size=1, expected_login_error_message=None, expected_error_message = None):
_docker_api = DockerAPI() _docker_api = DockerAPI()
_docker_api.docker_login(registry, username, password, expected_error_message = expected_login_error_message) _docker_api.docker_login(registry, username, password, expected_error_message = expected_login_error_message)

View File

@ -128,7 +128,7 @@ class System(base.Base):
break break
stats = client.scans_all_metrics_get() stats = client.scans_all_metrics_get()
print("Scan all status:", stats) print("Scan all status:", stats)
if stats.ongoing: if stats.ongoing is False:
return return
raise Exception("Error: Scan all job is timeout.") raise Exception("Error: Scan all job is timeout.")

View File

@ -17,5 +17,6 @@ export DOCKER_CONTENT_TRUST_OFFLINE_PASSPHRASE=$PASSHRASE
export DOCKER_CONTENT_TRUST_TAGGING_PASSPHRASE=$PASSHRASE export DOCKER_CONTENT_TRUST_TAGGING_PASSPHRASE=$PASSHRASE
docker login -u admin -p Harbor12345 $IP docker login -u admin -p Harbor12345 $IP
docker tag $3:$4 $IP/$2/$3:$4
docker push $IP/$2/$3:$4 docker push $IP/$2/$3:$4

View File

@ -9,7 +9,7 @@ from library.artifact import Artifact
from library.project import Project from library.project import Project
from library.user import User from library.user import User
from library.repository import Repository from library.repository import Repository
from library.repository import push_image_to_project from library.repository import push_self_build_image_to_project
from library.label import Label from library.label import Label
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@ -72,7 +72,7 @@ class TestProjects(unittest.TestCase):
expected_project_id = TestProjects.project_add_g_lbl_id, **TestProjects.USER_add_g_lbl_CLIENT) expected_project_id = TestProjects.project_add_g_lbl_id, **TestProjects.USER_add_g_lbl_CLIENT)
#5. Create a new repository(RA) and tag(TA) in project(PA) by user(UA); #5. Create a new repository(RA) and tag(TA) in project(PA) by user(UA);
TestProjects.repo_name, tag = push_image_to_project(TestProjects.project_add_g_lbl_name, harbor_server, user_add_g_lbl_name, user_001_password, "hello-world", "latest") TestProjects.repo_name, tag = push_self_build_image_to_project(TestProjects.project_add_g_lbl_name, harbor_server, user_add_g_lbl_name, user_001_password, "hello-world", "latest")
#6. Create a new label(LA) in project(PA) by admin; #6. Create a new label(LA) in project(PA) by admin;
TestProjects.label_id, _ = self.label.create_label(**ADMIN_CLIENT) TestProjects.label_id, _ = self.label.create_label(**ADMIN_CLIENT)

View File

@ -11,7 +11,7 @@ from library.artifact import Artifact
from library.project import Project from library.project import Project
from library.user import User from library.user import User
from library.repository import Repository from library.repository import Repository
from library.repository import push_image_to_project from library.repository import push_self_build_image_to_project
from library.repository import pull_harbor_image from library.repository import pull_harbor_image
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@ -83,7 +83,7 @@ class TestProjects(unittest.TestCase):
self.project.update_project_member_role(TestProjects.project_dst_repo_id, retag_member_id, 3, **ADMIN_CLIENT) self.project.update_project_member_role(TestProjects.project_dst_repo_id, retag_member_id, 3, **ADMIN_CLIENT)
#5. Create a new repository(RA) in project(PA) by user(UA); #5. Create a new repository(RA) in project(PA) by user(UA);
TestProjects.src_repo_name, tag_name = push_image_to_project(TestProjects.project_src_repo_name, harbor_server, 'admin', 'Harbor12345', "hello-world", pull_tag_name) TestProjects.src_repo_name, tag_name = push_self_build_image_to_project(TestProjects.project_src_repo_name, harbor_server, 'admin', 'Harbor12345', "hello-world", pull_tag_name)
#6. Get repository in project(PA), there should be one repository which was created by user(UA); #6. Get repository in project(PA), there should be one repository which was created by user(UA);
src_repo_data = self.repo.list_repositories(TestProjects.project_src_repo_name, **TestProjects.USER_RETAG_CLIENT) src_repo_data = self.repo.list_repositories(TestProjects.project_src_repo_name, **TestProjects.USER_RETAG_CLIENT)

View File

@ -10,7 +10,7 @@ from library.base import _assert_status_code
from library.project import Project from library.project import Project
from library.user import User from library.user import User
from library.repository import Repository from library.repository import Repository
from library.repository import push_image_to_project from library.repository import push_self_build_image_to_project
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@suppress_urllib3_warning @suppress_urllib3_warning
@ -54,7 +54,7 @@ class TestProjects(unittest.TestCase):
TestProjects.project_del_repo_id, TestProjects.project_del_repo_name = self.project.create_project(metadata = {"public": "false"}, **TestProjects.USER_del_repo_CLIENT) TestProjects.project_del_repo_id, TestProjects.project_del_repo_name = self.project.create_project(metadata = {"public": "false"}, **TestProjects.USER_del_repo_CLIENT)
#3. Create a new repository(RA) in project(PA) by user(UA); #3. Create a new repository(RA) in project(PA) by user(UA);
repo_name, _ = push_image_to_project(TestProjects.project_del_repo_name, harbor_server, 'admin', 'Harbor12345', "hello-world", "latest") repo_name, _ = push_self_build_image_to_project(TestProjects.project_del_repo_name, harbor_server, 'admin', 'Harbor12345', "hello-world", "latest")
#4. Get repository in project(PA), there should be one repository which was created by user(UA); #4. Get repository in project(PA), there should be one repository which was created by user(UA);
repo_data = self.repo.list_repositories(TestProjects.project_del_repo_name, **TestProjects.USER_del_repo_CLIENT) repo_data = self.repo.list_repositories(TestProjects.project_del_repo_name, **TestProjects.USER_del_repo_CLIENT)

View File

@ -10,7 +10,6 @@ from library.user import User
from library.system import System from library.system import System
from library.project import Project from library.project import Project
from library.repository import Repository from library.repository import Repository
from library.repository import push_image_to_project
from library.base import _assert_status_code from library.base import _assert_status_code
from library.repository import push_special_image_to_project from library.repository import push_special_image_to_project
from library.artifact import Artifact from library.artifact import Artifact

View File

@ -7,7 +7,7 @@ from testutils import TEARDOWN
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT
from library.project import Project from library.project import Project
from library.user import User from library.user import User
from library.repository import push_image_to_project from library.repository import push_self_build_image_to_project
from library.repository import Repository from library.repository import Repository
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@ -70,7 +70,7 @@ class TestProjects(unittest.TestCase):
TestProjects.project_alice_id, TestProjects.project_alice_name = self.project.create_project(metadata = {"public": "false"}, **USER_ALICE_CLIENT) TestProjects.project_alice_id, TestProjects.project_alice_name = self.project.create_project(metadata = {"public": "false"}, **USER_ALICE_CLIENT)
#2.2 Add a repository to project(PA) by Alice #2.2 Add a repository to project(PA) by Alice
TestProjects.repo_name, _ = push_image_to_project(TestProjects.project_alice_name, harbor_server, user_alice_name, user_alice_password, "hello-world", "latest") TestProjects.repo_name, _ = push_self_build_image_to_project(TestProjects.project_alice_name, harbor_server, user_alice_name, user_alice_password, "hello-world", "latest")
#3. Bob is not a member of project(PA); #3. Bob is not a member of project(PA);
self.project.check_project_member_not_exist(TestProjects.project_alice_id, user_bob_name, **USER_ALICE_CLIENT) self.project.check_project_member_not_exist(TestProjects.project_alice_id, user_bob_name, **USER_ALICE_CLIENT)

View File

@ -9,7 +9,7 @@ from library.artifact import Artifact
from library.project import Project from library.project import Project
from library.user import User from library.user import User
from library.repository import Repository from library.repository import Repository
from library.repository import push_image_to_project from library.repository import push_self_build_image_to_project
from library.repository import pull_harbor_image from library.repository import pull_harbor_image
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@ -63,7 +63,7 @@ class TestProjects(unittest.TestCase):
TestProjects.project_content_trust_id, TestProjects.project_content_trust_name = self.project.create_project(metadata = {"public": "false"}, **TestProjects.USER_CONTENT_TRUST_CLIENT) TestProjects.project_content_trust_id, TestProjects.project_content_trust_name = self.project.create_project(metadata = {"public": "false"}, **TestProjects.USER_CONTENT_TRUST_CLIENT)
#3. Push a new image(IA) in project(PA) by admin; #3. Push a new image(IA) in project(PA) by admin;
TestProjects.repo_name, tag = push_image_to_project(TestProjects.project_content_trust_name, harbor_server, admin_name, admin_password, image, "latest") TestProjects.repo_name, tag = push_self_build_image_to_project(TestProjects.project_content_trust_name, harbor_server, admin_name, admin_password, image, "latest")
#4. Image(IA) should exist; #4. Image(IA) should exist;
artifact = self.artifact.get_reference_info(TestProjects.project_content_trust_name, image, tag, **TestProjects.USER_CONTENT_TRUST_CLIENT) artifact = self.artifact.get_reference_info(TestProjects.project_content_trust_name, image, tag, **TestProjects.USER_CONTENT_TRUST_CLIENT)

View File

@ -63,7 +63,7 @@ class TestProjects(unittest.TestCase):
#3. 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 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) reference_sha256 = library.cnab.push_cnab_bundle(harbor_server, user_name, self.user_push_cnab_password, "photon:latest", "kong:latest", target)
#4. 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) index_data = self.repo.get_repository(TestProjects.project_push_bundle_name, self.cnab_repo_name, **TestProjects.USER_CLIENT)

View File

@ -14,7 +14,7 @@ from library.project import Project
from library.user import User from library.user import User
from library.repository import Repository from library.repository import Repository
from library.artifact import Artifact from library.artifact import Artifact
from library.repository import push_image_to_project from library.repository import push_self_build_image_to_project
from library.repository import pull_harbor_image from library.repository import pull_harbor_image
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@ -75,8 +75,8 @@ class TestProjects(unittest.TestCase):
TestProjects.project_push_index_id, TestProjects.project_push_index_name = self.project.create_project(metadata = {"public": "false"}, **TestProjects.USER_CLIENT) TestProjects.project_push_index_id, TestProjects.project_push_index_name = self.project.create_project(metadata = {"public": "false"}, **TestProjects.USER_CLIENT)
#3. Create 2 new repositorys(RA,RB) in project(PA) by user(UA); #3. Create 2 new repositorys(RA,RB) in project(PA) by user(UA);
repo_name_a, tag_a = push_image_to_project(TestProjects.project_push_index_name, harbor_server, 'admin', 'Harbor12345', self.image_a, "latest") repo_name_a, tag_a = push_self_build_image_to_project(TestProjects.project_push_index_name, harbor_server, 'admin', 'Harbor12345', self.image_a, "latest")
repo_name_b, tag_b = push_image_to_project(TestProjects.project_push_index_name, harbor_server, 'admin', 'Harbor12345', self.image_b, "latest") repo_name_b, tag_b = push_self_build_image_to_project(TestProjects.project_push_index_name, harbor_server, 'admin', 'Harbor12345', self.image_b, "latest")
#4. Push an index(IA) to Harbor by docker manifest CLI successfully; #4. Push an index(IA) to Harbor by docker manifest CLI successfully;
manifests = [harbor_server+"/"+repo_name_a+":"+tag_a, harbor_server+"/"+repo_name_b+":"+tag_b] manifests = [harbor_server+"/"+repo_name_a+":"+tag_a, harbor_server+"/"+repo_name_b+":"+tag_b]

View File

@ -10,7 +10,7 @@ from library.system import System
from library.project import Project from library.project import Project
from library.user import User from library.user import User
from library.repository import Repository from library.repository import Repository
from library.repository import push_image_to_project from library.repository import push_self_build_image_to_project
from library.artifact import Artifact from library.artifact import Artifact
from library.scanner import Scanner from library.scanner import Scanner
from library.docker_api import list_image_tags from library.docker_api import list_image_tags
@ -73,11 +73,11 @@ class TestProjects(unittest.TestCase):
src_tag = "latest" src_tag = "latest"
image_a = "busybox" image_a = "busybox"
TestProjects.repo_a, tag_a = push_image_to_project(TestProjects.project_Alice_name, harbor_server, user_Alice_name, user_common_password, image_a, src_tag) TestProjects.repo_a, tag_a = push_self_build_image_to_project(TestProjects.project_Alice_name, harbor_server, user_Alice_name, user_common_password, image_a, src_tag)
image_b = "alpine" image_b = "alpine"
TestProjects.repo_b, tag_b = push_image_to_project(TestProjects.project_Alice_name, harbor_server, user_Alice_name, user_common_password, image_b, src_tag) TestProjects.repo_b, tag_b = push_self_build_image_to_project(TestProjects.project_Alice_name, harbor_server, user_Alice_name, user_common_password, image_b, src_tag)
image_c = "hello-world" image_c = "hello-world"
TestProjects.repo_c, tag_c = push_image_to_project(TestProjects.project_Alice_name, harbor_server, user_Alice_name, user_common_password, image_c, src_tag) TestProjects.repo_c, tag_c = push_self_build_image_to_project(TestProjects.project_Alice_name, harbor_server, user_Alice_name, user_common_password, image_c, src_tag)
create_tags = ["1.0","2.0","3.0"] create_tags = ["1.0","2.0","3.0"]
for tag in create_tags: for tag in create_tags:
self.artifact.create_tag(TestProjects.project_Alice_name, self.repo_name, tag_c, tag, **USER_ALICE_CLIENT) self.artifact.create_tag(TestProjects.project_Alice_name, self.repo_name, tag_c, tag, **USER_ALICE_CLIENT)

View File

@ -9,7 +9,7 @@ from library.user import User
from library.project import Project from library.project import Project
from library.repository import Repository from library.repository import Repository
from library.repository import pull_harbor_image from library.repository import pull_harbor_image
from library.repository import push_image_to_project from library.repository import push_self_build_image_to_project
from library.base import _assert_status_code from library.base import _assert_status_code
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@ -21,10 +21,6 @@ class TestProjects(unittest.TestCase):
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def tearDown(self): def tearDown(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self):
#1. Delete repository(RA) by user(UA); #1. Delete repository(RA) by user(UA);
self.repo.delete_repoitory(TestProjects.project_ra_name_a, TestProjects.repo_name_in_project_a.split('/')[1], **TestProjects.USER_RA_CLIENT) self.repo.delete_repoitory(TestProjects.project_ra_name_a, TestProjects.repo_name_in_project_a.split('/')[1], **TestProjects.USER_RA_CLIENT)
self.repo.delete_repoitory(TestProjects.project_ra_name_b, TestProjects.repo_name_in_project_b.split('/')[1], **TestProjects.USER_RA_CLIENT) self.repo.delete_repoitory(TestProjects.project_ra_name_b, TestProjects.repo_name_in_project_b.split('/')[1], **TestProjects.USER_RA_CLIENT)
@ -84,9 +80,9 @@ class TestProjects(unittest.TestCase):
TestProjects.project_ra_id_c, TestProjects.project_ra_name_c = self.project.create_project(metadata = {"public": "true"}, **TestProjects.USER_RA_CLIENT) TestProjects.project_ra_id_c, TestProjects.project_ra_name_c = self.project.create_project(metadata = {"public": "true"}, **TestProjects.USER_RA_CLIENT)
#3. Push image(ImagePA) to project(PA), image(ImagePB) to project(PB) and image(ImagePC) to project(PC) by user(UA); #3. Push image(ImagePA) to project(PA), image(ImagePB) to project(PB) and image(ImagePC) to project(PC) by user(UA);
TestProjects.repo_name_in_project_a, tag_a = push_image_to_project(TestProjects.project_ra_name_a, harbor_server, user_ra_name, user_ra_password, image_project_a, tag) TestProjects.repo_name_in_project_a, tag_a = push_self_build_image_to_project(TestProjects.project_ra_name_a, harbor_server, user_ra_name, user_ra_password, image_project_a, tag)
TestProjects.repo_name_in_project_b, tag_b = push_image_to_project(TestProjects.project_ra_name_b, harbor_server, user_ra_name, user_ra_password, image_project_b, tag) TestProjects.repo_name_in_project_b, tag_b = push_self_build_image_to_project(TestProjects.project_ra_name_b, harbor_server, user_ra_name, user_ra_password, image_project_b, tag)
TestProjects.repo_name_in_project_c, tag_c = push_image_to_project(TestProjects.project_ra_name_c, harbor_server, user_ra_name, user_ra_password, image_project_c, tag) TestProjects.repo_name_in_project_c, tag_c = push_self_build_image_to_project(TestProjects.project_ra_name_c, harbor_server, user_ra_name, user_ra_password, image_project_c, tag)
#4. Create a new robot account(RA) with pull and push privilige in project(PA) by user(UA); #4. Create a new robot account(RA) with pull and push privilige in project(PA) by user(UA);
robot_id, robot_account = self.project.add_project_robot_account(TestProjects.project_ra_id_a, TestProjects.project_ra_name_a, robot_id, robot_account = self.project.add_project_robot_account(TestProjects.project_ra_id_a, TestProjects.project_ra_name_a,
@ -100,10 +96,10 @@ class TestProjects(unittest.TestCase):
pull_harbor_image(harbor_server, robot_account.name, robot_account.token, TestProjects.repo_name_in_project_a, tag_a) pull_harbor_image(harbor_server, robot_account.name, robot_account.token, TestProjects.repo_name_in_project_a, tag_a)
#7. Push image(ImageRA) to project(PA) by robot account(RA), it must be successful; #7. Push image(ImageRA) to project(PA) by robot account(RA), it must be successful;
TestProjects.repo_name_pa, _ = push_image_to_project(TestProjects.project_ra_name_a, harbor_server, robot_account.name, robot_account.token, image_robot_account, tag) TestProjects.repo_name_pa, _ = push_self_build_image_to_project(TestProjects.project_ra_name_a, harbor_server, robot_account.name, robot_account.token, image_robot_account, tag)
#8. Push image(ImageRA) to project(PB) by robot account(RA), it must be not successful; #8. Push image(ImageRA) to project(PB) by robot account(RA), it must be not successful;
push_image_to_project(TestProjects.project_ra_name_b, harbor_server, robot_account.name, robot_account.token, image_robot_account, tag, expected_error_message = "unauthorized to access repository") push_self_build_image_to_project(TestProjects.project_ra_name_b, harbor_server, robot_account.name, robot_account.token, image_robot_account, tag, expected_error_message = "unauthorized to access repository")
#9. Pull image(ImagePB) from project(PB) by robot account(RA), it must be not successful; #9. Pull image(ImagePB) from project(PB) by robot account(RA), it must be not successful;
pull_harbor_image(harbor_server, robot_account.name, robot_account.token, TestProjects.repo_name_in_project_b, tag_b, expected_error_message = "unauthorized to access repository") pull_harbor_image(harbor_server, robot_account.name, robot_account.token, TestProjects.repo_name_in_project_b, tag_b, expected_error_message = "unauthorized to access repository")
@ -112,7 +108,7 @@ class TestProjects(unittest.TestCase):
pull_harbor_image(harbor_server, robot_account.name, robot_account.token, TestProjects.repo_name_in_project_c, tag_c) pull_harbor_image(harbor_server, robot_account.name, robot_account.token, TestProjects.repo_name_in_project_c, tag_c)
#11. Push image(ImageRA) to project(PC) by robot account(RA), it must be not successful; #11. Push image(ImageRA) to project(PC) by robot account(RA), it must be not successful;
push_image_to_project(TestProjects.project_ra_name_c, harbor_server, robot_account.name, robot_account.token, image_robot_account, tag, expected_error_message = "unauthorized to access repository") push_self_build_image_to_project(TestProjects.project_ra_name_c, harbor_server, robot_account.name, robot_account.token, image_robot_account, tag, expected_error_message = "unauthorized to access repository")
#12. Update action property of robot account(RA);" #12. Update action property of robot account(RA);"
self.project.disable_project_robot_account(TestProjects.project_ra_id_a, robot_id, True, **TestProjects.USER_RA_CLIENT) self.project.disable_project_robot_account(TestProjects.project_ra_id_a, robot_id, True, **TestProjects.USER_RA_CLIENT)
@ -121,7 +117,7 @@ class TestProjects(unittest.TestCase):
pull_harbor_image(harbor_server, robot_account.name, robot_account.token, TestProjects.repo_name_in_project_a, tag_a, expected_login_error_message = "unauthorized: authentication required") pull_harbor_image(harbor_server, robot_account.name, robot_account.token, TestProjects.repo_name_in_project_a, tag_a, expected_login_error_message = "unauthorized: authentication required")
#14. Push image(ImageRA) to project(PA) by robot account(RA), it must be not successful; #14. Push image(ImageRA) to project(PA) by robot account(RA), it must be not successful;
push_image_to_project(TestProjects.project_ra_name_a, harbor_server, robot_account.name, robot_account.token, image_robot_account, tag, expected_login_error_message = "unauthorized: authentication required") push_self_build_image_to_project(TestProjects.project_ra_name_a, harbor_server, robot_account.name, robot_account.token, image_robot_account, tag, expected_login_error_message = "unauthorized: authentication required")
#15. Delete robot account(RA), it must be not successful. #15. Delete robot account(RA), it must be not successful.
self.project.delete_project_robot_account(TestProjects.project_ra_id_a, robot_id, **TestProjects.USER_RA_CLIENT) self.project.delete_project_robot_account(TestProjects.project_ra_id_a, robot_id, **TestProjects.USER_RA_CLIENT)

View File

@ -8,7 +8,7 @@ from testutils import ADMIN_CLIENT
from library.project import Project from library.project import Project
from library.user import User from library.user import User
from library.repository import Repository from library.repository import Repository
from library.repository import push_image_to_project from library.repository import push_self_build_image_to_project
from library.artifact import Artifact from library.artifact import Artifact
from library.scan import Scan from library.scan import Scan
from library.sign import sign_image from library.sign import sign_image
@ -75,7 +75,7 @@ class TestScan(unittest.TestCase):
image = "docker" image = "docker"
src_tag = "1.13" src_tag = "1.13"
#5. Create a new repository(RA) and tag(TA) in project(PA) by user(UA); #5. Create a new repository(RA) and tag(TA) in project(PA) by user(UA);
self.repo_name1, tag = push_image_to_project(self.project_name, harbor_server, self.user_name, self.user_password, image, src_tag) self.repo_name1, tag = push_self_build_image_to_project(self.project_name, harbor_server, self.user_name, self.user_password, image, src_tag)
#6. Send scan image command and get tag(TA) information to check scan result, it should be finished; #6. Send scan image command and get tag(TA) information to check scan result, it should be finished;
self.scan.scan_artifact(self.project_name, self.repo_name1.split('/')[1], tag, **self.USER_CLIENT) self.scan.scan_artifact(self.project_name, self.repo_name1.split('/')[1], tag, **self.USER_CLIENT)
@ -104,19 +104,20 @@ class TestScan(unittest.TestCase):
#Note: Please make sure that this Image has never been pulled before by any other cases, #Note: Please make sure that this Image has never been pulled before by any other cases,
# so it is a not-scanned image right after repository creation. # so it is a not-scanned image right after repository creation.
image = "redis" #Note:busybox is pulled in setup phase, and setup is a essential phase.
image = "busybox"
tag = "latest" tag = "latest"
#5. Create a new repository(RA) and tag(TA) in project(PA) by user(UA); #5. Create a new repository(RA) and tag(TA) in project(PA) by user(UA);
TestScan.repo_name_1, tag = push_image_to_project(self.project_name, harbor_server, self.user_name, self.user_password, image, tag) #TestScan.repo_name_1, tag = push_self_build_image_to_project(self.project_name, harbor_server, self.user_name, self.user_password, image, tag)
sign_image(harbor_server, self.project_name, image, tag) sign_image(harbor_server, self.project_name, image, tag)
#6. Send scan image command and get tag(TA) information to check scan result, it should be finished; #6. Send scan image command and get tag(TA) information to check scan result, it should be finished;
self.scan.scan_artifact(self.project_name, TestScan.repo_name_1.split('/')[1], tag, **self.USER_CLIENT) self.scan.scan_artifact(self.project_name, image, tag, **self.USER_CLIENT)
self.artifact.check_image_scan_result(self.project_name, image, tag, **self.USER_CLIENT) self.artifact.check_image_scan_result(self.project_name, image, tag, **self.USER_CLIENT)
if __name__ == '__main__': if __name__ == '__main__':
suite = unittest.TestSuite(unittest.makeSuite(TestScan)) suite = unittest.TestSuite(unittest.makeSuite(TestScan))
result = unittest.TextTestRunner(sys.stdout, verbosity=2, failfast=True).run(suite) result = unittest.TextTestRunner(sys.stdout, verbosity=2, failfast=True).run(suite)
if not result.wasSuccessful(): if not result.wasSuccessful():
raise Exception(r"Tag immutability test failed: {}".format(result)) raise Exception(r"Scan test failed: {}".format(result))

View File

@ -4,7 +4,7 @@ import unittest
from testutils import harbor_server, TEARDOWN, suppress_urllib3_warning from testutils import harbor_server, TEARDOWN, suppress_urllib3_warning
from testutils import created_user, created_project from testutils import created_user, created_project
from library.artifact import Artifact from library.artifact import Artifact
from library.repository import Repository, push_image_to_project from library.repository import Repository, push_self_build_image_to_project
from library.scan import Scan from library.scan import Scan
@ -41,7 +41,7 @@ class TestScanImageInPublicProject(unittest.TestCase):
with created_user(password) as (user_id, username): with created_user(password) as (user_id, username):
with created_project(metadata={"public": "true"}, user_id=user_id) as (_, project_name): with created_project(metadata={"public": "true"}, user_id=user_id) as (_, project_name):
image, src_tag = "docker", "1.13" image, src_tag = "docker", "1.13"
full_name, tag = push_image_to_project(project_name, harbor_server, username, password, image, src_tag) full_name, tag = push_self_build_image_to_project(project_name, harbor_server, username, password, image, src_tag)
repo_name = full_name.split('/')[1] repo_name = full_name.split('/')[1]

View File

@ -9,7 +9,6 @@ from library.artifact import Artifact
from library.project import Project from library.project import Project
from library.user import User from library.user import User
from library.repository import Repository from library.repository import Repository
from library.repository import push_image_to_project
from library.repository import push_special_image_to_project from library.repository import push_special_image_to_project
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@ -66,10 +65,11 @@ class TestProjects(unittest.TestCase):
self.project.projects_should_exist(dict(public=False), expected_count = 1, self.project.projects_should_exist(dict(public=False), expected_count = 1,
expected_project_id = TestProjects.project_sign_image_id, **TestProjects.USER_sign_image_CLIENT) expected_project_id = TestProjects.project_sign_image_id, **TestProjects.USER_sign_image_CLIENT)
image = "hello-world" #Note:busybox is pulled in setup phase, and setup is a essential phase.
src_tag = "latest" image = "busybox"
tag = "latest"
#5. Create a new repository(RA) and tag(TA) in project(PA) by user(UA); #5. Create a new repository(RA) and tag(TA) in project(PA) by user(UA);
TestProjects.repo_name, tag = push_image_to_project(TestProjects.project_sign_image_name, harbor_server, user_sign_image_name, user_001_password, image, src_tag) #TestProjects.repo_name, tag = push_self_build_image_to_project(TestProjects.project_sign_image_name, harbor_server, user_sign_image_name, user_001_password, image, src_tag)
#6. Sign image with tag(TA) which was tagged by step #5; #6. Sign image with tag(TA) which was tagged by step #5;
sign_image(harbor_server, TestProjects.project_sign_image_name, image, tag) sign_image(harbor_server, TestProjects.project_sign_image_name, image, tag)
@ -81,7 +81,7 @@ class TestProjects(unittest.TestCase):
push_special_image_to_project(TestProjects.project_sign_image_name, harbor_server, user_sign_image_name, user_001_password, self.repo_name_1, ['1.0']) push_special_image_to_project(TestProjects.project_sign_image_name, harbor_server, user_sign_image_name, user_001_password, self.repo_name_1, ['1.0'])
self.repo.delete_repoitory(TestProjects.project_sign_image_name, self.repo_name_1, **TestProjects.USER_sign_image_CLIENT) self.repo.delete_repoitory(TestProjects.project_sign_image_name, self.repo_name_1, **TestProjects.USER_sign_image_CLIENT)
self.repo.delete_repoitory(TestProjects.project_sign_image_name, TestProjects.repo_name.split('/')[1], expect_status_code=412, expect_response_body = "with signature cannot be deleted", **TestProjects.USER_sign_image_CLIENT) self.repo.delete_repoitory(TestProjects.project_sign_image_name, image, expect_status_code=412, expect_response_body = "with signature cannot be deleted", **TestProjects.USER_sign_image_CLIENT)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()

View File

@ -8,7 +8,7 @@ from library.system import System
from library.project import Project from library.project import Project
from library.user import User from library.user import User
from library.repository import Repository from library.repository import Repository
from library.repository import push_image_to_project from library.repository import push_self_build_image_to_project
from library.artifact import Artifact from library.artifact import Artifact
from library.scanner import Scanner from library.scanner import Scanner
@ -74,14 +74,14 @@ class TestScanAll(unittest.TestCase):
image_a = "mariadb" image_a = "mariadb"
src_tag = "latest" src_tag = "latest"
#3.1 Push a image to project_Alice; #3.1 Push a image to project_Alice;
TestScanAll.repo_Alice_name, tag_Alice = push_image_to_project(TestScanAll.project_Alice_name, harbor_server, user_Alice_name, user_common_password, image_a, src_tag) TestScanAll.repo_Alice_name, tag_Alice = push_self_build_image_to_project(TestScanAll.project_Alice_name, harbor_server, user_Alice_name, user_common_password, image_a, src_tag)
#Note: Please make sure that this Image has never been pulled before by any other cases, #Note: Please make sure that this Image has never been pulled before by any other cases,
# so it is a not-scanned image rigth after repository creation. # so it is a not-scanned image rigth after repository creation.
image_b = "httpd" image_b = "httpd"
src_tag = "latest" src_tag = "latest"
#3.2 push another image to project_Luca; #3.2 push another image to project_Luca;
TestScanAll.repo_Luca_name, tag_Luca = push_image_to_project(TestScanAll.project_Luca_name, harbor_server, user_Luca_name, user_common_password, image_b, src_tag) TestScanAll.repo_Luca_name, tag_Luca = push_self_build_image_to_project(TestScanAll.project_Luca_name, harbor_server, user_Luca_name, user_common_password, image_b, src_tag)
#4. Trigger scan all event; #4. Trigger scan all event;
self.system.scan_now(**ADMIN_CLIENT) self.system.scan_now(**ADMIN_CLIENT)
@ -97,6 +97,7 @@ class TestScanAll(unittest.TestCase):
#7. Trigger scan all event; #7. Trigger scan all event;
self.system.scan_now(**ADMIN_CLIENT) self.system.scan_now(**ADMIN_CLIENT)
self.system.wait_until_scans_all_finish(**ADMIN_CLIENT)
#8. Check if image in project_Alice and another image in project_Luca were both scanned. #8. Check if image in project_Alice and another image in project_Luca were both scanned.
self.artifact.check_image_scan_result(TestScanAll.project_Alice_name, image_a, tag_Alice, **USER_ALICE_CLIENT) self.artifact.check_image_scan_result(TestScanAll.project_Alice_name, image_a, tag_Alice, **USER_ALICE_CLIENT)
@ -104,4 +105,4 @@ class TestScanAll(unittest.TestCase):
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()

View File

@ -13,7 +13,7 @@ from library.project import Project
from library.user import User from library.user import User
from library.repository import Repository from library.repository import Repository
from library.artifact import Artifact from library.artifact import Artifact
from library.repository import push_image_to_project from library.repository import push_self_build_image_to_project
from library.repository import pull_harbor_image from library.repository import pull_harbor_image
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@ -67,7 +67,7 @@ class TestProjects(unittest.TestCase):
TestProjects.project_id, TestProjects.project_name = self.project.create_project(metadata = {"public": "false"}, **TestProjects.USER_CLIENT) TestProjects.project_id, TestProjects.project_name = self.project.create_project(metadata = {"public": "false"}, **TestProjects.USER_CLIENT)
#3. Push an image(IA) to Harbor by docker successfully; #3. Push an image(IA) to Harbor by docker successfully;
repo_name, tag = push_image_to_project(TestProjects.project_name, harbor_server, 'admin', 'Harbor12345', self.repo_name, "latest") repo_name, tag = push_self_build_image_to_project(TestProjects.project_name, harbor_server, 'admin', 'Harbor12345', self.repo_name, "latest")
#4. Create a tag(1.0) for the image(IA) #4. Create a tag(1.0) for the image(IA)
self.artifact.create_tag(TestProjects.project_name, self.repo_name, tag, "1.0",**TestProjects.USER_CLIENT) self.artifact.create_tag(TestProjects.project_name, self.repo_name, tag, "1.0",**TestProjects.USER_CLIENT)

View File

@ -9,7 +9,6 @@ from testutils import harbor_server
from library.project import Project from library.project import Project
from library.user import User from library.user import User
from library.repository import Repository from library.repository import Repository
from library.repository import push_image_to_project
from library.registry import Registry from library.registry import Registry
from library.artifact import Artifact from library.artifact import Artifact
from library.tag_immutability import Tag_Immutability from library.tag_immutability import Tag_Immutability
@ -180,8 +179,8 @@ class TestTagImmutability(unittest.TestCase):
self.check_tag_immutability(artifact_a, image_a["tag2"], status = False) self.check_tag_immutability(artifact_a, image_a["tag2"], status = False)
#5. Can not push image with the same image name and with the same tag name. #5. Can not push image with the same image name and with the same tag name.
push_image_to_project(project_name, harbor_server, self.user_name, self.user_password, "tomcat", image_a["tag1"], push_special_image_to_project(project_name, harbor_server, self.user_name, self.user_password, image_a["name"], [image_a["tag1"]], size=10
new_image = image_a["name"], expected_error_message = "configured as immutable") , expected_error_message = "configured as immutable")
def test_copy_disability(self): def test_copy_disability(self):
""" """

View File

@ -10,7 +10,7 @@ from library.user import User
from library.projectV2 import ProjectV2 from library.projectV2 import ProjectV2
from library.project import Project from library.project import Project
from library.repository import Repository from library.repository import Repository
from library.repository import push_image_to_project from library.repository import push_self_build_image_to_project
from testutils import harbor_server from testutils import harbor_server
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@ -66,7 +66,7 @@ class TestProjects(unittest.TestCase):
format(user_user_view_logs_name, project_user_view_logs_name, "project", operation, log_count)) format(user_user_view_logs_name, project_user_view_logs_name, "project", operation, log_count))
#3.1 Push a new image(IA) in project(PA) by admin; #3.1 Push a new image(IA) in project(PA) by admin;
repo_name, tag = push_image_to_project(project_user_view_logs_name, harbor_server, admin_name, admin_password, "tomcat", "latest") repo_name, tag = push_self_build_image_to_project(project_user_view_logs_name, harbor_server, admin_name, admin_password, "tomcat", "latest")
time.sleep(2) time.sleep(2)
#3.2 In project(PA), there should be 1 'push' log record; #3.2 In project(PA), there should be 1 'push' log record;