def test_error(self): """ 测试错误信息 """ if not TEST_FLAG['test_error']: return print("测试错误信息") print("测试错误信息 - 连接失败") _connect_para = SimpleGRpcTools.generate_connect_para(ip='127.0.0.1', port=60051) _cresult = SimpleGRpcTools.grpc_call( _connect_para, SimpleGRpcTools.generate_request_obj('test')) self.assertTrue( _cresult.code == '20408' and grpc.StatusCode.UNAVAILABLE.name == _cresult.i18n_msg_paras[0], '测试错误信息失败 - 连接失败 ') print("测试错误信息 - 服务名不存在") _connect_para = SimpleGRpcTools.generate_connect_para(ip='127.0.0.1', port=50051) _cresult = SimpleGRpcTools.grpc_call( _connect_para, SimpleGRpcTools.generate_request_obj('test', '')) self.assertTrue(_cresult.code == '11403', '测试错误信息失败 - 服务名不存在 ') print("测试错误信息 - 超时") _connect_para = SimpleGRpcTools.generate_connect_para(ip='127.0.0.1', port=50051) _cresult = SimpleGRpcTools.grpc_call( _connect_para, SimpleGRpcTools.generate_request_obj('service_simple_overtime'), timeout=0.1) self.assertTrue(_cresult.code == '30403', '测试错误信息失败 - 超时')
def server_bidirectional_stream_call_one_by_one(): """ 双向流模式,客户端处理,一个请求对应一个响应的情况 通过队列传递交互传递参数 """ # 清空队列 TEMP_QUEUE.queue.clear() # 处理 _connect_para = SimpleGRpcTools.generate_connect_para(ip='127.0.0.1', port=50051) with SimpleGRpcTools.generate_channel(_connect_para) as channel: # # 注意队列一定要先传入一个值 TEMP_QUEUE.put(None) _cresult_iterator = SimpleGRpcTools.grpc_call_by_channel( channel, bidirectional_stream_one_by_one_generator(), call_mode=EnumCallMode.BidirectionalStream) for _cresult in _cresult_iterator: # 放入队列 s = _cresult.return_json TEMP_QUEUE.put(s) if not _cresult.is_success(): return False return True
def client_simple_call_para_server_tsl(a, b, *args, c=10, d={'d1': 'd1value'}, **kwargs): """ 测试简单调用,进行单向认证(客户端验证服务端证书) """ # 转换参数 _para_values = RunTool.get_current_function_parameter_values( is_simple_mode=True) _para_obj = SimpleGRpcTools.parameters_to_json(_para_values) _req_obj = SimpleGRpcTools.generate_request_obj( service_name='service_simple_call_para', para_json=_para_obj.para_json, has_para_bytes=_para_obj.has_para_bytes, para_bytes=_para_obj.para_bytes) # 发送请求 with open(_TEMP_DIR + '/../../simple_grpc/server.crt', 'rb') as f: _root_certificates = f.read() _connect_para = SimpleGRpcTools.generate_connect_para( ip='localhost', port=50053, is_use_ssl=True, root_certificates=_root_certificates) _cresult = SimpleGRpcTools.grpc_call(_connect_para, _req_obj) _cresult.return_obj = SimpleGRpcTools.json_to_object_by_para_mapping( _cresult.return_json, 'client_simple_call_para') return _cresult
def test_health_check(self): """ 测试服务健康状态 """ if not TEST_FLAG['test_health_check']: return print("测试服务健康状态") _connect_para = SimpleGRpcTools.generate_connect_para(ip='127.0.0.1', port=50051) print("测试服务健康状态 - 服务中") _resp_obj = SimpleGRpcTools.health_check(_connect_para, 'servicer_simple_call') self.assertTrue( _resp_obj.status == health_pb2.HealthCheckResponse.SERVING, '测试服务健康状态失败 - 服务中') print("测试服务健康状态 - 停止服务") self.server_no_ssl_no_zoo.set_service_status( 'servicer_simple_call', health_pb2.HealthCheckResponse.NOT_SERVING) _resp_obj = SimpleGRpcTools.health_check(_connect_para, 'servicer_simple_call') self.assertTrue( _resp_obj.status == health_pb2.HealthCheckResponse.NOT_SERVING, '测试服务健康状态失败 - 停止服务') # 恢复服务 self.server_no_ssl_no_zoo.set_service_status( 'servicer_simple_call', health_pb2.HealthCheckResponse.SERVING) print("测试服务健康状态 - 服务不存在") _connect_para = SimpleGRpcTools.generate_connect_para(ip='127.0.0.2', port=50051) _resp_obj = SimpleGRpcTools.health_check(_connect_para, 'servicer_simple_call') self.assertTrue( _resp_obj.status == health_pb2.HealthCheckResponse.UNKNOWN, '测试服务健康状态失败 - 服务不存在')
def client_side_stream_call(): """ 客户端流模式,真正调用服务端的函数 """ # 发送请求 _connect_para = SimpleGRpcTools.generate_connect_para(ip='127.0.0.1', port=50051) _cresult = SimpleGRpcTools.grpc_call( _connect_para, client_side_stream_generator(), call_mode=EnumCallMode.ClientSideStream) _cresult.return_obj = SimpleGRpcTools.json_to_object_by_para_mapping( _cresult.return_json, 'service_client_side_stream') return _cresult
def server_bidirectional_stream_call_n_by_one(): """ 双向流模式,客户端处理,多个请求对应一个响应的情况 """ # 处理 _connect_para = SimpleGRpcTools.generate_connect_para(ip='127.0.0.1', port=50051) with SimpleGRpcTools.generate_channel(_connect_para) as channel: _cresult_iterator = SimpleGRpcTools.grpc_call_by_channel( channel, bidirectional_stream_n_by_one_generator(), call_mode=EnumCallMode.BidirectionalStream) for _cresult in _cresult_iterator: # 打印 print('bidirectional_stream_n_by_one client get: ' + _cresult.return_json) if not _cresult.is_success(): return False return True
def client_simple_call_para(a, b, *args, c=10, d={'d1': 'd1value'}, **kwargs): """ 测试简单调用,直接返回参数 """ # 转换参数 _para_values = RunTool.get_current_function_parameter_values( is_simple_mode=True) _para_obj = SimpleGRpcTools.parameters_to_json(_para_values) _req_obj = SimpleGRpcTools.generate_request_obj( service_name='service_simple_call_para', para_json=_para_obj.para_json, has_para_bytes=_para_obj.has_para_bytes, para_bytes=_para_obj.para_bytes) # 发送请求 _connect_para = SimpleGRpcTools.generate_connect_para( conn_str='127.0.0.1:50051') _cresult = SimpleGRpcTools.grpc_call(_connect_para, _req_obj) _cresult.return_obj = SimpleGRpcTools.json_to_object_by_para_mapping( _cresult.return_json, 'client_simple_call_para') return _cresult
def client_simple_throw_excepiton(): """ 测试简单调用,抛出异常 """ # 转换参数 _para_values = RunTool.get_current_function_parameter_values( is_simple_mode=True) _para_obj = SimpleGRpcTools.parameters_to_json(_para_values) _req_obj = SimpleGRpcTools.generate_request_obj( service_name='service_simple_throw_excepiton', para_json=_para_obj.para_json, has_para_bytes=_para_obj.has_para_bytes, para_bytes=_para_obj.para_bytes) # 发送请求 _connect_para = SimpleGRpcTools.generate_connect_para(ip='127.0.0.1', port=50051) _cresult = SimpleGRpcTools.grpc_call(_connect_para, _req_obj) _cresult.return_obj = SimpleGRpcTools.json_to_object_by_para_mapping( _cresult.return_json, 'client_simple_throw_excepiton') return _cresult
def server_side_stream_call(a, b, *args, **kwargs): """ 服务端流模式,真正调用服务端的函数 """ # 转换参数 _para_values = RunTool.get_current_function_parameter_values( is_simple_mode=True) _para_obj = SimpleGRpcTools.parameters_to_json(_para_values) _req_obj = SimpleGRpcTools.generate_request_obj( service_name='service_server_side_stream', para_json=_para_obj.para_json, has_para_bytes=_para_obj.has_para_bytes, para_bytes=_para_obj.para_bytes) _connect_para = SimpleGRpcTools.generate_connect_para(ip='127.0.0.1', port=50051) with SimpleGRpcTools.generate_channel(_connect_para) as channel: _cresult_iterator = SimpleGRpcTools.grpc_call_by_channel( channel, _req_obj, call_mode=EnumCallMode.ServerSideStream) for _cresult in _cresult_iterator: if not _cresult.is_success(): return False return True