【发布时间】:2020-04-08 13:42:57
【问题描述】:
我有一个作为 ScheduledState 的 LoanState。所有使用 LoanState 的 Flow 测试都会无限挂起。如果我将nextScheduledActivity() 设置为return null,那么测试运行良好。单元测试日志中没有可见的错误。
这是在 Corda 3.2 上。
这是控制台挂起前的最后一段文字:
[INFO] 14:39:40,604 [模拟节点 1 线程] (FlowStateMachineImpl.kt:419) 流。[742bd708-244d-49a0-91af-8127267029a1].initiateSession - 启动与方 O=Mock Company 2、L=London、C=GB 的流程会话。 用于跟踪目的的会话 id 是 会话 ID(toLong=4148369640629821591)。 {} [信息] 14:39:40,619 [模拟 节点 2 线程] (StateMachineManagerImpl.kt:367) statemachine.StateMachineManagerImpl.onSessionInit - 接受流 来自派对 O=Mock Company 1、L=London、C=GB 的会话。会话 ID 跟踪目的是 SessionId(toLong=4148369640629821591)。 {invocation_id=2c33f7e4-63bd-4fad-98a0-6b568a78136d, 调用时间戳=2020-03-23T19:39:40.619Z, session_id=2c33f7e4-63bd-4fad-98a0-6b568a78136d, session_timestamp=2020-03-23T19:39:40.619Z} [信息] 14:39:40,706 [模拟 节点 1 线程] (FlowStateMachineImpl.kt:419) 流。[742bd708-244d-49a0-91af-8127267029a1].initiateSession - 启动与方 O=Mock Company 2、L=London、C=GB 的流程会话。 用于跟踪目的的会话 id 是 会话 ID(toLong=-5160466662167158789)。 {} [信息] 14:39:40,715 [模拟 节点 2 线程] (StateMachineManagerImpl.kt:367) statemachine.StateMachineManagerImpl.onSessionInit - 接受流 来自派对 O=Mock Company 1、L=London、C=GB 的会话。会话 ID 跟踪目的是 SessionId(toLong=-5160466662167158789)。 {invocation_id=af86ddea-0bae-43eb-998c-c2ae3fc91fcf, 调用时间戳=2020-03-23T19:39:40.715Z, session_id=af86ddea-0bae-43eb-998c-c2ae3fc91fcf, session_timestamp=2020-03-23T19:39:40.715Z} [信息] 14:39:40,742 [模拟 节点 1 线程] (FlowStateMachineImpl.kt:419) 流。[742bd708-244d-49a0-91af-8127267029a1].initiateSession - 启动与方 O=ParentCompany、L=London、C=GB 的流程会话。 用于跟踪目的的会话 id 是 会话 ID(toLong=6693667128513799995)。 {} [信息] 14:39:40,750 [模拟 节点 3 线程] (StateMachineManagerImpl.kt:367) statemachine.StateMachineManagerImpl.onSessionInit - 接受流 来自派对 O=Mock Company 1、L=London、C=GB 的会话。会话 ID 跟踪目的是 SessionId(toLong=6693667128513799995)。 {actor_id=仅用于测试,actor_owningIdentity=O=ParentCompany, L=伦敦,C=GB,actor_store_id=TEST, invocation_id=487f4d03-c5b7-4aea-81a6-a000e788e0a2, 调用时间戳=2020-03-23T19:39:40.750Z, session_id=487f4d03-c5b7-4aea-81a6-a000e788e0a2, session_timestamp=2020-03-23T19:39:40.750Z}
@Nullable
@Override
public ScheduledActivity nextScheduledActivity(@NotNull StateRef thisStateRef, @NotNull
FlowLogicRefFactory flowLogicRefFactory) {
FlowLogicRef flow = flowLogicRefFactory.create(
"com.myapp.MySchedulableFlow",
thisStateRef
);
return new ScheduledActivity(flow, paymentDueDate);
}
如果我将流名称设置为不存在的流,那么测试将不会挂起,并且会报告找不到流。
更新:确认挂起的是waitQuiscent()。如果我删除它并用 Thread.sleep() 替换它,我的测试将通过。看起来 waitQuiscent 等待所有 ScheduledActivities 完成。是否需要等待处理相同类型的功能而不等待 ScheduledActivities 完成?
【问题讨论】:
-
你能分享一下你的测试类的代码吗?
标签: corda