Merge pull request #13442 from danfengliu/Suppress-urllib3-warning-and-fix-nighlty-element-id-issue

Suppress urllib3 warning and fix nightly element locator issue
This commit is contained in:
danfengliu 2020-11-10 11:02:16 +08:00 committed by GitHub
commit dae17a890d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
42 changed files with 230 additions and 339 deletions

View File

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

View File

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

View File

@ -80,9 +80,12 @@ class Repository(base.Base, object):
_, status_code, _ = client.delete_repository_with_http_info(project_name, repo_name)
except Exception as e:
base._assert_status_code(expect_status_code, e.status)
return e.body
base._assert_status_code(expect_status_code, status_code)
base._assert_status_code(200, status_code)
if expect_response_body is not None:
base._assert_status_body(expect_response_body, e.body)
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):

View File

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

View File

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

View File

@ -2,7 +2,7 @@ from __future__ import absolute_import
import unittest
from testutils import harbor_server
from testutils import harbor_server, suppress_urllib3_warning
from testutils import TEARDOWN
from testutils import ADMIN_CLIENT
from library.artifact import Artifact
@ -13,7 +13,7 @@ from library.repository import push_image_to_project
from library.label import Label
class TestProjects(unittest.TestCase):
@classmethod
@suppress_urllib3_warning
def setUp(self):
self.project = Project()
self.user = User()
@ -21,12 +21,8 @@ class TestProjects(unittest.TestCase):
self.repo = Repository()
self.label = Label()
@classmethod
def tearDown(self):
print("Case completed")
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self):
def tearDown(self):
#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)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,7 +1,7 @@
from __future__ import absolute_import
import unittest
from testutils import harbor_server
from testutils import harbor_server, suppress_urllib3_warning
from testutils import TEARDOWN
from testutils import ADMIN_CLIENT
from library.user import User
@ -10,18 +10,15 @@ from library.configurations import Configurations
class TestLdapAdminRole(unittest.TestCase):
@classmethod
@suppress_urllib3_warning
def setUp(self):
url = ADMIN_CLIENT["endpoint"]
self.conf= Configurations()
self.user = User()
self.project = Project()
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):
"""
@ -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)
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)
_user = self.user.get_user_current(**self.USER_MIKE)
@ -47,5 +45,11 @@ class TestLdapAdminRole(unittest.TestCase):
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__':
unittest.main()

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -3,7 +3,7 @@ from __future__ import absolute_import
import unittest
from testutils import ADMIN_CLIENT
from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import harbor_server
from testutils import TEARDOWN
import library.repository
@ -14,8 +14,8 @@ from library.repository import Repository
from library.artifact import Artifact
class TestProjects(unittest.TestCase):
@classmethod
def setUpClass(self):
@suppress_urllib3_warning
def setUp(self):
self.project= Project()
self.user= User()
self.artifact = Artifact()
@ -27,12 +27,8 @@ class TestProjects(unittest.TestCase):
self.verion = "0.2.0"
self.repo_name = "harbor_api_test"
@classmethod
def tearDownClass(self):
print("Case completed")
@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);
self.repo.delete_repoitory(TestProjects.project_push_chart_name, self.repo_name, **TestProjects.USER_CLIENT)

View File

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

View File

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

View File

@ -2,7 +2,7 @@ from __future__ import absolute_import
import unittest
import urllib
from testutils import ADMIN_CLIENT
from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import harbor_server
from testutils import TEARDOWN
from library.sign import sign_image
@ -13,19 +13,15 @@ from library.repository import Repository
from library.repository import push_image_to_project
class TestProjects(unittest.TestCase):
@classmethod
@suppress_urllib3_warning
def setUp(self):
self.project = Project()
self.user = User()
self.artifact = Artifact()
self.repo = Repository()
@classmethod
def tearDown(self):
print("Case completed")
@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.
#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)

View File

@ -3,7 +3,7 @@ from __future__ import absolute_import
import unittest
from testutils import ADMIN_CLIENT
from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import harbor_server
from testutils import TEARDOWN
import library.repository
@ -18,8 +18,8 @@ from library.repository import push_image_to_project
from library.repository import pull_harbor_image
class TestProjects(unittest.TestCase):
@classmethod
def setUpClass(self):
@suppress_urllib3_warning
def setUp(self):
self.project= Project()
self.user= User()
self.artifact = Artifact()
@ -31,12 +31,8 @@ class TestProjects(unittest.TestCase):
self.image_a = "alpine"
self.image_b = "busybox"
@classmethod
def tearDownClass(self):
print("Case completed")
@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);
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)
@ -95,6 +91,7 @@ class TestProjects(unittest.TestCase):
#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)
print("===========index_data:",index_data)
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;

View File

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

View File

@ -1,7 +1,7 @@
from __future__ import absolute_import
import unittest
from testutils import harbor_server
from testutils import harbor_server, suppress_urllib3_warning
from testutils import admin_user
from testutils import admin_pwd
from testutils import TEARDOWN
@ -20,7 +20,7 @@ import library.base
import json
class TestProjects(unittest.TestCase):
@classmethod
@suppress_urllib3_warning
def setUp(self):
self.system = System()
self.project= Project()
@ -29,12 +29,8 @@ class TestProjects(unittest.TestCase):
self.repo = Repository()
self.repo_name = "hello-world"
@classmethod
def tearDown(self):
print("Case completed")
@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;
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)

View File

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

View File

@ -3,7 +3,7 @@ from __future__ import absolute_import
import unittest
import time
from testutils import ADMIN_CLIENT
from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import TEARDOWN
from testutils import harbor_server
from library.repository import push_special_image_to_project
@ -31,8 +31,8 @@ class TestProjects(unittest.TestCase):
Tear Down:
1. Delete project test-retention
"""
@classmethod
def setUpClass(self):
@suppress_urllib3_warning
def setUp(self):
self.user = User()
self.system = System()
self.repo = Repository()
@ -42,6 +42,16 @@ class TestProjects(unittest.TestCase):
self.repo_name_1 = "test1"
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):
user_ra_password = "Aa123456"
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.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__':
unittest.main()

