def setUp(self):
     self.system = System()
     self.project = Project()
     self.user = User()
     self.artifact = Artifact()
     self.repo = Repository()
     self.repo_name = "hello-world"
 def setUp(self):
     self.project = Project()
     self.user = User()
     self.artifact = Artifact()
     self.repo = Repository()
     self.repo_name = "busybox"
     self.tag = "1.28"
Exemple #3
0
    def setUp(self):
        self.project = Project()
        self.user = User()
        self.artifact = Artifact()
        self.repo = Repository()
        self.scan = Scan()

        self.url = ADMIN_CLIENT["endpoint"]
        self.user_password = "******"
        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)

        #2. Create a new private project(PA) by user(UA);
        self.project_id, self.project_name = self.project.create_project(
            metadata={"public": "false"}, **ADMIN_CLIENT)

        #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)
Exemple #4
0
 def setUp(self):
     self.project = Project()
     self.user = User()
     self.artifact = Artifact()
     self.repo = Repository()
     self.scan_all = ScanAll()
     self.stop_scan_all = StopScanAll()
 def setUp(self):
     self.project = Project()
     self.user = User()
     self.artifact = Artifact()
     self.repo = Repository()
     self.repo_name = "hello-artifact"
     self.tag = "test_v2"
 def setUp(self):
     self.system = System()
     self.project = Project()
     self.user = User()
     self.artifact = Artifact()
     self.repo = Repository()
     self.scanner = Scanner()
class TestProjects(unittest.TestCase):
    @classmethod
    def setUpClass(self):
        self.project= Project()
        self.user= User()
        self.chart=  Chart()
        self.url = ADMIN_CLIENT["endpoint"]
        self.chart_api_url = CHART_API_CLIENT['endpoint']
        self.user_push_chart_password = "******"
        self.chart_file = "https://storage.googleapis.com/harbor-builds/helm-chart-test-files/harbor-0.2.0.tgz"
        self.archive = "harbor/"
        self.CHART_NAME=self.archive.replace("/", "")
        self.verion = "0.2.0"
        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):
        #1. Delete user(UA).
        self.user.delete_user(TestProjects.user_id, **ADMIN_CLIENT)

    def testPushChartToChartRepoByHelm2WithRobotAccount(self):
        """
        Test case:
            Push Chart File To Chart Repository By Helm V2 With Robot Account
        Test step and expected result:
            1. Create a new user(UA);
            2. Create private project(PA) with user(UA);
            3. Create a new robot account(RA) with full priviliges in project(PA) with user(UA);
            4. Push chart to project(PA) by Helm2 CLI with robot account(RA);
            5. Get chart repositry from project(PA) successfully;
        Tear down:
            1. Delete user(UA).
        """

        #1. Create user(UA);
        TestProjects.user_id, user_name = self.user.create_user(user_password = self.user_push_chart_password, **ADMIN_CLIENT)
        TestProjects.USER_CLIENT=dict(endpoint = self.url, username = user_name, password = self.user_push_chart_password)
        TestProjects.API_CHART_CLIENT=dict(endpoint = self.chart_api_url, username = user_name, password = self.user_push_chart_password)
        #2. Create private project(PA) with user(UA);
        TestProjects.project_id, TestProjects.project_name = self.project.create_project(metadata = {"public": "false"}, **TestProjects.USER_CLIENT)


        #3. Create a new robot account(RA) with full priviliges in project(PA) with user(UA);
        robot_id, robot_account = self.project.add_project_robot_account(TestProjects.project_id, TestProjects.project_name,
                                                                         2441000531 ,**TestProjects.USER_CLIENT)
        #4. Push chart to project(PA) by Helm2 CLI with robot account(RA);"
        library.helm.helm2_add_repo(self.chart_repo_name, "https://"+harbor_server, TestProjects.project_name, robot_account.name, robot_account.token)
        library.helm.helm2_push(self.chart_repo_name, self.chart_file, TestProjects.project_name, robot_account.name, robot_account.token)

        #5. Get chart repositry from project(PA) successfully;
        self.chart.chart_should_exist(TestProjects.project_name, self.CHART_NAME, **TestProjects.API_CHART_CLIENT)

        #6. Push chart to project(PA) by Helm3 CLI with robot account(RA);
        chart_cli_ret = library.helm.helm_chart_push_to_harbor(self.chart_file, self.archive,  harbor_server, TestProjects.project_name, self.repo_name, self.verion, robot_account.name, robot_account.token)
 def setUp(self):
     self.project = Project()
     self.user = User()
     self.artifact = Artifact()
     self.repo = Repository()
     self.image = "alpine"
     self.tag = "latest"
     self.expect_accessory_type = "signature.cosign"
 def setUp(self):
     url = ADMIN_CLIENT["endpoint"]
     self.conf = Configurations()
     self.user = User()
     self.project = Project()
     self.USER_MIKE = dict(endpoint=url,
                           username="******",
                           password="******")
