Suppress urllib3 warning and fix nightly element locator issue and remove switch scanner

1. Since upgrade python to 3.7, some urllib3 warnings come out during
   execution, because missing disconnection when using request by docker
   library, it's not affect script execution, therefore ignore them first.
2. Replication tests failed in nightly due to new UI code, some element
   locators are not valid anymore;
3. Remove switch scanner test steps, since Clair was removed.

Signed-off-by: danfengliu <danfengl@vmware.com>
This commit is contained in:
danfengliu 2020-11-04 10:13:12 +08:00
parent 5cc890c78f
commit 444de8536a
42 changed files with 230 additions and 339 deletions

View File

@ -112,7 +112,7 @@ class DockerAPI(object):
if str(err).lower().find(expected_error_message.lower()) < 0: 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)) raise Exception(r"Pull image: Return message {} is not as expected {}".format(str(err), expected_error_message))
else: else:
raise Exception(r" Docker pull image {} failed, error is [{}]".format (image, message)) raise Exception(r" Docker pull image {} failed, error is [{}]".format (image, str(err)))
if caught_err == False: if caught_err == False:
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:

View File

@ -49,7 +49,6 @@ class Project(base.Base):
return return
base._assert_status_code(expect_status_code, status_code) base._assert_status_code(expect_status_code, status_code)
base._assert_status_code(201, status_code) base._assert_status_code(201, status_code)
print("==========header:", header)
return base._get_id_from_header(header), name return base._get_id_from_header(header), name
def get_projects(self, params, **kwargs): def get_projects(self, params, **kwargs):

View File

@ -80,9 +80,12 @@ class Repository(base.Base, object):
_, status_code, _ = client.delete_repository_with_http_info(project_name, repo_name) _, status_code, _ = client.delete_repository_with_http_info(project_name, repo_name)
except Exception as e: except Exception as e:
base._assert_status_code(expect_status_code, e.status) base._assert_status_code(expect_status_code, e.status)
return e.body if expect_response_body is not None:
base._assert_status_code(expect_status_code, status_code) base._assert_status_body(expect_response_body, e.body)
base._assert_status_code(200, status_code) return
else:
base._assert_status_code(expect_status_code, status_code)
base._assert_status_code(200, status_code)
def list_repositories(self, project_name, **kwargs): def list_repositories(self, project_name, **kwargs):

View File

@ -3,18 +3,19 @@ from __future__ import absolute_import
import unittest import unittest
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning, TEARDOWN
from library.project import Project from library.project import Project
from library.user import User from library.user import User
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
"""UserGroup unit test stubs""" @suppress_urllib3_warning
def setUp(self): def setUp(self):
self.project = Project() self.project = Project()
self.user= User() self.user= User()
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def tearDown(self): def tearDown(self):
pass print("Case completed")
def testAddProjectMember(self): def testAddProjectMember(self):
""" """

View File

