在事务结束后的@InitiatedBy端集成测试事务输出

时间:2018-01-30 16:20:10

标签: corda

我遇到的情况是@InitiatingFlow,名为ProposeMemberFlow,以及相应的@InitiatedBy ProposeMemberFlowResponder。我希望在我的集成测试中包含一些测试响应者在FinalityFlow子流后已经被启动流启动的事务输出状态之一的东西。

我在响应流程中天真地调用了waitForLedgerCommit,在响应CollectSignaturesFlow之后,但我发现启动流程在响应流程之前完成 - 可能是后者正在等待Vault更新。

我通过CordaService进行集成测试 - 是" Corda方式"使用expectEvents等待VaultUpdate以便我知道何时可以安全地测试CordaService?很像here

由于

1 个答案:

答案 0 :(得分:1)

我还没有听说过CordaService的集成测试。通常,您可以使用节点驱动程序编写集成测试。

以下是一个例子:https://github.com/corda/cordapp-template-kotlin/blob/release-V2/cordapp/src/integrationTest/kotlin/com/template/DriverBasedTest.kt

这段代码启动一组节点,然后使用RPC检查节点的某些条件。

在您的情况下,您希望在节点驱动程序中使用以下一组RPC操作:

  • CordaRPCOps.startFlowDynamic在节点A的RPC句柄上运行ProposeMemberFlow
  • CordaRPCOps.vaultQueryBy在节点B的RPC句柄上检查是否已将正确的状态写入文件库

另一种选择是使用模拟网络(例如https://github.com/corda/cordapp-example/blob/release-V2/kotlin-source/src/test/kotlin/com/example/flow/IOUFlowTests.kt)。您可能会认为这不是集成测试,因为您正在运行模拟节点而不是真实节点。但是,模拟节点只是AbstractNode接口的另一个实现,并且应该像普通节点一样用于测试。