コード例 #1
0
def Prepare_template():
    domain_client = Domain()
    secret_client = Secret()
    service_client = Service()
    ns_name = K8S_NAMESPACE
    logger.info(RESOURCE_PREFIX)
    domain_name = "{}.ares.acp.ingress.domain".format(RESOURCE_PREFIX)
    secret_name = "{}-ares-acp-ingress-secret".format(RESOURCE_PREFIX)
    service_name = "{}-ares-acp-ingress-service".format(RESOURCE_PREFIX)
    data = {
        "timestamp": domain_name,
        "name": domain_name,
        "kind": "full",
        "project_name": PROJECT_NAME,
        "region_name": REGION_NAME
    }
    domain_client.create_domain("./test_data/domain/create_domain.jinja2",
                                data)
    data = {
        "secret_name": secret_name,
        "secret_type": "kubernetes.io/tls",
        "tls_crt": str(base64.b64encode("tlscrt".encode('utf-8')), 'utf8'),
        "tls_key": str(base64.b64encode("tlskey".encode('utf-8')), 'utf8')
    }
    secret_client.create_secret('./test_data/secret/create_secret.jinja2',
                                data=data)
    data = {
        'service_name': service_name,
        'type': 'ClusterIP',
        'sessionAffinity': 'None',
        'portdata': '一组数据',
        'namespace': ns_name
    }
    service_client.create_service(ns_name,
                                  './test_data/service/service.jinja2', data)
    prepare_data = {
        "domain_name": domain_name,
        "secret_name": secret_name,
        "service_name": service_name
    }
    yield prepare_data
    if CASE_TYPE not in ("prepare", "prepare"):
        domain_client.delete_domain(domain_name)
        secret_client.delete_secret(secret_name, ns_name)
        service_client.delete_service(ns_name, service_name)
コード例 #2
0
class TestPutService(object):
    def setup_class(self):
        self.service_client = Service()
        self.k8s_namespace = K8S_NAMESPACE

    def teardown_class(self):
        for item in data_list:
            self.service_client.delete_service(self.k8s_namespace,
                                               item['service_name'])

    @pytest.mark.parametrize("data", data_list, ids=create_casename_list)
    def 测试_标准API_删除内部路由L1(self, data):
        ret = self.service_client.delete_service(self.k8s_namespace,
                                                 data['service_name'])
        assert ret.status_code == 200, "删除{}类型内部路由失败:{}".format(
            data['type'], ret.text)
        values = self.service_client.generate_jinja_data(
            "verify_data/service/delete_response.jinja2", data)
        assert self.service_client.is_sub_dict(values, ret.json()), \
            "删除内部路由比对数据失败,返回数据{},期望数据{}".format(ret.json(), values)

    def 测试_标准API_删除内部路由L1_不存在(self):
        ret = self.service_client.delete_service(self.k8s_namespace,
                                                 wrong_list['service_name'])
        assert ret.status_code == 404, "删除不存在的内部路由失败:{}".format(ret.text)

    @pytest.mark.skipif(AUDIT_UNABLED, reason="do not have audit")
    def 测试内部路由删除审计(self):
        payload = {
            "user_name": USERNAME,
            "operation_type": "delete",
            "resource_type": "services",
            "resource_name": data_list[0]['service_name']
        }
        result = self.service_client.search_audit(payload)
        payload.update({
            "namespace": K8S_NAMESPACE,
            "region_name": REGION_NAME
        })
        values = self.service_client.generate_jinja_data(
            "./verify_data/audit/audit.jinja2", payload)
        assert self.service_client.is_sub_dict(values,
                                               result.json()), "审计数据不符合预期"
