mirror of
https://github.com/goharbor/harbor.git
synced 2024-11-29 05:35:43 +01:00
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:
parent
5cc890c78f
commit
444de8536a
@ -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:
|
||||||
|
@ -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):
|
||||||
|
@ -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):
|
||||||
|
@ -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):
|
||||||
"""
|
"""
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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")
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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()
|
@ -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)
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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):
|
||||||
|
@ -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):
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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()
|
||||||
|
@ -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")
|
||||||
|
|
||||||
|
@ -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):
|
||||||
"""
|
"""
|
||||||
|
@ -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")
|
||||||
|
|
||||||
|
@ -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()
|
||||||
|
@ -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()
|
||||||
|
@ -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()
|
@ -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):
|
||||||
"""
|
"""
|
||||||
|
@ -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)
|
||||||
|
@ -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()
|
@ -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
|
||||||
|
@ -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
|
@ -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}
|
||||||
|
|
||||||
|
@ -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')]
|
||||||
|
Loading…
Reference in New Issue
Block a user