У меня LoanState, который является ScheduledState. Все тесты потока, которые используют LoanState, зависают бесконечно. Если я установлю nextScheduledActivity()
на return null
, тогда тесты пройдут нормально. В журнале модульных тестов нет видимых ошибок. Это на Corda 3.2.
Это последний бит текста в консоли перед зависанием:
[INFO] 14: 39: 40,604 [Поток фиктивного узла 1] ( FlowStateMachineImpl.kt: 419) flow. [742bd708-244d-49a0-91af-8127267029a1] .initiateSession - инициирование сеанса потока со стороной O = Mock Company 2, L = Лондон, C = GB. Идентификатор сеанса для целей трассировки - SessionId (toLong = 4148369640629821591). {} [ИНФОРМАЦИЯ] 14: 39: 40,619 [Поток фиктивного узла 2] (StateMachineManagerImpl.kt: 367) statemachine.StateMachineManagerImpl.onSessionInit - Принятие сеанса потока от стороны O = Подразделение 1, L = Лондон, C = GB. Идентификатор сеанса для целей трассировки - SessionId (toLong = 4148369640629821591). {invocation_id = 2c33f7e4-63bd-4fad-98a0-6b568a78136d, invocation_timestamp = 2020-03-23T19: 39: 40.619Z, session_id = 2c33f7e4-63bd-4fad-98a0-6b568a78136d, сессия_time.6: 2020: отметка времени сессии: 2020: } [INFO] 14: 39: 40,706 [Поток фиктивного узла 1] (FlowStateMachineImpl.kt: 419) flow. [742bd708-244d-49a0-91af-8127267029a1] .initiateSession - Инициирование сеанса потока со стороной O = Mock Company 2, L = Лондон, C = ГБ. Идентификатор сеанса для целей трассировки - SessionId (toLong = -5160466662167158789). {} [ИНФО] 14: 39: 40,715 [Поток фиктивного узла 2] (StateMachineManagerImpl.kt: 367) statemachine.StateMachineManagerImpl.onSessionInit - Принятие сеанса потока от стороны O = Подразделение 1, L = Лондон, C = ГБ. Идентификатор сеанса для целей трассировки - SessionId (toLong = -5160466662167158789). {invocation_id = af86ddea-0bae-43eb-998 c -c2ae3fc91fcf, invocation_timestamp = 2020-03-23T19: 39: 40.715Z, session_id = af86ddea-0bae-43eb-998 c -c2ae3fc91fcf = время_ сессии 23T19: 39: 40.715Z} [ИНФОРМАЦИЯ] 14: 39: 40,742 [Поток фиктивного узла 1] (FlowStateMachineImpl.kt: 419) поток. [742bd708-244d-49a0-91af-8127267029a1] .initiateSession - Инициирование сеанса потока со стороной O = ParentCompany, L = Лондон, C = ГБ. Идентификатор сеанса для целей трассировки - SessionId (toLong = 6693667128513799995). {} [ИНФО] 14: 39: 40,750 [Поток фиктивного узла 3] (StateMachineManagerImpl.kt: 367) statemachine.StateMachineManagerImpl.onSessionInit - Принятие сеанса потока от стороны O = Подразделение 1, L = Лондон, C = ГБ. Идентификатор сеанса для целей трассировки - SessionId (toLong = 6693667128513799995). {actor_id = Только для тестирования, actor_owningIdentity = O = ParentCompany, L = Лондон, C = GB, actor_store_id = TEST, invocation_id = 487f4d03-c5b7-4aea-81a6-a000e788e0a2, invocation_timestamp = 2020-03-235019: 39: 39: 50Z: 39: 39,750: 39 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 завершат sh. Есть ли ожидание для обработки того же типа функциональности, не дожидаясь, пока ScheduledActivities завершит работу sh?