diff --git a/docs/source/example-code/src/main/kotlin/net/corda/docs/tutorial/twoparty/flow.kt b/docs/source/example-code/src/main/kotlin/net/corda/docs/tutorial/twoparty/flow.kt index 27f4705501..dc4825c1b1 100644 --- a/docs/source/example-code/src/main/kotlin/net/corda/docs/tutorial/twoparty/flow.kt +++ b/docs/source/example-code/src/main/kotlin/net/corda/docs/tutorial/twoparty/flow.kt @@ -10,7 +10,6 @@ import net.corda.core.messaging.CordaRPCOps import net.corda.core.serialization.SerializationWhitelist import net.corda.core.transactions.TransactionBuilder import net.corda.core.utilities.ProgressTracker -import net.corda.webserver.services.WebServerPluginRegistry import java.util.function.Function import javax.ws.rs.GET import javax.ws.rs.Path diff --git a/node/src/integration-test/kotlin/net/corda/node/services/network/NetworkMapTest.kt b/node/src/integration-test/kotlin/net/corda/node/services/network/NetworkMapTest.kt index a46ae6f378..3f9aade18c 100644 --- a/node/src/integration-test/kotlin/net/corda/node/services/network/NetworkMapTest.kt +++ b/node/src/integration-test/kotlin/net/corda/node/services/network/NetworkMapTest.kt @@ -10,6 +10,7 @@ import net.corda.core.utilities.seconds import net.corda.nodeapi.internal.network.NETWORK_PARAMS_FILE_NAME import net.corda.nodeapi.internal.network.NetworkParameters import net.corda.testing.ALICE_NAME +import net.corda.testing.ROOT_CA import net.corda.testing.BOB_NAME import net.corda.testing.SerializationEnvironmentRule import net.corda.testing.driver.NodeHandle @@ -49,20 +50,22 @@ class NetworkMapTest { @Test fun `node correctly downloads and saves network parameters file on startup`() { - internalDriver(portAllocation = portAllocation, compatibilityZone = compatibilityZone, initialiseSerialization = false) { + internalDriver(portAllocation = portAllocation, compatibilityZone = compatibilityZone, + initialiseSerialization = false, notarySpecs = emptyList()) { val alice = startNode(providedName = ALICE_NAME).getOrThrow() val networkParameters = alice.configuration.baseDirectory .list { paths -> paths.filter { it.fileName.toString() == NETWORK_PARAMS_FILE_NAME }.findFirst().get() } .readAll() .deserialize>() .verified() - assertEquals(NetworkMapServer.stubNetworkParameter, networkParameters) + assertEquals(networkMapServer.networkParameters, networkParameters) } } @Test fun `nodes can see each other using the http network map`() { - internalDriver(portAllocation = portAllocation, compatibilityZone = compatibilityZone, initialiseSerialization = false) { + internalDriver(portAllocation = portAllocation, compatibilityZone = compatibilityZone, + initialiseSerialization = false, onNetworkParametersGeneration = { networkMapServer.networkParameters = it }) { val alice = startNode(providedName = ALICE_NAME) val bob = startNode(providedName = BOB_NAME) val notaryNode = defaultNotaryNode.get() @@ -77,7 +80,8 @@ class NetworkMapTest { @Test fun `nodes process network map add updates correctly when adding new node to network map`() { - internalDriver(portAllocation = portAllocation, compatibilityZone = compatibilityZone, initialiseSerialization = false) { + internalDriver(portAllocation = portAllocation, compatibilityZone = compatibilityZone, + initialiseSerialization = false, onNetworkParametersGeneration = { networkMapServer.networkParameters = it }) { val alice = startNode(providedName = ALICE_NAME) val notaryNode = defaultNotaryNode.get() val aliceNode = alice.get() @@ -98,7 +102,8 @@ class NetworkMapTest { @Test fun `nodes process network map remove updates correctly`() { - internalDriver(portAllocation = portAllocation, compatibilityZone = compatibilityZone, initialiseSerialization = false) { + internalDriver(portAllocation = portAllocation, compatibilityZone = compatibilityZone, + initialiseSerialization = false, onNetworkParametersGeneration = { networkMapServer.networkParameters = it }) { val alice = startNode(providedName = ALICE_NAME) val bob = startNode(providedName = BOB_NAME) val notaryNode = defaultNotaryNode.get() diff --git a/node/src/integration-test/kotlin/net/corda/node/utilities/registration/NodeRegistrationTest.kt b/node/src/integration-test/kotlin/net/corda/node/utilities/registration/NodeRegistrationTest.kt index 83526ba759..af1a44426c 100644 --- a/node/src/integration-test/kotlin/net/corda/node/utilities/registration/NodeRegistrationTest.kt +++ b/node/src/integration-test/kotlin/net/corda/node/utilities/registration/NodeRegistrationTest.kt @@ -3,10 +3,12 @@ package net.corda.node.utilities.registration import net.corda.core.crypto.Crypto import net.corda.core.identity.CordaX500Name import net.corda.core.internal.cert +import net.corda.core.internal.concurrent.transpose import net.corda.core.internal.toX509CertHolder -import net.corda.core.utilities.NetworkHostAndPort -import net.corda.core.utilities.getOrThrow -import net.corda.core.utilities.minutes +import net.corda.core.messaging.startFlow +import net.corda.core.utilities.* +import net.corda.finance.DOLLARS +import net.corda.finance.flows.CashIssueAndPaymentFlow import net.corda.nodeapi.internal.crypto.CertificateAndKeyPair import net.corda.nodeapi.internal.crypto.CertificateType import net.corda.nodeapi.internal.crypto.X509CertificateFactory @@ -14,11 +16,16 @@ import net.corda.nodeapi.internal.crypto.X509Utilities import net.corda.nodeapi.internal.crypto.X509Utilities.CORDA_CLIENT_CA import net.corda.nodeapi.internal.crypto.X509Utilities.CORDA_INTERMEDIATE_CA import net.corda.nodeapi.internal.crypto.X509Utilities.CORDA_ROOT_CA +import net.corda.nodeapi.internal.network.NotaryInfo +import net.corda.testing.ROOT_CA import net.corda.testing.SerializationEnvironmentRule -import net.corda.testing.node.internal.CompatibilityZoneParams import net.corda.testing.driver.PortAllocation +import net.corda.testing.node.NotarySpec +import net.corda.testing.node.internal.CompatibilityZoneParams import net.corda.testing.node.internal.internalDriver import net.corda.testing.node.internal.network.NetworkMapServer +import net.corda.testing.singleIdentity +import net.corda.testing.singleIdentityAndCert import org.assertj.core.api.Assertions.assertThat import org.assertj.core.api.Assertions.assertThatThrownBy import org.bouncycastle.pkcs.PKCS10CertificationRequest @@ -44,15 +51,13 @@ class NodeRegistrationTest { @JvmField val testSerialization = SerializationEnvironmentRule(true) private val portAllocation = PortAllocation.Incremental(13000) - private val rootCertAndKeyPair = createSelfKeyAndSelfSignedCertificate() - private val registrationHandler = RegistrationHandler(rootCertAndKeyPair) - + private val registrationHandler = RegistrationHandler(ROOT_CA) private lateinit var server: NetworkMapServer private lateinit var serverHostAndPort: NetworkHostAndPort @Before fun startServer() { - server = NetworkMapServer(1.minutes, portAllocation.nextHostAndPort(), rootCertAndKeyPair, registrationHandler) + server = NetworkMapServer(1.minutes, portAllocation.nextHostAndPort(), ROOT_CA, "localhost", registrationHandler) serverHostAndPort = server.start() } @@ -61,19 +66,47 @@ class NodeRegistrationTest { server.close() } - // TODO Ideally this test should be checking that two nodes that register are able to transact with each other. However - // starting a second node hangs so that needs to be fixed. @Test fun `node registration correct root cert`() { - val compatibilityZone = CompatibilityZoneParams(URL("http://$serverHostAndPort"), rootCert = rootCertAndKeyPair.certificate.cert) + val compatibilityZone = CompatibilityZoneParams(URL("http://$serverHostAndPort"), rootCert = ROOT_CA.certificate.cert) internalDriver( portAllocation = portAllocation, - notarySpecs = emptyList(), compatibilityZone = compatibilityZone, - initialiseSerialization = false + initialiseSerialization = false, + notarySpecs = listOf(NotarySpec(CordaX500Name(organisation = "NotaryService", locality = "Zurich", country = "CH"), validating = false)), + extraCordappPackagesToScan = listOf("net.corda.finance"), + onNetworkParametersGeneration = { server.networkParameters = it } ) { - startNode(providedName = CordaX500Name("Alice", "London", "GB")).getOrThrow() - assertThat(registrationHandler.idsPolled).contains("Alice") + val notary = defaultNotaryNode.get() + + val ALICE_NAME = "Alice" + val GENEVIEVE_NAME = "Genevieve" + val nodesFutures = listOf(startNode(providedName = CordaX500Name(ALICE_NAME, "London", "GB")), + startNode(providedName = CordaX500Name(GENEVIEVE_NAME, "London", "GB"))) + + val (alice, genevieve) = nodesFutures.transpose().get() + val nodes = listOf(alice, genevieve, notary) + + assertThat(registrationHandler.idsPolled).contains(ALICE_NAME, GENEVIEVE_NAME) + // Notary identities are generated beforehand hence notary nodes don't go through registration. + // This test isn't specifically testing this, or relying on this behavior, though if this check fail, + // this will probably lead to the rest of the test to fail. + assertThat(registrationHandler.idsPolled).doesNotContain("NotaryService") + + // Check each node has each other identity in their network map cache. + val nodeIdentities = nodes.map { it.nodeInfo.singleIdentity() } + for (node in nodes) { + assertThat(node.rpc.networkMapSnapshot().map { it.singleIdentity() }).containsAll(nodeIdentities) + } + + // Check we nodes communicate among themselves (and the notary). + val anonymous = false + genevieve.rpc.startFlow(::CashIssueAndPaymentFlow, 1000.DOLLARS, OpaqueBytes.of(12), + alice.nodeInfo.singleIdentity(), + anonymous, + notary.nodeInfo.singleIdentity()) + .returnValue + .getOrThrow() } } @@ -85,6 +118,7 @@ class NodeRegistrationTest { portAllocation = portAllocation, notarySpecs = emptyList(), compatibilityZone = compatibilityZone, + initialiseSerialization = false, // Changing the content of the truststore makes the node fail in a number of ways if started out process. startNodesInProcess = true ) { diff --git a/node/src/test/kotlin/net/corda/node/services/network/NetworkMapClientTest.kt b/node/src/test/kotlin/net/corda/node/services/network/NetworkMapClientTest.kt index 608f583f89..30819a16ef 100644 --- a/node/src/test/kotlin/net/corda/node/services/network/NetworkMapClientTest.kt +++ b/node/src/test/kotlin/net/corda/node/services/network/NetworkMapClientTest.kt @@ -5,10 +5,7 @@ import net.corda.core.crypto.sha256 import net.corda.core.internal.cert import net.corda.core.serialization.serialize import net.corda.core.utilities.seconds -import net.corda.testing.ALICE_NAME -import net.corda.testing.BOB_NAME -import net.corda.testing.DEV_TRUST_ROOT -import net.corda.testing.SerializationEnvironmentRule +import net.corda.testing.* import net.corda.testing.driver.PortAllocation import net.corda.testing.internal.createNodeInfoAndSigned import net.corda.testing.node.internal.network.NetworkMapServer @@ -33,7 +30,7 @@ class NetworkMapClientTest { @Before fun setUp() { - server = NetworkMapServer(cacheTimeout, PortAllocation.Incremental(10000).nextHostAndPort()) + server = NetworkMapServer(cacheTimeout, PortAllocation.Incremental(10000).nextHostAndPort(), root_ca = ROOT_CA) val hostAndPort = server.start() networkMapClient = NetworkMapClient(URL("http://${hostAndPort.host}:${hostAndPort.port}"), DEV_TRUST_ROOT.cert) } @@ -70,7 +67,7 @@ class NetworkMapClientTest { // The test server returns same network parameter for any hash. val networkParameter = networkMapClient.getNetworkParameter(SecureHash.randomSHA256())?.verified() assertNotNull(networkParameter) - assertEquals(NetworkMapServer.stubNetworkParameter, networkParameter) + assertEquals(server.networkParameters, networkParameter) } @Test diff --git a/testing/node-driver/src/main/kotlin/net/corda/testing/driver/Driver.kt b/testing/node-driver/src/main/kotlin/net/corda/testing/driver/Driver.kt index 45cd567f90..cdcf9d966d 100644 --- a/testing/node-driver/src/main/kotlin/net/corda/testing/driver/Driver.kt +++ b/testing/node-driver/src/main/kotlin/net/corda/testing/driver/Driver.kt @@ -193,7 +193,8 @@ fun driver( notarySpecs = notarySpecs, extraCordappPackagesToScan = extraCordappPackagesToScan, jmxPolicy = jmxPolicy, - compatibilityZone = null + compatibilityZone = null, + onNetworkParametersGeneration = { } ), coerce = { it }, dsl = dsl, diff --git a/testing/node-driver/src/main/kotlin/net/corda/testing/node/internal/DriverDSLImpl.kt b/testing/node-driver/src/main/kotlin/net/corda/testing/node/internal/DriverDSLImpl.kt index 628d174600..c4c36fa8c7 100644 --- a/testing/node-driver/src/main/kotlin/net/corda/testing/node/internal/DriverDSLImpl.kt +++ b/testing/node-driver/src/main/kotlin/net/corda/testing/node/internal/DriverDSLImpl.kt @@ -10,13 +10,12 @@ import net.corda.cordform.CordformContext import net.corda.cordform.CordformNode import net.corda.core.concurrent.CordaFuture import net.corda.core.concurrent.firstOf +import net.corda.core.crypto.generateKeyPair import net.corda.core.crypto.random63BitValue import net.corda.core.identity.CordaX500Name -import net.corda.core.internal.ThreadBox +import net.corda.core.identity.Party +import net.corda.core.internal.* import net.corda.core.internal.concurrent.* -import net.corda.core.internal.copyTo -import net.corda.core.internal.createDirectories -import net.corda.core.internal.div import net.corda.core.messaging.CordaRPCOps import net.corda.core.node.services.NetworkMapCache import net.corda.core.toFuture @@ -32,6 +31,7 @@ import net.corda.node.services.config.* import net.corda.node.utilities.registration.HTTPNetworkRegistrationService import net.corda.node.utilities.registration.NetworkRegistrationHelper import net.corda.nodeapi.internal.IdentityGenerator +import net.corda.nodeapi.internal.IdentityGenerator.NODE_IDENTITY_ALIAS_PREFIX import net.corda.nodeapi.internal.addShutdownHook import net.corda.nodeapi.internal.config.User import net.corda.nodeapi.internal.config.parseAs @@ -46,6 +46,8 @@ import net.corda.nodeapi.internal.network.NotaryInfo import net.corda.testing.ALICE_NAME import net.corda.testing.BOB_NAME import net.corda.testing.DUMMY_BANK_A_NAME +import net.corda.nodeapi.internal.crypto.* +import net.corda.nodeapi.internal.network.NetworkParameters import net.corda.testing.common.internal.testNetworkParameters import net.corda.testing.driver.* import net.corda.testing.node.ClusterSpec @@ -89,7 +91,8 @@ class DriverDSLImpl( extraCordappPackagesToScan: List, val jmxPolicy: JmxPolicy, val notarySpecs: List, - val compatibilityZone: CompatibilityZoneParams? + val compatibilityZone: CompatibilityZoneParams?, + val onNetworkParametersGeneration: (NetworkParameters) -> Unit ) : InternalDriverDSL { private var _executorService: ScheduledExecutorService? = null val executorService get() = _executorService!! @@ -104,7 +107,8 @@ class DriverDSLImpl( private val countObservables = mutableMapOf>() private lateinit var _notaries: List override val notaryHandles: List get() = _notaries - private var networkParameters: NetworkParametersCopier? = null + private var networkParametersCopier: NetworkParametersCopier? = null + lateinit var networkParameters: NetworkParameters class State { val processes = ArrayList() @@ -179,8 +183,8 @@ class DriverDSLImpl( val p2pAddress = portAllocation.nextHostAndPort() // TODO: Derive name from the full picked name, don't just wrap the common name val name = providedName ?: CordaX500Name(organisation = "${oneOf(names).organisation}-${p2pAddress.port}", locality = "London", country = "GB") - - val registrationFuture = if (compatibilityZone?.rootCert != null) { + val isNotary = name in notarySpecs.map { it.name } + val registrationFuture = if (compatibilityZone?.rootCert != null && !isNotary) { nodeRegistration(name, compatibilityZone.rootCert, compatibilityZone.url) } else { doneFuture(Unit) @@ -279,7 +283,9 @@ class DriverDSLImpl( notaryInfos += NotaryInfo(identity, type.validating) } - networkParameters = NetworkParametersCopier(testNetworkParameters(notaryInfos)) + networkParameters = testNetworkParameters(notaryInfos) + onNetworkParametersGeneration(networkParameters) + networkParametersCopier = NetworkParametersCopier(networkParameters) return cordforms.map { val startedNode = startCordformNode(it) @@ -347,8 +353,10 @@ class DriverDSLImpl( } } val notaryInfos = generateNotaryIdentities() + networkParameters = testNetworkParameters(notaryInfos) + onNetworkParametersGeneration(networkParameters) // The network parameters must be serialised before starting any of the nodes - if (compatibilityZone == null) networkParameters = NetworkParametersCopier(testNetworkParameters(notaryInfos)) + networkParametersCopier = NetworkParametersCopier(networkParameters) val nodeHandles = startNotaries() _notaries = notaryInfos.zip(nodeHandles) { (identity, validating), nodes -> NotaryHandle(identity, validating, nodes) } } @@ -504,7 +512,11 @@ class DriverDSLImpl( val configuration = config.parseAsNodeConfiguration() val baseDirectory = configuration.baseDirectory.createDirectories() nodeInfoFilesCopier?.addConfig(baseDirectory) - networkParameters?.install(baseDirectory) + if (configuration.myLegalName in networkParameters.notaries.map { it.identity.name } || compatibilityZone == null) { + // If a notary is being started, then its identity appears in networkParameters (generated by Driver), + // and Driver itself must pass the network parameters to the notary. + networkParametersCopier?.install(baseDirectory) + } val onNodeExit: () -> Unit = { nodeInfoFilesCopier?.removeConfig(baseDirectory) countObservables.remove(configuration.myLegalName) @@ -817,7 +829,8 @@ fun genericDriver( extraCordappPackagesToScan = extraCordappPackagesToScan, jmxPolicy = jmxPolicy, notarySpecs = notarySpecs, - compatibilityZone = null + compatibilityZone = null, + onNetworkParametersGeneration = {} ) ) val shutdownHook = addShutdownHook(driverDsl::shutdown) @@ -855,6 +868,7 @@ fun internalDriver( extraCordappPackagesToScan: List = DriverParameters().extraCordappPackagesToScan, jmxPolicy: JmxPolicy = DriverParameters().jmxPolicy, compatibilityZone: CompatibilityZoneParams? = null, + onNetworkParametersGeneration: (NetworkParameters) -> Unit = {}, dsl: DriverDSLImpl.() -> A ): A { return genericDriver( @@ -870,7 +884,8 @@ fun internalDriver( notarySpecs = notarySpecs, extraCordappPackagesToScan = extraCordappPackagesToScan, jmxPolicy = jmxPolicy, - compatibilityZone = compatibilityZone + compatibilityZone = compatibilityZone, + onNetworkParametersGeneration = onNetworkParametersGeneration ), coerce = { it }, dsl = dsl, diff --git a/testing/node-driver/src/main/kotlin/net/corda/testing/node/internal/RPCDriver.kt b/testing/node-driver/src/main/kotlin/net/corda/testing/node/internal/RPCDriver.kt index a5dff915ca..4b761f0b05 100644 --- a/testing/node-driver/src/main/kotlin/net/corda/testing/node/internal/RPCDriver.kt +++ b/testing/node-driver/src/main/kotlin/net/corda/testing/node/internal/RPCDriver.kt @@ -121,7 +121,8 @@ fun rpcDriver( extraCordappPackagesToScan = extraCordappPackagesToScan, notarySpecs = notarySpecs, jmxPolicy = jmxPolicy, - compatibilityZone = null + compatibilityZone = null, + onNetworkParametersGeneration = {} ), externalTrace ), coerce = { it }, diff --git a/testing/node-driver/src/main/kotlin/net/corda/testing/node/internal/network/NetworkMapServer.kt b/testing/node-driver/src/main/kotlin/net/corda/testing/node/internal/network/NetworkMapServer.kt index cf7cb48fa0..995817c74e 100644 --- a/testing/node-driver/src/main/kotlin/net/corda/testing/node/internal/network/NetworkMapServer.kt +++ b/testing/node-driver/src/main/kotlin/net/corda/testing/node/internal/network/NetworkMapServer.kt @@ -1,9 +1,15 @@ package net.corda.testing.node.internal.network +import net.corda.core.crypto.Crypto +import net.corda.core.crypto.SecureHash +import net.corda.core.crypto.SignedData +import net.corda.core.crypto.sha256 +import net.corda.core.identity.CordaX500Name import net.corda.core.crypto.* import net.corda.core.internal.cert import net.corda.core.internal.toX509CertHolder import net.corda.core.node.NodeInfo +import net.corda.core.serialization.SerializedBytes import net.corda.core.serialization.deserialize import net.corda.core.serialization.serialize import net.corda.core.utilities.NetworkHostAndPort @@ -16,7 +22,6 @@ import net.corda.nodeapi.internal.crypto.CertificateAndKeyPair import net.corda.nodeapi.internal.crypto.CertificateType import net.corda.nodeapi.internal.crypto.X509Utilities import net.corda.testing.ROOT_CA -import org.bouncycastle.asn1.x500.X500Name import org.eclipse.jetty.server.Server import org.eclipse.jetty.server.ServerConnector import org.eclipse.jetty.server.handler.HandlerCollection @@ -37,10 +42,10 @@ import javax.ws.rs.core.Response.ok class NetworkMapServer(cacheTimeout: Duration, hostAndPort: NetworkHostAndPort, root_ca: CertificateAndKeyPair = ROOT_CA, // Default to ROOT_CA for testing. + private val myHostNameValue: String = "test.host.name", vararg additionalServices: Any) : Closeable { companion object { - val stubNetworkParameter = NetworkParameters(1, emptyList(), 10485760, 40000, Instant.now(), 10) - private val serializedParameters = stubNetworkParameter.serialize() + private val stubNetworkParameters = NetworkParameters(1, emptyList(), 10485760, 40000, Instant.now(), 10) private fun networkMapKeyAndCert(rootCAKeyAndCert: CertificateAndKeyPair): CertificateAndKeyPair { val networkMapKey = Crypto.generateKeyPair(X509Utilities.DEFAULT_TLS_SIGNATURE_SCHEME) @@ -48,15 +53,25 @@ class NetworkMapServer(cacheTimeout: Duration, CertificateType.INTERMEDIATE_CA, rootCAKeyAndCert.certificate, rootCAKeyAndCert.keyPair, - X500Name("CN=Corda Network Map,L=London"), + CordaX500Name("Corda Network Map", "R3 Ltd", "London","GB"), networkMapKey.public).cert + // Check that the certificate validates. Nodes will perform this check upon receiving a network map, + // it's better to fail here than there. + X509Utilities.validateCertificateChain(rootCAKeyAndCert.certificate.cert, networkMapCert) return CertificateAndKeyPair(networkMapCert.toX509CertHolder(), networkMapKey) } } private val server: Server + var networkParameters: NetworkParameters = stubNetworkParameters + set(networkParameters) { + check(field == stubNetworkParameters) { "Network parameters can be set only once" } + field = networkParameters + } + private val serializedParameters get() = networkParameters.serialize() private val service = InMemoryNetworkMapService(cacheTimeout, networkMapKeyAndCert(root_ca)) + init { server = Server(InetSocketAddress(hostAndPort.host, hostAndPort.port)).apply { handler = HandlerCollection().apply { @@ -95,13 +110,13 @@ class NetworkMapServer(cacheTimeout: Duration, } @Path("network-map") - class InMemoryNetworkMapService(private val cacheTimeout: Duration, private val networkMapKeyAndCert: CertificateAndKeyPair) { + inner class InMemoryNetworkMapService(private val cacheTimeout: Duration, + private val networkMapKeyAndCert: CertificateAndKeyPair) { private val nodeInfoMap = mutableMapOf() - private val parametersHash = serializedParameters.hash - private val signedParameters = SignedData( + private val parametersHash by lazy { serializedParameters.hash } + private val signedParameters by lazy { SignedData( serializedParameters, - DigitalSignature.WithKey(networkMapKeyAndCert.keyPair.public, Crypto.doSign(networkMapKeyAndCert.keyPair.private, serializedParameters.bytes)) - ) + DigitalSignature.WithKey(networkMapKeyAndCert.keyPair.public, Crypto.doSign(networkMapKeyAndCert.keyPair.private, serializedParameters.bytes))) } @POST @Path("publish") @@ -151,7 +166,7 @@ class NetworkMapServer(cacheTimeout: Duration, @GET @Path("my-hostname") fun getHostName(): Response { - return Response.ok("test.host.name").build() + return Response.ok(myHostNameValue).build() } } } diff --git a/verifier/src/integration-test/kotlin/net/corda/verifier/VerifierDriver.kt b/verifier/src/integration-test/kotlin/net/corda/verifier/VerifierDriver.kt index 791df21211..32013bfc32 100644 --- a/verifier/src/integration-test/kotlin/net/corda/verifier/VerifierDriver.kt +++ b/verifier/src/integration-test/kotlin/net/corda/verifier/VerifierDriver.kt @@ -76,7 +76,8 @@ fun verifierDriver( extraCordappPackagesToScan = extraCordappPackagesToScan, notarySpecs = notarySpecs, jmxPolicy = jmxPolicy, - compatibilityZone = null + compatibilityZone = null, + onNetworkParametersGeneration = { } ) ), coerce = { it },