Exemple #10
0
 def setUpClass(self):
     self.project = Project()
     self.user = User()
     self.artifact = Artifact(api_type='artifact')
     self.repo = Repository(api_type='repository')
     self.url = ADMIN_CLIENT["endpoint"]
     self.user_push_chart_password = "******"
     self.cnab_repo_name = "test_cnab"
Exemple #11
0
 def setUpClass(self):
     self.user = User()
     self.system = System()
     self.repo = Repository()
     self.project = Project()
     self.retention = Retention()
     self.artifact = Artifact()
     self.repo_name_1 = "test1"
Exemple #12
0
 def setUp(self):
     self.project= Project()
     self.user= User()
     self.artifact = Artifact()
     self.repo= Repository()
     self.url = ADMIN_CLIENT["endpoint"]
     self.user_password = "******"
     self.repo_name = "hello-world"
Exemple #13
0
 def setUpClass(self):
     self.url = ADMIN_CLIENT["endpoint"]
     self.user_password = "******"
     self.project = Project()
     self.user = User()
     self.repo = Repository()
     self.registry = Registry()
     self.artifact = Artifact()
Exemple #14
0
class TestProjects(unittest.TestCase):
    @classmethod
    def setUpClass(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):
        #1. Delete project(PA);
        self.project.delete_project(TestProjects.project_del_repo_id, **TestProjects.USER_del_repo_CLIENT)

        #2. Delete user(UA).
        self.user.delete_user(TestProjects.user_del_repo_id, **ADMIN_CLIENT)

    def testDelRepo(self):
        """
        Test case:
            Delete a repository
        Test step and expected result:
            1. Create a new user(UA);
            2. Create a new project(PA) by user(UA);
            3. Create a new repository(RA) in project(PA) by user(UA);
            4. Get repository in project(PA), there should be one repository which was created by user(UA);
            5. Delete repository(RA) by user(UA);
            6. Get repository by user(UA), it should get nothing;
        Tear down:
            1. Delete project(PA);
            2. Delete user(UA).
        """
        url = ADMIN_CLIENT["endpoint"]
        user_del_repo_password = "******"

        #1. Create a new user(UA);
        TestProjects.user_del_repo_id, user_del_repo_name = self.user.create_user(user_password = user_del_repo_password, **ADMIN_CLIENT)

        TestProjects.USER_del_repo_CLIENT=dict(endpoint = url, username = user_del_repo_name, password = user_del_repo_password)

        #2. Create a new project(PA) by user(UA);
        TestProjects.project_del_repo_id, TestProjects.project_del_repo_name = self.project.create_project(metadata = {"public": "false"}, **TestProjects.USER_del_repo_CLIENT)

        #3. Create a new repository(RA) in project(PA) by user(UA);
        repo_name, _ = push_image_to_project(TestProjects.project_del_repo_name, harbor_server, 'admin', 'Harbor12345', "hello-world", "latest")

        #4. Get repository in project(PA), there should be one repository which was created by user(UA);
        repo_data = self.repo.list_repositories(TestProjects.project_del_repo_name, **TestProjects.USER_del_repo_CLIENT)
        _assert_status_code(repo_name, repo_data[0].name)

        #5. Delete repository(RA) by user(UA);
        self.repo.delete_repoitory(TestProjects.project_del_repo_name, repo_name.split('/')[1], **TestProjects.USER_del_repo_CLIENT)

        #6. Get repository by user(UA), it should get nothing;
        repo_data = self.repo.list_repositories(TestProjects.project_del_repo_name, **TestProjects.USER_del_repo_CLIENT)
        _assert_status_code(len(repo_data), 0)