View File

@ -2,7 +2,7 @@ from __future__ import absolute_import
import unittest
from testutils import ADMIN_CLIENT
from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import TEARDOWN
from testutils import harbor_server
from library.user import User
@ -13,13 +13,13 @@ from library.repository import push_image_to_project
from library.base import _assert_status_code
class TestProjects(unittest.TestCase):
@classmethod
@suppress_urllib3_warning
def setUp(self):
self.project = Project()
self.user = User()
self.repo = Repository()
@classmethod
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def tearDown(self):
print("Case completed")

View File

@ -2,7 +2,7 @@ from __future__ import absolute_import
import unittest
import sys
from testutils import harbor_server
from testutils import harbor_server, suppress_urllib3_warning
from testutils import TEARDOWN
from testutils import ADMIN_CLIENT
from library.project import Project
@ -11,22 +11,20 @@ from library.repository import Repository
from library.repository import push_image_to_project
from library.artifact import Artifact
from library.scan import Scan
from library.scanner import Scanner
from library.sign import sign_image
class TestScan(unittest.TestCase):
@classmethod
@suppress_urllib3_warning
def setUp(self):
self.project= Project()
self.user= User()
self.artifact = Artifact()
self.repo = Repository()
self.scan = Scan()
self.scanner = Scanner()
self.url = ADMIN_CLIENT["endpoint"]
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_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;
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.")
def test_ClearData(self):
def do_tearDown(self):
#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);
self.project.delete_project(self.project_id, **self.USER_CLIENT)
@ -80,22 +75,13 @@ class TestScan(unittest.TestCase):
image = "docker"
src_tag = "1.13"
#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;
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)
#7. Swith Scanner;
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)
self.do_tearDown()
def testScanSignedImage(self):
"""

View File

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

View File

@ -1,7 +1,7 @@
from __future__ import absolute_import
import unittest
from testutils import ADMIN_CLIENT
from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import harbor_server
from testutils import TEARDOWN
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
class TestProjects(unittest.TestCase):
@classmethod
@suppress_urllib3_warning
def setUp(self):
self.project = Project()
self.user = User()
@ -21,12 +21,8 @@ class TestProjects(unittest.TestCase):
self.repo = Repository()
self.repo_name_1 = "test1_sign"
@classmethod
def tearDown(self):
print("Case completed")
@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.
#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)
@ -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'])
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.assertIn("with signature cannot be deleted", ret)
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)
if __name__ == '__main__':
unittest.main()

View File

@ -4,7 +4,7 @@ import unittest
import swagger_client
import time
from testutils import ADMIN_CLIENT
from testutils import ADMIN_CLIENT, TEARDOWN, suppress_urllib3_warning
from library.user import User
from library.system import System
@ -27,6 +27,7 @@ class TestSysCVEAllowlist(unittest.TestCase):
1. Clear the system level CVE allowlist.
2. Delete User(RA)
"""
@suppress_urllib3_warning
def setUp(self):
self.user = User()
self.system = System()
@ -39,6 +40,13 @@ class TestSysCVEAllowlist(unittest.TestCase):
password=user_ra_password)
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):
# 1. User(RA) reads the system level CVE allowlist and it's empty.
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)
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__':
unittest.main()

