关机挂钩Corda集成测试

时间:2019-12-06 13:24:56

标签: corda

我有以下Corda service。它启动了Jetty服务器

@CordaService
class IOUService(private val serviceHub: AppServiceHub): SingletonSerializeAsToken() {

    init {
        val port = serviceHub.myInfo.addresses.first().port - 1002
        log.println("IOUService init was called...")
        log.println("Port: $port")

        val jettyServer = JettyServer()
        jettyServer.start(port)
    }
}

我的问题是,在运行集成测试时如何释放被注视的Jetty端口。这是两个示例测试(基本上是两次相同的测试来说明问题):

    @Test
    fun `node test`() = withDriver {
        val (partyAHandle, partyBHandle) = startNodes(bankA, bankB)
        assertEquals(bankB.name, partyAHandle.resolveName(bankB.name))
        assertEquals(bankA.name, partyBHandle.resolveName(bankA.name))
    }

    @Test
    fun `node test2`() = withDriver {
        val (partyAHandle, partyBHandle) = startNodes(bankA, bankB)
        assertEquals(bankB.name, partyAHandle.resolveName(bankB.name))
        assertEquals(bankA.name, partyBHandle.resolveName(bankA.name))
    }

第一个测试将启动3个节点:一个具有以下详细信息的公证人,BankA和BankB节点:

Notary:
Advertised P2P messaging addresses      : localhost:10000
RPC connection address                  : localhost:10001
RPC admin connection address            : localhost:10002
Jetty Port: 8998

BankA:
Advertised P2P messaging addresses      : localhost:10004
RPC connection address                  : localhost:10005
RPC admin connection address            : localhost:10006
Jetty Port: 9002

BankB:
Advertised P2P messaging addresses      : localhost:10008
RPC connection address                  : localhost:10009
RPC admin connection address            : localhost:10010
Jetty Port: 9006

不幸的是,第二次测试将失败,因为Jetty端口仍被绑定:

[ERROR] 14:22:04,825 [driver-pool-thread-0] internal.Node.installCordaServices - Corda service com.example.flows.IOUService failed to instantiate. Reason was: Address already in use [errorCode=1pryyp4, moreInformationAt=https://errors.corda.net/OS/4.1/1pryyp4]
 java.io.IOException: Failed to bind to 0.0.0.0/0.0.0.0:9006

如何在集成测试期间注册关闭钩子以关闭Jetty服务器?

示例代码可以在这里找到:

https://github.com/altfatterz/learning-corda

1 个答案:

答案 0 :(得分:0)

目前正在研究Corda服务的适当生命周期。希望您将来可以这样做。

目前,还没有一种简单的方法可以从节点内部执行此操作。

相关问题