@ -1,7 +1,7 @@
from __future__ import absolute_import from __future__ import absolute_import
import unittest import unittest
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import harbor_server from testutils import harbor_server
from testutils import TEARDOWN from testutils import TEARDOWN
from library.project import Project from library.project import Project
@ -11,19 +11,15 @@ from library.registry import Registry
import swagger_client import swagger_client
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUp(self): def setUp(self):
self.project = Project() self.project = Project()
self.user = User() self.user = User()
self.replication = Replication() self.replication = Replication()
self.registry = Registry() self.registry = Registry()
@classmethod
def tearDown(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
#1. Delete rule(RA); #1. Delete rule(RA);
self.replication.delete_replication_rule(TestProjects.rule_id, **ADMIN_CLIENT) self.replication.delete_replication_rule(TestProjects.rule_id, **ADMIN_CLIENT)

View File

@ -2,7 +2,7 @@ from __future__ import absolute_import
import unittest import unittest
from testutils import harbor_server from testutils import harbor_server, suppress_urllib3_warning
from testutils import TEARDOWN from testutils import TEARDOWN
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT
from library.artifact import Artifact from library.artifact import Artifact
@ -13,7 +13,7 @@ from library.repository import push_image_to_project
from library.label import Label from library.label import Label
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUp(self): def setUp(self):
self.project = Project() self.project = Project()
self.user = User() self.user = User()
@ -21,12 +21,8 @@ class TestProjects(unittest.TestCase):
self.repo = Repository() self.repo = Repository()
self.label = Label() self.label = Label()
@classmethod
def tearDown(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
#1. Delete repository(RA) by user(UA); #1. Delete repository(RA) by user(UA);
self.repo.delete_repoitory(TestProjects.project_add_g_lbl_name, TestProjects.repo_name.split('/')[1], **TestProjects.USER_add_g_lbl_CLIENT) self.repo.delete_repoitory(TestProjects.project_add_g_lbl_name, TestProjects.repo_name.split('/')[1], **TestProjects.USER_add_g_lbl_CLIENT)

View File

@ -1,7 +1,7 @@
from __future__ import absolute_import from __future__ import absolute_import
import unittest import unittest
from testutils import harbor_server from testutils import harbor_server, suppress_urllib3_warning
from testutils import TEARDOWN from testutils import TEARDOWN
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT
from testutils import created_user, created_project from testutils import created_user, created_project
@ -16,7 +16,7 @@ from library.projectV2 import ProjectV2
class TestAssignRoleToLdapGroup(unittest.TestCase): class TestAssignRoleToLdapGroup(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUp(self): def setUp(self):
self.conf= Configurations() self.conf= Configurations()
self.project = Project() self.project = Project()
@ -24,7 +24,7 @@ class TestAssignRoleToLdapGroup(unittest.TestCase):
self.repo = Repository() self.repo = Repository()
self.user= User() self.user= User()
@classmethod @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def tearDown(self): def tearDown(self):
print("Case completed") print("Case completed")

View File

@ -2,23 +2,19 @@ from __future__ import absolute_import
import unittest import unittest
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import TEARDOWN from testutils import TEARDOWN
from library.user import User from library.user import User
from library.configurations import Configurations from library.configurations import Configurations
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUp(self): def setUp(self):
self.conf= Configurations() self.conf= Configurations()
self.user = User() self.user = User()
@classmethod
def tearDown(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
#1. Delete user(UA); #1. Delete user(UA);
self.user.delete_user(TestProjects.user_assign_sys_admin_id, **ADMIN_CLIENT) self.user.delete_user(TestProjects.user_assign_sys_admin_id, **ADMIN_CLIENT)

View File

@ -3,7 +3,7 @@ from __future__ import absolute_import
import unittest import unittest
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import harbor_server from testutils import harbor_server
from testutils import TEARDOWN from testutils import TEARDOWN
from library.base import _assert_status_code from library.base import _assert_status_code
@ -15,19 +15,15 @@ from library.repository import push_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):
@classmethod @suppress_urllib3_warning
def setUpClass(self): def setUp(self):
self.project = Project() self.project = Project()
self.user = User() self.user = User()
self.artifact = Artifact() self.artifact = Artifact()
self.repo = Repository() self.repo = Repository()
@classmethod
def tearDownClass(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
#1. Delete repository(RA); #1. Delete repository(RA);
self.repo.delete_repoitory(TestProjects.project_src_repo_name, (TestProjects.src_repo_name).split('/')[1], **TestProjects.USER_RETAG_CLIENT) self.repo.delete_repoitory(TestProjects.project_src_repo_name, (TestProjects.src_repo_name).split('/')[1], **TestProjects.USER_RETAG_CLIENT)

View File

@ -3,7 +3,7 @@ from __future__ import absolute_import
import unittest import unittest
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import harbor_server from testutils import harbor_server
from testutils import TEARDOWN from testutils import TEARDOWN
from library.base import _assert_status_code from library.base import _assert_status_code
@ -13,18 +13,14 @@ from library.repository import Repository
from library.repository import push_image_to_project from library.repository import push_image_to_project
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUpClass(self): def setUp(self):
self.project= Project() self.project= Project()
self.user= User() self.user= User()
self.repo= Repository() self.repo= Repository()
@classmethod
def tearDownClass(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
#1. Delete project(PA); #1. Delete project(PA);
self.project.delete_project(TestProjects.project_del_repo_id, **TestProjects.USER_del_repo_CLIENT) self.project.delete_project(TestProjects.project_del_repo_id, **TestProjects.USER_del_repo_CLIENT)

View File

@ -1,25 +1,21 @@
from __future__ import absolute_import from __future__ import absolute_import
import unittest import unittest
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import TEARDOWN from testutils import TEARDOWN
from library.project import Project from library.project import Project
from library.user import User from library.user import User
from library.configurations import Configurations from library.configurations import Configurations
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUp(self): def setUp(self):
self.conf= Configurations() self.conf= Configurations()
self.project= Project() self.project= Project()
self.user= User() self.user= User()
@classmethod
def tearDown(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
#1. Delete project(PA); #1. Delete project(PA);
self.project.delete_project(TestProjects.project_edit_project_creation_id, **TestProjects.USER_edit_project_creation_CLIENT) self.project.delete_project(TestProjects.project_edit_project_creation_id, **TestProjects.USER_edit_project_creation_CLIENT)

View File

@ -3,7 +3,7 @@ from __future__ import absolute_import
import unittest import unittest
import time import time
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import TEARDOWN from testutils import TEARDOWN
from testutils import harbor_server from testutils import harbor_server
from library.user import User from library.user import User
@ -16,7 +16,7 @@ from library.repository import push_special_image_to_project
from library.artifact import Artifact from library.artifact import Artifact
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUp(self): def setUp(self):
self.system = System() self.system = System()
self.project = Project() self.project = Project()
@ -27,12 +27,8 @@ class TestProjects(unittest.TestCase):
self.repo_name_untag = "test_untag" self.repo_name_untag = "test_untag"
self.tag = "v1.0" self.tag = "v1.0"
@classmethod @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def tearDown(self): def tearDown(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == True, "Test data won't be erased.")
def test_ClearData(self):
#2. Delete project(PA); #2. Delete project(PA);
self.project.delete_project(TestProjects.project_gc_id, **TestProjects.USER_GC_CLIENT) self.project.delete_project(TestProjects.project_gc_id, **TestProjects.USER_GC_CLIENT)

View File

@ -1,7 +1,7 @@
from __future__ import absolute_import from __future__ import absolute_import
import unittest import unittest
from testutils import harbor_server from testutils import harbor_server, suppress_urllib3_warning
from testutils import TEARDOWN from testutils import TEARDOWN
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT
from library.user import User from library.user import User
@ -10,18 +10,15 @@ from library.configurations import Configurations
class TestLdapAdminRole(unittest.TestCase): class TestLdapAdminRole(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUp(self): def setUp(self):
url = ADMIN_CLIENT["endpoint"] url = ADMIN_CLIENT["endpoint"]
self.conf= Configurations() self.conf= Configurations()
self.user = User() self.user = User()
self.project = Project() self.project = Project()
self.USER_MIKE=dict(endpoint = url, username = "mike", password = "zhu88jie") self.USER_MIKE=dict(endpoint = url, username = "mike", password = "zhu88jie")
self.project_id = None
@classmethod
def tearDown(self):
self.project.delete_project(TestLdapAdminRole.project_id, **self.USER_MIKE)
print("Case completed")
def testLdapAdminRole(self): def testLdapAdminRole(self):
""" """
@ -38,7 +35,8 @@ class TestLdapAdminRole(unittest.TestCase):
self.conf.set_configurations_of_ldap(ldap_group_admin_dn="cn=harbor_users,ou=groups,dc=example,dc=com", **ADMIN_CLIENT) self.conf.set_configurations_of_ldap(ldap_group_admin_dn="cn=harbor_users,ou=groups,dc=example,dc=com", **ADMIN_CLIENT)
TestLdapAdminRole.project_id, project_name = self.project.create_project(metadata = {"public": "false"}, **self.USER_MIKE) self.project_id, project_name = self.project.create_project(metadata = {"public": "false"}, **self.USER_MIKE)
print("self.project_id:", self.project_id)
self.project.check_project_name_exist(name=project_name, **self.USER_MIKE) self.project.check_project_name_exist(name=project_name, **self.USER_MIKE)
_user = self.user.get_user_current(**self.USER_MIKE) _user = self.user.get_user_current(**self.USER_MIKE)
@ -47,5 +45,11 @@ class TestLdapAdminRole(unittest.TestCase):
self.assertTrue(_user.admin_role_in_auth) self.assertTrue(_user.admin_role_in_auth)
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def tearDown(self):
print("self.project_id:", self.project_id)
self.project.delete_project(self.project_id, **self.USER_MIKE)
print("Case completed")
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()

View File

@ -2,7 +2,7 @@ from __future__ import absolute_import
import unittest import unittest
from testutils import ADMIN_CLIENT, CHART_API_CLIENT from testutils import ADMIN_CLIENT, CHART_API_CLIENT, suppress_urllib3_warning
from testutils import TEARDOWN from testutils import TEARDOWN
import base import base
from library.user import User from library.user import User
@ -10,18 +10,14 @@ from library.project import Project
from library.chart import Chart from library.chart import Chart
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUp(self): def setUp(self):
self.chart= Chart() self.chart= Chart()
self.project= Project() self.project= Project()
self.user= User() self.user= User()
@classmethod
def tearDown(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
#1. Delete chart file; #1. Delete chart file;
self.chart.delete_chart_with_version(TestProjects.project_chart_name, TestProjects.CHART_NAME, TestProjects.VERSION, **CHART_API_CLIENT) self.chart.delete_chart_with_version(TestProjects.project_chart_name, TestProjects.CHART_NAME, TestProjects.VERSION, **CHART_API_CLIENT)

View File

@ -2,7 +2,7 @@ from __future__ import absolute_import
import unittest import unittest
from testutils import harbor_server from testutils import harbor_server, suppress_urllib3_warning
from testutils import TEARDOWN from testutils import TEARDOWN
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT
from library.project import Project from library.project import Project
@ -11,18 +11,14 @@ from library.repository import push_image_to_project
from library.repository import Repository from library.repository import Repository
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUp(self): def setUp(self):
self.project = Project() self.project = Project()
self.user = User() self.user = User()
self.repo = Repository() self.repo = Repository()
@classmethod
def tearDown(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
#1. Delete repository(RA) by admin; #1. Delete repository(RA) by admin;
self.repo.delete_repoitory(TestProjects.project_alice_name, TestProjects.repo_name.split('/')[1], **ADMIN_CLIENT) self.repo.delete_repoitory(TestProjects.project_alice_name, TestProjects.repo_name.split('/')[1], **ADMIN_CLIENT)

View File

@ -4,7 +4,7 @@ import unittest
import v2_swagger_client import v2_swagger_client
import time import time
from testutils import ADMIN_CLIENT, TEARDOWN from testutils import ADMIN_CLIENT, TEARDOWN, suppress_urllib3_warning
from library.project import Project from library.project import Project
from library.user import User from library.user import User
@ -32,7 +32,7 @@ class TestProjectCVEAllowlist(unittest.TestCase):
2. Delete project(PA) 2. Delete project(PA)
3. Delete User(RA) 3. Delete User(RA)
""" """
@suppress_urllib3_warning
def setUp(self): def setUp(self):
self.user = User() self.user = User()
self.project = Project() self.project = Project()
@ -49,11 +49,8 @@ class TestProjectCVEAllowlist(unittest.TestCase):
m_id = self.project.add_project_members(self.project_pa_id, user_id=self.user_ra_id, member_role_id=3, **ADMIN_CLIENT) m_id = self.project.add_project_members(self.project_pa_id, user_id=self.user_ra_id, member_role_id=3, **ADMIN_CLIENT)
self.member_id = int(m_id) self.member_id = int(m_id)
def tearDown(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
print("Tearing down...") print("Tearing down...")
self.project.delete_project_member(self.project_pa_id, self.member_id, **ADMIN_CLIENT) self.project.delete_project_member(self.project_pa_id, self.member_id, **ADMIN_CLIENT)
self.project.delete_project(self.project_pa_id,**ADMIN_CLIENT) self.project.delete_project(self.project_pa_id,**ADMIN_CLIENT)

View File

@ -2,7 +2,7 @@ from __future__ import absolute_import
import unittest import unittest
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import harbor_server from testutils import harbor_server
from testutils import TEARDOWN from testutils import TEARDOWN
from library.artifact import Artifact from library.artifact import Artifact
@ -13,19 +13,15 @@ from library.repository import push_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):
@classmethod @suppress_urllib3_warning
def setUp(self): def setUp(self):
self.project= Project() self.project= Project()
self.user= User() self.user= User()
self.artifact= Artifact() self.artifact= Artifact()
self.repo= Repository() self.repo= Repository()
@classmethod
def tearDown(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
#1. Delete repository(RA) by user(UA); #1. Delete repository(RA) by user(UA);
self.repo.delete_repoitory(TestProjects.project_content_trust_name, TestProjects.repo_name.split('/')[1], **TestProjects.USER_CONTENT_TRUST_CLIENT) self.repo.delete_repoitory(TestProjects.project_content_trust_name, TestProjects.repo_name.split('/')[1], **TestProjects.USER_CONTENT_TRUST_CLIENT)

View File

@ -1,20 +1,20 @@
from __future__ import absolute_import from __future__ import absolute_import
import unittest import unittest
from testutils import harbor_server, created_project, created_user from testutils import harbor_server, created_project, created_user, \
from testutils import ADMIN_CLIENT TEARDOWN, ADMIN_CLIENT,suppress_urllib3_warning
from library.repository import Repository from library.repository import Repository
from library.repository import push_image_to_project from library.repository import push_image_to_project
from library.system import System from library.system import System
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUp(cls): def setUp(cls):
cls.repo = Repository() cls.repo = Repository()
cls.system = System() cls.system = System()
@classmethod @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def tearDown(cls): def tearDown(self):
print("Case completed") print("Case completed")
def testProjectQuota(self): def testProjectQuota(self):

View File

@ -5,7 +5,7 @@ import unittest
import urllib import urllib
import sys import sys
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import harbor_server from testutils import harbor_server
from testutils import TEARDOWN from testutils import TEARDOWN
from library.base import _random_name from library.base import _random_name
@ -20,8 +20,8 @@ from library.artifact import Artifact
import library.containerd import library.containerd
class TestProxyCache(unittest.TestCase): class TestProxyCache(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUpClass(self): def setUp(self):
self.url = ADMIN_CLIENT["endpoint"] self.url = ADMIN_CLIENT["endpoint"]
self.user_password = "Aa123456" self.user_password = "Aa123456"
self.project= Project() self.project= Project()
@ -30,8 +30,8 @@ class TestProxyCache(unittest.TestCase):
self.registry = Registry() self.registry = Registry()
self.artifact = Artifact() self.artifact = Artifact()
@classmethod @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def tearDownClass(self): def tearDown(self):
print("Case completed") print("Case completed")
def do_validate(self, registry_type): def do_validate(self, registry_type):

View File

@ -3,7 +3,7 @@ from __future__ import absolute_import
import unittest import unittest
from testutils import ADMIN_CLIENT, CHART_API_CLIENT from testutils import ADMIN_CLIENT, CHART_API_CLIENT, suppress_urllib3_warning
from testutils import harbor_server from testutils import harbor_server
from testutils import TEARDOWN from testutils import TEARDOWN
import library.repository import library.repository
@ -13,8 +13,8 @@ from library.user import User
from library.chart import Chart from library.chart import Chart
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUpClass(self): def setUp(self):
self.project= Project() self.project= Project()
self.user= User() self.user= User()
self.chart= Chart() self.chart= Chart()
@ -28,12 +28,8 @@ class TestProjects(unittest.TestCase):
self.chart_repo_name = "chart_local" self.chart_repo_name = "chart_local"
self.repo_name = "harbor_api_test" self.repo_name = "harbor_api_test"
@classmethod
def tearDownClass(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
#1. Delete user(UA). #1. Delete user(UA).
self.user.delete_user(TestProjects.user_id, **ADMIN_CLIENT) self.user.delete_user(TestProjects.user_id, **ADMIN_CLIENT)

View File

@ -3,7 +3,7 @@ from __future__ import absolute_import
import unittest import unittest
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import harbor_server from testutils import harbor_server
from testutils import TEARDOWN from testutils import TEARDOWN
import library.repository import library.repository
@ -14,8 +14,8 @@ from library.repository import Repository
from library.artifact import Artifact from library.artifact import Artifact
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUpClass(self): def setUp(self):
self.project= Project() self.project= Project()
self.user= User() self.user= User()
self.artifact = Artifact() self.artifact = Artifact()
@ -27,12 +27,8 @@ class TestProjects(unittest.TestCase):
self.verion = "0.2.0" self.verion = "0.2.0"
self.repo_name = "harbor_api_test" self.repo_name = "harbor_api_test"
@classmethod
def tearDownClass(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
#1. Delete repository chart(CA) by user(UA); #1. Delete repository chart(CA) by user(UA);
self.repo.delete_repoitory(TestProjects.project_push_chart_name, self.repo_name, **TestProjects.USER_CLIENT) self.repo.delete_repoitory(TestProjects.project_push_chart_name, self.repo_name, **TestProjects.USER_CLIENT)

View File

@ -3,7 +3,7 @@ from __future__ import absolute_import
import unittest import unittest
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import harbor_server from testutils import harbor_server
from testutils import TEARDOWN from testutils import TEARDOWN
import library.repository import library.repository
@ -15,8 +15,8 @@ from library.artifact import Artifact
from library.docker_api import DockerAPI from library.docker_api import DockerAPI
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUpClass(self): def setUp(self):
self.project= Project() self.project= Project()
self.user= User() self.user= User()
self.artifact = Artifact() self.artifact = Artifact()
@ -26,12 +26,8 @@ class TestProjects(unittest.TestCase):
self.cnab_repo_name = "test_cnab" self.cnab_repo_name = "test_cnab"
self.cnab_tag = "test_cnab_tag" self.cnab_tag = "test_cnab_tag"
@classmethod
def tearDownClass(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
#1. Delete repository(RA) by user(UA); #1. Delete repository(RA) by user(UA);
self.repo.delete_repoitory(TestProjects.project_push_bundle_name, self.cnab_repo_name, **TestProjects.USER_CLIENT) self.repo.delete_repoitory(TestProjects.project_push_bundle_name, self.cnab_repo_name, **TestProjects.USER_CLIENT)

View File

@ -2,7 +2,7 @@ from __future__ import absolute_import
import unittest import unittest
import urllib import urllib
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import harbor_server from testutils import harbor_server
from testutils import TEARDOWN from testutils import TEARDOWN
import library.oras import library.oras
@ -14,7 +14,7 @@ from library.artifact import Artifact
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUp(self): def setUp(self):
self.project = Project() self.project = Project()
self.user = User() self.user = User()
@ -23,12 +23,8 @@ class TestProjects(unittest.TestCase):
self.repo_name = "hello-artifact" self.repo_name = "hello-artifact"
self.tag = "test_v2" self.tag = "test_v2"
@classmethod
def tearDown(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
#1. Delete user(UA); #1. Delete user(UA);
self.user.delete_user(TestProjects.user_sign_image_id, **ADMIN_CLIENT) self.user.delete_user(TestProjects.user_sign_image_id, **ADMIN_CLIENT)

View File

@ -2,7 +2,7 @@ from __future__ import absolute_import
import unittest import unittest
import urllib import urllib
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import harbor_server from testutils import harbor_server
from testutils import TEARDOWN from testutils import TEARDOWN
from library.sign import sign_image from library.sign import sign_image
@ -13,19 +13,15 @@ from library.repository import Repository
from library.repository import push_image_to_project from library.repository import push_image_to_project
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUp(self): def setUp(self):
self.project = Project() self.project = Project()
self.user = User() self.user = User()
self.artifact = Artifact() self.artifact = Artifact()
self.repo = Repository() self.repo = Repository()
@classmethod
def tearDown(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
# remove the deletion as the signed image cannot be deleted. # remove the deletion as the signed image cannot be deleted.
#1. Delete repository(RA) by user(UA); #1. Delete repository(RA) by user(UA);
#self.repo.delete_repoitory(TestProjects.project_sign_image_name, TestProjects.repo_name.split('/')[1], **TestProjects.USER_sign_image_CLIENT) #self.repo.delete_repoitory(TestProjects.project_sign_image_name, TestProjects.repo_name.split('/')[1], **TestProjects.USER_sign_image_CLIENT)

View File

@ -3,7 +3,7 @@ from __future__ import absolute_import
import unittest import unittest
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import harbor_server from testutils import harbor_server
from testutils import TEARDOWN from testutils import TEARDOWN
import library.repository import library.repository
@ -18,8 +18,8 @@ from library.repository import push_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):
@classmethod @suppress_urllib3_warning
def setUpClass(self): def setUp(self):
self.project= Project() self.project= Project()
self.user= User() self.user= User()
self.artifact = Artifact() self.artifact = Artifact()
@ -31,12 +31,8 @@ class TestProjects(unittest.TestCase):
self.image_a = "alpine" self.image_a = "alpine"
self.image_b = "busybox" self.image_b = "busybox"
@classmethod
def tearDownClass(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
#1. Delete repository(RA,RB,IA) by user(UA); #1. Delete repository(RA,RB,IA) by user(UA);
self.repo.delete_repoitory(TestProjects.project_push_index_name, self.index_name, **TestProjects.USER_CLIENT) self.repo.delete_repoitory(TestProjects.project_push_index_name, self.index_name, **TestProjects.USER_CLIENT)
self.repo.delete_repoitory(TestProjects.project_push_index_name, self.image_a, **TestProjects.USER_CLIENT) self.repo.delete_repoitory(TestProjects.project_push_index_name, self.image_a, **TestProjects.USER_CLIENT)
@ -95,6 +91,7 @@ class TestProjects(unittest.TestCase):
#6. Get index(IA) by reference successfully; #6. Get index(IA) by reference successfully;
index_data = self.artifact.get_reference_info(TestProjects.project_push_index_name, self.index_name, self.index_tag, **TestProjects.USER_CLIENT) index_data = self.artifact.get_reference_info(TestProjects.project_push_index_name, self.index_name, self.index_tag, **TestProjects.USER_CLIENT)
print("===========index_data:",index_data)
manifests_sha256_harbor_ret = [index_data.references[1].child_digest, index_data.references[0].child_digest] manifests_sha256_harbor_ret = [index_data.references[1].child_digest, index_data.references[0].child_digest]
#7. Verify harbor index is index(IA) pushed by docker manifest CLI; #7. Verify harbor index is index(IA) pushed by docker manifest CLI;

View File

@ -2,7 +2,7 @@ from __future__ import absolute_import
import unittest import unittest
import urllib import urllib
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import harbor_server from testutils import harbor_server
from testutils import TEARDOWN from testutils import TEARDOWN
import library.singularity import library.singularity
@ -14,7 +14,7 @@ from library.artifact import Artifact
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUp(self): def setUp(self):
self.project = Project() self.project = Project()
self.user = User() self.user = User()
@ -23,12 +23,8 @@ class TestProjects(unittest.TestCase):
self.repo_name = "busybox" self.repo_name = "busybox"
self.tag = "1.28" self.tag = "1.28"
@classmethod
def tearDown(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
#1. Delete user(UA); #1. Delete user(UA);
self.user.delete_user(TestProjects.user_sign_image_id, **ADMIN_CLIENT) self.user.delete_user(TestProjects.user_sign_image_id, **ADMIN_CLIENT)

View File

@ -1,7 +1,7 @@
from __future__ import absolute_import from __future__ import absolute_import
import unittest import unittest
from testutils import harbor_server from testutils import harbor_server, suppress_urllib3_warning
from testutils import admin_user from testutils import admin_user
from testutils import admin_pwd from testutils import admin_pwd
from testutils import TEARDOWN from testutils import TEARDOWN
@ -20,7 +20,7 @@ import library.base
import json import json
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUp(self): def setUp(self):
self.system = System() self.system = System()
self.project= Project() self.project= Project()
@ -29,12 +29,8 @@ class TestProjects(unittest.TestCase):
self.repo = Repository() self.repo = Repository()
self.repo_name = "hello-world" self.repo_name = "hello-world"
@classmethod
def tearDown(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
#1. Delete Alice's repository and Luca's repository; #1. Delete Alice's repository and Luca's repository;
self.repo.delete_repoitory(TestProjects.project_Alice_name, TestProjects.repo_a.split('/')[1], **ADMIN_CLIENT) self.repo.delete_repoitory(TestProjects.project_Alice_name, TestProjects.repo_a.split('/')[1], **ADMIN_CLIENT)
self.repo.delete_repoitory(TestProjects.project_Alice_name, TestProjects.repo_b.split('/')[1], **ADMIN_CLIENT) self.repo.delete_repoitory(TestProjects.project_Alice_name, TestProjects.repo_b.split('/')[1], **ADMIN_CLIENT)

View File

@ -1,7 +1,7 @@
from __future__ import absolute_import from __future__ import absolute_import
import unittest import unittest
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import TEARDOWN from testutils import TEARDOWN
from library.project import Project from library.project import Project
from library.user import User from library.user import User
@ -12,7 +12,7 @@ from library.repository import Repository
import swagger_client import swagger_client
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUp(self): def setUp(self):
self.project = Project() self.project = Project()
self.user = User() self.user = User()
@ -23,12 +23,8 @@ class TestProjects(unittest.TestCase):
self.image = "alpine" self.image = "alpine"
self.tag = "latest" self.tag = "latest"
@classmethod
def tearDown(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
#1. Delete rule(RA); #1. Delete rule(RA);
self.replication.delete_replication_rule(TestProjects.rule_id, **ADMIN_CLIENT) self.replication.delete_replication_rule(TestProjects.rule_id, **ADMIN_CLIENT)

View File

@ -3,7 +3,7 @@ from __future__ import absolute_import
import unittest import unittest
import time import time
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import TEARDOWN from testutils import TEARDOWN
from testutils import harbor_server from testutils import harbor_server
from library.repository import push_special_image_to_project from library.repository import push_special_image_to_project
@ -31,8 +31,8 @@ class TestProjects(unittest.TestCase):
Tear Down: Tear Down:
1. Delete project test-retention 1. Delete project test-retention
""" """
@classmethod @suppress_urllib3_warning
def setUpClass(self): def setUp(self):
self.user = User() self.user = User()
self.system = System() self.system = System()
self.repo = Repository() self.repo = Repository()
@ -42,6 +42,16 @@ class TestProjects(unittest.TestCase):
self.repo_name_1 = "test1" self.repo_name_1 = "test1"
self.repo_name_2 = "test2" self.repo_name_2 = "test2"
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def tearDown(self):
# TODO delete_repoitory will fail when no tags left anymore
# resp=self.repo.list_repositories(TestProjects.project_src_repo_id, **TestProjects.USER_RA_CLIENT)
# for repo in resp:
# self.repo.delete_repoitory(repo.name, **TestProjects.USER_RA_CLIENT)
# self.project.delete_project(TestProjects.project_src_repo_id, **TestProjects.USER_RA_CLIENT)
# self.user.delete_user(TestProjects.user_ra_id, **ADMIN_CLIENT)
print("Case completed")
def testTagRetention(self): def testTagRetention(self):
user_ra_password = "Aa123456" user_ra_password = "Aa123456"
user_ra_id, user_ra_name = self.user.create_user(user_password=user_ra_password, **ADMIN_CLIENT) user_ra_id, user_ra_name = self.user.create_user(user_password=user_ra_password, **ADMIN_CLIENT)
@ -119,19 +129,5 @@ class TestProjects(unittest.TestCase):
self.assertTrue(len(artifacts_2)==1) self.assertTrue(len(artifacts_2)==1)
self.assertEqual(artifacts_2[0].digest, tag_data_artifact2_image2.digest) self.assertEqual(artifacts_2[0].digest, tag_data_artifact2_image2.digest)
@classmethod
def tearDownClass(self):
print("Case completed")
# TODO delete_repoitory will fail when no tags left anymore
# @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
# def test_ClearData(self):
# resp=self.repo.list_repositories(TestProjects.project_src_repo_id, **TestProjects.USER_RA_CLIENT)
# for repo in resp:
# self.repo.delete_repoitory(repo.name, **TestProjects.USER_RA_CLIENT)
# self.project.delete_project(TestProjects.project_src_repo_id, **TestProjects.USER_RA_CLIENT)
# self.user.delete_user(TestProjects.user_ra_id, **ADMIN_CLIENT)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()

View File

@ -2,7 +2,7 @@ from __future__ import absolute_import
import unittest import unittest
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import TEARDOWN from testutils import TEARDOWN
from testutils import harbor_server from testutils import harbor_server
from library.user import User from library.user import User
@ -13,13 +13,13 @@ from library.repository import push_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):
@classmethod @suppress_urllib3_warning
def setUp(self): def setUp(self):
self.project = Project() self.project = Project()
self.user = User() self.user = User()
self.repo = Repository() self.repo = Repository()
@classmethod @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def tearDown(self): def tearDown(self):
print("Case completed") print("Case completed")

View File

@ -2,7 +2,7 @@ from __future__ import absolute_import
import unittest import unittest
import sys import sys
from testutils import harbor_server from testutils import harbor_server, suppress_urllib3_warning
from testutils import TEARDOWN from testutils import TEARDOWN
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT
from library.project import Project from library.project import Project
@ -11,22 +11,20 @@ from library.repository import Repository
from library.repository import push_image_to_project from library.repository import push_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.scanner import Scanner
from library.sign import sign_image from library.sign import sign_image
class TestScan(unittest.TestCase): class TestScan(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUp(self): def setUp(self):
self.project= Project() self.project= Project()
self.user= User() self.user= User()
self.artifact = Artifact() self.artifact = Artifact()
self.repo = Repository() self.repo = Repository()
self.scan = Scan() self.scan = Scan()
self.scanner = Scanner()
self.url = ADMIN_CLIENT["endpoint"] self.url = ADMIN_CLIENT["endpoint"]
self.user_password = "Aa123456" self.user_password = "Aa123456"
self.project_id, self.project_name, self.user_id, self.user_name = [None] * 4 self.project_id, self.project_name, self.user_id, self.user_name, self.repo_name1, self.repo_name2 = [None] * 6
self.user_id, self.user_name = self.user.create_user(user_password = self.user_password, **ADMIN_CLIENT) self.user_id, self.user_name = self.user.create_user(user_password = self.user_password, **ADMIN_CLIENT)
self.USER_CLIENT = dict(with_signature = True, with_immutable_status = True, endpoint = self.url, username = self.user_name, password = self.user_password, with_scan_overview = True) self.USER_CLIENT = dict(with_signature = True, with_immutable_status = True, endpoint = self.url, username = self.user_name, password = self.user_password, with_scan_overview = True)
@ -37,14 +35,11 @@ class TestScan(unittest.TestCase):
#3. Add user(UA) as a member of project(PA) with project-admin role; #3. Add user(UA) as a member of project(PA) with project-admin role;
self.project.add_project_members(self.project_id, user_id = self.user_id, **ADMIN_CLIENT) self.project.add_project_members(self.project_id, user_id = self.user_id, **ADMIN_CLIENT)
@classmethod
def tearDown(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == True, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == True, "Test data won't be erased.")
def test_ClearData(self): def do_tearDown(self):
#1. Delete repository(RA) by user(UA); #1. Delete repository(RA) by user(UA);
self.repo.delete_repoitory(self.project_name, TestScan.repo_name.split('/')[1], **self.USER_CLIENTT) self.repo.delete_repoitory(self.project_name, self.repo_name1.split('/')[1], **self.USER_CLIENT)
self.repo.delete_repoitory(self.project_name, self.repo_name2.split('/')[1], **self.USER_CLIENT)
#2. Delete project(PA); #2. Delete project(PA);
self.project.delete_project(self.project_id, **self.USER_CLIENT) self.project.delete_project(self.project_id, **self.USER_CLIENT)
@ -80,22 +75,13 @@ 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);
TestScan.repo_name, tag = push_image_to_project(self.project_name, harbor_server, self.user_name, self.user_password, image, src_tag) self.repo_name1, tag = push_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, TestScan.repo_name.split('/')[1], tag, **self.USER_CLIENT) self.scan.scan_artifact(self.project_name, self.repo_name1.split('/')[1], 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)
#7. Swith Scanner; self.do_tearDown()
uuid = self.scanner.scanners_get_uuid(**ADMIN_CLIENT)
self.scanner.scanners_registration_id_patch(uuid, **ADMIN_CLIENT)
image = "tomcat"
src_tag = "latest"
TestScan.repo_name, tag = push_image_to_project(self.project_name, harbor_server, self.user_name, self.user_password, image, src_tag)
#8. Send scan another 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.split('/')[1], tag, **self.USER_CLIENT)
self.artifact.check_image_scan_result(self.project_name, image, tag, **self.USER_CLIENT)
def testScanSignedImage(self): def testScanSignedImage(self):
""" """

View File

@ -1,7 +1,7 @@
from __future__ import absolute_import from __future__ import absolute_import
import unittest import unittest
from testutils import harbor_server 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_image_to_project
@ -9,13 +9,13 @@ from library.scan import Scan
class TestScanImageInPublicProject(unittest.TestCase): class TestScanImageInPublicProject(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUp(self): def setUp(self):
self.artifact = Artifact() self.artifact = Artifact()
self.repo = Repository() self.repo = Repository()
self.scan = Scan() self.scan = Scan()
@classmethod @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def tearDown(self): def tearDown(self):
print("Case completed") print("Case completed")

View File

@ -1,7 +1,7 @@
from __future__ import absolute_import from __future__ import absolute_import
import unittest import unittest
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import harbor_server from testutils import harbor_server
from testutils import TEARDOWN from testutils import TEARDOWN
from library.sign import sign_image from library.sign import sign_image
@ -13,7 +13,7 @@ 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):
@classmethod @suppress_urllib3_warning
def setUp(self): def setUp(self):
self.project = Project() self.project = Project()
self.user = User() self.user = User()
@ -21,12 +21,8 @@ class TestProjects(unittest.TestCase):
self.repo = Repository() self.repo = Repository()
self.repo_name_1 = "test1_sign" self.repo_name_1 = "test1_sign"
@classmethod
def tearDown(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
# remove the deletion as the signed image cannot be deleted. # remove the deletion as the signed image cannot be deleted.
#1. Delete repository(RA) by user(UA); #1. Delete repository(RA) by user(UA);
#self.repo.delete_repoitory(TestProjects.project_sign_image_name, TestProjects.repo_name.split('/')[1], **TestProjects.USER_sign_image_CLIENT) #self.repo.delete_repoitory(TestProjects.project_sign_image_name, TestProjects.repo_name.split('/')[1], **TestProjects.USER_sign_image_CLIENT)
@ -85,9 +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)
ret = self.repo.delete_repoitory(TestProjects.project_sign_image_name, TestProjects.repo_name.split('/')[1], expect_status_code=412, **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.assertIn("with signature cannot be deleted", ret)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()

View File

@ -4,7 +4,7 @@ import unittest
import swagger_client import swagger_client
import time import time
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, TEARDOWN, suppress_urllib3_warning
from library.user import User from library.user import User
from library.system import System from library.system import System
@ -27,6 +27,7 @@ class TestSysCVEAllowlist(unittest.TestCase):
1. Clear the system level CVE allowlist. 1. Clear the system level CVE allowlist.
2. Delete User(RA) 2. Delete User(RA)
""" """
@suppress_urllib3_warning
def setUp(self): def setUp(self):
self.user = User() self.user = User()
self.system = System() self.system = System()
@ -39,6 +40,13 @@ class TestSysCVEAllowlist(unittest.TestCase):
password=user_ra_password) password=user_ra_password)
self.user_ra_id = int(user_ra_id) self.user_ra_id = int(user_ra_id)
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def tearDown(self):
print("TearDown: Clearing the Allowlist")
self.system.set_cve_allowlist(**ADMIN_CLIENT)
print("TearDown: Deleting user: %d" % self.user_ra_id)
self.user.delete_user(self.user_ra_id, **ADMIN_CLIENT)
def testSysCVEAllowlist(self): def testSysCVEAllowlist(self):
# 1. User(RA) reads the system level CVE allowlist and it's empty. # 1. User(RA) reads the system level CVE allowlist and it's empty.
wl = self.system.get_cve_allowlist(**self.USER_RA_CLIENT) wl = self.system.get_cve_allowlist(**self.USER_RA_CLIENT)
@ -62,12 +70,5 @@ class TestSysCVEAllowlist(unittest.TestCase):
wl = self.system.get_cve_allowlist(**self.USER_RA_CLIENT) wl = self.system.get_cve_allowlist(**self.USER_RA_CLIENT)
self.assertEqual(exp, wl.expires_at) self.assertEqual(exp, wl.expires_at)
def tearDown(self):
print("TearDown: Clearing the Allowlist")
self.system.set_cve_allowlist(**ADMIN_CLIENT)
print("TearDown: Deleting user: %d" % self.user_ra_id)
self.user.delete_user(self.user_ra_id, **ADMIN_CLIENT)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()

View File

@ -1,7 +1,7 @@
from __future__ import absolute_import from __future__ import absolute_import
import unittest import unittest
from testutils import harbor_server from testutils import harbor_server, suppress_urllib3_warning
from testutils import TEARDOWN from testutils import TEARDOWN
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT
from library.system import System from library.system import System
@ -10,35 +10,29 @@ 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_image_to_project
from library.artifact import Artifact from library.artifact import Artifact
from library.scanner import Scanner class TestScanAll(unittest.TestCase):
@suppress_urllib3_warning
class TestProjects(unittest.TestCase):
@classmethod
def setUp(self): def setUp(self):
self.system = System() self.system = System()
self.project= Project() self.project= Project()
self.user= User() self.user= User()
self.artifact = Artifact() self.artifact = Artifact()
self.repo = Repository() self.repo = Repository()
self.scanner = Scanner()
@classmethod
def tearDown(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
#1. Delete Alice's repository and Luca's repository; #1. Delete Alice's repository and Luca's repository;
self.repo.delete_repoitory(TestProjects.project_Alice_name, TestProjects.repo_Alice_name.split('/')[1], **ADMIN_CLIENT) self.repo.delete_repoitory(TestScanAll.project_Alice_name, TestScanAll.repo_Alice_name.split('/')[1], **ADMIN_CLIENT)
self.repo.delete_repoitory(TestProjects.project_Luca_name, TestProjects.repo_Luca_name.split('/')[1], **ADMIN_CLIENT) self.repo.delete_repoitory(TestScanAll.project_Luca_name, TestScanAll.repo_Luca_name.split('/')[1], **ADMIN_CLIENT)
#2. Delete Alice's project and Luca's project; #2. Delete Alice's project and Luca's project;
self.project.delete_project(TestProjects.project_Alice_id, **ADMIN_CLIENT) self.project.delete_project(TestScanAll.project_Alice_id, **ADMIN_CLIENT)
self.project.delete_project(TestProjects.project_Luca_id, **ADMIN_CLIENT) self.project.delete_project(TestScanAll.project_Luca_id, **ADMIN_CLIENT)
#3. Delete user Alice and Luca. #3. Delete user Alice and Luca.
self.user.delete_user(TestProjects.user_Alice_id, **ADMIN_CLIENT) self.user.delete_user(TestScanAll.user_Alice_id, **ADMIN_CLIENT)
self.user.delete_user(TestProjects.user_Luca_id, **ADMIN_CLIENT) self.user.delete_user(TestScanAll.user_Luca_id, **ADMIN_CLIENT)
print("Case completed")
def testSystemLevelScanALL(self): def testSystemLevelScanALL(self):
""" """
@ -59,15 +53,15 @@ class TestProjects(unittest.TestCase):
user_common_password = "Aa123456" user_common_password = "Aa123456"
#1. Create user Alice and Luca; #1. Create user Alice and Luca;
TestProjects.user_Alice_id, user_Alice_name = self.user.create_user(user_password = user_common_password, **ADMIN_CLIENT) TestScanAll.user_Alice_id, user_Alice_name = self.user.create_user(user_password = user_common_password, **ADMIN_CLIENT)
TestProjects.user_Luca_id, user_Luca_name = self.user.create_user(user_password = user_common_password, **ADMIN_CLIENT) TestScanAll.user_Luca_id, user_Luca_name = self.user.create_user(user_password = user_common_password, **ADMIN_CLIENT)
USER_ALICE_CLIENT=dict(endpoint = url, username = user_Alice_name, password = user_common_password, with_scan_overview = True) USER_ALICE_CLIENT=dict(endpoint = url, username = user_Alice_name, password = user_common_password, with_scan_overview = True)
USER_LUCA_CLIENT=dict(endpoint = url, username = user_Luca_name, password = user_common_password, with_scan_overview = True) USER_LUCA_CLIENT=dict(endpoint = url, username = user_Luca_name, password = user_common_password, with_scan_overview = True)
#2. Create 2 new private projects project_Alice and project_Luca; #2. Create 2 new private projects project_Alice and project_Luca;
TestProjects.project_Alice_id, TestProjects.project_Alice_name = self.project.create_project(metadata = {"public": "false"}, **USER_ALICE_CLIENT) TestScanAll.project_Alice_id, TestScanAll.project_Alice_name = self.project.create_project(metadata = {"public": "false"}, **USER_ALICE_CLIENT)
TestProjects.project_Luca_id, TestProjects.project_Luca_name = self.project.create_project(metadata = {"public": "false"}, **USER_LUCA_CLIENT) TestScanAll.project_Luca_id, TestScanAll.project_Luca_name = self.project.create_project(metadata = {"public": "false"}, **USER_LUCA_CLIENT)
#3. Push a image to project_Alice and push another image to project_Luca; #3. Push a image to project_Alice and push another image to project_Luca;
@ -77,33 +71,21 @@ class TestProjects(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;
TestProjects.repo_Alice_name, tag_Alice = push_image_to_project(TestProjects.project_Alice_name, harbor_server, user_Alice_name, user_common_password, image_a, src_tag) 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)
#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;
TestProjects.repo_Luca_name, tag_Luca = push_image_to_project(TestProjects.project_Luca_name, harbor_server, user_Luca_name, user_common_password, image_b, src_tag) 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)
#4. Trigger scan all event; #4. Trigger scan all event;
self.system.scan_now(**ADMIN_CLIENT) self.system.scan_now(**ADMIN_CLIENT)
#5. Check if image in project_Alice and another image in project_Luca were both scanned. #5. Check if image in project_Alice and another image in project_Luca were both scanned.
self.artifact.check_image_scan_result(TestProjects.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)
self.artifact.check_image_scan_result(TestProjects.project_Luca_name, image_b, tag_Luca, **USER_LUCA_CLIENT) self.artifact.check_image_scan_result(TestScanAll.project_Luca_name, image_b, tag_Luca, **USER_LUCA_CLIENT)
#6. Swith Scanner;
uuid = self.scanner.scanners_get_uuid(**ADMIN_CLIENT)
self.scanner.scanners_registration_id_patch(uuid, **ADMIN_CLIENT)
#7. Trigger scan all event;
self.system.scan_now(**ADMIN_CLIENT)
#8. Check if image in project_Alice and another image in project_Luca were both scanned.
self.artifact.check_image_scan_result(TestProjects.project_Alice_name, image_a, tag_Alice, **USER_ALICE_CLIENT)
self.artifact.check_image_scan_result(TestProjects.project_Luca_name, image_b, tag_Luca, **USER_LUCA_CLIENT)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()

View File

@ -3,7 +3,7 @@ from __future__ import absolute_import
import unittest import unittest
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import harbor_server from testutils import harbor_server
from testutils import TEARDOWN from testutils import TEARDOWN
import library.repository import library.repository
@ -17,8 +17,8 @@ from library.repository import push_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):
@classmethod @suppress_urllib3_warning
def setUpClass(self): def setUp(self):
self.project= Project() self.project= Project()
self.user= User() self.user= User()
self.artifact = Artifact() self.artifact = Artifact()
@ -27,12 +27,8 @@ class TestProjects(unittest.TestCase):
self.user_password = "Aa123456" self.user_password = "Aa123456"
self.repo_name = "hello-world" self.repo_name = "hello-world"
@classmethod
def tearDownClass(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
#1. Delete repository(RA,IA) by user(UA); #1. Delete repository(RA,IA) by user(UA);
self.repo.delete_repoitory(TestProjects.project_name, self.repo_name, **TestProjects.USER_CLIENT) self.repo.delete_repoitory(TestProjects.project_name, self.repo_name, **TestProjects.USER_CLIENT)
@ -41,6 +37,7 @@ class TestProjects(unittest.TestCase):
#3. Delete user(UA). #3. Delete user(UA).
self.user.delete_user(TestProjects.user_id, **ADMIN_CLIENT) self.user.delete_user(TestProjects.user_id, **ADMIN_CLIENT)
print("Case completed")
def testCreateDeleteTag(self): def testCreateDeleteTag(self):
""" """

View File

@ -4,7 +4,7 @@ from __future__ import absolute_import
import unittest import unittest
import sys import sys
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, TEARDOWN, suppress_urllib3_warning
from testutils import harbor_server 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
@ -16,8 +16,8 @@ from library.tag_immutability import Tag_Immutability
from library.repository import push_special_image_to_project from library.repository import push_special_image_to_project
class TestTagImmutability(unittest.TestCase): class TestTagImmutability(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUpClass(self): def setUp(self):
self.url = ADMIN_CLIENT["endpoint"] self.url = ADMIN_CLIENT["endpoint"]
self.user_password = "Aa123456" self.user_password = "Aa123456"
self.project= Project() self.project= Project()
@ -32,6 +32,10 @@ class TestTagImmutability(unittest.TestCase):
self.exsiting_rule = dict(selector_repository="rel*", selector_tag="v2.*") self.exsiting_rule = dict(selector_repository="rel*", selector_tag="v2.*")
self.project_id, self.project_name = self.project.create_project(metadata = {"public": "false"}, **self.USER_CLIENT) self.project_id, self.project_name = self.project.create_project(metadata = {"public": "false"}, **self.USER_CLIENT)
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def tearDown(self):
print("Case completed")
def check_tag_immutability(self, artifact, tag_name, status = True): def check_tag_immutability(self, artifact, tag_name, status = True):
for tag in artifact.tags: for tag in artifact.tags:
if tag.name == tag_name: if tag.name == tag_name:
@ -288,10 +292,6 @@ class TestTagImmutability(unittest.TestCase):
self.tag_immutability.create_tag_immutability_policy_rule(self.project_id, **self.exsiting_rule, **self.USER_CLIENT) self.tag_immutability.create_tag_immutability_policy_rule(self.project_id, **self.exsiting_rule, **self.USER_CLIENT)
self.tag_immutability.create_tag_immutability_policy_rule(self.project_id, **self.exsiting_rule, expect_status_code = 409, **self.USER_CLIENT) self.tag_immutability.create_tag_immutability_policy_rule(self.project_id, **self.exsiting_rule, expect_status_code = 409, **self.USER_CLIENT)
@classmethod
def tearDownClass(self):
print("Case completed")
if __name__ == '__main__': if __name__ == '__main__':
suite = unittest.TestSuite(unittest.makeSuite(TestTagImmutability)) suite = unittest.TestSuite(unittest.makeSuite(TestTagImmutability))
result = unittest.TextTestRunner(sys.stdout, verbosity=2, failfast=True).run(suite) result = unittest.TextTestRunner(sys.stdout, verbosity=2, failfast=True).run(suite)

View File

@ -3,7 +3,7 @@ from __future__ import absolute_import
import unittest import unittest
import time import time
from testutils import ADMIN_CLIENT from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import TEARDOWN from testutils import TEARDOWN
from testutils import TestResult from testutils import TestResult
from library.user import User from library.user import User
@ -14,30 +14,16 @@ from library.repository import push_image_to_project
from testutils import harbor_server from testutils import harbor_server
class TestProjects(unittest.TestCase): class TestProjects(unittest.TestCase):
@classmethod @suppress_urllib3_warning
def setUp(self): def setUp(self):
test_result = TestResult() self.project= Project()
self.test_result= test_result self.user= User()
self.repo= Repository()
project = Project() self.projectv2= ProjectV2()
self.project= project
user = User()
self.user= user
repo = Repository()
self.repo= repo
projectv2 = ProjectV2()
self.projectv2= projectv2
@classmethod
def tearDown(self):
self.test_result.get_final_result()
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.") @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self): def tearDown(self):
print("Case completed")
#1. Delete project(PA); #1. Delete project(PA);
self.project.delete_project(TestProjects.project_user_view_logs_id, **TestProjects.USER_USER_VIEW_LOGS_CLIENT) self.project.delete_project(TestProjects.project_user_view_logs_id, **TestProjects.USER_USER_VIEW_LOGS_CLIENT)
@ -57,6 +43,7 @@ class TestProjects(unittest.TestCase):
1. Delete project(PA); 1. Delete project(PA);
2. Delete user(UA). 2. Delete user(UA).
""" """
test_result= TestResult()
url = ADMIN_CLIENT["endpoint"] url = ADMIN_CLIENT["endpoint"]
admin_name = ADMIN_CLIENT["username"] admin_name = ADMIN_CLIENT["username"]
admin_password = ADMIN_CLIENT["password"] admin_password = ADMIN_CLIENT["password"]
@ -75,7 +62,7 @@ class TestProjects(unittest.TestCase):
operation = "create" operation = "create"
log_count = self.projectv2.filter_project_logs(project_user_view_logs_name, user_user_view_logs_name, project_user_view_logs_name, "project", operation, **TestProjects.USER_USER_VIEW_LOGS_CLIENT) log_count = self.projectv2.filter_project_logs(project_user_view_logs_name, user_user_view_logs_name, project_user_view_logs_name, "project", operation, **TestProjects.USER_USER_VIEW_LOGS_CLIENT)
if log_count != 1: if log_count != 1:
self.test_result.add_test_result("1 - Failed to get log with user:{}, resource:{}, resource_type:{} and operation:{}, expect count 1, but actual is {}.". test_result.add_test_result("1 - Failed to get log with user:{}, resource:{}, resource_type:{} and operation:{}, expect count 1, but actual is {}.".
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;
@ -86,7 +73,7 @@ class TestProjects(unittest.TestCase):
operation = "create" operation = "create"
log_count = self.projectv2.filter_project_logs(project_user_view_logs_name, admin_name, r'{}:{}'.format(repo_name, tag), "artifact", operation, **TestProjects.USER_USER_VIEW_LOGS_CLIENT) log_count = self.projectv2.filter_project_logs(project_user_view_logs_name, admin_name, r'{}:{}'.format(repo_name, tag), "artifact", operation, **TestProjects.USER_USER_VIEW_LOGS_CLIENT)
if log_count != 1: if log_count != 1:
self.test_result.add_test_result("2 - Failed to get log with user:{}, resource:{}, resource_type:{} and operation:{}, expect count 1, but actual is {}.". test_result.add_test_result("2 - Failed to get log with user:{}, resource:{}, resource_type:{} and operation:{}, expect count 1, but actual is {}.".
format(user_user_view_logs_name, project_user_view_logs_name, "artifact", operation, log_count)) format(user_user_view_logs_name, project_user_view_logs_name, "artifact", operation, log_count))
#4.1 Delete repository(RA) by user(UA); #4.1 Delete repository(RA) by user(UA);
self.repo.delete_repoitory(project_user_view_logs_name, repo_name.split('/')[1], **TestProjects.USER_USER_VIEW_LOGS_CLIENT) self.repo.delete_repoitory(project_user_view_logs_name, repo_name.split('/')[1], **TestProjects.USER_USER_VIEW_LOGS_CLIENT)
@ -96,8 +83,10 @@ class TestProjects(unittest.TestCase):
operation = "delete" operation = "delete"
log_count = self.projectv2.filter_project_logs(project_user_view_logs_name, user_user_view_logs_name, repo_name, "repository", operation, **TestProjects.USER_USER_VIEW_LOGS_CLIENT) log_count = self.projectv2.filter_project_logs(project_user_view_logs_name, user_user_view_logs_name, repo_name, "repository", operation, **TestProjects.USER_USER_VIEW_LOGS_CLIENT)
if log_count != 1: if log_count != 1:
self.test_result.add_test_result("5 - Failed to get log with user:{}, resource:{}, resource_type:{} and operation:{}, expect count 1, but actual is {}.". test_result.add_test_result("5 - Failed to get log with user:{}, resource:{}, resource_type:{} and operation:{}, expect count 1, but actual is {}.".
format(user_user_view_logs_name, project_user_view_logs_name, "repository", operation, log_count)) format(user_user_view_logs_name, project_user_view_logs_name, "repository", operation, log_count))
test_result.get_final_result()
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()

View File

@ -1,6 +1,8 @@
import time import time
import os import os
import sys import sys
import warnings
from functools import wraps
sys.path.insert(0, os.environ["SWAGGER_CLIENT_PATH"]) sys.path.insert(0, os.environ["SWAGGER_CLIENT_PATH"])
path=os.getcwd() + "/library" path=os.getcwd() + "/library"
@ -63,6 +65,17 @@ class TestResult(object):
print("Error message:", each_err_msg) print("Error message:", each_err_msg)
raise Exception(r"Test case failed with {} errors.".format(self.num_errors)) raise Exception(r"Test case failed with {} errors.".format(self.num_errors))
def suppress_urllib3_warning(func):
@wraps(func)
def inner_func(*args):
warnings.filterwarnings(action="ignore",
message="unclosed",
category=ResourceWarning)
warnings.filterwarnings(action='ignore',
message='Unverified HTTPS request')
func(*args)
return inner_func
from contextlib import contextmanager from contextlib import contextmanager
@contextmanager @contextmanager

View File

@ -14,4 +14,5 @@ Harbor API Test
Log To Console ${ip} 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} python ${testcase_name}
Log To Console ${output} Log To Console ${output}
Log ${output}
Should Be Equal As Integers ${rc} 0 Should Be Equal As Integers ${rc} 0

View File

@ -149,8 +149,8 @@ Rename Rule
Retry Element Click ${rule_filter_search} Retry Element Click ${rule_filter_search}
Retry Text Input ${rule_filter_input} ${rule} Retry Text Input ${rule_filter_input} ${rule}
Retry Element Click //clr-dg-row[contains(.,'${rule}')]//label Retry Element Click //clr-dg-row[contains(.,'${rule}')]//label
Retry Element Click ${replication_action} Retry Element Click ${replication_rule_action}
Retry Element Click ${action_bar_edit} Retry Element Click ${replication_rule_action_bar_edit}
Retry Text Input ${rule_name} ${newname} Retry Text Input ${rule_name} ${newname}
Retry Element Click ${rule_save_button} Retry Element Click ${rule_save_button}
@ -159,8 +159,8 @@ Delete Rule
Retry Element Click ${rule_filter_search} Retry Element Click ${rule_filter_search}
Retry Text Input ${rule_filter_input} ${rule} Retry Text Input ${rule_filter_input} ${rule}
Retry Element Click //clr-dg-row[contains(.,'${rule}')]//label Retry Element Click //clr-dg-row[contains(.,'${rule}')]//label
Retry Element Click ${replication_action} Retry Element Click ${replication_rule_action}
Retry Element Click ${action_bar_delete} Retry Element Click ${replication_rule_action_bar_delete}
Retry Wait Until Page Contains Element ${dialog_delete} Retry Wait Until Page Contains Element ${dialog_delete}
#change from click to mouse down and up #change from click to mouse down and up
Mouse Down ${dialog_delete} Mouse Down ${dialog_delete}
@ -169,7 +169,7 @@ Delete Rule
Select Rule Select Rule
[Arguments] ${rule} [Arguments] ${rule}
Retry Double Keywords When Error Retry Element Click //clr-dg-cell[contains(.,'${rule}')] Retry Wait Element ${replication_exec_id} Retry Double Keywords When Error Retry Element Click //clr-dg-row[contains(.,'${rule}')]/div/div[1]/div Retry Wait Element ${replication_rule_exec_id}
Stop Jobs Stop Jobs
Retry Element Click ${stop_jobs_button} Retry Element Click ${stop_jobs_button}
@ -180,25 +180,25 @@ View Job Log
Retry Text Input ${job_filter_input} ${job} Retry Text Input ${job_filter_input} ${job}
Retry Link Click //clr-dg-row[contains(.,'${job}')]//a Retry Link Click //clr-dg-row[contains(.,'${job}')]//a
Find Item And Click Edit Button Find Registry And Click Edit Button
[Arguments] ${name} [Arguments] ${name}
Filter Object ${name} Filter Object ${name}
Retry Select Object ${name} Retry Select Object ${name}
Retry Element Click ${action_bar_edit} Retry Element Click ${registry_edit_btn}
Find Rule And Click Edit Button Find Rule And Click Edit Button
[Arguments] ${name} [Arguments] ${name}
Filter Object ${name} Filter Object ${name}
Retry Select Object ${name} Retry Select Object ${name}
Retry Element Click ${replication_action} Retry Element Click ${replication_rule_action}
Retry Element Click ${action_bar_edit} Retry Element Click ${replication_rule_action_bar_edit}
Find Item And Click Delete Button Find Rule And Click Delete Button
[Arguments] ${name} [Arguments] ${name}
Filter Object ${name} Filter Object ${name}
Retry Select Object ${name} Retry Select Object ${name}
Retry Element Click ${replication_action} Retry Element Click ${replication_rule_action}
Retry Element Click ${action_bar_delete} Retry Element Click ${replication_rule_action_bar_delete}
Switch To Replication Manage Page Switch To Replication Manage Page
[Arguments] ${name} [Arguments] ${name}
@ -213,7 +213,7 @@ Delete Replication Rule By Name
[Arguments] ${name} [Arguments] ${name}
Switch To Registries Switch To Registries
Switch To Replication Manage Switch To Replication Manage
Find Item And Click Delete Button ${name} Find Rule And Click Delete Button ${name}
Ensure Delete Replication Rule By Name Ensure Delete Replication Rule By Name
[Arguments] ${name} [Arguments] ${name}
@ -223,7 +223,7 @@ Ensure Delete Replication Rule By Name
Rename Endpoint Rename Endpoint
[arguments] ${name} ${newname} [arguments] ${name} ${newname}
Find Item And Click Edit Button ${name} Find Registry And Click Edit Button ${name}
Retry Wait Until Page Contains Element ${destination_name_xpath} Retry Wait Until Page Contains Element ${destination_name_xpath}
Retry Text Input ${destination_name_xpath} ${newname} Retry Text Input ${destination_name_xpath} ${newname}
Retry Element Click ${replication_save_xpath} Retry Element Click ${replication_save_xpath}
@ -233,15 +233,15 @@ Delete Endpoint
Retry Element Click ${endpoint_filter_search} Retry Element Click ${endpoint_filter_search}
Retry Text Input ${endpoint_filter_input} ${name} Retry Text Input ${endpoint_filter_input} ${name}
#click checkbox before target endpoint #click checkbox before target endpoint
Retry Double Keywords When Error Retry Element Click //clr-dg-row[contains(.,'${name}')]//clr-checkbox-wrapper Retry Wait Element ${action_bar_delete} Retry Double Keywords When Error Retry Element Click //clr-dg-row[contains(.,'${name}')]//clr-checkbox-wrapper Retry Wait Element ${registry_del_btn}
Retry Element Click ${action_bar_delete} Retry Element Click ${registry_del_btn}
Wait Until Page Contains Element ${dialog_delete} Wait Until Page Contains Element ${dialog_delete}
Retry Element Click ${dialog_delete} Retry Element Click ${dialog_delete}
Select Rule And Replicate Select Rule And Replicate
[Arguments] ${rule_name} [Arguments] ${rule_name}
Select Rule ${rule_name} Select Rule ${rule_name}
Retry Element Click ${replication_exec_id} Retry Element Click ${replication_rule_exec_id}
Retry Double Keywords When Error Retry Element Click xpath=${dialog_replicate} Retry Wait Until Page Not Contains Element xpath=${dialog_replicate} Retry Double Keywords When Error Retry Element Click xpath=${dialog_replicate} Retry Wait Until Page Not Contains Element xpath=${dialog_replicate}
Delete Replication Rule Delete Replication Rule
@ -250,8 +250,8 @@ Delete Replication Rule
Retry Text Input ${endpoint_filter_input} ${name} Retry Text Input ${endpoint_filter_input} ${name}
#click checkbox before target endpoint #click checkbox before target endpoint
Retry Element Click //clr-dg-row[contains(.,'${name}')]//label Retry Element Click //clr-dg-row[contains(.,'${name}')]//label
Retry Element Click ${replication_action} Retry Element Click ${replication_rule_action}
Retry Element Click ${action_bar_delete} Retry Element Click ${replication_rule_action_bar_delete}
Wait Until Page Contains Element ${dialog_delete} Wait Until Page Contains Element ${dialog_delete}
Retry Element Click ${dialog_delete} Retry Element Click ${dialog_delete}

View File

@ -51,8 +51,7 @@ ${job_filter_search} //hbr-replication/div/div[3]//hbr-filter/span/clr-icon
${job_filter_input} //hbr-replication/div/div[3]//hbr-filter/span//input ${job_filter_input} //hbr-replication/div/div[3]//hbr-filter/span//input
${endpoint_filter_search} //hbr-filter/span/clr-icon ${endpoint_filter_search} //hbr-filter/span/clr-icon
${endpoint_filter_input} //hbr-filter/span//input ${endpoint_filter_input} //hbr-filter/span//input
${action_bar_edit} //button[contains(.,'Edit')]
${action_bar_delete} //button[contains(.,'Delete')]
${stop_jobs_button} //button[contains(.,'Stop Jobs')] ${stop_jobs_button} //button[contains(.,'Stop Jobs')]
${dialog_close} //clr-modal//button[contains(.,'CLOSE')] ${dialog_close} //clr-modal//button[contains(.,'CLOSE')]
${dialog_delete} //clr-modal//button[contains(.,'DELETE')] ${dialog_delete} //clr-modal//button[contains(.,'DELETE')]
@ -68,10 +67,14 @@ ${rule_resource_selector} //*[@id='select_resource']
${trigger_mode_selector} //*[@id='ruleTrigger'] ${trigger_mode_selector} //*[@id='ruleTrigger']
${dest_namespace_xpath} //*[@id='dest_namespace'] ${dest_namespace_xpath} //*[@id='dest_namespace']
${new_replication_rule_id} //*[@id='new_replication_rule_id'] ${new_replication_rule_id} //*[@id='new_replication_rule_id']
${edit_replication_rule_id} //*[@id='edit_replication_rule_id']
${replication_action} //*[@id='rule-action'] ${registry_edit_btn} //button[contains(.,'Edit')]
${delete_replication_rule_id} //*[@id='delete_replication_rule_id'] ${registry_del_btn} //button[contains(.,'Delete')]
${replication_exec_id} //*[@id='replication_exe_id']
${replication_rule_action} //*[@id='rule-action']
${replication_rule_action_bar_edit} //*[@id='edit_replication_rule_id']
${replication_rule_action_bar_delete} //*[@id='delete_replication_rule_id']
${replication_rule_exec_id} //*[@id='replication_exe_id']
${replication_task_line_1} //clr-datagrid//clr-dg-row/div/div[2]//clr-checkbox-wrapper/label[1] ${replication_task_line_1} //clr-datagrid//clr-dg-row/div/div[2]//clr-checkbox-wrapper/label[1]
${is_overide_xpath} //label[contains(.,'Replace the destination resources if name exists')] ${is_overide_xpath} //label[contains(.,'Replace the destination resources if name exists')]
${enable_rule_xpath} //label[contains(.,'Enable rule')] ${enable_rule_xpath} //label[contains(.,'Enable rule')]