mirror of
https://github.com/corda/corda.git
synced 2025-02-15 15:12:46 +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.coretesting.internal.rigorousMock
|
||||
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.NodeConfiguration
|
||||
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(true).whenever(it).crlCheckSoftFail
|
||||
doReturn(true).whenever(it).crlCheckArtemisServer
|
||||
doReturn(CustomConfiguration()).whenever(it).custom
|
||||
}
|
||||
LogHelper.setLevel(PersistentUniquenessProvider::class)
|
||||
database = configureDatabase(makeTestDataSourceProperties(), DatabaseConfig(), { null }, { null })
|
||||
|
@ -1178,7 +1178,7 @@ abstract class AbstractNode<S>(val configuration: NodeConfiguration,
|
||||
inner class ServiceHubImpl : SingletonSerializeAsToken(), ServiceHubInternal, NetworkParameterUpdateListener {
|
||||
override val rpcFlows = ArrayList<Class<out FlowLogic<*>>>()
|
||||
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 keyManagementService: KeyManagementService get() = this@AbstractNode.keyManagementService
|
||||
override val schemaService: SchemaService get() = this@AbstractNode.schemaService
|
||||
|
@ -44,6 +44,7 @@ interface NodeConfiguration : ConfigurationWithOptionsContainer {
|
||||
val verifierType: VerifierType
|
||||
val flowTimeout: FlowTimeoutConfiguration
|
||||
val telemetry: TelemetryConfiguration
|
||||
val custom: CustomConfiguration?
|
||||
val notary: NotaryConfig?
|
||||
val additionalNodeInfoPollingFrequencyMsec: Long
|
||||
val p2pAddress: NetworkHostAndPort
|
||||
@ -229,6 +230,11 @@ data class TelemetryConfiguration(
|
||||
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.
|
||||
*
|
||||
|
@ -44,6 +44,7 @@ data class NodeConfigurationImpl(
|
||||
override val verifierType: VerifierType,
|
||||
override val flowTimeout: FlowTimeoutConfiguration,
|
||||
override val telemetry: TelemetryConfiguration = Defaults.telemetry,
|
||||
override val custom: CustomConfiguration = Defaults.custom,
|
||||
override val p2pAddress: NetworkHostAndPort,
|
||||
override val additionalP2PAddresses: List<NetworkHostAndPort> = Defaults.additionalP2PAddresses,
|
||||
private val rpcAddress: NetworkHostAndPort? = Defaults.rpcAddress,
|
||||
@ -138,6 +139,7 @@ data class NodeConfigurationImpl(
|
||||
exportHibernateJMXStatistics = devMode
|
||||
)
|
||||
val telemetry = TelemetryConfiguration(openTelemetryEnabled = true, simpleLogTelemetryEnabled = false, spanStartEndEventsEnabled = false, copyBaggageToTags = false)
|
||||
val custom: CustomConfiguration = CustomConfiguration()
|
||||
}
|
||||
|
||||
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.CertChainPolicyConfig
|
||||
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.FlowOverride
|
||||
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") {
|
||||
private val rotatedKeys by string().listOrEmpty()
|
||||
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 reloadCheckpointAfterSuspend by boolean().optional().withDefaultValue(Defaults.reloadCheckpointAfterSuspend)
|
||||
private val networkParametersPath by string().mapValid(::toPath).optional()
|
||||
@Suppress("unused")
|
||||
private val custom by nestedObject().optional()
|
||||
private val custom by nested(CustomConfigurationSpec).optional().withDefaultValue(Defaults.custom)
|
||||
@Suppress("unused")
|
||||
private val systemProperties by nestedObject().optional()
|
||||
|
||||
@ -97,6 +96,7 @@ internal object V1NodeConfigurationSpec : Configuration.Specification<NodeConfig
|
||||
verifierType = config[verifierType],
|
||||
flowTimeout = config[flowTimeout],
|
||||
telemetry = config[telemetry],
|
||||
custom = config[custom],
|
||||
rpcSettings = config[rpcSettings],
|
||||
messagingServerAddress = config[messagingServerAddress],
|
||||
notary = config[notary],
|
||||
|
@ -64,7 +64,8 @@ import kotlin.io.path.isWritable
|
||||
*/
|
||||
class ExternalVerifierHandleImpl(
|
||||
private val verificationSupport: NodeVerificationSupport,
|
||||
private val baseDirectory: Path
|
||||
private val baseDirectory: Path,
|
||||
private val jvmArgsFromConfig: List<String>
|
||||
) : ExternalVerifierHandle {
|
||||
companion object {
|
||||
private val log = contextLogger()
|
||||
@ -207,6 +208,7 @@ class ExternalVerifierHandleImpl(
|
||||
val command = ArrayList<String>()
|
||||
command += "${Path(System.getProperty("java.home"), "bin", "java")}"
|
||||
command += inheritedJvmArgs
|
||||
command += jvmArgsFromConfig
|
||||
|
||||
// Build list of 3rd party 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.utilities.NetworkHostAndPort
|
||||
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.NodeH2Settings
|
||||
import net.corda.node.services.events.NodeSchedulerService
|
||||
@ -138,6 +139,7 @@ class NodeH2SecurityTests {
|
||||
whenever(config.effectiveH2Settings).thenAnswer { NodeH2Settings(address) }
|
||||
whenever(config.telemetry).thenReturn(mock())
|
||||
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) {
|
||||
|
@ -12,6 +12,7 @@ import net.corda.core.utilities.seconds
|
||||
import net.corda.coretesting.internal.rigorousMock
|
||||
import net.corda.coretesting.internal.stubs.CertificateStoreStubs
|
||||
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.NotaryConfig
|
||||
import net.corda.nodeapi.internal.crypto.CertificateAndKeyPair
|
||||
@ -85,6 +86,7 @@ class NetworkRegistrationHelperTest {
|
||||
doReturn(null).whenever(it).tlsCertCrlIssuer
|
||||
doReturn(true).whenever(it).crlCheckSoftFail
|
||||
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.ServiceHubInternal
|
||||
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.NetworkParameterAcceptanceSettings
|
||||
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(listOf(baseDirectory / "cordapps")).whenever(it).cordappDirectories
|
||||
doReturn(emptyList<String>()).whenever(it).quasarExcludePackages
|
||||
doReturn(CustomConfiguration()).whenever(it).custom
|
||||
doReturn(TelemetryConfiguration(openTelemetryEnabled = true, simpleLogTelemetryEnabled = false, spanStartEndEventsEnabled = false, copyBaggageToTags = false)).whenever(it).telemetry
|
||||
parameters.configOverrides(it)
|
||||
}
|
||||
@ -674,6 +676,7 @@ private fun mockNodeConfiguration(certificatesDirectory: Path): NodeConfiguratio
|
||||
doReturn(2).whenever(it).flowExternalOperationThreadPoolSize
|
||||
doReturn(false).whenever(it).reloadCheckpointAfterSuspend
|
||||
doReturn(emptyList<RotatedCorDappSignerKeyConfiguration>()).whenever(it).rotatedCordappSignerKeys
|
||||
doReturn(CustomConfiguration()).whenever(it).custom
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -42,6 +42,9 @@ class NodeParams @JvmOverloads constructor(
|
||||
.withValue("useTestClock", valueFor(true))
|
||||
.withValue("jarDirs", valueFor(jarDirs.map(Path::absolutePathString)))
|
||||
.withValue("devMode", valueFor(devMode))
|
||||
.withValue("custom", empty()
|
||||
.withValue("externalVerifierJvmArgs", valueFor(listOf("-Duser.name=Alice")))
|
||||
.root())
|
||||
return if (isNotary) {
|
||||
config.withValue("notary", ConfigValueFactory.fromMap(mapOf("validating" to true)))
|
||||
} else {
|
||||
|
Loading…
x
Reference in New Issue
Block a user