コード例 #3
0
class TestService(object):
    def setup_class(self):
        self.service_client = Service()
        self.k8s_namespace = K8S_NAMESPACE
        l0_data_list.update({"namespace": self.k8s_namespace})

    def teardown_class(self):
        if CASE_TYPE not in ("prepare", "delete", "upgrade"):
            self.service_client.delete_service(self.k8s_namespace,
                                               l0_data_list["service_name"])

    @pytest.mark.prepare
    def 测试_标准API_创建内部路由_ClusterIP一组数据(self):
        ret = self.service_client.create_service(
            self.k8s_namespace, './test_data/service/service.jinja2',
            l0_data_list)
        assert ret.status_code == 201, "创建{}类型内部路由失败:{}".format(
            l0_data_list['type'], ret.text)
        values = self.service_client.generate_jinja_data(
            "verify_data/service/create_response.jinja2", l0_data_list)
        assert self.service_client.is_sub_dict(values, ret.json()), \
            "创建内部路由比对数据失败,返回数据{},期望数据{}".format(ret.json(), values)

    @pytest.mark.upgrade
    def 测试_标准API_内部路由详情_ClusterIP一组数据(self):
        ret = self.service_client.get_service(self.k8s_namespace,
                                              l0_data_list['service_name'])
        assert ret.status_code == 200, "获取{}类型内部路由详情失败:{}".format(
            l0_data_list['type'], ret.text)
        values = self.service_client.generate_jinja_data(
            "verify_data/service/create_response.jinja2", l0_data_list)
        assert self.service_client.is_sub_dict(values, ret.json()), \
            "获取内部路由详情比对数据失败,返回数据{},期望数据{}".format(ret.json(), values)

    @pytest.mark.upgrade
    def 测试_标准API_内部路由列表(self):
        sleep(5)
        ret = self.service_client.list_service(self.k8s_namespace)
        assert ret.status_code == 200, "获取内部路由列表失败:{}".format(ret.text)
        values = self.service_client.generate_jinja_data(
            "verify_data/service/create_response.jinja2", l0_data_list)
        values.pop('kind')
        values.pop('apiVersion')
        content = self.service_client.get_k8s_resource_data(
            ret.json(), l0_data_list['service_name'], 'items')
        assert self.service_client.is_sub_dict(values, content), \
            "获取内部路由列表比对数据失败,返回数据{},期望数据{}".format(content, values)

    @pytest.mark.upgrade
    def 测试_标准API_搜索内部路由_ClusterIP一组数据(self):
        l0_data_list.update({"namespace": self.k8s_namespace})
        ret = self.service_client.search_service(self.k8s_namespace,
                                                 l0_data_list['service_name'])
        assert ret.status_code == 200, "搜索内部路由失败:{}".format(ret.text)
        values = self.service_client.generate_jinja_data(
            "verify_data/service/create_response.jinja2", l0_data_list)
        content = self.service_client.get_k8s_resource_data(
            ret.json(), l0_data_list['service_name'], 'items')
        assert self.service_client.is_sub_dict(values, content), \
            "搜索内部路由比对数据失败,返回数据{},期望数据{}".format(content, values)

    @pytest.mark.upgrade
    def 测试_标准API_更新内部路由_ClusterIP一组数据(self):
        ret = self.service_client.get_service(self.k8s_namespace,
                                              l0_data_list['service_name'])
        resourceVersion = ret.json()['metadata']['resourceVersion']
        clusterIP = ret.json()['spec']['clusterIP']
        l0_data_list.update({
            "namespace": self.k8s_namespace,
            'selector': 'true',
            'resourceVersion': resourceVersion,
            'clusterIP': clusterIP
        })
        ret = self.service_client.update_service(
            self.k8s_namespace, l0_data_list['service_name'],
            './test_data/service/service.jinja2', l0_data_list)
        assert ret.status_code == 200, "更新{}类型内部路由失败:{}".format(
            l0_data_list['type'], ret.text)
        values = self.service_client.generate_jinja_data(
            "verify_data/service/create_response.jinja2", l0_data_list)
        assert self.service_client.is_sub_dict(values, ret.json()), \
            "更新内部路由比对数据失败,返回数据{},期望数据{}".format(ret.json(), values)

    @pytest.mark.delete
    def 测试_标准API_删除内部路由_ClusterIP一组数据(self):
        l0_data_list.update({"namespace": self.k8s_namespace})
        ret = self.service_client.delete_service(self.k8s_namespace,
                                                 l0_data_list['service_name'])
        assert ret.status_code == 200, "删除{}类型内部路由失败:{}".format(
            l0_data_list['type'], ret.text)
        values = self.service_client.generate_jinja_data(
            "verify_data/service/delete_response.jinja2", l0_data_list)
        assert self.service_client.is_sub_dict(values, ret.json()), \
            "删除内部路由比对数据失败,返回数据{},期望数据{}".format(ret.json(), values)
