在MockNetwork测试中,NetworkMapCache是空的
我正在编写一些轻量级的流测试嘲弄一切,我遇到了错误,在所有节点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 [模拟网络]警告net.corda.flow。[8f685c46-9ab6-4d64-b3f2-6b7476813c3b] – 由意外的exception终止java.lang.IllegalArgumentException:不知道党C = ES,L =马德里O =爱丽丝公司
有趣的事情,测试仍然完成绿色(没有有用的工作完成你)。 但是,它可能是另一个问题的话题。
我可以通过像这样手动设置缓存来克服它:
alice.services.networkMapCache.addNode(issuer.info) bob.services.networkMapCache.addNode(alice.info)
但是,这是正确的方式去? 我在样品或任何地方都看不到这样的东西。
如果查看MockNetwork.createNode
的定义,则MockNetwork.createNode
默认为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 。