class TestProjects(unittest.TestCase):
    @suppress_urllib3_warning
    def setUp(self):
        self.project = Project()
        self.user = User()
        self.artifact = Artifact()
        self.repo = Repository()
        self.repo_name = "hello-artifact"
        self.tag = "test_v2"

    @unittest.skipIf(TEARDOWN == False, "Test data won't be erased.")
    def tearDown(self):
        #1. Delete user(UA);
        self.user.delete_user(TestProjects.user_sign_image_id, **ADMIN_CLIENT)

    def testOrasCli(self):
        """
        Test case:
            Push Artifact With ORAS CLI
        Test step and expected result:
            1. Create user-001
            2. Create a new private project(PA) by user(UA);
            3. ORAS CLI push artifacts;
            4. Get repository from Harbor successfully, and verfiy repository name is repo pushed by ORAS CLI;
            5. Get and verify artifacts by tag;
            6. ORAS CLI pull artifacts index by tag;
            7. Verfiy MD5 between artifacts pushed by ORAS and artifacts pulled by ORAS;
        Tear down:
            NA
        """
        url = ADMIN_CLIENT["endpoint"]
        user_001_password = "******"

        #1. Create user-001
        TestProjects.user_sign_image_id, user_name = self.user.create_user(user_password = user_001_password, **ADMIN_CLIENT)

        TestProjects.USER_CLIENT=dict(with_signature = True, endpoint = url, username = user_name, password = user_001_password)

        #2. Create a new private project(PA) by user(UA);
        TestProjects.project_id, TestProjects.project_name = self.project.create_project(metadata = {"public": "false"}, **TestProjects.USER_CLIENT)

        #3. ORAS CLI push artifacts;
        md5_list_push = library.oras.oras_push(harbor_server, user_name, user_001_password, TestProjects.project_name, self.repo_name, self.tag)

        #4. Get repository from Harbor successfully, and verfiy repository name is repo pushed by ORAS CLI;
        repo_data = self.repo.get_repository(TestProjects.project_name, self.repo_name, **TestProjects.USER_CLIENT)
        self.assertEqual(repo_data.name, TestProjects.project_name + "/" + self.repo_name)

        #5. Get and verify artifacts by tag;
        artifact = self.artifact.get_reference_info(TestProjects.project_name, self.repo_name, self.tag, **TestProjects.USER_CLIENT)
        self.assertEqual(artifact.tags[0].name, self.tag)

        #6. ORAS CLI pull artifacts index by tag;
        md5_list_pull = library.oras.oras_pull(harbor_server, user_name, user_001_password, TestProjects.project_name, self.repo_name, self.tag)

        #7. Verfiy MD5 between artifacts pushed by ORAS and artifacts pulled by ORAS;
        if set(md5_list_push) != set(md5_list_pull):
            raise Exception(r"MD5 check failed with {} and {}.".format(str(md5_list_push), str(md5_list_pull)))
Exemple #16
0
 def setUp(self):
     self.url = ADMIN_CLIENT["endpoint"]
     self.user_password = "******"
     self.project= Project()
     self.user= User()
     self.webhook= Webhook()
     self.user_id, self.project_id = [None] * 2
     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)
Exemple #17
0
 def setUp(self):
     self.project = Project()
     self.user = User()
     self.replication = Replication()
     self.registry = Registry()
     self.artifact = Artifact()
     self.repo = Repository()
     self.image = "alpine"
     self.tag = "latest"
Exemple #18
0
 def setUp(self):
     self.project= Project()
     self.user= User()
     self.artifact = Artifact()
     self.repo= Repository()
     self.url = ADMIN_CLIENT["endpoint"]
     self.user_push_cnab_password = "******"
     self.cnab_repo_name = "test_cnab"
     self.cnab_tag = "test_cnab_tag"
 def setUp(self):
     self.system = System()
     self.project = Project()
     self.user = User()
     self.repo = Repository()
     self.artifact = Artifact()
     self.repo_name = "test_repo"
     self.repo_name_untag = "test_untag"
     self.tag = "v1.0"