コード例 #4
0
class TestPostService(object):
    def setup_class(self):
        self.service_client = Service()
        self.k8s_namespace = K8S_NAMESPACE
        self.teardown_class(self)

    def teardown_class(self):
        for item in l2_data_list + l2_wrong_list + l2_known_issues_data_list:
            if item["service_name"]:
                self.service_client.delete_service(self.k8s_namespace,
                                                   item['service_name'])

    @pytest.mark.parametrize("data", l2_data_list, ids=l2_create_casename_list)
    def 测试_标准API_创建内部路由L2_正向(self, data):
        data.update({"namespace": self.k8s_namespace})
        ret = self.service_client.create_service(
            self.k8s_namespace, './test_data/service/service.jinja2', data)
        assert ret.status_code == 201, "创建{}类型内部路由失败:{}".format(
            data['type'], ret.text)
        values = self.service_client.generate_jinja_data(
            "verify_data/service/create_response.jinja2", data)
        assert self.service_client.is_sub_dict(values, ret.json()), \
            "创建内部路由比对数据失败,返回数据{},期望数据{}".format(ret.json(), values)

    @pytest.mark.parametrize("data", l2_wrong_list, ids=l2_wrong_create_list)
    def 测试_标准API_创建内部路由L2_逆向(self, data):
        data.update({"namespace": self.k8s_namespace})
        if data.get("exist_name", ''):
            self.service_client.create_service(
                self.k8s_namespace, './test_data/service/service.jinja2', data)
        ret = self.service_client.create_service(
            self.k8s_namespace, './test_data/service/service.jinja2', data)
        logger.info(data['status_code'])
        assert ret.status_code == data['status_code'], "测试用例执行失败:{}".format(
            ret.text)
        values = self.service_client.generate_jinja_data(
            "verify_data/service/create_response_failure.jinja2", data)
        assert self.service_client.is_sub_dict(values, ret.json()), \
            "创建内部路由比对数据失败,返回数据{},期望数据{}".format(ret.json(), values)

    @pytest.mark.skip(
        reason=
        "http://jira.alauda.cn/browse/ACP-1587, http://jira.alauda.cn/browse/ACP-1588"
    )
    @pytest.mark.parametrize("data",
                             l2_known_issues_data_list,
                             ids=l2_known_issues_create_list)
    def 测试_标准API_创建内部路由L2_逆向_已知问题(self, data):
        data.update({"namespace": self.k8s_namespace})
        if data.get("exist_name", ''):
            self.service_client.create_service(
                self.k8s_namespace, './test_data/service/service.jinja2', data)
        ret = self.service_client.create_service(
            self.k8s_namespace, './test_data/service/service.jinja2', data)
        logger.info(data['status_code'])
        assert ret.status_code == data['status_code'], "测试用例执行失败:{}".format(
            ret.text)
        values = self.service_client.generate_jinja_data(
            "verify_data/service/create_response_failure.jinja2", data)
        assert self.service_client.is_sub_dict(values, ret.json()), \
            "创建内部路由比对数据失败,返回数据{},期望数据{}".format(ret.json(), values)