如何获取输入状态以进行流量测试

时间:2018-07-24 06:05:52

标签: corda

我有两个流程,说他们的名字是:

  • flow_out(需要1个输入状态)
  • flow_in(上面的输入 状态/交易由此存储)

我的流程(flow_out)具有1个输入状态和1个输出状态。从状态流(flow_out)中的保管库中检索输入状态,并由所有参与方(在测试MockNetwork中,目前有3个参与方)通过合同进行验证。

现在测试用例失败了,因为我的流程(flow_out)无法获得该状态,因为该事务从未发生(这是另一个流程的一部分,即flow_in)。

要解决这个问题,我也在Junit的@Before中启动了另一个流程(flow_in),以存储输入状态和传递的所有内容所需的事务。

  

Corda的流测试API 中还有哪些其他可用的方法可以用来   直接存储输入事务/状态,而无需仅运行流程   存储那些输入的事务?

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

Since you have access to the nodes' ServiceHubs, you can build, sign and store transactions directly in the test method, rather than using a flow:

class FlowTests {
    lateinit var network: MockNetwork
    lateinit var a: StartedMockNode
    lateinit var b: StartedMockNode

    @Before
    fun setup() {
        network = MockNetwork(listOf("com.example.contract"))
        a = network.createPartyNode()
        b = network.createPartyNode()
        listOf(a, b).forEach { it.registerInitiatedFlow(ExampleFlow.Acceptor::class.java) }
        network.runNetwork()
    }

    @After
    fun tearDown() {
        network.stopNodes()
    }

    @Test
    fun `a flow test`() {
        val lender = a.info.legalIdentities.first()
        val borrower = b.info.legalIdentities.first()

        val transactionBuilder = TransactionBuilder(network.defaultNotaryIdentity)
                .addOutputState(IOUState(99, lender, borrower), IOUContract.IOU_CONTRACT_ID)
                .addCommand(IOUContract.Commands.Create(), listOf(lender.owningKey, borrower.owningKey))

        a.transaction { transactionBuilder.verify(a.services) }
        val partSignedTransaction = a.services.signInitialTransaction(transactionBuilder)
        val signedTransaction = b.services.addSignature(partSignedTransaction)

        a.services.recordTransactions(signedTransaction)

        TODO("Test next flow.")
    }
}