Exemple #20
0
def created_user(password):
    from library.user import User

    api = User()

    user_id, user_name = api.create_user(user_password=password, **ADMIN_CLIENT)
    try:
        yield (user_id, user_name)
    finally:
        if TEARDOWN:
            api.delete_user(user_id, **ADMIN_CLIENT)
Exemple #21
0
 def setUpClass(self):
     self.project= Project()
     self.user= User()
     self.artifact = Artifact()
     self.repo= Repository()
     self.url = ADMIN_CLIENT["endpoint"]
     self.user_push_chart_password = "******"
     self.chart_file = "https://storage.googleapis.com/harbor-builds/helm-chart-test-files/harbor-0.2.0.tgz"
     self.archive = "harbor/"
     self.verion = "0.2.0"
     self.repo_name = "harbor_api_test"
class TestProjects(unittest.TestCase):
    @classmethod
    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):
        print "Clear trace"
        #1. Delete project(PA);
        self.project.delete_project(TestProjects.project_edit_project_creation_id, **TestProjects.USER_edit_project_creation_CLIENT)

        #2. Delete user(UA);
        self.user.delete_user(TestProjects.user_edit_project_creation_id, **ADMIN_CLIENT)

    def testEditProjectCreation(self):
        """
        Test case:
            Edit Project Creation
        Test step and expected result:
            1. Create a new user(UA);
            2. Set project creation to "admin only";
            3. Create a new project(PA) by user(UA), and fail to create a new project;
            4. Set project creation to "everyone";
            5. Create a new project(PA) by user(UA), success to create a project.
        Tear down:
            1. Delete project(PA);
            2. Delete user(UA);
        """
        url = ADMIN_CLIENT["endpoint"]
        user_edit_project_creation_password = "******"

        #1. Create a new user(UA);
        TestProjects.user_edit_project_creation_id, user_edit_project_creation_name = self.user.create_user(user_password = user_edit_project_creation_password, **ADMIN_CLIENT)

        TestProjects.USER_edit_project_creation_CLIENT=dict(endpoint = url, username = user_edit_project_creation_name, password = user_edit_project_creation_password)

        #2. Set project creation to "admin only";
        self.conf.set_configurations_of_project_creation_restriction("adminonly", **ADMIN_CLIENT)

        #3. Create a new project(PA) by user(UA), and fail to create a new project;
        self.project.create_project(metadata = {"public": "false"}, expect_status_code = 403,
            expect_response_body = "{\"errors\":[{\"code\":\"FORBIDDEN\",\"message\":\"Only system admin can create project\"}]}", **TestProjects.USER_edit_project_creation_CLIENT)

        #4. Set project creation to "everyone";
        self.conf.set_configurations_of_project_creation_restriction("everyone", **ADMIN_CLIENT)

        #5. Create a new project(PA) by user(UA), success to create a project.
        TestProjects.project_edit_project_creation_id, _ = self.project.create_project(metadata = {"public": "false"}, **TestProjects.USER_edit_project_creation_CLIENT)
 def setUpClass(self):
     self.project = Project()
     self.user = User()
     self.artifact = Artifact()
     self.repo = Repository()
     self.url = ADMIN_CLIENT["endpoint"]
     self.user_push_index_password = "******"
     self.index_name = "ci_test_index"
     self.index_tag = "test_tag"
     self.image_a = "alpine"
     self.image_b = "busybox"
 def setUp(self):
     self.user = User()
     self.system = System()
     user_ra_password = "******"
     print("Setup: Creating user for test")
     user_ra_id, user_ra_name = self.user.create_user(
         user_password=user_ra_password, **ADMIN_CLIENT)
     print("Created user: %s, id: %s" % (user_ra_name, user_ra_id))
     self.USER_RA_CLIENT = dict(endpoint=ADMIN_CLIENT["endpoint"],
                                username=user_ra_name,
                                password=user_ra_password)
     self.user_ra_id = int(user_ra_id)
 def setUp(self):
     self.project = Project()
     self.user = User()
     self.artifact = Artifact()
     self.repo = Repository()
     self.url = ADMIN_CLIENT["endpoint"]
     self.user_push_chart_password = "******"
     self.chart_file_name = "harbor-helm-1.7.3"
     self.chart_file_package_name = "harbor-1.7.3.tgz"
     self.chart_file_path = files_directory + "harbor-helm-1.7.3.tar.gz"
     self.version = "1.7.3"
     self.repo_name = "harbor"
 def setUp(self):
     self.project = Project()
     self.user = User()
     self.chart = Chart()
     self.url = ADMIN_CLIENT["endpoint"]
     self.chart_api_url = CHART_API_CLIENT['endpoint']
     self.user_push_chart_password = "******"
     self.chart_file = "https://storage.googleapis.com/harbor-builds/helm-chart-test-files/harbor-0.2.0.tgz"
     self.archive = "harbor/"
     self.CHART_NAME = self.archive.replace("/", "")
     self.verion = "0.2.0"
     self.chart_repo_name = "chart_local"
     self.repo_name = "harbor_api_test"
