从0到1实现rpc之丰富测试案例
09 Apr 2024 |测试案例主要针对服务消费者consumer,复杂逻辑都在consumer端。
- 常规int类型,返回User对象
参数类型转换,主要实现逻辑都在TypeUtils工具类中。
- 测试方法重载,同名方法,参数不同
方法签名的实现,主要逻辑都在MethodUtils工具类中。
- 测试返回字符串
参数类型转换,主要实现逻辑都在TypeUtils工具类中。
- 测试重载方法返回字符串
参数类型转换,主要实现逻辑都在TypeUtils工具类中。
- 测试local toString方法
本地方法不走远程调用,主要逻辑都在MethodUtils工具类中。
- 常规int类型,返回int
基本参数类型转换,主要实现逻辑都在TypeUtils工具类中。
- 测试long+float类型
基本参数类型转换,主要实现逻辑都在TypeUtils工具类中。
- 测试参数是User类型
对象参数类型转换,主要实现逻辑都在TypeUtils工具类中。
- 测试返回long[]
数组参数类型转换,主要实现逻辑都在TypeUtils工具类中。
- 测试参数和返回值都是long[]
数组参数类型转换,主要实现逻辑都在TypeUtils工具类中。
- 测试参数和返回值都是List类型
List参数类型转换,主要实现逻辑都在TypeUtils工具类中。
- 测试参数和返回值都是Map类型
Map参数类型转换,主要实现逻辑都在TypeUtils工具类中。
- 测试参数和返回值都是Boolean/boolean类型
基本参数类型转换,主要实现逻辑都在TypeUtils工具类中。
- 测试参数和返回值都是User[]类型
对象数组参数类型转换,主要实现逻辑都在TypeUtils工具类中。
- 试参数为long,返回值是User类型
基本参数类型转换,主要实现逻辑都在TypeUtils工具类中。
- 测试参数为boolean,返回值都是User类型
基本参数类型转换,主要实现逻辑都在TypeUtils工具类中。
- 测试服务端抛出一个RuntimeException异常
异常处理,主要实现逻辑都在RpcInvocationHandler工具类中。
- 测试服务端抛出一个超时重试后成功的场景
异常超时重试,主要实现逻辑都在RpcInvocationHandler工具类中。
- 测试通过Context跨消费者和提供者进行传参
跨线程传参
- 使用ThreadLocal实现;
- 在RpcRequest中携带传递的参数;
- 在consumer端,使用ParameterFilter将参数从RpcContext传递到RpcRequest;
- 在provider端,反射调用之前,从RpcRequest中获取到参数封装到当前RpcContext。调用完成之后,需要清除,防止内存泄漏和上下文污染
源码:
https://github.com/midnight2104/midnight-rpc/tree/lesson11