[CORDA-2282]: Ensure global test port allocation prevents port clashes (#4340)

* Enabled system property / env variable cascade for global test port allocation toggles.

* [CORDA-2282]: Ensure global test port allocation prevents port clashes. (fix)
This commit is contained in:
Michele Sollecito 2018-12-02 08:17:16 +00:00 committed by Shams Asari
parent ec42d30661
commit 00865a9456
3 changed files with 8 additions and 7 deletions

View File

@ -6,19 +6,16 @@ import net.corda.core.internal.*
import net.corda.core.internal.concurrent.fork import net.corda.core.internal.concurrent.fork
import net.corda.core.internal.concurrent.openFuture import net.corda.core.internal.concurrent.openFuture
import net.corda.core.internal.concurrent.transpose import net.corda.core.internal.concurrent.transpose
import net.corda.core.utilities.NetworkHostAndPort
import net.corda.core.utilities.getOrThrow import net.corda.core.utilities.getOrThrow
import net.corda.node.internal.NodeStartup import net.corda.node.internal.NodeStartup
import net.corda.testing.common.internal.ProjectStructure.projectRootDir import net.corda.testing.common.internal.ProjectStructure.projectRootDir
import net.corda.testing.core.BOB_NAME import net.corda.testing.core.BOB_NAME
import net.corda.testing.core.DUMMY_BANK_A_NAME import net.corda.testing.core.DUMMY_BANK_A_NAME
import net.corda.testing.core.DUMMY_BANK_B_NAME import net.corda.testing.core.DUMMY_BANK_B_NAME
import net.corda.testing.core.DUMMY_NOTARY_NAME import net.corda.testing.driver.internal.incrementalPortAllocation
import net.corda.testing.http.HttpApi import net.corda.testing.http.HttpApi
import net.corda.testing.node.NotarySpec
import net.corda.testing.node.internal.addressMustBeBound import net.corda.testing.node.internal.addressMustBeBound
import net.corda.testing.node.internal.addressMustNotBeBound import net.corda.testing.node.internal.addressMustNotBeBound
import net.corda.testing.node.internal.internalDriver
import org.assertj.core.api.Assertions.* import org.assertj.core.api.Assertions.*
import org.json.simple.JSONObject import org.json.simple.JSONObject
import org.junit.Test import org.junit.Test
@ -104,10 +101,11 @@ class DriverTests {
@Test @Test
fun `monitoring mode enables jolokia exporting of JMX metrics via HTTP JSON`() { fun `monitoring mode enables jolokia exporting of JMX metrics via HTTP JSON`() {
driver(DriverParameters(jmxPolicy = JmxPolicy(7006), startNodesInProcess = false, notarySpecs = emptyList())) { val portAllocation = incrementalPortAllocation(7006)
startNode(providedName = DUMMY_REGULATOR_NAME).getOrThrow() driver(DriverParameters(jmxPolicy = JmxPolicy(portAllocation.nextPort()), startNodesInProcess = false, notarySpecs = emptyList())) {
val node = startNode(providedName = DUMMY_REGULATOR_NAME).getOrThrow()
// request access to some JMX metrics via Jolokia HTTP/JSON // request access to some JMX metrics via Jolokia HTTP/JSON
val api = HttpApi.fromHostAndPort(NetworkHostAndPort("localhost", 7006), "/jolokia/") val api = HttpApi.fromHostAndPort(node.jmxAddress!!, "/jolokia/")
val versionAsJson = api.getJson<JSONObject>("/jolokia/version/") val versionAsJson = api.getJson<JSONObject>("/jolokia/version/")
assertThat(versionAsJson.getValue("status")).isEqualTo(200) assertThat(versionAsJson.getValue("status")).isEqualTo(200)
} }

View File

@ -48,6 +48,8 @@ interface NodeHandle : AutoCloseable {
val rpcAddress: NetworkHostAndPort val rpcAddress: NetworkHostAndPort
/** Get the rpc admin address for this node **/ /** Get the rpc admin address for this node **/
val rpcAdminAddress: NetworkHostAndPort val rpcAdminAddress: NetworkHostAndPort
/** Get the JMX server address for this node, if JMX is enabled **/
val jmxAddress: NetworkHostAndPort?
/** Get a [List] of [User]'s for this node **/ /** Get a [List] of [User]'s for this node **/
val rpcUsers: List<User> val rpcUsers: List<User>
/** The location of the node's base directory **/ /** The location of the node's base directory **/

View File

@ -23,6 +23,7 @@ interface NodeHandleInternal : NodeHandle {
override val p2pAddress: NetworkHostAndPort get() = configuration.p2pAddress override val p2pAddress: NetworkHostAndPort get() = configuration.p2pAddress
override val rpcAddress: NetworkHostAndPort get() = configuration.rpcOptions.address override val rpcAddress: NetworkHostAndPort get() = configuration.rpcOptions.address
override val rpcAdminAddress: NetworkHostAndPort get() = configuration.rpcOptions.adminAddress override val rpcAdminAddress: NetworkHostAndPort get() = configuration.rpcOptions.adminAddress
override val jmxAddress: NetworkHostAndPort? get() = configuration.jmxMonitoringHttpPort?.let { NetworkHostAndPort("localhost", it) }
override val baseDirectory: Path get() = configuration.baseDirectory override val baseDirectory: Path get() = configuration.baseDirectory
} }