mirror of
https://github.com/corda/corda.git
synced 2025-06-06 09:21:47 +00:00
ENT-12568: Add ability to pass system properties to external verifier. (#7897)
* ENT-12568: Add ability to pess system properties to external verifier.
This commit is contained in:
parent
1c40e969f7
commit
7b6df5cc14
@ -8,6 +8,7 @@ import net.corda.core.utilities.NetworkHostAndPort
|
|||||||
import net.corda.core.utilities.seconds
|
import net.corda.core.utilities.seconds
|
||||||
import net.corda.coretesting.internal.rigorousMock
|
import net.corda.coretesting.internal.rigorousMock
|
||||||
import net.corda.coretesting.internal.stubs.CertificateStoreStubs
|
import net.corda.coretesting.internal.stubs.CertificateStoreStubs
|
||||||
|
import net.corda.node.services.config.CustomConfiguration
|
||||||
import net.corda.node.services.config.FlowTimeoutConfiguration
|
import net.corda.node.services.config.FlowTimeoutConfiguration
|
||||||
import net.corda.node.services.config.NodeConfiguration
|
import net.corda.node.services.config.NodeConfiguration
|
||||||
import net.corda.node.services.config.configureWithDevSSLCertificate
|
import net.corda.node.services.config.configureWithDevSSLCertificate
|
||||||
@ -88,6 +89,7 @@ class ArtemisMessagingTest {
|
|||||||
doReturn(FlowTimeoutConfiguration(5.seconds, 3, backoffBase = 1.0)).whenever(it).flowTimeout
|
doReturn(FlowTimeoutConfiguration(5.seconds, 3, backoffBase = 1.0)).whenever(it).flowTimeout
|
||||||
doReturn(true).whenever(it).crlCheckSoftFail
|
doReturn(true).whenever(it).crlCheckSoftFail
|
||||||
doReturn(true).whenever(it).crlCheckArtemisServer
|
doReturn(true).whenever(it).crlCheckArtemisServer
|
||||||
|
doReturn(CustomConfiguration()).whenever(it).custom
|
||||||
}
|
}
|
||||||
LogHelper.setLevel(PersistentUniquenessProvider::class)
|
LogHelper.setLevel(PersistentUniquenessProvider::class)
|
||||||
database = configureDatabase(makeTestDataSourceProperties(), DatabaseConfig(), { null }, { null })
|
database = configureDatabase(makeTestDataSourceProperties(), DatabaseConfig(), { null }, { null })
|
||||||
|
@ -1178,7 +1178,7 @@ abstract class AbstractNode<S>(val configuration: NodeConfiguration,
|
|||||||
inner class ServiceHubImpl : SingletonSerializeAsToken(), ServiceHubInternal, NetworkParameterUpdateListener {
|
inner class ServiceHubImpl : SingletonSerializeAsToken(), ServiceHubInternal, NetworkParameterUpdateListener {
|
||||||
override val rpcFlows = ArrayList<Class<out FlowLogic<*>>>()
|
override val rpcFlows = ArrayList<Class<out FlowLogic<*>>>()
|
||||||
override val stateMachineRecordedTransactionMapping = DBTransactionMappingStorage(database)
|
override val stateMachineRecordedTransactionMapping = DBTransactionMappingStorage(database)
|
||||||
override val externalVerifierHandle = ExternalVerifierHandleImpl(this, configuration.baseDirectory).also { runOnStop += it::close }
|
override val externalVerifierHandle = ExternalVerifierHandleImpl(this, configuration.baseDirectory, configuration.custom?.externalVerifierJvmArgs ?: emptyList()).also { runOnStop += it::close }
|
||||||
override val identityService: IdentityService get() = this@AbstractNode.identityService
|
override val identityService: IdentityService get() = this@AbstractNode.identityService
|
||||||
override val keyManagementService: KeyManagementService get() = this@AbstractNode.keyManagementService
|
override val keyManagementService: KeyManagementService get() = this@AbstractNode.keyManagementService
|
||||||
override val schemaService: SchemaService get() = this@AbstractNode.schemaService
|
override val schemaService: SchemaService get() = this@AbstractNode.schemaService
|
||||||
|
@ -44,6 +44,7 @@ interface NodeConfiguration : ConfigurationWithOptionsContainer {
|
|||||||
val verifierType: VerifierType
|
val verifierType: VerifierType
|
||||||
val flowTimeout: FlowTimeoutConfiguration
|
val flowTimeout: FlowTimeoutConfiguration
|
||||||
val telemetry: TelemetryConfiguration
|
val telemetry: TelemetryConfiguration
|
||||||
|
val custom: CustomConfiguration?
|
||||||
val notary: NotaryConfig?
|
val notary: NotaryConfig?
|
||||||
val additionalNodeInfoPollingFrequencyMsec: Long
|
val additionalNodeInfoPollingFrequencyMsec: Long
|
||||||
val p2pAddress: NetworkHostAndPort
|
val p2pAddress: NetworkHostAndPort
|
||||||
@ -229,6 +230,11 @@ data class TelemetryConfiguration(
|
|||||||
val copyBaggageToTags: Boolean
|
val copyBaggageToTags: Boolean
|
||||||
)
|
)
|
||||||
|
|
||||||
|
data class CustomConfiguration(
|
||||||
|
val jvmArgs: List<String> = emptyList(),
|
||||||
|
val externalVerifierJvmArgs: List<String> = emptyList()
|
||||||
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a list of rotated CorDapp attachment signing keys.
|
* Represents a list of rotated CorDapp attachment signing keys.
|
||||||
*
|
*
|
||||||
|
@ -44,6 +44,7 @@ data class NodeConfigurationImpl(
|
|||||||
override val verifierType: VerifierType,
|
override val verifierType: VerifierType,
|
||||||
override val flowTimeout: FlowTimeoutConfiguration,
|
override val flowTimeout: FlowTimeoutConfiguration,
|
||||||
override val telemetry: TelemetryConfiguration = Defaults.telemetry,
|
override val telemetry: TelemetryConfiguration = Defaults.telemetry,
|
||||||
|
override val custom: CustomConfiguration = Defaults.custom,
|
||||||
override val p2pAddress: NetworkHostAndPort,
|
override val p2pAddress: NetworkHostAndPort,
|
||||||
override val additionalP2PAddresses: List<NetworkHostAndPort> = Defaults.additionalP2PAddresses,
|
override val additionalP2PAddresses: List<NetworkHostAndPort> = Defaults.additionalP2PAddresses,
|
||||||
private val rpcAddress: NetworkHostAndPort? = Defaults.rpcAddress,
|
private val rpcAddress: NetworkHostAndPort? = Defaults.rpcAddress,
|
||||||
@ -138,6 +139,7 @@ data class NodeConfigurationImpl(
|
|||||||
exportHibernateJMXStatistics = devMode
|
exportHibernateJMXStatistics = devMode
|
||||||
)
|
)
|
||||||
val telemetry = TelemetryConfiguration(openTelemetryEnabled = true, simpleLogTelemetryEnabled = false, spanStartEndEventsEnabled = false, copyBaggageToTags = false)
|
val telemetry = TelemetryConfiguration(openTelemetryEnabled = true, simpleLogTelemetryEnabled = false, spanStartEndEventsEnabled = false, copyBaggageToTags = false)
|
||||||
|
val custom: CustomConfiguration = CustomConfiguration()
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -17,6 +17,7 @@ import net.corda.core.internal.notary.NotaryServiceFlow
|
|||||||
import net.corda.node.services.config.AuthDataSourceType
|
import net.corda.node.services.config.AuthDataSourceType
|
||||||
import net.corda.node.services.config.CertChainPolicyConfig
|
import net.corda.node.services.config.CertChainPolicyConfig
|
||||||
import net.corda.node.services.config.CertChainPolicyType
|
import net.corda.node.services.config.CertChainPolicyType
|
||||||
|
import net.corda.node.services.config.CustomConfiguration
|
||||||
import net.corda.node.services.config.DevModeOptions
|
import net.corda.node.services.config.DevModeOptions
|
||||||
import net.corda.node.services.config.FlowOverride
|
import net.corda.node.services.config.FlowOverride
|
||||||
import net.corda.node.services.config.FlowOverrideConfig
|
import net.corda.node.services.config.FlowOverrideConfig
|
||||||
@ -226,6 +227,15 @@ internal object TelemetryConfigurationSpec : Configuration.Specification<Telemet
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal object CustomConfigurationSpec : Configuration.Specification<CustomConfiguration>("CustomConfiguration") {
|
||||||
|
private val jvmArgs by string().listOrEmpty()
|
||||||
|
private val externalVerifierJvmArgs by string().listOrEmpty()
|
||||||
|
override fun parseValid(configuration: Config, options: Configuration.Options): Valid<CustomConfiguration> {
|
||||||
|
val config = configuration.withOptions(options)
|
||||||
|
return valid(CustomConfiguration(config[jvmArgs], config[externalVerifierJvmArgs]))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
internal object RotatedSignerKeySpec : Configuration.Specification<RotatedCorDappSignerKeyConfiguration>("RotatedCorDappSignerKeyConfiguration") {
|
internal object RotatedSignerKeySpec : Configuration.Specification<RotatedCorDappSignerKeyConfiguration>("RotatedCorDappSignerKeyConfiguration") {
|
||||||
private val rotatedKeys by string().listOrEmpty()
|
private val rotatedKeys by string().listOrEmpty()
|
||||||
override fun parseValid(configuration: Config, options: Configuration.Options): Valid<RotatedCorDappSignerKeyConfiguration> {
|
override fun parseValid(configuration: Config, options: Configuration.Options): Valid<RotatedCorDappSignerKeyConfiguration> {
|
||||||
|
@ -69,8 +69,7 @@ internal object V1NodeConfigurationSpec : Configuration.Specification<NodeConfig
|
|||||||
private val quasarExcludePackages by string().list().optional().withDefaultValue(Defaults.quasarExcludePackages)
|
private val quasarExcludePackages by string().list().optional().withDefaultValue(Defaults.quasarExcludePackages)
|
||||||
private val reloadCheckpointAfterSuspend by boolean().optional().withDefaultValue(Defaults.reloadCheckpointAfterSuspend)
|
private val reloadCheckpointAfterSuspend by boolean().optional().withDefaultValue(Defaults.reloadCheckpointAfterSuspend)
|
||||||
private val networkParametersPath by string().mapValid(::toPath).optional()
|
private val networkParametersPath by string().mapValid(::toPath).optional()
|
||||||
@Suppress("unused")
|
private val custom by nested(CustomConfigurationSpec).optional().withDefaultValue(Defaults.custom)
|
||||||
private val custom by nestedObject().optional()
|
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
private val systemProperties by nestedObject().optional()
|
private val systemProperties by nestedObject().optional()
|
||||||
|
|
||||||
@ -97,6 +96,7 @@ internal object V1NodeConfigurationSpec : Configuration.Specification<NodeConfig
|
|||||||
verifierType = config[verifierType],
|
verifierType = config[verifierType],
|
||||||
flowTimeout = config[flowTimeout],
|
flowTimeout = config[flowTimeout],
|
||||||
telemetry = config[telemetry],
|
telemetry = config[telemetry],
|
||||||
|
custom = config[custom],
|
||||||
rpcSettings = config[rpcSettings],
|
rpcSettings = config[rpcSettings],
|
||||||
messagingServerAddress = config[messagingServerAddress],
|
messagingServerAddress = config[messagingServerAddress],
|
||||||
notary = config[notary],
|
notary = config[notary],
|
||||||
|
@ -64,7 +64,8 @@ import kotlin.io.path.isWritable
|
|||||||
*/
|
*/
|
||||||
class ExternalVerifierHandleImpl(
|
class ExternalVerifierHandleImpl(
|
||||||
private val verificationSupport: NodeVerificationSupport,
|
private val verificationSupport: NodeVerificationSupport,
|
||||||
private val baseDirectory: Path
|
private val baseDirectory: Path,
|
||||||
|
private val jvmArgsFromConfig: List<String>
|
||||||
) : ExternalVerifierHandle {
|
) : ExternalVerifierHandle {
|
||||||
companion object {
|
companion object {
|
||||||
private val log = contextLogger()
|
private val log = contextLogger()
|
||||||
@ -207,6 +208,7 @@ class ExternalVerifierHandleImpl(
|
|||||||
val command = ArrayList<String>()
|
val command = ArrayList<String>()
|
||||||
command += "${Path(System.getProperty("java.home"), "bin", "java")}"
|
command += "${Path(System.getProperty("java.home"), "bin", "java")}"
|
||||||
command += inheritedJvmArgs
|
command += inheritedJvmArgs
|
||||||
|
command += jvmArgsFromConfig
|
||||||
|
|
||||||
// Build list of 3rd party jars
|
// Build list of 3rd party jars
|
||||||
val legacyJarsPath = baseDirectory / "legacy-jars"
|
val legacyJarsPath = baseDirectory / "legacy-jars"
|
||||||
|
@ -4,6 +4,7 @@ import net.corda.core.identity.CordaX500Name
|
|||||||
import net.corda.core.serialization.SerializeAsToken
|
import net.corda.core.serialization.SerializeAsToken
|
||||||
import net.corda.core.utilities.NetworkHostAndPort
|
import net.corda.core.utilities.NetworkHostAndPort
|
||||||
import net.corda.node.VersionInfo
|
import net.corda.node.VersionInfo
|
||||||
|
import net.corda.node.services.config.CustomConfiguration
|
||||||
import net.corda.node.services.config.NodeConfiguration
|
import net.corda.node.services.config.NodeConfiguration
|
||||||
import net.corda.node.services.config.NodeH2Settings
|
import net.corda.node.services.config.NodeH2Settings
|
||||||
import net.corda.node.services.events.NodeSchedulerService
|
import net.corda.node.services.events.NodeSchedulerService
|
||||||
@ -138,6 +139,7 @@ class NodeH2SecurityTests {
|
|||||||
whenever(config.effectiveH2Settings).thenAnswer { NodeH2Settings(address) }
|
whenever(config.effectiveH2Settings).thenAnswer { NodeH2Settings(address) }
|
||||||
whenever(config.telemetry).thenReturn(mock())
|
whenever(config.telemetry).thenReturn(mock())
|
||||||
whenever(config.myLegalName).thenReturn(CordaX500Name(null, "client-${address.toString()}", "Corda", "London", null, "GB"))
|
whenever(config.myLegalName).thenReturn(CordaX500Name(null, "client-${address.toString()}", "Corda", "London", null, "GB"))
|
||||||
|
whenever(config.custom).thenReturn(CustomConfiguration())
|
||||||
}
|
}
|
||||||
|
|
||||||
private inner class MockNode : Node(config, VersionInfo.UNKNOWN, false) {
|
private inner class MockNode : Node(config, VersionInfo.UNKNOWN, false) {
|
||||||
|
@ -12,6 +12,7 @@ import net.corda.core.utilities.seconds
|
|||||||
import net.corda.coretesting.internal.rigorousMock
|
import net.corda.coretesting.internal.rigorousMock
|
||||||
import net.corda.coretesting.internal.stubs.CertificateStoreStubs
|
import net.corda.coretesting.internal.stubs.CertificateStoreStubs
|
||||||
import net.corda.node.NodeRegistrationOption
|
import net.corda.node.NodeRegistrationOption
|
||||||
|
import net.corda.node.services.config.CustomConfiguration
|
||||||
import net.corda.node.services.config.NodeConfiguration
|
import net.corda.node.services.config.NodeConfiguration
|
||||||
import net.corda.node.services.config.NotaryConfig
|
import net.corda.node.services.config.NotaryConfig
|
||||||
import net.corda.nodeapi.internal.crypto.CertificateAndKeyPair
|
import net.corda.nodeapi.internal.crypto.CertificateAndKeyPair
|
||||||
@ -85,6 +86,7 @@ class NetworkRegistrationHelperTest {
|
|||||||
doReturn(null).whenever(it).tlsCertCrlIssuer
|
doReturn(null).whenever(it).tlsCertCrlIssuer
|
||||||
doReturn(true).whenever(it).crlCheckSoftFail
|
doReturn(true).whenever(it).crlCheckSoftFail
|
||||||
doReturn(null).whenever(it).notary
|
doReturn(null).whenever(it).notary
|
||||||
|
doReturn(CustomConfiguration()).whenever(it).custom
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,6 +38,7 @@ import net.corda.node.internal.NodeFlowManager
|
|||||||
import net.corda.node.services.api.FlowStarter
|
import net.corda.node.services.api.FlowStarter
|
||||||
import net.corda.node.services.api.ServiceHubInternal
|
import net.corda.node.services.api.ServiceHubInternal
|
||||||
import net.corda.node.services.api.StartedNodeServices
|
import net.corda.node.services.api.StartedNodeServices
|
||||||
|
import net.corda.node.services.config.CustomConfiguration
|
||||||
import net.corda.node.services.config.FlowTimeoutConfiguration
|
import net.corda.node.services.config.FlowTimeoutConfiguration
|
||||||
import net.corda.node.services.config.NetworkParameterAcceptanceSettings
|
import net.corda.node.services.config.NetworkParameterAcceptanceSettings
|
||||||
import net.corda.node.services.config.NodeConfiguration
|
import net.corda.node.services.config.NodeConfiguration
|
||||||
@ -487,6 +488,7 @@ open class InternalMockNetwork(cordappPackages: List<String> = emptyList(),
|
|||||||
doReturn(emptyList<SecureHash>()).whenever(it).extraNetworkMapKeys
|
doReturn(emptyList<SecureHash>()).whenever(it).extraNetworkMapKeys
|
||||||
doReturn(listOf(baseDirectory / "cordapps")).whenever(it).cordappDirectories
|
doReturn(listOf(baseDirectory / "cordapps")).whenever(it).cordappDirectories
|
||||||
doReturn(emptyList<String>()).whenever(it).quasarExcludePackages
|
doReturn(emptyList<String>()).whenever(it).quasarExcludePackages
|
||||||
|
doReturn(CustomConfiguration()).whenever(it).custom
|
||||||
doReturn(TelemetryConfiguration(openTelemetryEnabled = true, simpleLogTelemetryEnabled = false, spanStartEndEventsEnabled = false, copyBaggageToTags = false)).whenever(it).telemetry
|
doReturn(TelemetryConfiguration(openTelemetryEnabled = true, simpleLogTelemetryEnabled = false, spanStartEndEventsEnabled = false, copyBaggageToTags = false)).whenever(it).telemetry
|
||||||
parameters.configOverrides(it)
|
parameters.configOverrides(it)
|
||||||
}
|
}
|
||||||
@ -674,6 +676,7 @@ private fun mockNodeConfiguration(certificatesDirectory: Path): NodeConfiguratio
|
|||||||
doReturn(2).whenever(it).flowExternalOperationThreadPoolSize
|
doReturn(2).whenever(it).flowExternalOperationThreadPoolSize
|
||||||
doReturn(false).whenever(it).reloadCheckpointAfterSuspend
|
doReturn(false).whenever(it).reloadCheckpointAfterSuspend
|
||||||
doReturn(emptyList<RotatedCorDappSignerKeyConfiguration>()).whenever(it).rotatedCordappSignerKeys
|
doReturn(emptyList<RotatedCorDappSignerKeyConfiguration>()).whenever(it).rotatedCordappSignerKeys
|
||||||
|
doReturn(CustomConfiguration()).whenever(it).custom
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,6 +42,9 @@ class NodeParams @JvmOverloads constructor(
|
|||||||
.withValue("useTestClock", valueFor(true))
|
.withValue("useTestClock", valueFor(true))
|
||||||
.withValue("jarDirs", valueFor(jarDirs.map(Path::absolutePathString)))
|
.withValue("jarDirs", valueFor(jarDirs.map(Path::absolutePathString)))
|
||||||
.withValue("devMode", valueFor(devMode))
|
.withValue("devMode", valueFor(devMode))
|
||||||
|
.withValue("custom", empty()
|
||||||
|
.withValue("externalVerifierJvmArgs", valueFor(listOf("-Duser.name=Alice")))
|
||||||
|
.root())
|
||||||
return if (isNotary) {
|
return if (isNotary) {
|
||||||
config.withValue("notary", ConfigValueFactory.fromMap(mapOf("validating" to true)))
|
config.withValue("notary", ConfigValueFactory.fromMap(mapOf("validating" to true)))
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user