View File

@ -1,7 +1,7 @@
from __future__ import absolute_import
import unittest
from testutils import harbor_server
from testutils import harbor_server, suppress_urllib3_warning
from testutils import TEARDOWN
from testutils import ADMIN_CLIENT
from library.system import System
@ -10,35 +10,29 @@ from library.user import User
from library.repository import Repository
from library.repository import push_image_to_project
from library.artifact import Artifact
from library.scanner import Scanner
class TestProjects(unittest.TestCase):
@classmethod
class TestScanAll(unittest.TestCase):
@suppress_urllib3_warning
def setUp(self):
self.system = System()
self.project= Project()
self.user= User()
self.artifact = Artifact()
self.repo = Repository()
self.scanner = Scanner()
@classmethod
def tearDown(self):
print("Case completed")
@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;
self.repo.delete_repoitory(TestProjects.project_Alice_name, TestProjects.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_Alice_name, TestScanAll.repo_Alice_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;
self.project.delete_project(TestProjects.project_Alice_id, **ADMIN_CLIENT)
self.project.delete_project(TestProjects.project_Luca_id, **ADMIN_CLIENT)
self.project.delete_project(TestScanAll.project_Alice_id, **ADMIN_CLIENT)
self.project.delete_project(TestScanAll.project_Luca_id, **ADMIN_CLIENT)
#3. Delete user Alice and Luca.
self.user.delete_user(TestProjects.user_Alice_id, **ADMIN_CLIENT)
self.user.delete_user(TestProjects.user_Luca_id, **ADMIN_CLIENT)
self.user.delete_user(TestScanAll.user_Alice_id, **ADMIN_CLIENT)
self.user.delete_user(TestScanAll.user_Luca_id, **ADMIN_CLIENT)
print("Case completed")
def testSystemLevelScanALL(self):
"""
@ -59,15 +53,15 @@ class TestProjects(unittest.TestCase):
user_common_password = "Aa123456"
#1. Create user Alice and Luca;
TestProjects.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_Alice_id, user_Alice_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_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;
TestProjects.project_Alice_id, TestProjects.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_Alice_id, TestScanAll.project_Alice_name = self.project.create_project(metadata = {"public": "false"}, **USER_ALICE_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;
@ -77,33 +71,21 @@ class TestProjects(unittest.TestCase):
image_a = "mariadb"
src_tag = "latest"
#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,
# so it is a not-scanned image rigth after repository creation.
image_b = "httpd"
src_tag = "latest"
#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;
self.system.scan_now(**ADMIN_CLIENT)
#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(TestProjects.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)
self.artifact.check_image_scan_result(TestScanAll.project_Alice_name, image_a, tag_Alice, **USER_ALICE_CLIENT)
self.artifact.check_image_scan_result(TestScanAll.project_Luca_name, image_b, tag_Luca, **USER_LUCA_CLIENT)
if __name__ == '__main__':
unittest.main()

View File

@ -3,7 +3,7 @@ from __future__ import absolute_import
import unittest
from testutils import ADMIN_CLIENT
from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import harbor_server
from testutils import TEARDOWN
import library.repository
@ -17,8 +17,8 @@ from library.repository import push_image_to_project
from library.repository import pull_harbor_image
class TestProjects(unittest.TestCase):
@classmethod
def setUpClass(self):
@suppress_urllib3_warning
def setUp(self):
self.project= Project()
self.user= User()
self.artifact = Artifact()
@ -27,12 +27,8 @@ class TestProjects(unittest.TestCase):
self.user_password = "Aa123456"
self.repo_name = "hello-world"
@classmethod
def tearDownClass(self):
print("Case completed")
@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);
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).
self.user.delete_user(TestProjects.user_id, **ADMIN_CLIENT)
print("Case completed")
def testCreateDeleteTag(self):
"""

View File

@ -4,7 +4,7 @@ from __future__ import absolute_import
import unittest
import sys
from testutils import ADMIN_CLIENT
from testutils import ADMIN_CLIENT, TEARDOWN, suppress_urllib3_warning
from testutils import harbor_server
from library.project import Project
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
class TestTagImmutability(unittest.TestCase):
@classmethod
def setUpClass(self):
@suppress_urllib3_warning
def setUp(self):
self.url = ADMIN_CLIENT["endpoint"]
self.user_password = "Aa123456"
self.project= Project()
@ -32,6 +32,10 @@ class TestTagImmutability(unittest.TestCase):
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)
@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):
for tag in artifact.tags:
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, expect_status_code = 409, **self.USER_CLIENT)
@classmethod
def tearDownClass(self):
print("Case completed")
if __name__ == '__main__':
suite = unittest.TestSuite(unittest.makeSuite(TestTagImmutability))
result = unittest.TextTestRunner(sys.stdout, verbosity=2, failfast=True).run(suite)

