我使用模拟网络来测试预定的流量,但我无法跟踪给定的结果,因为它不像使用node.services.startFlow(...)
那样作为未来返回。
我已经尝试过心跳示例中说明的方法:
val recordedTxs = node.database.transaction {
val (recordedTxs, futureTxs) = node.services.validatedTransactions.track()
futureTxs.notUsed()
recordedTxs
}
我已在recordedTxs
内列出了内容,并且未显示由预定流量加载的内容。我还订阅了futureTxs
,但没有观察到的更新。
还有其他方法吗?
由于
答案 0 :(得分:1)
测试计划流程的另一个方面是使用参数来调整流量以调节流量。 corda节点的调度程序将启动(通过合同调度逻辑)预期现在或过去完成的流程。这为您提供了两种检查流程完成的方法。
样品:
// Set up the network as:
net: MockNetwork = MockNetwork(threadPerNode = true)
// Logic to set up nodes
...
net.startNodes()
// Additional set up
...
val scheduledFlow = SimpleScheduledFlow(parameterForImmediateScheduling)
testNode.services.startFlow(scheduledFlow)
net.waitQuiescent()
node.database.transaction {
// Check validated transactions ...
// Checks on the states newly produced by the flow ...
}
可替换地,
val scheduledFlow = SimpleScheduledFlow(parameterForLaterScheduling)
testNode.services.startFlow(scheduledFlow)
(node.internals.platformClock as TestClock).setTo(valueDate.atTime(LocalTime.MIDNIGHT).plusSeconds(1).toInstant(ZoneOffset.UTC))
net.waitQuiescent()
node.database.transaction {
// Check validated transactions ...
// Checks on the states newly produced by the flow ...
}
补充参考:
答案 1 :(得分:0)
您可以按如下方式测试预定状态:
例如,请参阅心跳样本(https://github.com/joeldudleyr3/heartbeat)中的流量测试:
@Test
fun `heartbeat occurs every second`() {
val flow = StartHeartbeatFlow()
a.services.startFlow(flow).resultFuture
val enoughTimeForFiveScheduledTxs: Long = 5500
Thread.sleep(enoughTimeForFiveScheduledTxs)
val recordedTxs = a.database.transaction {
val (recordedTxs, futureTxs) = a.services.validatedTransactions.track()
futureTxs.notUsed()
recordedTxs
}
val originalTxPlusFiveScheduledTxs = 6
assertEquals(originalTxPlusFiveScheduledTxs, recordedTxs.size)
}
在此测试中,我们按以下步骤操作:
StartHeartbeatFlow
。此流程创建一个计划状态,一秒钟之后将创建创建另一个计划状态的事务,依此类推。这意味着运行StartHeartbeatFlow
会导致每秒发生一次新事务,直到节点关闭为止使用此方法时,您必须确保使用MockNetwork
初始化threadPerNode = true
,否则在线程上休眠将阻止所有网络活动。