You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为Corda流程编写测试用例时能否使用RPC?无法访问RPC客户端怎么办?

Corda流程测试中RPC的使用问题解答

1. 在为Corda流程编写测试用例的过程中,是否可以使用RPC?

当然可以,但要结合你的测试场景来决定是否必要。

Corda官方提供的MockNetwork是大多数流程单元测试的首选——它在内存中模拟节点交互,速度快且不需要真实网络,适合测试流程的核心业务逻辑。但如果你需要测试客户端通过RPC调用流程的完整链路,或者验证节点对外暴露的RPC服务是否正常工作(比如权限控制、返回结果格式),那么使用RPC是完全合理的。

比如,当你要测试一个外部系统如何通过RPC触发Corda流程、查询账本状态时,直接在测试中启动带RPC服务的节点,用CordaRPCClient连接并调用,能更贴近生产环境的真实场景。

2. 在为Corda流程编写测试用例时,遇到无法访问RPC客户端的问题该如何解决?

遇到连接问题时,可以按以下步骤排查:

  • 检查节点RPC配置是否正确
    确保测试用的节点配置文件(node.conf)中开启了RPC服务,并且配置了正确的端口和授权用户:

    rpcSettings {
        address="localhost:10006"
        adminAddress="localhost:10046"
    }
    rpcUsers=[
        {
            username="testUser"
            password="testPass"
            permissions=["InvokeRpc.StartFlow", "InvokeRpc.VaultQuery"]
        }
    ]
    

    测试环境中,这些配置要确保被正确加载,比如用DriverDSL启动节点时,要通过nodeConfig参数传入这些配置。

  • 确认节点已完全启动
    在测试代码中,启动节点后不要立刻尝试连接RPC——节点初始化需要时间。可以通过node.start().get()(同步等待启动完成),或者监听节点的状态变化,直到节点进入RUNNING状态再建立RPC连接。

  • 核对RPC客户端的连接参数
    确保客户端使用的主机、端口和节点配置完全一致,用户名密码也和rpcUsers中的匹配。比如:

    val client = CordaRPCClient(NetworkHostAndPort("localhost", 10006))
    val proxy = client.start("testUser", "testPass").proxy
    

    这里的端口必须和节点rpcSettings.address中的端口对应。

  • 注意测试框架的限制
    MockNetwork是纯内存模拟,默认不提供RPC服务——如果你在MockNetwork测试中尝试连接RPC,肯定会失败。这种情况下,如果你需要测试RPC逻辑,应该改用DriverDSL来启动真实的节点实例,它会为每个节点分配真实的RPC端口,并支持RPC连接。

  • 检查RPC用户的权限
    即使连接成功,如果用户没有对应的权限,调用RPC方法时也会报错。确保rpcUsers中的permissions列表包含你要调用的RPC方法所需的权限,比如启动流程需要InvokeRpc.StartFlow,查询 vault 需要InvokeRpc.VaultQuery。

  • 排查端口占用或防火墙问题
    测试环境中,确保RPC端口没有被其他进程占用,可以用netstat -ano | findstr :10006(Windows)或lsof -i :10006(Linux/Mac)检查端口是否被监听。另外,本地防火墙可能会阻止测试程序访问节点的RPC端口,临时关闭防火墙测试是否能解决问题。

内容的提问来源于stack exchange,提问作者Alok Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:23:22