我正在使用模拟的所有内容编写一些轻量级流测试,并且遇到错误,在所有节点上,NetworkMapService仅包含节点本身。另一方面,身份服务包含参与测试的所有3个节点。
net = MockNetwork()
issuer = net.createNode(legalName = CHARLIE.name)
alice = net.createNode(legalName = ALICE.name)
bob = net.createNode(legalName = BOB.name)
issuer.registerInitiatedFlow(IssueClaimFlow.Issuer::class.java)
alice.registerInitiatedFlow(VerifyClaimFlow.Prover::class.java)
MockServices.makeTestDatabaseAndMockServices(createIdentityService = { InMemoryIdentityService(listOf(ALICE_IDENTITY, BOB_IDENTITY, CHARLIE_IDENTITY), emptySet(), DEV_TRUST_ROOT) } )
net.registerIdentities()
net.runNetwork()
在这种情况下,流程一直顺利,直到第一次调用sendAndRecieve()。我得到了:
12:28:12.832 [模拟网络] WARN net.corda.flow。[8f685c46-9ab6-4d64-b3f2-6b7476813c3b] - 由意外异常终止 java.lang.IllegalArgumentException:不知道派对C = ES,L =马德里,O = Alice Corp
有趣的是,测试仍然是完成绿色(没有完成有用的工作)。但它可能是另一个问题的话题。
我可以通过手动设置缓存来克服它:
alice.services.networkMapCache.addNode(issuer.info)
bob.services.networkMapCache.addNode(alice.info)
但这是正确的方法吗?我不会在样品或任何地方看到类似的东西。
答案 0 :(得分:0)
如果查看MockNetwork.createNode
的定义,networkMapAddress
默认为null
。
相反,您应该使用MockNetwork.createSomeNodes
为您创建网络地图节点,然后将该节点设置为它创建的每个后续节点的网络地图。
以下是CorDapp示例中的示例:
network = MockNetwork()
val nodes = network.createSomeNodes(2)
a = nodes.partyNodes[0]
b = nodes.partyNodes[1]
您可以在此处查看完整示例:https://github.com/corda/cordapp-example/blob/release-V2/kotlin-source/src/test/kotlin/com/example/flow/IOUFlowTests.kt。