View File

@ -3,7 +3,7 @@ from __future__ import absolute_import
import unittest
import time
from testutils import ADMIN_CLIENT
from testutils import ADMIN_CLIENT, suppress_urllib3_warning
from testutils import TEARDOWN
from testutils import TestResult
from library.user import User
@ -14,30 +14,16 @@ from library.repository import push_image_to_project
from testutils import harbor_server
class TestProjects(unittest.TestCase):
@classmethod
@suppress_urllib3_warning
def setUp(self):
test_result = TestResult()
self.test_result= test_result
project = Project()
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")
self.project= Project()
self.user= User()
self.repo= Repository()
self.projectv2= ProjectV2()
@unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
def test_ClearData(self):
def tearDown(self):
print("Case completed")
#1. Delete project(PA);
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);
2. Delete user(UA).
"""
test_result= TestResult()
url = ADMIN_CLIENT["endpoint"]
admin_name = ADMIN_CLIENT["username"]
admin_password = ADMIN_CLIENT["password"]
@ -75,7 +62,7 @@ class TestProjects(unittest.TestCase):
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)
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))
#3.1 Push a new image(IA) in project(PA) by admin;
@ -86,7 +73,7 @@ class TestProjects(unittest.TestCase):
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)
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))
#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)
@ -96,8 +83,10 @@ class TestProjects(unittest.TestCase):
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)
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))
test_result.get_final_result()
if __name__ == '__main__':
unittest.main()

View File

@ -1,6 +1,8 @@
import time
import os
import sys
import warnings
from functools import wraps
sys.path.insert(0, os.environ["SWAGGER_CLIENT_PATH"])
path=os.getcwd() + "/library"
@ -63,6 +65,17 @@ class TestResult(object):
print("Error message:", each_err_msg)
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
@contextmanager

View File

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

View File

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

View File

@ -51,8 +51,7 @@ ${job_filter_search} //hbr-replication/div/div[3]//hbr-filter/span/clr-icon
${job_filter_input} //hbr-replication/div/div[3]//hbr-filter/span//input
${endpoint_filter_search} //hbr-filter/span/clr-icon
${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')]
${dialog_close} //clr-modal//button[contains(.,'CLOSE')]
${dialog_delete} //clr-modal//button[contains(.,'DELETE')]
@ -68,10 +67,14 @@ ${rule_resource_selector} //*[@id='select_resource']
${trigger_mode_selector} //*[@id='ruleTrigger']
${dest_namespace_xpath} //*[@id='dest_namespace']
${new_replication_rule_id} //*[@id='new_replication_rule_id']
${edit_replication_rule_id} //*[@id='edit_replication_rule_id']
${replication_action} //*[@id='rule-action']
${delete_replication_rule_id} //*[@id='delete_replication_rule_id']
${replication_exec_id} //*[@id='replication_exe_id']
${registry_edit_btn} //button[contains(.,'Edit')]
${registry_del_btn} //button[contains(.,'Delete')]
${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]
${is_overide_xpath} //label[contains(.,'Replace the destination resources if name exists')]
${enable_rule_xpath} //label[contains(.,'Enable rule')]