首页 > 解决方案 > 如何调试corda流测试中的类星体错误?

问题描述

在使用 MockNetwork 为验证公证人运行流单元测试时,我不断收到流测试失败并出现“缺少事务上下文”错误。我已经彻底验证了没有缺少@Suspendable注释的方法。在调试时,我注意到 FinalityFlow 无法成功运行 Notary.Client 流,因为后者无法在 FlowStateMachine 处挂起。从 Stack Overflow,我发现了一个关于这个错误的早期帖子。然而,添加这个标志-Dco.paralleluniverse.fibers.verifyInstrumentation=true,在输出中没有给我额外的信息。我正在使用corda 4.3开源构建我的cordapp,并按照corda文档中的建议使用quasar-0.7.10 jar。

我在这里遗漏了什么 - 我需要更改日志记录级别吗?信息是否被发送到文件中?如何正确检测流测试以获取有关执行的更多详细信息?

这是我在运行测试时看到的异常。

[INFO ] 11:36:28.623 [Mock network] flow. - Flow raised an error: Transaction context is missing. This might happen if a suspendable method is not annotated with @Suspendable annotation.. Sending it to flow hospital to be triaged.
[WARN ] 11:36:28.624 [Mock network] flow. - Caught exception from flow
java.lang.IllegalArgumentException: Transaction context is missing. This might happen if a suspendable method is not annotated with @Suspendable annotation.
    at net.corda.node.services.statemachine.FlowStateMachineImpl.checkDbTransaction(FlowStateMachineImpl.kt:230) ~[corda-node-4.3.jar:?]
    at net.corda.node.services.statemachine.FlowStateMachineImpl.processEventImmediately(FlowStateMachineImpl.kt:221) ~[corda-node-4.3.jar:?]
    at net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:291) ~[corda-node-4.3.jar:?]
    at net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:46) ~[corda-node-4.3.jar:?]
    at co.paralleluniverse.fibers.Fiber.run1(Fiber.java:1092) ~[quasar-core-0.7.10-jdk8.jar:0.7.10]
    at co.paralleluniverse.fibers.Fiber.exec(Fiber.java:788) ~[quasar-core-0.7.10-jdk8.jar:0.7.10]
    at co.paralleluniverse.fibers.RunnableFiberTask.doExec(RunnableFiberTask.java:100) ~[quasar-core-0.7.10-jdk8.jar:0.7.10]
    at co.paralleluniverse.fibers.RunnableFiberTask.run(RunnableFiberTask.java:91) ~[quasar-core-0.7.10-jdk8.jar:0.7.10]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_192]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_192]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_192]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ~[?:1.8.0_192]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_192]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_192]
    at net.corda.node.utilities.AffinityExecutor$ServiceAffinityExecutor$1$thread$1.run(AffinityExecutor.kt:63) ~[corda-node-4.3.jar:?]

MockNetwork 初始化如下。

val testCordapps = cordappPackages.map { TestCordapp.findCordapp(it) }

val mockNetwork = MockNetwork(
    MockNetworkParameters(
        cordappsForAllNodes = testCordapps,
        notarySpecs = listOf(MockNetworkNotarySpec(NOTARY_LEGAL_NAME, validating = true))
    )
)

标签: corda

解决方案


推荐阅读