@InitiatedBy 端的集成测试交易输出 post 交易最终确定

Integration testing transaction outputs on the @InitiatedBy side post transaction finality

我有一个 @InitiatingFlow,称为 ProposeMemberFlow,和一个相应的 @InitiatedBy ProposeMemberFlowResponder。我想在我的集成测试中包含一些东西来测试响应者是否具有事务输出状态之一 post FinalityFlow 子流已被启动流启动。

我在响应流程中天真地调用了 waitForLedgerCommit,post 响应 CollectSignaturesFlow,但我发现启动流程在响应流程完成之前完成 - 大概后者正在等待保险库更新。

我正在通过 CordaService 进行集成测试 - "the corda way" 使用 expectEvents 等待 VaultUpdate 以便我知道何时可以安全地针对 CordaService 进行测试?很像 here?

谢谢

我还没有听说过通过 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 句柄上检查是否已将正确的状态写入 vault

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