在MockNetwork测试中,NetworkMapCache为空

时间:2018-02-07 10:19:36

标签: corda

我正在使用模拟的所有内容编写一些轻量级流测试,并且遇到错误,在所有节点上,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)

但这是正确的方法吗?我不会在样品或任何地方看到类似的东西。

1 个答案:

答案 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