class TestUpdateService(object): def setup_class(self): self.service_client = Service() self.k8s_namespace = K8S_NAMESPACE @pytest.mark.parametrize("data", update_data_list, ids=update_casename_list) def 测试_标准API_更新内部路由L1(self, data): ret = self.service_client.get_service(self.k8s_namespace, data['service_name']) resourceVersion = ret.json()['metadata']['resourceVersion'] clusterIP = ret.json()['spec']['clusterIP'] data.update({"namespace": self.k8s_namespace, 'selector': 'true', 'resourceVersion': resourceVersion, 'clusterIP': clusterIP}) ret = self.service_client.update_service(self.k8s_namespace, data['service_name'], './test_data/service/service.jinja2', data) assert ret.status_code == 200, "更新{}类型内部路由失败:{}".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) def 测试_标准API_更新内部路由L1_不存在(self): ret = self.service_client.update_service(self.k8s_namespace, wrong_list['service_name'], './test_data/service/service.jinja2', wrong_list) 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": "update", "resource_type": "services", "resource_name": update_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()), "审计数据不符合预期"
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()), "审计数据不符合预期"
class TestPostService(object): def setup_class(self): self.service_client = Service() self.k8s_namespace = K8S_NAMESPACE @pytest.mark.parametrize("data", data_list, ids=create_casename_list) def 测试_标准API_创建内部路由L1(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) def 测试_标准API_创建内部路由L1_必填项校验(self): wrong_list.update({"namespace": self.k8s_namespace}) ret = self.service_client.create_service( self.k8s_namespace, './test_data/service/service.jinja2', wrong_list) assert ret.status_code == 422, "创建内部路由(缺少必填项)失败:{}".format(ret.text) @pytest.mark.skipif(AUDIT_UNABLED, reason="do not have audit") def 不测试内部路由创建审计(self): payload = { "user_name": USERNAME, "operation_type": "create", "resource_type": "services", "resource_name": data_list[-1]['service_name'] } result = self.service_client.search_audit(payload) payload.update({ "namespace": K8S_NAMESPACE, "region_name": REGION_NAME, "code": 201 }) values = self.service_client.generate_jinja_data( "./verify_data/audit/audit.jinja2", payload) assert self.service_client.is_sub_dict(values, result.json()), "审计数据不符合预期"
class TestGetService(object): def setup_class(self): self.service_client = Service() self.k8s_namespace = K8S_NAMESPACE @pytest.mark.parametrize("data", data_list, ids=create_casename_list) def 测试_标准API_内部路由详情L1(self, data): data.update({"namespace": self.k8s_namespace}) ret = self.service_client.get_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/create_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.get_service(self.k8s_namespace, wrong_list['service_name']) assert ret.status_code == 404, "获取不存在的内部路由详情失败:{}".format(ret.text)
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)
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)