Exemple #27
0
    def setUp(self):
        self.project = Project()
        self.user = User()
        self.repo = Repository()
        self.artifact = Artifact()
        self.robot = Robot()
        self.scan = Scan()
        self.label = Label()
        self.chart = Chart()

        TestRobotAccount.url = ADMIN_CLIENT["endpoint"]
        TestRobotAccount.user_ra_password = "******"
        print("setup")
Exemple #28
0
class TestProjects(unittest.TestCase):
    @classmethod
    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):
        #1. Delete user(UA);
        self.user.delete_user(TestProjects.user_assign_sys_admin_id,
                              **ADMIN_CLIENT)

    def testAssignSysAdmin(self):
        """
        Test case:
            Assign Sys Admin
        Test step and expected result:
            1. Create a new user(UA);
            2. Set user(UA) has sysadmin role by admin, check user(UA) can modify system configuration;
            3. 3. Set user(UA) has no sysadmin role by admin, check user(UA) can not modify system configuration;
            4. Set user(UA) has sysadmin role by admin, check user(UA) can modify system configuration.
        Tear down:
            1. Delete user(UA).
        """
        url = ADMIN_CLIENT["endpoint"]
        user_assign_sys_admin_password = "******"

        #1. Create a new user(UA);
        TestProjects.user_assign_sys_admin_id, user_assign_sys_admin_name = self.user.create_user(
            user_password=user_assign_sys_admin_password, **ADMIN_CLIENT)
        USER_ASSIGN_SYS_ADMIN_CLIENT = dict(
            endpoint=url,
            username=user_assign_sys_admin_name,
            password=user_assign_sys_admin_password)

        #2. Set user(UA) has sysadmin role by admin, check user(UA) can modify system configuration;
        self.user.update_user_role_as_sysadmin(
            TestProjects.user_assign_sys_admin_id, True, **ADMIN_CLIENT)
        self.conf.set_configurations_of_token_expiration(
            60, **USER_ASSIGN_SYS_ADMIN_CLIENT)

        #3. Set user(UA) has no sysadmin role by admin, check user(UA) can not modify system configuration;
        self.user.update_user_role_as_sysadmin(
            TestProjects.user_assign_sys_admin_id, False, **ADMIN_CLIENT)
        self.conf.set_configurations_of_token_expiration(
            70, expect_status_code=403, **USER_ASSIGN_SYS_ADMIN_CLIENT)

        #4. Set user(UA) has sysadmin role by admin, check user(UA) can modify system configuration.
        self.user.update_user_role_as_sysadmin(
            TestProjects.user_assign_sys_admin_id, True, **ADMIN_CLIENT)
        self.conf.set_configurations_of_token_expiration(
            80, **USER_ASSIGN_SYS_ADMIN_CLIENT)
Exemple #29
0
def created_user(password, _teardown=None):
    from library.user import User

    api = User()
    is_teardown = TEARDOWN
    if _teardown in (True, False):
        is_teardown = _teardown

    user_id, user_name = api.create_user(user_password=password, **ADMIN_CLIENT)
    try:
        yield (user_id, user_name)
    finally:
        if is_teardown:
            api.delete_user(user_id, **ADMIN_CLIENT)
 def setUp(self):
     self.url = ADMIN_CLIENT["endpoint"]
     self.user_password = "******"
     self.project= Project()
     self.user= User()
     self.repo= Repository()
     self.registry = Registry()
     self.artifact = Artifact()
     self.tag_immutability = Tag_Immutability()
     self.project_id, self.project_name, self.user_id, self.user_name = [None] * 4
     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)
     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)