From a0b9768be7e9f6f1cf8b9b05d4c6b8382654fcb3 Mon Sep 17 00:00:00 2001 From: Alberto Arri <30873160+al-r3@users.noreply.github.com> Date: Fri, 27 Oct 2017 14:30:10 +0100 Subject: [PATCH] Retire FullNodeConfiguration (#1954) * Retire FullNodeConfiguration * Moved logic and tests for Artermis user names in RPCUserServiceImpl --- .../net/corda/docs/ExampleConfigTest.kt | 5 +- .../main/kotlin/net/corda/node/ArgsParser.kt | 6 +-- .../kotlin/net/corda/node/internal/Node.kt | 16 ++----- .../net/corda/node/internal/NodeStartup.kt | 18 ++++---- .../net/corda/node/services/RPCUserService.kt | 6 +++ .../node/services/config/NodeConfiguration.kt | 33 ++++++++----- .../corda/node/services/RPCUserServiceTest.kt | 20 ++++++++ .../config/FullNodeConfigurationTest.kt | 46 ------------------- .../kotlin/net/corda/irs/IRSDemoTest.kt | 10 ++-- .../kotlin/net/corda/testing/driver/Driver.kt | 15 +++--- .../net/corda/testing/node/NodeBasedTest.kt | 3 +- .../corda/demobench/model/NodeConfigTest.kt | 6 +-- 12 files changed, 78 insertions(+), 106 deletions(-) create mode 100644 node/src/test/kotlin/net/corda/node/services/RPCUserServiceTest.kt delete mode 100644 node/src/test/kotlin/net/corda/node/services/config/FullNodeConfigurationTest.kt diff --git a/docs/source/example-code/src/test/kotlin/net/corda/docs/ExampleConfigTest.kt b/docs/source/example-code/src/test/kotlin/net/corda/docs/ExampleConfigTest.kt index a797479c86..edefef85f7 100644 --- a/docs/source/example-code/src/test/kotlin/net/corda/docs/ExampleConfigTest.kt +++ b/docs/source/example-code/src/test/kotlin/net/corda/docs/ExampleConfigTest.kt @@ -1,8 +1,7 @@ package net.corda.docs import net.corda.node.services.config.ConfigHelper -import net.corda.node.services.config.FullNodeConfiguration -import net.corda.nodeapi.config.parseAs +import net.corda.node.services.config.parseAsNodeConfiguration import net.corda.verifier.Verifier import org.junit.Test import java.nio.file.Path @@ -34,7 +33,7 @@ class ExampleConfigTest { ConfigHelper.loadConfig( baseDirectory = baseDirectory, configFile = it - ).parseAs() + ).parseAsNodeConfiguration() } } diff --git a/node/src/main/kotlin/net/corda/node/ArgsParser.kt b/node/src/main/kotlin/net/corda/node/ArgsParser.kt index 7139055566..3de3f30071 100644 --- a/node/src/main/kotlin/net/corda/node/ArgsParser.kt +++ b/node/src/main/kotlin/net/corda/node/ArgsParser.kt @@ -4,8 +4,7 @@ import joptsimple.OptionParser import joptsimple.util.EnumConverter import net.corda.core.internal.div import net.corda.node.services.config.ConfigHelper -import net.corda.node.services.config.FullNodeConfiguration -import net.corda.nodeapi.config.parseAs +import net.corda.node.services.config.parseAsNodeConfiguration import org.slf4j.event.Level import java.io.PrintStream import java.nio.file.Path @@ -71,6 +70,5 @@ data class CmdLineOptions(val baseDirectory: Path, val sshdServer: Boolean, val justGenerateNodeInfo: Boolean) { fun loadConfig() = ConfigHelper - .loadConfig(baseDirectory, configFile) - .parseAs() + .loadConfig(baseDirectory, configFile).parseAsNodeConfiguration() } diff --git a/node/src/main/kotlin/net/corda/node/internal/Node.kt b/node/src/main/kotlin/net/corda/node/internal/Node.kt index e76f226adc..694e21d11a 100644 --- a/node/src/main/kotlin/net/corda/node/internal/Node.kt +++ b/node/src/main/kotlin/net/corda/node/internal/Node.kt @@ -22,7 +22,6 @@ import net.corda.node.services.RPCUserService import net.corda.node.services.RPCUserServiceImpl import net.corda.node.services.api.NetworkMapCacheInternal import net.corda.node.services.api.SchemaService -import net.corda.node.services.config.FullNodeConfiguration import net.corda.node.services.config.NodeConfiguration import net.corda.node.services.messaging.ArtemisMessagingServer import net.corda.node.services.messaging.ArtemisMessagingServer.Companion.ipDetectRequestProperty @@ -62,7 +61,7 @@ import kotlin.system.exitProcess * * @param configuration This is typically loaded from a TypeSafe HOCON configuration file. */ -open class Node(configuration: FullNodeConfiguration, +open class Node(override val configuration: NodeConfiguration, versionInfo: VersionInfo, val initialiseSerialization: Boolean = true, cordappLoader: CordappLoader = makeCordappLoader(configuration) @@ -84,7 +83,7 @@ open class Node(configuration: FullNodeConfiguration, exitProcess(1) } - private fun createClock(configuration: FullNodeConfiguration): Clock { + private fun createClock(configuration: NodeConfiguration): Clock { return if (configuration.useTestClock) TestClock() else NodeClock() } @@ -99,7 +98,6 @@ open class Node(configuration: FullNodeConfiguration, } override val log: Logger get() = logger - override val configuration get() = super.configuration as FullNodeConfiguration // Necessary to avoid init order NPE. override val networkMapAddress: NetworkMapAddress? get() = configuration.networkMapService?.address?.let(::NetworkMapAddress) override fun makeTransactionVerifierService() = (network as NodeMessagingClient).verifierService @@ -153,14 +151,8 @@ open class Node(configuration: FullNodeConfiguration, override fun makeMessagingService(legalIdentity: PartyAndCertificate): MessagingService { userService = RPCUserServiceImpl(configuration.rpcUsers) - val (serverAddress, advertisedAddress) = with(configuration) { - if (messagingServerAddress != null) { - // External broker - messagingServerAddress to messagingServerAddress - } else { - makeLocalMessageBroker() to getAdvertisedAddress() - } - } + val serverAddress = configuration.messagingServerAddress ?: makeLocalMessageBroker() + val advertisedAddress = configuration.messagingServerAddress ?: getAdvertisedAddress() printBasicNodeInfo("Incoming connection address", advertisedAddress.toString()) diff --git a/node/src/main/kotlin/net/corda/node/internal/NodeStartup.kt b/node/src/main/kotlin/net/corda/node/internal/NodeStartup.kt index bc95502ee9..16de351f63 100644 --- a/node/src/main/kotlin/net/corda/node/internal/NodeStartup.kt +++ b/node/src/main/kotlin/net/corda/node/internal/NodeStartup.kt @@ -7,7 +7,7 @@ import net.corda.core.internal.* import net.corda.core.internal.concurrent.thenMatch import net.corda.core.utilities.loggerFor import net.corda.node.* -import net.corda.node.services.config.FullNodeConfiguration +import net.corda.node.services.config.NodeConfiguration import net.corda.node.services.transactions.bftSMaRtSerialFilter import net.corda.node.shell.InteractiveShell import net.corda.node.utilities.registration.HTTPNetworkRegistrationService @@ -84,11 +84,11 @@ open class NodeStartup(val args: Array) { exitProcess(0) } - open protected fun preNetworkRegistration(conf: FullNodeConfiguration) = Unit + open protected fun preNetworkRegistration(conf: NodeConfiguration) = Unit - open protected fun createNode(conf: FullNodeConfiguration, versionInfo: VersionInfo): Node = Node(conf, versionInfo) + open protected fun createNode(conf: NodeConfiguration, versionInfo: VersionInfo): Node = Node(conf, versionInfo) - open protected fun startNode(conf: FullNodeConfiguration, versionInfo: VersionInfo, startTime: Long, cmdlineOptions: CmdLineOptions) { + open protected fun startNode(conf: NodeConfiguration, versionInfo: VersionInfo, startTime: Long, cmdlineOptions: CmdLineOptions) { val node = createNode(conf, versionInfo) if (cmdlineOptions.justGenerateNodeInfo) { // Perform the minimum required start-up logic to be able to write a nodeInfo to disk @@ -118,14 +118,14 @@ open class NodeStartup(val args: Array) { startedNode.internals.run() } - open protected fun logStartupInfo(versionInfo: VersionInfo, cmdlineOptions: CmdLineOptions, conf: FullNodeConfiguration) { + open protected fun logStartupInfo(versionInfo: VersionInfo, cmdlineOptions: CmdLineOptions, conf: NodeConfiguration) { logger.info("Vendor: ${versionInfo.vendor}") logger.info("Release: ${versionInfo.releaseVersion}") logger.info("Platform Version: ${versionInfo.platformVersion}") logger.info("Revision: ${versionInfo.revision}") val info = ManagementFactory.getRuntimeMXBean() logger.info("PID: ${info.name.split("@").firstOrNull()}") // TODO Java 9 has better support for this - logger.info("Main class: ${FullNodeConfiguration::class.java.protectionDomain.codeSource.location.toURI().path}") + logger.info("Main class: ${NodeConfiguration::class.java.protectionDomain.codeSource.location.toURI().path}") logger.info("CommandLine Args: ${info.inputArguments.joinToString(" ")}") logger.info("Application Args: ${args.joinToString(" ")}") logger.info("bootclasspath: ${info.bootClassPath}") @@ -140,7 +140,7 @@ open class NodeStartup(val args: Array) { logger.info("Starting as node on ${conf.p2pAddress}") } - open protected fun maybeRegisterWithNetworkAndExit(cmdlineOptions: CmdLineOptions, conf: FullNodeConfiguration) { + open protected fun maybeRegisterWithNetworkAndExit(cmdlineOptions: CmdLineOptions, conf: NodeConfiguration) { if (!cmdlineOptions.isRegistration) return println() println("******************************************************************") @@ -152,7 +152,7 @@ open class NodeStartup(val args: Array) { exitProcess(0) } - open protected fun loadConfigFile(cmdlineOptions: CmdLineOptions): FullNodeConfiguration { + open protected fun loadConfigFile(cmdlineOptions: CmdLineOptions): NodeConfiguration { try { return cmdlineOptions.loadConfig() } catch (e: ConfigException) { @@ -161,7 +161,7 @@ open class NodeStartup(val args: Array) { } } - open protected fun banJavaSerialisation(conf: FullNodeConfiguration) { + open protected fun banJavaSerialisation(conf: NodeConfiguration) { SerialFilter.install(if (conf.notary?.bftSMaRt != null) ::bftSMaRtSerialFilter else ::defaultSerialFilter) } diff --git a/node/src/main/kotlin/net/corda/node/services/RPCUserService.kt b/node/src/main/kotlin/net/corda/node/services/RPCUserService.kt index 2c4ed57754..58a50dceb7 100644 --- a/node/src/main/kotlin/net/corda/node/services/RPCUserService.kt +++ b/node/src/main/kotlin/net/corda/node/services/RPCUserService.kt @@ -18,6 +18,12 @@ interface RPCUserService { // TODO Or ditch this and consider something like Apache Shiro // TODO Need access to permission checks from inside flows and at other point during audit checking. class RPCUserServiceImpl(override val users: List) : RPCUserService { + init { + users.forEach { + require(it.username.matches("\\w+".toRegex())) { "Username ${it.username} contains invalid characters" } + } + } + override fun getUser(username: String): User? = users.find { it.username == username } } diff --git a/node/src/main/kotlin/net/corda/node/services/config/NodeConfiguration.kt b/node/src/main/kotlin/net/corda/node/services/config/NodeConfiguration.kt index 6d150a3ab3..6da102ab7f 100644 --- a/node/src/main/kotlin/net/corda/node/services/config/NodeConfiguration.kt +++ b/node/src/main/kotlin/net/corda/node/services/config/NodeConfiguration.kt @@ -1,5 +1,6 @@ package net.corda.node.services.config +import com.typesafe.config.Config import net.corda.core.identity.CordaX500Name import net.corda.core.utilities.NetworkHostAndPort import net.corda.core.utilities.seconds @@ -7,6 +8,7 @@ import net.corda.node.internal.NetworkMapInfo import net.corda.node.services.messaging.CertificateChainCheckPolicy import net.corda.nodeapi.User import net.corda.nodeapi.config.NodeSSLConfiguration +import net.corda.nodeapi.config.parseAs import java.net.URL import java.nio.file.Path import java.util.* @@ -35,6 +37,12 @@ interface NodeConfiguration : NodeSSLConfiguration { val notary: NotaryConfig? val activeMQServer: ActiveMqServerConfiguration val additionalNodeInfoPollingFrequencyMsec: Long + val useHTTPS: Boolean + val p2pAddress: NetworkHostAndPort + val rpcAddress: NetworkHostAndPort? + val messagingServerAddress: NetworkHostAndPort? + val useTestClock: Boolean get() = false + val detectPublicIp: Boolean get() = true } data class NotaryConfig(val validating: Boolean, @@ -68,7 +76,14 @@ data class BridgeConfiguration(val retryIntervalMs: Long, data class ActiveMqServerConfiguration(val bridge: BridgeConfiguration) -data class FullNodeConfiguration( +fun Config.parseAsNodeConfiguration(): NodeConfiguration = this.parseAs() + +/** + * Implementation of [NodeConfiguration] + * This should be private but it can't because its constructor needs to be invoked reflectively by [parseAs] and + * kotlin doesn't allow that. + */ +data class NodeConfigurationImpl( /** This is not retrieved from the config file but rather from a command line argument. */ override val baseDirectory: Path, override val myLegalName: CordaX500Name, @@ -84,17 +99,17 @@ data class FullNodeConfiguration( override val rpcUsers: List, override val verifierType: VerifierType, override val messageRedeliveryDelaySeconds: Int = 30, - val useHTTPS: Boolean, - val p2pAddress: NetworkHostAndPort, - val rpcAddress: NetworkHostAndPort?, + override val useHTTPS: Boolean, + override val p2pAddress: NetworkHostAndPort, + override val rpcAddress: NetworkHostAndPort?, // TODO This field is slightly redundant as p2pAddress is sufficient to hold the address of the node's MQ broker. // Instead this should be a Boolean indicating whether that broker is an internal one started by the node or an external one - val messagingServerAddress: NetworkHostAndPort?, + override val messagingServerAddress: NetworkHostAndPort?, override val notary: NotaryConfig?, override val certificateChainCheckPolicies: List, override val devMode: Boolean = false, - val useTestClock: Boolean = false, - val detectPublicIp: Boolean = true, + override val useTestClock: Boolean = false, + override val detectPublicIp: Boolean = true, override val activeMQServer: ActiveMqServerConfiguration, override val additionalNodeInfoPollingFrequencyMsec: Long = 5.seconds.toMillis() ) : NodeConfiguration { @@ -103,10 +118,6 @@ data class FullNodeConfiguration( init { // This is a sanity feature do not remove. require(!useTestClock || devMode) { "Cannot use test clock outside of dev mode" } - // TODO Move this to ArtemisMessagingServer - rpcUsers.forEach { - require(it.username.matches("\\w+".toRegex())) { "Username ${it.username} contains invalid characters" } - } require(myLegalName.commonName == null) { "Common name must be null: $myLegalName" } require(minimumPlatformVersion >= 1) { "minimumPlatformVersion cannot be less than 1" } } diff --git a/node/src/test/kotlin/net/corda/node/services/RPCUserServiceTest.kt b/node/src/test/kotlin/net/corda/node/services/RPCUserServiceTest.kt new file mode 100644 index 0000000000..88bdae5579 --- /dev/null +++ b/node/src/test/kotlin/net/corda/node/services/RPCUserServiceTest.kt @@ -0,0 +1,20 @@ +package net.corda.node.services + + +import net.corda.nodeapi.User +import org.assertj.core.api.Assertions.assertThatThrownBy +import org.junit.Test + +class RPCUserServiceTest { + + @Test + fun `Artemis special characters not permitted in RPC usernames`() { + assertThatThrownBy { configWithRPCUsername("user.1") }.hasMessageContaining(".") + assertThatThrownBy { configWithRPCUsername("user*1") }.hasMessageContaining("*") + assertThatThrownBy { configWithRPCUsername("user#1") }.hasMessageContaining("#") + } + + private fun configWithRPCUsername(username: String) { + RPCUserServiceImpl(listOf(User(username, "password", setOf()))) + } +} \ No newline at end of file diff --git a/node/src/test/kotlin/net/corda/node/services/config/FullNodeConfigurationTest.kt b/node/src/test/kotlin/net/corda/node/services/config/FullNodeConfigurationTest.kt deleted file mode 100644 index bc40165c06..0000000000 --- a/node/src/test/kotlin/net/corda/node/services/config/FullNodeConfigurationTest.kt +++ /dev/null @@ -1,46 +0,0 @@ -package net.corda.node.services.config - -import net.corda.core.utilities.NetworkHostAndPort -import net.corda.core.utilities.seconds -import net.corda.nodeapi.User -import net.corda.testing.ALICE -import net.corda.testing.node.MockServices.Companion.makeTestDataSourceProperties -import net.corda.testing.node.MockServices.Companion.makeTestDatabaseProperties -import org.assertj.core.api.Assertions.assertThatThrownBy -import org.junit.Test -import java.net.URL -import java.nio.file.Paths - -class FullNodeConfigurationTest { - @Test - fun `Artemis special characters not permitted in RPC usernames`() { - val testConfiguration = FullNodeConfiguration( - baseDirectory = Paths.get("."), - myLegalName = ALICE.name, - networkMapService = null, - emailAddress = "", - keyStorePassword = "cordacadevpass", - trustStorePassword = "trustpass", - dataSourceProperties = makeTestDataSourceProperties(ALICE.name.organisation), - database = makeTestDatabaseProperties(), - certificateSigningService = URL("http://localhost"), - rpcUsers = emptyList(), - verifierType = VerifierType.InMemory, - useHTTPS = false, - p2pAddress = NetworkHostAndPort("localhost", 0), - rpcAddress = NetworkHostAndPort("localhost", 1), - messagingServerAddress = null, - notary = null, - certificateChainCheckPolicies = emptyList(), - devMode = true, - activeMQServer = ActiveMqServerConfiguration(BridgeConfiguration(0, 0, 0.0)), - additionalNodeInfoPollingFrequencyMsec = 5.seconds.toMillis()) - - fun configWithRPCUsername(username: String) { - testConfiguration.copy(rpcUsers = listOf(User(username, "pass", emptySet()))) - } - assertThatThrownBy { configWithRPCUsername("user.1") }.hasMessageContaining(".") - assertThatThrownBy { configWithRPCUsername("user*1") }.hasMessageContaining("*") - assertThatThrownBy { configWithRPCUsername("user#1") }.hasMessageContaining("#") - } -} diff --git a/samples/irs-demo/src/integration-test/kotlin/net/corda/irs/IRSDemoTest.kt b/samples/irs-demo/src/integration-test/kotlin/net/corda/irs/IRSDemoTest.kt index f5c6feb921..0fa498891f 100644 --- a/samples/irs-demo/src/integration-test/kotlin/net/corda/irs/IRSDemoTest.kt +++ b/samples/irs-demo/src/integration-test/kotlin/net/corda/irs/IRSDemoTest.kt @@ -19,14 +19,10 @@ import net.corda.core.utilities.seconds import net.corda.finance.plugin.registerFinanceJSONMappers import net.corda.irs.contract.InterestRateSwap import net.corda.irs.web.IrsDemoWebApplication -import net.corda.node.services.config.FullNodeConfiguration +import net.corda.node.services.config.NodeConfiguration import net.corda.nodeapi.User import net.corda.test.spring.springDriver -import net.corda.testing.DUMMY_BANK_A -import net.corda.testing.DUMMY_BANK_B -import net.corda.testing.DUMMY_NOTARY -import net.corda.testing.IntegrationTestCategory -import net.corda.testing.chooseIdentity +import net.corda.testing.* import net.corda.testing.http.HttpApi import org.apache.commons.io.IOUtils import org.assertj.core.api.Assertions.assertThat @@ -96,7 +92,7 @@ class IRSDemoTest : IntegrationTestCategory { fun getFloatingLegFixCount(nodeApi: HttpApi) = getTrades(nodeApi)[0].calculation.floatingLegPaymentSchedule.count { it.value.rate.ratioUnit != null } - private fun getFixingDateObservable(config: FullNodeConfiguration): Observable { + private fun getFixingDateObservable(config: NodeConfiguration): Observable { val client = CordaRPCClient(config.rpcAddress!!) val proxy = client.start("user", "password").proxy val vaultUpdates = proxy.vaultTrackBy().updates 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 7de6c3fa5e..dd82a08a7a 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 @@ -31,7 +31,6 @@ import net.corda.node.services.network.NetworkMapService import net.corda.node.utilities.ServiceIdentityGenerator import net.corda.nodeapi.NodeInfoFilesCopier import net.corda.nodeapi.User -import net.corda.nodeapi.config.parseAs import net.corda.nodeapi.config.toConfig import net.corda.nodeapi.internal.addShutdownHook import net.corda.testing.* @@ -198,13 +197,13 @@ sealed class NodeHandle { * will be added and that will be used. */ abstract val rpc: CordaRPCOps - abstract val configuration: FullNodeConfiguration + abstract val configuration: NodeConfiguration abstract val webAddress: NetworkHostAndPort data class OutOfProcess( override val nodeInfo: NodeInfo, override val rpc: CordaRPCOps, - override val configuration: FullNodeConfiguration, + override val configuration: NodeConfiguration, override val webAddress: NetworkHostAndPort, val debugPort: Int?, val process: Process, @@ -223,7 +222,7 @@ sealed class NodeHandle { data class InProcess( override val nodeInfo: NodeInfo, override val rpc: CordaRPCOps, - override val configuration: FullNodeConfiguration, + override val configuration: NodeConfiguration, override val webAddress: NetworkHostAndPort, val node: StartedNode, val nodeThread: Thread, @@ -697,7 +696,7 @@ class DriverDSL( _executorService?.shutdownNow() } - private fun establishRpc(config: FullNodeConfiguration, processDeathFuture: CordaFuture): CordaFuture { + private fun establishRpc(config: NodeConfiguration, processDeathFuture: CordaFuture): CordaFuture { val rpcAddress = config.rpcAddress!! val client = CordaRPCClient(rpcAddress) val connectionFuture = poll(executorService, "RPC connection") { @@ -913,7 +912,7 @@ class DriverDSL( } private fun startNodeInternal(config: Config, webAddress: NetworkHostAndPort, startInProcess: Boolean?, maximumHeapSize: String): CordaFuture { - val nodeConfiguration = config.parseAs() + val nodeConfiguration = config.parseAsNodeConfiguration() nodeInfoFilesCopier.addConfig(nodeConfiguration.baseDirectory) val onNodeExit: () -> Unit = { nodeInfoFilesCopier.removeConfig(nodeConfiguration.baseDirectory) @@ -983,7 +982,7 @@ class DriverDSL( private fun startInProcessNode( executorService: ScheduledExecutorService, - nodeConf: FullNodeConfiguration, + nodeConf: NodeConfiguration, config: Config, cordappPackages: List ): CordaFuture, Thread>> { @@ -1002,7 +1001,7 @@ class DriverDSL( private fun startOutOfProcessNode( executorService: ScheduledExecutorService, - nodeConf: FullNodeConfiguration, + nodeConf: NodeConfiguration, config: Config, quasarJarPath: String, debugPort: Int?, diff --git a/testing/node-driver/src/main/kotlin/net/corda/testing/node/NodeBasedTest.kt b/testing/node-driver/src/main/kotlin/net/corda/testing/node/NodeBasedTest.kt index 36dfb43a45..938c4deb04 100644 --- a/testing/node-driver/src/main/kotlin/net/corda/testing/node/NodeBasedTest.kt +++ b/testing/node-driver/src/main/kotlin/net/corda/testing/node/NodeBasedTest.kt @@ -13,7 +13,6 @@ import net.corda.node.internal.cordapp.CordappLoader import net.corda.node.services.config.* import net.corda.node.utilities.ServiceIdentityGenerator import net.corda.nodeapi.User -import net.corda.nodeapi.config.parseAs import net.corda.nodeapi.config.toConfig import net.corda.testing.DUMMY_MAP import net.corda.testing.TestDependencyInjectionBase @@ -190,7 +189,7 @@ abstract class NodeBasedTest(private val cordappPackages: List = emptyLi ) + configOverrides ) - val parsedConfig = config.parseAs() + val parsedConfig = config.parseAsNodeConfiguration() val node = Node( parsedConfig, MOCK_VERSION_INFO.copy(platformVersion = platformVersion), diff --git a/tools/demobench/src/test/kotlin/net/corda/demobench/model/NodeConfigTest.kt b/tools/demobench/src/test/kotlin/net/corda/demobench/model/NodeConfigTest.kt index 0bf02c1ca8..aee32bc49c 100644 --- a/tools/demobench/src/test/kotlin/net/corda/demobench/model/NodeConfigTest.kt +++ b/tools/demobench/src/test/kotlin/net/corda/demobench/model/NodeConfigTest.kt @@ -5,10 +5,8 @@ import com.typesafe.config.ConfigValueFactory import net.corda.core.identity.CordaX500Name import net.corda.core.utilities.NetworkHostAndPort import net.corda.node.internal.NetworkMapInfo -import net.corda.node.internal.cordapp.CordappLoader -import net.corda.node.services.config.FullNodeConfiguration +import net.corda.node.services.config.parseAsNodeConfiguration import net.corda.nodeapi.User -import net.corda.nodeapi.config.parseAs import net.corda.nodeapi.config.toConfig import net.corda.testing.DUMMY_NOTARY import net.corda.webserver.WebServerConfig @@ -43,7 +41,7 @@ class NodeConfigTest { .withValue("baseDirectory", ConfigValueFactory.fromAnyRef(baseDir.toString())) .withFallback(ConfigFactory.parseResources("reference.conf")) .resolve() - val fullConfig = nodeConfig.parseAs() + val fullConfig = nodeConfig.parseAsNodeConfiguration() assertEquals(myLegalName, fullConfig.myLegalName) assertEquals(localPort(40002), fullConfig.rpcAddress)