corda - 如何调试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))
)
)
解决方案
推荐阅读
- selenium - 无论如何我们可以在jenkins服务器(linux)上运行selenium脚本而无需在jenkins机器上安装chrome浏览器(不是chromedriver)
- angular - 无法读取 null 的属性“注入器”
- ios - TabBarItem 徽章颜色 Xcode 13
- amazon-web-services - s3fs可以同时挂载不同的bucket和不同的account吗?
- android - Kotlin 回收站视图
- django - Django中的ManyToMany字段序列化器
- python - 当我尝试在 ul 中获取 li 元素时,我只得到一个 li 而没有别的
- c++ - 在 C++ 中使用逗号运算符时的未定义行为
- java - 当单击每个项目时,回收站视图的每个项目都有不同的数据,显示它在下一个活动中来自数据库的相关数据,使用一个下一个活动
- awk - 使用 AWK 编辑文本文件并制作新的文本文件