mirror of
https://github.com/corda/corda.git
synced 2025-06-06 01:11:45 +00:00
TM-23 Fail build on compiler warnings (#5453)
* java compile respects compilation.allWarningsAsErrors * suppress or cleanup warnings * suppress warning * use non-deprecated kotlin dependency * rename property * handle property existence check * Deal with warnings
This commit is contained in:
parent
4e6edd012a
commit
f171de7b69
@ -14,6 +14,7 @@ buildscript {
|
|||||||
//
|
//
|
||||||
// TODO: Sort this alphabetically.
|
// TODO: Sort this alphabetically.
|
||||||
ext.kotlin_version = constants.getProperty("kotlinVersion")
|
ext.kotlin_version = constants.getProperty("kotlinVersion")
|
||||||
|
ext.warnings_as_errors = project.hasProperty("compilation.warningsAsErrors") ? project.property("compilation.warningsAsErrors").toBoolean() : false
|
||||||
|
|
||||||
ext.quasar_group = 'co.paralleluniverse'
|
ext.quasar_group = 'co.paralleluniverse'
|
||||||
ext.quasar_version = constants.getProperty("quasarVersion")
|
ext.quasar_version = constants.getProperty("quasarVersion")
|
||||||
@ -214,6 +215,12 @@ allprojects {
|
|||||||
|
|
||||||
tasks.withType(JavaCompile) {
|
tasks.withType(JavaCompile) {
|
||||||
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" << "-Xlint:-options" << "-parameters"
|
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" << "-Xlint:-options" << "-parameters"
|
||||||
|
if (warnings_as_errors) {
|
||||||
|
// We cannot fail the build on compiler warnings because we have java warnings that you cannot disable:
|
||||||
|
// Signal is internal proprietary API and may be removed in a future release
|
||||||
|
// otherwise we should have the following line here:
|
||||||
|
// options.compilerArgs << "-Werror"
|
||||||
|
}
|
||||||
options.encoding = 'UTF-8'
|
options.encoding = 'UTF-8'
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,7 +231,7 @@ allprojects {
|
|||||||
jvmTarget = "1.8"
|
jvmTarget = "1.8"
|
||||||
javaParameters = true // Useful for reflection.
|
javaParameters = true // Useful for reflection.
|
||||||
freeCompilerArgs = ['-Xjvm-default=compatibility']
|
freeCompilerArgs = ['-Xjvm-default=compatibility']
|
||||||
allWarningsAsErrors = project.hasProperty('compilation.allWarningsAsErrors') ? project.property('compilation.allWarningsAsErrors').toBoolean() : false
|
allWarningsAsErrors = warnings_as_errors
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -195,7 +195,7 @@ open class StringToMethodCallParser<in T : Any> @JvmOverloads constructor(
|
|||||||
@Throws(UnparseableCallException::class)
|
@Throws(UnparseableCallException::class)
|
||||||
fun validateIsMatchingCtor(methodNameHint: String, parameters: List<Pair<String, Type>>, args: String) {
|
fun validateIsMatchingCtor(methodNameHint: String, parameters: List<Pair<String, Type>>, args: String) {
|
||||||
val tree = createJsonTreeAndValidate(methodNameHint, parameters, args)
|
val tree = createJsonTreeAndValidate(methodNameHint, parameters, args)
|
||||||
val inOrderParams: List<Any?> = parameters.mapIndexed { _, (argName, argType) ->
|
parameters.mapIndexed { _, (argName, _) ->
|
||||||
tree[argName] ?: throw UnparseableCallException.MissingParameter(methodNameHint, argName, args)
|
tree[argName] ?: throw UnparseableCallException.MissingParameter(methodNameHint, argName, args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -86,7 +86,7 @@ class NodeMonitorModel : AutoCloseable {
|
|||||||
vaultUpdates.startWith(initialVaultUpdate).subscribe(vaultUpdatesSubject::onNext)
|
vaultUpdates.startWith(initialVaultUpdate).subscribe(vaultUpdatesSubject::onNext)
|
||||||
|
|
||||||
// Transactions
|
// Transactions
|
||||||
val (transactions, newTransactions) = rpc.internalVerifiedTransactionsFeed()
|
val (transactions, newTransactions) = @Suppress("DEPRECATION") rpc.internalVerifiedTransactionsFeed()
|
||||||
newTransactions.startWith(transactions).subscribe(transactionsSubject::onNext)
|
newTransactions.startWith(transactions).subscribe(transactionsSubject::onNext)
|
||||||
|
|
||||||
// SM -> TX mapping
|
// SM -> TX mapping
|
||||||
|
@ -196,6 +196,7 @@ open class CordaRPCClientConfiguration @JvmOverloads constructor(
|
|||||||
if (trackRpcCallSites != other.trackRpcCallSites) return false
|
if (trackRpcCallSites != other.trackRpcCallSites) return false
|
||||||
if (reapInterval != other.reapInterval) return false
|
if (reapInterval != other.reapInterval) return false
|
||||||
if (observationExecutorPoolSize != other.observationExecutorPoolSize) return false
|
if (observationExecutorPoolSize != other.observationExecutorPoolSize) return false
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
if (cacheConcurrencyLevel != other.cacheConcurrencyLevel) return false
|
if (cacheConcurrencyLevel != other.cacheConcurrencyLevel) return false
|
||||||
if (connectionRetryInterval != other.connectionRetryInterval) return false
|
if (connectionRetryInterval != other.connectionRetryInterval) return false
|
||||||
if (connectionRetryIntervalMultiplier != other.connectionRetryIntervalMultiplier) return false
|
if (connectionRetryIntervalMultiplier != other.connectionRetryIntervalMultiplier) return false
|
||||||
@ -212,6 +213,7 @@ open class CordaRPCClientConfiguration @JvmOverloads constructor(
|
|||||||
result = 31 * result + trackRpcCallSites.hashCode()
|
result = 31 * result + trackRpcCallSites.hashCode()
|
||||||
result = 31 * result + reapInterval.hashCode()
|
result = 31 * result + reapInterval.hashCode()
|
||||||
result = 31 * result + observationExecutorPoolSize
|
result = 31 * result + observationExecutorPoolSize
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
result = 31 * result + cacheConcurrencyLevel
|
result = 31 * result + cacheConcurrencyLevel
|
||||||
result = 31 * result + connectionRetryInterval.hashCode()
|
result = 31 * result + connectionRetryInterval.hashCode()
|
||||||
result = 31 * result + connectionRetryIntervalMultiplier.hashCode()
|
result = 31 * result + connectionRetryIntervalMultiplier.hashCode()
|
||||||
|
@ -69,7 +69,10 @@ object IdentitySyncFlow {
|
|||||||
.filter { serviceHub.networkMapCache.getNodesByLegalIdentityKey(it.owningKey).isEmpty() }
|
.filter { serviceHub.networkMapCache.getNodesByLegalIdentityKey(it.owningKey).isEmpty() }
|
||||||
.toList()
|
.toList()
|
||||||
return confidentialIdentities
|
return confidentialIdentities
|
||||||
.map { Pair(it, serviceHub.identityService.certificateFromKey(it.owningKey)) }
|
.map {
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
Pair(it, serviceHub.identityService.certificateFromKey(it.owningKey))
|
||||||
|
}
|
||||||
// Filter down to confidential identities of our well known identity
|
// Filter down to confidential identities of our well known identity
|
||||||
// TODO: Consider if this too restrictive - we perhaps should be checking the name on the signing certificate in the certificate path instead
|
// TODO: Consider if this too restrictive - we perhaps should be checking the name on the signing certificate in the certificate path instead
|
||||||
.filter { it.second?.name == ourIdentity.name }
|
.filter { it.second?.name == ourIdentity.name }
|
||||||
|
@ -4,7 +4,10 @@ import co.paralleluniverse.fibers.Suspendable
|
|||||||
import net.corda.core.CordaInternal
|
import net.corda.core.CordaInternal
|
||||||
import net.corda.core.crypto.DigitalSignature
|
import net.corda.core.crypto.DigitalSignature
|
||||||
import net.corda.core.crypto.verify
|
import net.corda.core.crypto.verify
|
||||||
import net.corda.core.flows.*
|
import net.corda.core.flows.FlowException
|
||||||
|
import net.corda.core.flows.FlowLogic
|
||||||
|
import net.corda.core.flows.FlowSession
|
||||||
|
import net.corda.core.flows.InitiatingFlow
|
||||||
import net.corda.core.identity.AnonymousParty
|
import net.corda.core.identity.AnonymousParty
|
||||||
import net.corda.core.identity.CordaX500Name
|
import net.corda.core.identity.CordaX500Name
|
||||||
import net.corda.core.identity.Party
|
import net.corda.core.identity.Party
|
||||||
@ -41,7 +44,7 @@ private constructor(private val otherSideSession: FlowSession?,
|
|||||||
|
|
||||||
@Deprecated("It is unsafe to use this constructor as it requires nodes to automatically vend anonymous identities without first " +
|
@Deprecated("It is unsafe to use this constructor as it requires nodes to automatically vend anonymous identities without first " +
|
||||||
"checking if they should. Instead, use the constructor that takes in an existing FlowSession.")
|
"checking if they should. Instead, use the constructor that takes in an existing FlowSession.")
|
||||||
constructor(otherParty: Party, revocationEnabled: Boolean, progressTracker: ProgressTracker) : this(null, otherParty, progressTracker)
|
constructor(otherParty: Party, @Suppress("UNUSED_PARAMETER") revocationEnabled: Boolean, progressTracker: ProgressTracker) : this(null, otherParty, progressTracker)
|
||||||
|
|
||||||
@Deprecated("It is unsafe to use this constructor as it requires nodes to automatically vend anonymous identities without first " +
|
@Deprecated("It is unsafe to use this constructor as it requires nodes to automatically vend anonymous identities without first " +
|
||||||
"checking if they should. Instead, use the constructor that takes in an existing FlowSession.")
|
"checking if they should. Instead, use the constructor that takes in an existing FlowSession.")
|
||||||
|
@ -91,7 +91,7 @@ class IdentitySyncFlowTests {
|
|||||||
val issueFlow = charlieNode.services.startFlow(CashIssueAndPaymentFlow(1000.DOLLARS, ref, charlie, anonymous, notary))
|
val issueFlow = charlieNode.services.startFlow(CashIssueAndPaymentFlow(1000.DOLLARS, ref, charlie, anonymous, notary))
|
||||||
val issueTx = issueFlow.resultFuture.getOrThrow().stx
|
val issueTx = issueFlow.resultFuture.getOrThrow().stx
|
||||||
val confidentialIdentity = issueTx.tx.outputs.map { it.data }.filterIsInstance<Cash.State>().single().owner
|
val confidentialIdentity = issueTx.tx.outputs.map { it.data }.filterIsInstance<Cash.State>().single().owner
|
||||||
val confidentialIdentCert = charlieNode.services.identityService.certificateFromKey(confidentialIdentity.owningKey)!!
|
val confidentialIdentCert = @Suppress("DEPRECATION") charlieNode.services.identityService.certificateFromKey(confidentialIdentity.owningKey)!!
|
||||||
|
|
||||||
// Manually inject this identity into Alice's database so the node could leak it, but we prove won't
|
// Manually inject this identity into Alice's database so the node could leak it, but we prove won't
|
||||||
aliceNode.database.transaction { aliceNode.services.identityService.verifyAndRegisterIdentity(confidentialIdentCert) }
|
aliceNode.database.transaction { aliceNode.services.identityService.verifyAndRegisterIdentity(confidentialIdentCert) }
|
||||||
|
@ -8,5 +8,5 @@ import net.corda.core.contracts.ContractState
|
|||||||
|
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
object StateContractValidationEnforcementRule {
|
object StateContractValidationEnforcementRule {
|
||||||
fun shouldEnforce(state: ContractState): Boolean = true
|
fun shouldEnforce(@Suppress("UNUSED_PARAMETER") state: ContractState): Boolean = true
|
||||||
}
|
}
|
@ -3,6 +3,6 @@ package net.corda.core.internal
|
|||||||
/**
|
/**
|
||||||
* Stubbing out non-deterministic method.
|
* Stubbing out non-deterministic method.
|
||||||
*/
|
*/
|
||||||
fun <T: Any> createInstancesOfClassesImplementing(classloader: ClassLoader, clazz: Class<T>): Set<T> {
|
fun <T: Any> createInstancesOfClassesImplementing(@Suppress("UNUSED_PARAMETER") classloader: ClassLoader, @Suppress("UNUSED_PARAMETER") clazz: Class<T>): Set<T> {
|
||||||
return emptySet()
|
return emptySet()
|
||||||
}
|
}
|
@ -315,7 +315,7 @@ class ConstraintsPropagationTests {
|
|||||||
whenever(attachmentSigned.allContracts).thenReturn(setOf(propagatingContractClassName))
|
whenever(attachmentSigned.allContracts).thenReturn(setOf(propagatingContractClassName))
|
||||||
|
|
||||||
// network parameters
|
// network parameters
|
||||||
val netParams = testNetworkParameters(minimumPlatformVersion = 4,
|
testNetworkParameters(minimumPlatformVersion = 4,
|
||||||
packageOwnership = mapOf("net.corda.core.contracts" to ALICE_PARTY.owningKey))
|
packageOwnership = mapOf("net.corda.core.contracts" to ALICE_PARTY.owningKey))
|
||||||
|
|
||||||
ledgerServices.attachments.importContractAttachment(attachmentIdSigned, attachmentSigned)
|
ledgerServices.attachments.importContractAttachment(attachmentIdSigned, attachmentSigned)
|
||||||
|
@ -12,7 +12,7 @@ import rx.Observer
|
|||||||
// TODO Delete this file once the Future stuff is out of here
|
// TODO Delete this file once the Future stuff is out of here
|
||||||
|
|
||||||
fun <A> CordaFuture<out A>.toObservable(): Observable<A> {
|
fun <A> CordaFuture<out A>.toObservable(): Observable<A> {
|
||||||
return Observable.create { subscriber ->
|
return Observable.unsafeCreate { subscriber ->
|
||||||
thenMatch({
|
thenMatch({
|
||||||
subscriber.onNext(it)
|
subscriber.onNext(it)
|
||||||
subscriber.onCompleted()
|
subscriber.onCompleted()
|
||||||
|
@ -42,8 +42,14 @@ fun <C : CommandData> Collection<CommandWithParties<CommandData>>.select(klass:
|
|||||||
party: AbstractParty? = null) =
|
party: AbstractParty? = null) =
|
||||||
mapNotNull { if (klass.isInstance(it.value)) uncheckedCast<CommandWithParties<CommandData>, CommandWithParties<C>>(it) else null }.
|
mapNotNull { if (klass.isInstance(it.value)) uncheckedCast<CommandWithParties<CommandData>, CommandWithParties<C>>(it) else null }.
|
||||||
filter { if (signer == null) true else signer in it.signers }.
|
filter { if (signer == null) true else signer in it.signers }.
|
||||||
filter { if (party == null) true else party in it.signingParties }.
|
filter {
|
||||||
map { CommandWithParties(it.signers, it.signingParties, it.value) }
|
@Suppress("DEPRECATION")
|
||||||
|
if (party == null) true else party in it.signingParties
|
||||||
|
}.
|
||||||
|
map {
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
CommandWithParties(it.signers, it.signingParties, it.value)
|
||||||
|
}
|
||||||
|
|
||||||
/** Filters the command list by type, parties and public keys all at once. */
|
/** Filters the command list by type, parties and public keys all at once. */
|
||||||
inline fun <reified T : CommandData> Collection<CommandWithParties<CommandData>>.select(signers: Collection<PublicKey>?,
|
inline fun <reified T : CommandData> Collection<CommandWithParties<CommandData>>.select(signers: Collection<PublicKey>?,
|
||||||
@ -56,8 +62,14 @@ fun <C : CommandData> Collection<CommandWithParties<CommandData>>.select(klass:
|
|||||||
parties: Collection<Party>?) =
|
parties: Collection<Party>?) =
|
||||||
mapNotNull { if (klass.isInstance(it.value)) uncheckedCast<CommandWithParties<CommandData>, CommandWithParties<C>>(it) else null }.
|
mapNotNull { if (klass.isInstance(it.value)) uncheckedCast<CommandWithParties<CommandData>, CommandWithParties<C>>(it) else null }.
|
||||||
filter { if (signers == null) true else it.signers.containsAll(signers) }.
|
filter { if (signers == null) true else it.signers.containsAll(signers) }.
|
||||||
filter { if (parties == null) true else it.signingParties.containsAll(parties) }.
|
filter {
|
||||||
map { CommandWithParties(it.signers, it.signingParties, it.value) }
|
@Suppress("DEPRECATION")
|
||||||
|
if (parties == null) true else it.signingParties.containsAll(parties)
|
||||||
|
}.
|
||||||
|
map {
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
CommandWithParties(it.signers, it.signingParties, it.value)
|
||||||
|
}
|
||||||
|
|
||||||
/** Ensures that a transaction has only one command that is of the given type, otherwise throws an exception. */
|
/** Ensures that a transaction has only one command that is of the given type, otherwise throws an exception. */
|
||||||
inline fun <reified T : CommandData> Collection<CommandWithParties<CommandData>>.requireSingleCommand() = requireSingleCommand(T::class.java)
|
inline fun <reified T : CommandData> Collection<CommandWithParties<CommandData>>.requireSingleCommand() = requireSingleCommand(T::class.java)
|
||||||
|
@ -48,10 +48,15 @@ val ContractState.requiredContractClassName: String? get() {
|
|||||||
*/
|
*/
|
||||||
fun AttachmentConstraint.canBeTransitionedFrom(input: AttachmentConstraint, attachment: ContractAttachment): Boolean {
|
fun AttachmentConstraint.canBeTransitionedFrom(input: AttachmentConstraint, attachment: ContractAttachment): Boolean {
|
||||||
val output = this
|
val output = this
|
||||||
|
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
fun AttachmentConstraint.isAutomaticHashConstraint() =
|
||||||
|
this is AutomaticHashConstraint
|
||||||
|
|
||||||
return when {
|
return when {
|
||||||
// These branches should not happen, as this has been already checked.
|
// These branches should not happen, as this has been already checked.
|
||||||
input is AutomaticPlaceholderConstraint || output is AutomaticPlaceholderConstraint -> throw IllegalArgumentException("Illegal constraint: AutomaticPlaceholderConstraint.")
|
input is AutomaticPlaceholderConstraint || output is AutomaticPlaceholderConstraint -> throw IllegalArgumentException("Illegal constraint: AutomaticPlaceholderConstraint.")
|
||||||
input is AutomaticHashConstraint || output is AutomaticHashConstraint -> throw IllegalArgumentException("Illegal constraint: AutomaticHashConstraint.")
|
input.isAutomaticHashConstraint() || output.isAutomaticHashConstraint() -> throw IllegalArgumentException("Illegal constraint: AutomaticHashConstraint.")
|
||||||
|
|
||||||
// Transition to the same constraint.
|
// Transition to the same constraint.
|
||||||
input == output -> true
|
input == output -> true
|
||||||
|
@ -97,10 +97,12 @@ class TransactionDeserialisationException(groupEnum: ComponentGroupEnum, index:
|
|||||||
*
|
*
|
||||||
* This method used the [deserialiseComponentGroup] method.
|
* This method used the [deserialiseComponentGroup] method.
|
||||||
*/
|
*/
|
||||||
fun deserialiseCommands(componentGroups: List<ComponentGroup>,
|
fun deserialiseCommands(
|
||||||
|
componentGroups: List<ComponentGroup>,
|
||||||
forceDeserialize: Boolean = false,
|
forceDeserialize: Boolean = false,
|
||||||
factory: SerializationFactory = SerializationFactory.defaultFactory,
|
factory: SerializationFactory = SerializationFactory.defaultFactory,
|
||||||
context: SerializationContext = factory.defaultContext): List<Command<*>> {
|
@Suppress("UNUSED_PARAMETER") context: SerializationContext = factory.defaultContext
|
||||||
|
): List<Command<*>> {
|
||||||
// TODO: we could avoid deserialising unrelated signers.
|
// TODO: we could avoid deserialising unrelated signers.
|
||||||
// However, current approach ensures the transaction is not malformed
|
// However, current approach ensures the transaction is not malformed
|
||||||
// and it will throw if any of the signers objects is not List of public keys).
|
// and it will throw if any of the signers objects is not List of public keys).
|
||||||
|
@ -48,6 +48,7 @@ interface IdentityService {
|
|||||||
*/
|
*/
|
||||||
@Throws(UnknownAnonymousPartyException::class)
|
@Throws(UnknownAnonymousPartyException::class)
|
||||||
fun assertOwnership(party: Party, anonymousParty: AnonymousParty) {
|
fun assertOwnership(party: Party, anonymousParty: AnonymousParty) {
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
val anonymousIdentity = certificateFromKey(anonymousParty.owningKey)
|
val anonymousIdentity = certificateFromKey(anonymousParty.owningKey)
|
||||||
?: throw UnknownAnonymousPartyException("Unknown $anonymousParty")
|
?: throw UnknownAnonymousPartyException("Unknown $anonymousParty")
|
||||||
val issuingCert = anonymousIdentity.certPath.certificates[1]
|
val issuingCert = anonymousIdentity.certPath.certificates[1]
|
||||||
@ -79,7 +80,9 @@ interface IdentityService {
|
|||||||
* @param key The owning [PublicKey] of the [Party].
|
* @param key The owning [PublicKey] of the [Party].
|
||||||
* @return Returns a [Party] with a matching owningKey if known, else returns null.
|
* @return Returns a [Party] with a matching owningKey if known, else returns null.
|
||||||
*/
|
*/
|
||||||
fun partyFromKey(key: PublicKey): Party? = certificateFromKey(key)?.party
|
fun partyFromKey(key: PublicKey): Party? =
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
certificateFromKey(key)?.party
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resolves a party name to the well known identity [Party] instance for this name. Where possible well known identity
|
* Resolves a party name to the well known identity [Party] instance for this name. Where possible well known identity
|
||||||
|
@ -390,5 +390,7 @@ private constructor(
|
|||||||
privacySalt: PrivacySalt = this.privacySalt,
|
privacySalt: PrivacySalt = this.privacySalt,
|
||||||
sigs: List<TransactionSignature> = this.sigs,
|
sigs: List<TransactionSignature> = this.sigs,
|
||||||
networkParameters: NetworkParameters = this.networkParameters
|
networkParameters: NetworkParameters = this.networkParameters
|
||||||
) = ContractUpgradeLedgerTransaction(inputs, notary, legacyContractAttachment, upgradedContractClassName, upgradedContractAttachment, id, privacySalt, sigs, networkParameters)
|
) =
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
ContractUpgradeLedgerTransaction(inputs, notary, legacyContractAttachment, upgradedContractClassName, upgradedContractAttachment, id, privacySalt, sigs, networkParameters)
|
||||||
}
|
}
|
@ -98,7 +98,11 @@ data class NotaryChangeWireTransaction(
|
|||||||
* TODO - currently this uses the main classloader.
|
* TODO - currently this uses the main classloader.
|
||||||
*/
|
*/
|
||||||
@CordaInternal
|
@CordaInternal
|
||||||
internal fun resolveOutputComponent(services: ServicesForResolution, stateRef: StateRef, params: NetworkParameters): SerializedBytes<TransactionState<ContractState>> {
|
internal fun resolveOutputComponent(
|
||||||
|
services: ServicesForResolution,
|
||||||
|
stateRef: StateRef,
|
||||||
|
@Suppress("UNUSED_PARAMETER") params: NetworkParameters
|
||||||
|
): SerializedBytes<TransactionState<ContractState>> {
|
||||||
return services.loadState(stateRef).serialize()
|
return services.loadState(stateRef).serialize()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -246,7 +246,9 @@ open class TransactionBuilder(
|
|||||||
* TODO also on the versions of the attachments of the transactions generating the input states. ( after we add versioning)
|
* TODO also on the versions of the attachments of the transactions generating the input states. ( after we add versioning)
|
||||||
*/
|
*/
|
||||||
private fun selectContractAttachmentsAndOutputStateConstraints(
|
private fun selectContractAttachmentsAndOutputStateConstraints(
|
||||||
services: ServicesForResolution, serializationContext: SerializationContext?): Pair<Collection<SecureHash>, List<TransactionState<ContractState>>> {
|
services: ServicesForResolution,
|
||||||
|
@Suppress("UNUSED_PARAMETER") serializationContext: SerializationContext?
|
||||||
|
): Pair<Collection<SecureHash>, List<TransactionState<ContractState>>> {
|
||||||
|
|
||||||
// Determine the explicitly set contract attachments.
|
// Determine the explicitly set contract attachments.
|
||||||
val explicitAttachmentContracts: List<Pair<ContractClassName, SecureHash>> = this.attachments
|
val explicitAttachmentContracts: List<Pair<ContractClassName, SecureHash>> = this.attachments
|
||||||
@ -297,7 +299,10 @@ open class TransactionBuilder(
|
|||||||
return Pair(attachments, resolvedOutputStatesInTheOriginalOrder)
|
return Pair(attachments, resolvedOutputStatesInTheOriginalOrder)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val automaticConstraints = setOf(AutomaticPlaceholderConstraint, AutomaticHashConstraint)
|
private val automaticConstraints = setOf(
|
||||||
|
AutomaticPlaceholderConstraint,
|
||||||
|
@Suppress("DEPRECATION") AutomaticHashConstraint
|
||||||
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Selects an attachment and resolves the constraints for the output states with [AutomaticPlaceholderConstraint].
|
* Selects an attachment and resolves the constraints for the output states with [AutomaticPlaceholderConstraint].
|
||||||
|
@ -107,7 +107,6 @@ class WireTransaction(componentGroups: List<ComponentGroup>, val privacySalt: Pr
|
|||||||
val hashToResolve = it ?: services.networkParametersService.defaultHash
|
val hashToResolve = it ?: services.networkParametersService.defaultHash
|
||||||
services.networkParametersService.lookup(hashToResolve)
|
services.networkParametersService.lookup(hashToResolve)
|
||||||
},
|
},
|
||||||
resolveContractAttachment = { services.loadContractAttachment(it) },
|
|
||||||
// `as?` is used due to [MockServices] not implementing [ServiceHubCoreInternal]
|
// `as?` is used due to [MockServices] not implementing [ServiceHubCoreInternal]
|
||||||
isAttachmentTrusted = { (services as? ServiceHubCoreInternal)?.attachmentTrustCalculator?.calculate(it) ?: true }
|
isAttachmentTrusted = { (services as? ServiceHubCoreInternal)?.attachmentTrustCalculator?.calculate(it) ?: true }
|
||||||
)
|
)
|
||||||
@ -115,6 +114,7 @@ class WireTransaction(componentGroups: List<ComponentGroup>, val privacySalt: Pr
|
|||||||
|
|
||||||
// Helper for deprecated toLedgerTransaction
|
// Helper for deprecated toLedgerTransaction
|
||||||
// TODO: revisit once Deterministic JVM code updated
|
// TODO: revisit once Deterministic JVM code updated
|
||||||
|
@Suppress("UNUSED") // not sure if this field can be removed safely??
|
||||||
private val missingAttachment: Attachment by lazy {
|
private val missingAttachment: Attachment by lazy {
|
||||||
object : AbstractAttachment({ byteArrayOf() }, DEPLOYED_CORDAPP_UPLOADER ) {
|
object : AbstractAttachment({ byteArrayOf() }, DEPLOYED_CORDAPP_UPLOADER ) {
|
||||||
override val id: SecureHash get() = throw UnsupportedOperationException()
|
override val id: SecureHash get() = throw UnsupportedOperationException()
|
||||||
@ -143,8 +143,6 @@ class WireTransaction(componentGroups: List<ComponentGroup>, val privacySalt: Pr
|
|||||||
resolveAttachment,
|
resolveAttachment,
|
||||||
{ stateRef -> resolveStateRef(stateRef)?.serialize() },
|
{ stateRef -> resolveStateRef(stateRef)?.serialize() },
|
||||||
{ null },
|
{ null },
|
||||||
// Returning a dummy `missingAttachment` Attachment allows this deprecated method to work and it disables "contract version no downgrade rule" as a dummy Attachment returns version 1
|
|
||||||
{ resolveAttachment(it.txhash) ?: missingAttachment },
|
|
||||||
{ it.isUploaderTrusted() }
|
{ it.isUploaderTrusted() }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -161,7 +159,6 @@ class WireTransaction(componentGroups: List<ComponentGroup>, val privacySalt: Pr
|
|||||||
resolveAttachment,
|
resolveAttachment,
|
||||||
{ stateRef -> resolveStateRef(stateRef)?.serialize() },
|
{ stateRef -> resolveStateRef(stateRef)?.serialize() },
|
||||||
resolveParameters,
|
resolveParameters,
|
||||||
{ resolveAttachment(it.txhash) ?: missingAttachment },
|
|
||||||
{ true } // Any attachment loaded through the DJVM should be trusted
|
{ true } // Any attachment loaded through the DJVM should be trusted
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -171,7 +168,6 @@ class WireTransaction(componentGroups: List<ComponentGroup>, val privacySalt: Pr
|
|||||||
resolveAttachment: (SecureHash) -> Attachment?,
|
resolveAttachment: (SecureHash) -> Attachment?,
|
||||||
resolveStateRefAsSerialized: (StateRef) -> SerializedBytes<TransactionState<ContractState>>?,
|
resolveStateRefAsSerialized: (StateRef) -> SerializedBytes<TransactionState<ContractState>>?,
|
||||||
resolveParameters: (SecureHash?) -> NetworkParameters?,
|
resolveParameters: (SecureHash?) -> NetworkParameters?,
|
||||||
resolveContractAttachment: (StateRef) -> Attachment,
|
|
||||||
isAttachmentTrusted: (Attachment) -> Boolean
|
isAttachmentTrusted: (Attachment) -> Boolean
|
||||||
): LedgerTransaction {
|
): LedgerTransaction {
|
||||||
// Look up public keys to authenticated identities.
|
// Look up public keys to authenticated identities.
|
||||||
|
@ -4,8 +4,6 @@ import com.nhaarman.mockito_kotlin.mock
|
|||||||
import org.assertj.core.api.Assertions.assertThat
|
import org.assertj.core.api.Assertions.assertThat
|
||||||
import org.assertj.core.api.Assertions.assertThatThrownBy
|
import org.assertj.core.api.Assertions.assertThatThrownBy
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import java.lang.IllegalArgumentException
|
|
||||||
import java.lang.RuntimeException
|
|
||||||
|
|
||||||
class ClassLoadingUtilsTest {
|
class ClassLoadingUtilsTest {
|
||||||
|
|
||||||
@ -33,7 +31,7 @@ class ClassLoadingUtilsTest {
|
|||||||
|
|
||||||
@Test(expected = IllegalArgumentException::class)
|
@Test(expected = IllegalArgumentException::class)
|
||||||
fun throwsExceptionWhenClassDoesNotContainProperConstructors() {
|
fun throwsExceptionWhenClassDoesNotContainProperConstructors() {
|
||||||
val classes = createInstancesOfClassesImplementing(BaseInterface::class.java.classLoader, BaseInterface2::class.java)
|
createInstancesOfClassesImplementing(BaseInterface::class.java.classLoader, BaseInterface2::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -2,9 +2,10 @@ package net.corda.nodeinfo
|
|||||||
|
|
||||||
import net.corda.cliutils.CordaCliWrapper
|
import net.corda.cliutils.CordaCliWrapper
|
||||||
import net.corda.cliutils.start
|
import net.corda.cliutils.start
|
||||||
import net.corda.core.crypto.*
|
import net.corda.core.crypto.sign
|
||||||
import net.corda.core.identity.PartyAndCertificate
|
import net.corda.core.identity.PartyAndCertificate
|
||||||
import net.corda.core.internal.*
|
import net.corda.core.internal.div
|
||||||
|
import net.corda.core.internal.readAll
|
||||||
import net.corda.core.node.NodeInfo
|
import net.corda.core.node.NodeInfo
|
||||||
import net.corda.core.serialization.SerializationContext
|
import net.corda.core.serialization.SerializationContext
|
||||||
import net.corda.core.serialization.SerializedBytes
|
import net.corda.core.serialization.SerializedBytes
|
||||||
@ -15,9 +16,13 @@ import net.corda.core.serialization.serialize
|
|||||||
import net.corda.core.utilities.NetworkHostAndPort
|
import net.corda.core.utilities.NetworkHostAndPort
|
||||||
import net.corda.nodeapi.internal.SignedNodeInfo
|
import net.corda.nodeapi.internal.SignedNodeInfo
|
||||||
import net.corda.nodeapi.internal.crypto.X509KeyStore
|
import net.corda.nodeapi.internal.crypto.X509KeyStore
|
||||||
import net.corda.serialization.internal.*
|
import net.corda.serialization.internal.AMQP_P2P_CONTEXT
|
||||||
import net.corda.serialization.internal.amqp.*
|
import net.corda.serialization.internal.CordaSerializationMagic
|
||||||
import picocli.CommandLine.*
|
import net.corda.serialization.internal.SerializationFactoryImpl
|
||||||
|
import net.corda.serialization.internal.amqp.AbstractAMQPSerializationScheme
|
||||||
|
import net.corda.serialization.internal.amqp.amqpMagic
|
||||||
|
import picocli.CommandLine.ITypeConverter
|
||||||
|
import picocli.CommandLine.Option
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
import java.security.cert.CertificateFactory
|
import java.security.cert.CertificateFactory
|
||||||
@ -164,7 +169,7 @@ class NodeInfoSigner : CordaCliWrapper("nodeinfo-signer", "Display and generate
|
|||||||
|
|
||||||
println(outputFile)
|
println(outputFile)
|
||||||
|
|
||||||
outputFile!!.toFile().writeBytes(nodeInfoSigned.signedInfoNode.serialize().bytes)
|
outputFile.toFile().writeBytes(nodeInfoSigned.signedInfoNode.serialize().bytes)
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,6 +134,7 @@ public class JavaCommercialPaper implements Contract {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
private List<CommandWithParties<Commands>> extractCommands(@NotNull LedgerTransaction tx) {
|
private List<CommandWithParties<Commands>> extractCommands(@NotNull LedgerTransaction tx) {
|
||||||
return tx.getCommands()
|
return tx.getCommands()
|
||||||
.stream()
|
.stream()
|
||||||
|
@ -221,19 +221,19 @@ internal inline fun <reified T : MoveCommand> verifyFlattenedMoveCommand(inputs:
|
|||||||
// see a signature from each of those keys. The actual signatures have been verified against the transaction
|
// see a signature from each of those keys. The actual signatures have been verified against the transaction
|
||||||
// data by the platform before execution.
|
// data by the platform before execution.
|
||||||
val owningPubKeys = inputs.map { it.owner.owningKey }.toSet()
|
val owningPubKeys = inputs.map { it.owner.owningKey }.toSet()
|
||||||
val commands = commands.groupCommands<T>()
|
val groupedCommands = commands.groupCommands<T>()
|
||||||
// Does not use requireThat to maintain message compatibility with verifyMoveCommand.
|
// Does not use requireThat to maintain message compatibility with verifyMoveCommand.
|
||||||
if (commands.isEmpty()) {
|
if (groupedCommands.isEmpty()) {
|
||||||
throw IllegalStateException("Required ${T::class.qualifiedName} command")
|
throw IllegalStateException("Required ${T::class.qualifiedName} command")
|
||||||
}
|
}
|
||||||
requireThat {
|
requireThat {
|
||||||
"move commands can only differ by signing keys" using (commands.size == 1)
|
"move commands can only differ by signing keys" using (groupedCommands.size == 1)
|
||||||
}
|
}
|
||||||
val keysThatSigned = commands.values.first()
|
val keysThatSigned = groupedCommands.values.first()
|
||||||
requireThat {
|
requireThat {
|
||||||
"the owning keys are a subset of the signing keys" using keysThatSigned.containsAll(owningPubKeys)
|
"the owning keys are a subset of the signing keys" using keysThatSigned.containsAll(owningPubKeys)
|
||||||
}
|
}
|
||||||
return commands.keys.single()
|
return groupedCommands.keys.single()
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Group commands by instances of the given type. */
|
/** Group commands by instances of the given type. */
|
||||||
|
@ -1,22 +1,27 @@
|
|||||||
package net.corda.nodeapi.exceptions
|
package net.corda.nodeapi.exceptions
|
||||||
|
|
||||||
import net.corda.core.ClientRelevantError
|
|
||||||
import net.corda.core.CordaRuntimeException
|
import net.corda.core.CordaRuntimeException
|
||||||
import net.corda.core.crypto.SecureHash
|
import net.corda.core.crypto.SecureHash
|
||||||
import net.corda.core.flows.IdentifiableException
|
|
||||||
import net.corda.core.serialization.CordaSerializable
|
import net.corda.core.serialization.CordaSerializable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Thrown to indicate that an attachment was already uploaded to a Corda node.
|
* Thrown to indicate that an attachment was already uploaded to a Corda node.
|
||||||
*/
|
*/
|
||||||
class DuplicateAttachmentException(attachmentHash: String) : java.nio.file.FileAlreadyExistsException(attachmentHash), ClientRelevantError
|
class DuplicateAttachmentException(attachmentHash: String) :
|
||||||
|
java.nio.file.FileAlreadyExistsException(attachmentHash),
|
||||||
|
@Suppress("DEPRECATION") net.corda.core.ClientRelevantError
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Thrown to indicate that a flow was not designed for RPC and should be started from an RPC client.
|
* Thrown to indicate that a flow was not designed for RPC and should be started from an RPC client.
|
||||||
*/
|
*/
|
||||||
class NonRpcFlowException(logicType: Class<*>) : IllegalArgumentException("${logicType.name} was not designed for RPC"), ClientRelevantError
|
class NonRpcFlowException(logicType: Class<*>) :
|
||||||
|
IllegalArgumentException("${logicType.name} was not designed for RPC"),
|
||||||
|
@Suppress("DEPRECATION") net.corda.core.ClientRelevantError
|
||||||
|
|
||||||
class OutdatedNetworkParameterHashException(old: SecureHash, new: SecureHash) : CordaRuntimeException(TEMPLATE.format(old, new)), ClientRelevantError {
|
class OutdatedNetworkParameterHashException(old: SecureHash, new: SecureHash) :
|
||||||
|
CordaRuntimeException(TEMPLATE.format(old, new)),
|
||||||
|
@Suppress("DEPRECATION") net.corda.core.ClientRelevantError
|
||||||
|
{
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
private const val TEMPLATE = "Refused to accept parameters with hash %s because network map advertises update with hash %s. Please check newest version"
|
private const val TEMPLATE = "Refused to accept parameters with hash %s because network map advertises update with hash %s. Please check newest version"
|
||||||
@ -26,7 +31,9 @@ class OutdatedNetworkParameterHashException(old: SecureHash, new: SecureHash) :
|
|||||||
/**
|
/**
|
||||||
* Thrown to indicate that the command was rejected by the node, typically due to a special temporary mode.
|
* Thrown to indicate that the command was rejected by the node, typically due to a special temporary mode.
|
||||||
*/
|
*/
|
||||||
class RejectedCommandException(message: String) : CordaRuntimeException(message), ClientRelevantError
|
class RejectedCommandException(message: String) :
|
||||||
|
CordaRuntimeException(message),
|
||||||
|
@Suppress("DEPRECATION") net.corda.core.ClientRelevantError
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows an implementing [Throwable] to be propagated to RPC clients.
|
* Allows an implementing [Throwable] to be propagated to RPC clients.
|
||||||
|
@ -54,7 +54,6 @@ class BCCryptoService(private val legalName: X500Principal, private val certific
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmOverloads
|
|
||||||
override fun sign(alias: String, data: ByteArray, signAlgorithm: String?): ByteArray {
|
override fun sign(alias: String, data: ByteArray, signAlgorithm: String?): ByteArray {
|
||||||
try {
|
try {
|
||||||
return when(signAlgorithm) {
|
return when(signAlgorithm) {
|
||||||
|
@ -55,15 +55,15 @@ class AttachmentVersionNumberMigration : CustomTaskChange {
|
|||||||
}
|
}
|
||||||
|
|
||||||
availableAttachments.forEach { attachmentId ->
|
availableAttachments.forEach { attachmentId ->
|
||||||
val versions = networkParameters?.whitelistedContractImplementations?.values.mapNotNull { it.indexOfFirst { it.toString() == attachmentId } }.filter { it >= 0 }
|
val versions = networkParameters.whitelistedContractImplementations.values.map { it.indexOfFirst { aid -> aid.toString() == attachmentId } }.filter { it >= 0 }
|
||||||
val maxPosition = versions.max() ?: 0
|
val maxPosition = versions.max() ?: 0
|
||||||
if (maxPosition > 0) {
|
if (maxPosition > 0) {
|
||||||
val version = maxPosition + 1
|
val version = maxPosition + 1
|
||||||
val msg = "Updating version of attachment $attachmentId to '$version'."
|
val updateVersionMsg = "Updating version of attachment $attachmentId to '$version'."
|
||||||
if (versions.toSet().size > 1)
|
if (versions.toSet().size > 1)
|
||||||
logger.warn("Several versions based on whitelistedContractImplementations position are available: ${versions.toSet()}. $msg")
|
logger.warn("Several versions based on whitelistedContractImplementations position are available: ${versions.toSet()}. $updateVersionMsg")
|
||||||
else
|
else
|
||||||
logger.info(msg)
|
logger.info(updateVersionMsg)
|
||||||
updateVersion(connection, attachmentId, version)
|
updateVersion(connection, attachmentId, version)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -88,8 +88,8 @@ class AttachmentVersionNumberMigration : CustomTaskChange {
|
|||||||
|
|
||||||
private fun getNetworkParametersFromFile(path: Path): NetworkParameters? {
|
private fun getNetworkParametersFromFile(path: Path): NetworkParameters? {
|
||||||
return try {
|
return try {
|
||||||
val networkParametersBytes = path?.readObject<SignedNetworkParameters>()
|
val networkParametersBytes = path.readObject<SignedNetworkParameters>()
|
||||||
networkParametersBytes?.raw?.deserialize()
|
networkParametersBytes.raw.deserialize()
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
// This condition is logged in the calling function, so no need to do that here.
|
// This condition is logged in the calling function, so no need to do that here.
|
||||||
null
|
null
|
||||||
|
@ -269,6 +269,7 @@ class CordaPersistence(
|
|||||||
(_dataSource as? AutoCloseable)?.close()
|
(_dataSource as? AutoCloseable)?.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN")
|
||||||
val hikariPoolThreadLocal: ThreadLocal<List<Object>>? by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
val hikariPoolThreadLocal: ThreadLocal<List<Object>>? by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||||
val hikariDataSource = dataSource as? HikariDataSource
|
val hikariDataSource = dataSource as? HikariDataSource
|
||||||
if (hikariDataSource == null) {
|
if (hikariDataSource == null) {
|
||||||
@ -279,9 +280,11 @@ class CordaPersistence(
|
|||||||
val pool: HikariPool = poolField.get(hikariDataSource) as HikariPool
|
val pool: HikariPool = poolField.get(hikariDataSource) as HikariPool
|
||||||
val connectionBagField: Field = HikariPool::class.java.getDeclaredField("connectionBag")
|
val connectionBagField: Field = HikariPool::class.java.getDeclaredField("connectionBag")
|
||||||
connectionBagField.isAccessible = true
|
connectionBagField.isAccessible = true
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
val connectionBag: ConcurrentBag<ConcurrentBag.IConcurrentBagEntry> = connectionBagField.get(pool) as ConcurrentBag<ConcurrentBag.IConcurrentBagEntry>
|
val connectionBag: ConcurrentBag<ConcurrentBag.IConcurrentBagEntry> = connectionBagField.get(pool) as ConcurrentBag<ConcurrentBag.IConcurrentBagEntry>
|
||||||
val threadListField: Field = ConcurrentBag::class.java.getDeclaredField("threadList")
|
val threadListField: Field = ConcurrentBag::class.java.getDeclaredField("threadList")
|
||||||
threadListField.isAccessible = true
|
threadListField.isAccessible = true
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
val threadList: ThreadLocal<List<Object>> = threadListField.get(connectionBag) as ThreadLocal<List<Object>>
|
val threadList: ThreadLocal<List<Object>> = threadListField.get(connectionBag) as ThreadLocal<List<Object>>
|
||||||
threadList
|
threadList
|
||||||
}
|
}
|
||||||
|
@ -132,6 +132,7 @@ class HibernateConfiguration(
|
|||||||
ClassLoaderServiceImpl(customClassLoader))
|
ClassLoaderServiceImpl(customClassLoader))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
val metadataBuilder = metadataSources.getMetadataBuilder(config.standardServiceRegistryBuilder.build())
|
val metadataBuilder = metadataSources.getMetadataBuilder(config.standardServiceRegistryBuilder.build())
|
||||||
val metadata = buildHibernateMetadata(metadataBuilder, jdbcUrl, attributeConverters)
|
val metadata = buildHibernateMetadata(metadataBuilder, jdbcUrl, attributeConverters)
|
||||||
return metadata.sessionFactoryBuilder.run {
|
return metadata.sessionFactoryBuilder.run {
|
||||||
|
@ -118,6 +118,7 @@ class DelegatingStatisticsService(private val delegate: Statistics) : Statistics
|
|||||||
return delegate.naturalIdCachePutCount
|
return delegate.naturalIdCachePutCount
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
override fun getNaturalIdCacheStatistics(arg0: String): NaturalIdCacheStatistics {
|
override fun getNaturalIdCacheStatistics(arg0: String): NaturalIdCacheStatistics {
|
||||||
return delegate.getNaturalIdCacheStatistics(arg0)
|
return delegate.getNaturalIdCacheStatistics(arg0)
|
||||||
}
|
}
|
||||||
@ -190,6 +191,7 @@ class DelegatingStatisticsService(private val delegate: Statistics) : Statistics
|
|||||||
return delegate.secondLevelCacheRegionNames
|
return delegate.secondLevelCacheRegionNames
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
override fun getSecondLevelCacheStatistics(arg0: String): SecondLevelCacheStatistics {
|
override fun getSecondLevelCacheStatistics(arg0: String): SecondLevelCacheStatistics {
|
||||||
return delegate.getSecondLevelCacheStatistics(arg0)
|
return delegate.getSecondLevelCacheStatistics(arg0)
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package net.corda.contracts
|
package net.corda.contracts
|
||||||
|
|
||||||
import junit.framework.Assert.assertNotNull
|
|
||||||
import net.corda.client.rpc.CordaRPCClient
|
import net.corda.client.rpc.CordaRPCClient
|
||||||
import net.corda.core.contracts.HashAttachmentConstraint
|
import net.corda.core.contracts.HashAttachmentConstraint
|
||||||
import net.corda.core.contracts.SignatureAttachmentConstraint
|
import net.corda.core.contracts.SignatureAttachmentConstraint
|
||||||
@ -17,6 +16,7 @@ import net.corda.testing.node.internal.internalDriver
|
|||||||
import org.junit.Assume.assumeFalse
|
import org.junit.Assume.assumeFalse
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
|
import kotlin.test.assertNotNull
|
||||||
import kotlin.test.assertTrue
|
import kotlin.test.assertTrue
|
||||||
|
|
||||||
open class SignatureConstraintMigrationFromHashConstraintsTests : SignatureConstraintVersioningTests() {
|
open class SignatureConstraintMigrationFromHashConstraintsTests : SignatureConstraintVersioningTests() {
|
||||||
|
@ -297,7 +297,6 @@ class RetryFlow() : FlowLogic<String>(), IdempotentFlow {
|
|||||||
override fun call(): String {
|
override fun call(): String {
|
||||||
progressTracker.currentStep = FIRST_STEP
|
progressTracker.currentStep = FIRST_STEP
|
||||||
throw ExceptionToCauseFiniteRetry()
|
throw ExceptionToCauseFiniteRetry()
|
||||||
return "Result"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ abstract class MutableClock(private var _delegateClock: Clock) : CordaClock() {
|
|||||||
}
|
}
|
||||||
private val _version = AtomicLong(0L)
|
private val _version = AtomicLong(0L)
|
||||||
override val mutations: Observable<Long> by lazy {
|
override val mutations: Observable<Long> by lazy {
|
||||||
Observable.create { subscriber: Subscriber<in Long> ->
|
Observable.unsafeCreate { subscriber: Subscriber<in Long> ->
|
||||||
if (!subscriber.isUnsubscribed) {
|
if (!subscriber.isUnsubscribed) {
|
||||||
mutationObservers.add(subscriber)
|
mutationObservers.add(subscriber)
|
||||||
// This is not very intuitive, but subscribing to a subscriber observes unsubscribes.
|
// This is not very intuitive, but subscribing to a subscriber observes unsubscribes.
|
||||||
|
@ -96,6 +96,7 @@ class InitialRegistrationCmdLineOptions : SharedNodeCmdLineOptions() {
|
|||||||
require(!config.devMode || config.devModeOptions?.allowCompatibilityZone == true) {
|
require(!config.devMode || config.devModeOptions?.allowCompatibilityZone == true) {
|
||||||
"Cannot perform initial registration when 'devMode' is true, unless 'devModeOptions.allowCompatibilityZone' is also true."
|
"Cannot perform initial registration when 'devMode' is true, unless 'devModeOptions.allowCompatibilityZone' is also true."
|
||||||
}
|
}
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
require(config.compatibilityZoneURL != null || config.networkServices != null) {
|
require(config.compatibilityZoneURL != null || config.networkServices != null) {
|
||||||
"compatibilityZoneURL or networkServices must be present in the node configuration file in registration mode."
|
"compatibilityZoneURL or networkServices must be present in the node configuration file in registration mode."
|
||||||
}
|
}
|
||||||
@ -167,6 +168,7 @@ open class NodeCmdLineOptions : SharedNodeCmdLineOptions() {
|
|||||||
override fun parseConfiguration(configuration: Config): Valid<NodeConfiguration> {
|
override fun parseConfiguration(configuration: Config): Valid<NodeConfiguration> {
|
||||||
return super.parseConfiguration(configuration).doIfValid { config ->
|
return super.parseConfiguration(configuration).doIfValid { config ->
|
||||||
if (isRegistration) {
|
if (isRegistration) {
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
require(config.compatibilityZoneURL != null || config.networkServices != null) {
|
require(config.compatibilityZoneURL != null || config.networkServices != null) {
|
||||||
"compatibilityZoneURL or networkServices must be present in the node configuration file in registration mode."
|
"compatibilityZoneURL or networkServices must be present in the node configuration file in registration mode."
|
||||||
}
|
}
|
||||||
|
@ -88,7 +88,6 @@ import net.corda.nodeapi.internal.cryptoservice.bouncycastle.BCCryptoService
|
|||||||
import net.corda.nodeapi.internal.persistence.*
|
import net.corda.nodeapi.internal.persistence.*
|
||||||
import net.corda.tools.shell.InteractiveShell
|
import net.corda.tools.shell.InteractiveShell
|
||||||
import org.apache.activemq.artemis.utils.ReusableLatch
|
import org.apache.activemq.artemis.utils.ReusableLatch
|
||||||
import org.hibernate.type.descriptor.java.JavaTypeDescriptorRegistry
|
|
||||||
import org.slf4j.Logger
|
import org.slf4j.Logger
|
||||||
import rx.Observable
|
import rx.Observable
|
||||||
import rx.Scheduler
|
import rx.Scheduler
|
||||||
@ -1140,7 +1139,8 @@ fun createCordaPersistence(databaseConfig: DatabaseConfig,
|
|||||||
// Hibernate warns about not being able to find a descriptor if we don't provide one, but won't use it by default
|
// Hibernate warns about not being able to find a descriptor if we don't provide one, but won't use it by default
|
||||||
// so we end up providing both descriptor and converter. We should re-examine this in later versions to see if
|
// so we end up providing both descriptor and converter. We should re-examine this in later versions to see if
|
||||||
// either Hibernate can be convinced to stop warning, use the descriptor by default, or something else.
|
// either Hibernate can be convinced to stop warning, use the descriptor by default, or something else.
|
||||||
JavaTypeDescriptorRegistry.INSTANCE.addDescriptor(AbstractPartyDescriptor(wellKnownPartyFromX500Name, wellKnownPartyFromAnonymous))
|
@Suppress("DEPRECATION")
|
||||||
|
org.hibernate.type.descriptor.java.JavaTypeDescriptorRegistry.INSTANCE.addDescriptor(AbstractPartyDescriptor(wellKnownPartyFromX500Name, wellKnownPartyFromAnonymous))
|
||||||
val attributeConverters = listOf(PublicKeyToTextConverter(), AbstractPartyToX500NameAsStringConverter(wellKnownPartyFromX500Name, wellKnownPartyFromAnonymous))
|
val attributeConverters = listOf(PublicKeyToTextConverter(), AbstractPartyToX500NameAsStringConverter(wellKnownPartyFromX500Name, wellKnownPartyFromAnonymous))
|
||||||
val jdbcUrl = hikariProperties.getProperty("dataSource.url", "")
|
val jdbcUrl = hikariProperties.getProperty("dataSource.url", "")
|
||||||
return CordaPersistence(databaseConfig, schemaService.schemaOptions.keys, jdbcUrl, cacheFactory, attributeConverters, customClassLoader)
|
return CordaPersistence(databaseConfig, schemaService.schemaOptions.keys, jdbcUrl, cacheFactory, attributeConverters, customClassLoader)
|
||||||
|
@ -339,7 +339,7 @@ internal class CordaRPCOpsImpl(
|
|||||||
if (drainPendingFlows) {
|
if (drainPendingFlows) {
|
||||||
logger.info("Waiting for pending flows to complete before shutting down.")
|
logger.info("Waiting for pending flows to complete before shutting down.")
|
||||||
setFlowsDrainingModeEnabled(true)
|
setFlowsDrainingModeEnabled(true)
|
||||||
val subscription = pendingFlowsCount()
|
val subscription = @Suppress("DEPRECATION") pendingFlowsCount()
|
||||||
.updates
|
.updates
|
||||||
.doOnNext { (completed, total) -> logger.info("Pending flows progress before shutdown: $completed / $total.") }
|
.doOnNext { (completed, total) -> logger.info("Pending flows progress before shutdown: $completed / $total.") }
|
||||||
.doOnCompleted { setPersistentDrainingModeProperty(enabled = false, propagateChange = false) }
|
.doOnCompleted { setPersistentDrainingModeProperty(enabled = false, propagateChange = false) }
|
||||||
|
@ -556,7 +556,7 @@ open class Node(configuration: NodeConfiguration,
|
|||||||
log.info("Shutdown complete")
|
log.info("Shutdown complete")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <T : FlowLogic<*>> registerInitiatedFlow(smm: StateMachineManager, initiatedFlowClass: Class<T>) {
|
fun <T : FlowLogic<*>> registerInitiatedFlow(@Suppress("UNUSED_PARAMETER") smm: StateMachineManager, initiatedFlowClass: Class<T>) {
|
||||||
this.flowManager.registerInitiatedFlow(initiatedFlowClass)
|
this.flowManager.registerInitiatedFlow(initiatedFlowClass)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -484,7 +484,7 @@ fun CliWrapperBase.initLogging(baseDirectory: Path): Boolean {
|
|||||||
//Test for access to the logging path and shutdown if we are unable to reach it.
|
//Test for access to the logging path and shutdown if we are unable to reach it.
|
||||||
val logPath = baseDirectory / NodeCliCommand.LOGS_DIRECTORY_NAME
|
val logPath = baseDirectory / NodeCliCommand.LOGS_DIRECTORY_NAME
|
||||||
try {
|
try {
|
||||||
logPath.safeSymbolicRead()?.createDirectories()
|
logPath.safeSymbolicRead().createDirectories()
|
||||||
} catch (e: IOException) {
|
} catch (e: IOException) {
|
||||||
printError("Unable to create logging directory ${logPath.toString()}. Node will now shutdown.")
|
printError("Unable to create logging directory ${logPath.toString()}. Node will now shutdown.")
|
||||||
return false
|
return false
|
||||||
|
@ -158,6 +158,7 @@ data class NodeConfigurationImpl(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Support the deprecated method of configuring network services with a single compatibilityZoneURL option
|
// Support the deprecated method of configuring network services with a single compatibilityZoneURL option
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
if (compatibilityZoneURL != null && networkServices == null) {
|
if (compatibilityZoneURL != null && networkServices == null) {
|
||||||
networkServices = NetworkServicesConfig(compatibilityZoneURL, compatibilityZoneURL, inferred = true)
|
networkServices = NetworkServicesConfig(compatibilityZoneURL, compatibilityZoneURL, inferred = true)
|
||||||
}
|
}
|
||||||
@ -244,6 +245,7 @@ data class NodeConfigurationImpl(
|
|||||||
|
|
||||||
private fun validateDevModeOptions(): List<String> {
|
private fun validateDevModeOptions(): List<String> {
|
||||||
if (devMode) {
|
if (devMode) {
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
compatibilityZoneURL?.let {
|
compatibilityZoneURL?.let {
|
||||||
if (devModeOptions?.allowCompatibilityZone != true) {
|
if (devModeOptions?.allowCompatibilityZone != true) {
|
||||||
return listOf("cannot specify 'compatibilityZoneURL' when 'devMode' is true, unless 'devModeOptions.allowCompatibilityZone' is also true")
|
return listOf("cannot specify 'compatibilityZoneURL' when 'devMode' is true, unless 'devModeOptions.allowCompatibilityZone' is also true")
|
||||||
@ -264,6 +266,7 @@ data class NodeConfigurationImpl(
|
|||||||
private fun validateNetworkServices(): List<String> {
|
private fun validateNetworkServices(): List<String> {
|
||||||
val errors = mutableListOf<String>()
|
val errors = mutableListOf<String>()
|
||||||
|
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
if (compatibilityZoneURL != null && networkServices != null && !(networkServices!!.inferred)) {
|
if (compatibilityZoneURL != null && networkServices != null && !(networkServices!!.inferred)) {
|
||||||
errors += "cannot specify both 'compatibilityZoneUrl' and 'networkServices'"
|
errors += "cannot specify both 'compatibilityZoneUrl' and 'networkServices'"
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,10 @@ package net.corda.node.services.identity
|
|||||||
|
|
||||||
import net.corda.core.crypto.toStringShort
|
import net.corda.core.crypto.toStringShort
|
||||||
import net.corda.core.identity.*
|
import net.corda.core.identity.*
|
||||||
import net.corda.core.internal.*
|
import net.corda.core.internal.CertRole
|
||||||
|
import net.corda.core.internal.NamedCacheFactory
|
||||||
|
import net.corda.core.internal.hash
|
||||||
|
import net.corda.core.internal.toSet
|
||||||
import net.corda.core.node.services.IdentityService
|
import net.corda.core.node.services.IdentityService
|
||||||
import net.corda.core.node.services.UnknownAnonymousPartyException
|
import net.corda.core.node.services.UnknownAnonymousPartyException
|
||||||
import net.corda.core.serialization.SingletonSerializeAsToken
|
import net.corda.core.serialization.SingletonSerializeAsToken
|
||||||
@ -286,7 +289,7 @@ class PersistentIdentityService(cacheFactory: NamedCacheFactory) : SingletonSeri
|
|||||||
// Allows us to eliminate keys we know belong to others by using the cache contents that might have been seen during other identity activity.
|
// Allows us to eliminate keys we know belong to others by using the cache contents that might have been seen during other identity activity.
|
||||||
// Concentrating activity on the identity cache works better than spreading checking across identity and key management, because we cache misses too.
|
// Concentrating activity on the identity cache works better than spreading checking across identity and key management, because we cache misses too.
|
||||||
fun stripNotOurKeys(keys: Iterable<PublicKey>): Iterable<PublicKey> {
|
fun stripNotOurKeys(keys: Iterable<PublicKey>): Iterable<PublicKey> {
|
||||||
return keys.filter { certificateFromKey(it)?.name in ourNames }
|
return keys.filter { (@Suppress("DEPRECATION") certificateFromKey(it))?.name in ourNames }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun registerKeyToParty(key: PublicKey, party: Party) {
|
override fun registerKeyToParty(key: PublicKey, party: Party) {
|
||||||
|
@ -12,10 +12,10 @@ private fun <V> Fiber<V>.swappedOutThreadLocals(): Any = fiberThreadLocalsField.
|
|||||||
private val threadLocalInitialValueMethod: Method = ThreadLocal::class.java.getDeclaredMethod("initialValue")
|
private val threadLocalInitialValueMethod: Method = ThreadLocal::class.java.getDeclaredMethod("initialValue")
|
||||||
.apply { this.isAccessible = true }
|
.apply { this.isAccessible = true }
|
||||||
|
|
||||||
private fun <T> ThreadLocal<T>.initialValue(): T? = threadLocalInitialValueMethod.invoke(this) as T?
|
private fun <T> ThreadLocal<T>.initialValue(): T? = @Suppress("UNCHECKED_CAST") (threadLocalInitialValueMethod.invoke(this) as T?)
|
||||||
|
|
||||||
// TODO: This method uses a built-in Quasar function to make a map of all ThreadLocals. This is probably inefficient, but the only API readily available.
|
// TODO: This method uses a built-in Quasar function to make a map of all ThreadLocals. This is probably inefficient, but the only API readily available.
|
||||||
fun <V, T> Fiber<V>.swappedOutThreadLocalValue(threadLocal: ThreadLocal<T>): T? {
|
fun <V, T> Fiber<V>.swappedOutThreadLocalValue(threadLocal: ThreadLocal<T>): T? {
|
||||||
val threadLocals = swappedOutThreadLocals()
|
val threadLocals = swappedOutThreadLocals()
|
||||||
return (ThreadAccess.toMap(threadLocals)[threadLocal] as T?) ?: threadLocal.initialValue()
|
return (@Suppress("UNCHECKED_CAST") (ThreadAccess.toMap(threadLocals)[threadLocal] as T?)) ?: threadLocal.initialValue()
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ import net.corda.core.serialization.SingletonSerializeAsToken
|
|||||||
import net.corda.core.transactions.LedgerTransaction
|
import net.corda.core.transactions.LedgerTransaction
|
||||||
import net.corda.nodeapi.internal.persistence.withoutDatabaseAccess
|
import net.corda.nodeapi.internal.persistence.withoutDatabaseAccess
|
||||||
|
|
||||||
class InMemoryTransactionVerifierService(numberOfWorkers: Int) : SingletonSerializeAsToken(), TransactionVerifierService, TransactionVerifierServiceInternal, AutoCloseable {
|
class InMemoryTransactionVerifierService(@Suppress("UNUSED_PARAMETER") numberOfWorkers: Int) : SingletonSerializeAsToken(), TransactionVerifierService, TransactionVerifierServiceInternal, AutoCloseable {
|
||||||
override fun verify(transaction: LedgerTransaction): CordaFuture<Unit> = this.verify(transaction, emptyList())
|
override fun verify(transaction: LedgerTransaction): CordaFuture<Unit> = this.verify(transaction, emptyList())
|
||||||
|
|
||||||
override fun verify(transaction: LedgerTransaction, extraAttachments: List<Attachment>): CordaFuture<Unit> {
|
override fun verify(transaction: LedgerTransaction, extraAttachments: List<Attachment>): CordaFuture<Unit> {
|
||||||
|
@ -164,7 +164,7 @@ class NodeVaultService(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun recordUpdate(update: Vault.Update<ContractState>, previouslySeen: Boolean): Vault.Update<ContractState> {
|
private fun recordUpdate(update: Vault.Update<ContractState>): Vault.Update<ContractState> {
|
||||||
if (!update.isEmpty()) {
|
if (!update.isEmpty()) {
|
||||||
val producedStateRefs = update.produced.map { it.ref }
|
val producedStateRefs = update.produced.map { it.ref }
|
||||||
val producedStateRefsMap = update.produced.associateBy { it.ref }
|
val producedStateRefsMap = update.produced.associateBy { it.ref }
|
||||||
@ -220,7 +220,7 @@ class NodeVaultService(
|
|||||||
|
|
||||||
fun flushBatch(previouslySeen: Boolean) {
|
fun flushBatch(previouslySeen: Boolean) {
|
||||||
val updates = makeUpdates(batch, statesToRecord, previouslySeen)
|
val updates = makeUpdates(batch, statesToRecord, previouslySeen)
|
||||||
processAndNotify(updates, previouslySeen)
|
processAndNotify(updates)
|
||||||
batch.clear()
|
batch.clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -369,11 +369,11 @@ class NodeVaultService(
|
|||||||
return states
|
return states
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processAndNotify(updates: List<Vault.Update<ContractState>>, previouslySeen: Boolean) {
|
private fun processAndNotify(updates: List<Vault.Update<ContractState>>) {
|
||||||
if (updates.isEmpty()) return
|
if (updates.isEmpty()) return
|
||||||
val netUpdate = updates.reduce { update1, update2 -> update1 + update2 }
|
val netUpdate = updates.reduce { update1, update2 -> update1 + update2 }
|
||||||
if (!netUpdate.isEmpty()) {
|
if (!netUpdate.isEmpty()) {
|
||||||
recordUpdate(netUpdate, previouslySeen)
|
recordUpdate(netUpdate)
|
||||||
mutex.locked {
|
mutex.locked {
|
||||||
// flowId was required by SoftLockManager to perform auto-registration of soft locks for new states
|
// flowId was required by SoftLockManager to perform auto-registration of soft locks for new states
|
||||||
val uuid = (Strand.currentStrand() as? FlowStateMachineImpl<*>)?.id?.uuid
|
val uuid = (Strand.currentStrand() as? FlowStateMachineImpl<*>)?.id?.uuid
|
||||||
|
@ -38,7 +38,7 @@ class InfrequentlyMutatedCache<K : Any, V : Any>(name: String, cacheFactory: Nam
|
|||||||
* @param key The key to retrieve.
|
* @param key The key to retrieve.
|
||||||
*/
|
*/
|
||||||
fun getIfPresent(key: K): V? {
|
fun getIfPresent(key: K): V? {
|
||||||
val wrapper = backingCache.get(key) { k: K ->
|
val wrapper = backingCache.get(key) {
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
return when (wrapper) {
|
return when (wrapper) {
|
||||||
@ -89,9 +89,9 @@ class InfrequentlyMutatedCache<K : Any, V : Any>(name: String, cacheFactory: Nam
|
|||||||
private fun decrementInvalidators(key: K, value: Wrapper.Invalidated<V>) {
|
private fun decrementInvalidators(key: K, value: Wrapper.Invalidated<V>) {
|
||||||
if(value.invalidators.decrementAndGet() == 0) {
|
if(value.invalidators.decrementAndGet() == 0) {
|
||||||
// Maybe we can replace the invalidated value with nothing, so it gets loaded next time.
|
// Maybe we can replace the invalidated value with nothing, so it gets loaded next time.
|
||||||
backingCache.asMap().compute(key) { key: K, currentValue: Wrapper<V>? ->
|
backingCache.asMap().compute(key) { computeKey: K, currentValue: Wrapper<V>? ->
|
||||||
if(currentValue === value && value.invalidators.get() == 0) {
|
if(currentValue === value && value.invalidators.get() == 0) {
|
||||||
currentlyInvalid.remove(key)
|
currentlyInvalid.remove(computeKey)
|
||||||
null
|
null
|
||||||
} else currentValue
|
} else currentValue
|
||||||
}
|
}
|
||||||
|
@ -62,7 +62,10 @@ class BFTSmartNotaryService(
|
|||||||
|
|
||||||
private val cluster: BFTSmart.Cluster = makeBFTCluster(notaryIdentityKey, bftSMaRtConfig)
|
private val cluster: BFTSmart.Cluster = makeBFTCluster(notaryIdentityKey, bftSMaRtConfig)
|
||||||
|
|
||||||
protected open fun makeBFTCluster(notaryKey: PublicKey, bftSMaRtConfig: BFTSmartConfig): BFTSmart.Cluster {
|
private fun makeBFTCluster(
|
||||||
|
@Suppress("UNUSED_PARAMETER") notaryKey: PublicKey,
|
||||||
|
@Suppress("UNUSED_PARAMETER") bftSMaRtConfig: BFTSmartConfig
|
||||||
|
): BFTSmart.Cluster {
|
||||||
return object : BFTSmart.Cluster {
|
return object : BFTSmart.Cluster {
|
||||||
override fun waitUntilAllReplicasHaveInitialized() {
|
override fun waitUntilAllReplicasHaveInitialized() {
|
||||||
log.warn("A BFT replica may still be initializing, in which case the upcoming consensus change may cause it to spin.")
|
log.warn("A BFT replica may still be initializing, in which case the upcoming consensus change may cause it to spin.")
|
||||||
@ -180,6 +183,7 @@ class BFTSmartNotaryService(
|
|||||||
val references = transaction.references
|
val references = transaction.references
|
||||||
val notary = transaction.notary
|
val notary = transaction.notary
|
||||||
val timeWindow = (transaction as? FilteredTransaction)?.timeWindow
|
val timeWindow = (transaction as? FilteredTransaction)?.timeWindow
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
if (notary !in services.myInfo.legalIdentities) throw NotaryInternalException(NotaryError.WrongNotary)
|
if (notary !in services.myInfo.legalIdentities) throw NotaryInternalException(NotaryError.WrongNotary)
|
||||||
commitInputStates(inputs, id, callerIdentity.name, requestSignature, timeWindow, references)
|
commitInputStates(inputs, id, callerIdentity.name, requestSignature, timeWindow, references)
|
||||||
log.debug { "Inputs committed successfully, signing $id" }
|
log.debug { "Inputs committed successfully, signing $id" }
|
||||||
|
@ -567,7 +567,7 @@ public class VaultQueryJavaTests {
|
|||||||
private Pair<Path, SecureHash> makeTestJar(Path path) throws IOException {
|
private Pair<Path, SecureHash> makeTestJar(Path path) throws IOException {
|
||||||
Path file = Paths.get(path.toAbsolutePath().toString(), "$counter.jar");
|
Path file = Paths.get(path.toAbsolutePath().toString(), "$counter.jar");
|
||||||
ContractJarTestUtils.INSTANCE.makeTestJar(Files.newOutputStream(file));
|
ContractJarTestUtils.INSTANCE.makeTestJar(Files.newOutputStream(file));
|
||||||
return new Pair(file, SecureHash.sha256(Files.readAllBytes(file)));
|
return new Pair<>(file, SecureHash.sha256(Files.readAllBytes(file)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -25,7 +25,7 @@ class ThreadContextAdjustingRpcOpsProxyTest {
|
|||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
val result = proxy.killFlow(StateMachineRunId.createRandom())
|
proxy.killFlow(StateMachineRunId.createRandom())
|
||||||
assertThat(Thread.currentThread().contextClassLoader).isNotEqualTo(mockClassloader)
|
assertThat(Thread.currentThread().contextClassLoader).isNotEqualTo(mockClassloader)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -84,7 +84,7 @@ class RoundTripObservableSerializerTests {
|
|||||||
|
|
||||||
|
|
||||||
// What we're actually going to serialize then deserialize
|
// What we're actually going to serialize then deserialize
|
||||||
val obs = Observable.create<Int> { Math.random() }
|
val obs = Observable.unsafeCreate<Int> { Math.random() }
|
||||||
|
|
||||||
val serverSerializationContext = RpcServerObservableSerializer.createContext(
|
val serverSerializationContext = RpcServerObservableSerializer.createContext(
|
||||||
serializationContext, serverObservableContext)
|
serializationContext, serverObservableContext)
|
||||||
|
@ -71,7 +71,7 @@ class RpcServerObservableSerializerTests {
|
|||||||
register(RpcServerObservableSerializer())
|
register(RpcServerObservableSerializer())
|
||||||
}
|
}
|
||||||
|
|
||||||
val obs = Observable.create<Int> { Math.random() }
|
val obs = Observable.unsafeCreate<Int> { Math.random() }
|
||||||
val newContext = RpcServerObservableSerializer.createContext(serializationContext, observable)
|
val newContext = RpcServerObservableSerializer.createContext(serializationContext, observable)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -125,12 +125,12 @@ class InMemoryIdentityServiceTests {
|
|||||||
val service = createService(alice)
|
val service = createService(alice)
|
||||||
service.verifyAndRegisterIdentity(aliceTxIdentity)
|
service.verifyAndRegisterIdentity(aliceTxIdentity)
|
||||||
|
|
||||||
var actual = service.certificateFromKey(aliceTxIdentity.party.owningKey)
|
var actual = @Suppress("DEPRECATION") service.certificateFromKey(aliceTxIdentity.party.owningKey)
|
||||||
assertEquals(aliceTxIdentity, actual!!)
|
assertEquals(aliceTxIdentity, actual!!)
|
||||||
|
|
||||||
assertNull(service.certificateFromKey(bobTxIdentity.party.owningKey))
|
assertNull(@Suppress("DEPRECATION") service.certificateFromKey(bobTxIdentity.party.owningKey))
|
||||||
service.verifyAndRegisterIdentity(bobTxIdentity)
|
service.verifyAndRegisterIdentity(bobTxIdentity)
|
||||||
actual = service.certificateFromKey(bobTxIdentity.party.owningKey)
|
actual = @Suppress("DEPRECATION") service.certificateFromKey(bobTxIdentity.party.owningKey)
|
||||||
assertEquals(bobTxIdentity, actual!!)
|
assertEquals(bobTxIdentity, actual!!)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -169,12 +169,12 @@ class PersistentIdentityServiceTests {
|
|||||||
identityService.verifyAndRegisterIdentity(alice)
|
identityService.verifyAndRegisterIdentity(alice)
|
||||||
identityService.verifyAndRegisterIdentity(aliceTxIdentity)
|
identityService.verifyAndRegisterIdentity(aliceTxIdentity)
|
||||||
|
|
||||||
var actual = identityService.certificateFromKey(aliceTxIdentity.party.owningKey)
|
var actual = @Suppress("DEPRECATION") identityService.certificateFromKey(aliceTxIdentity.party.owningKey)
|
||||||
assertEquals(aliceTxIdentity, actual!!)
|
assertEquals(aliceTxIdentity, actual!!)
|
||||||
|
|
||||||
assertNull(identityService.certificateFromKey(bobTxIdentity.party.owningKey))
|
assertNull(@Suppress("DEPRECATION") identityService.certificateFromKey(bobTxIdentity.party.owningKey))
|
||||||
identityService.verifyAndRegisterIdentity(bobTxIdentity)
|
identityService.verifyAndRegisterIdentity(bobTxIdentity)
|
||||||
actual = identityService.certificateFromKey(bobTxIdentity.party.owningKey)
|
actual = @Suppress("DEPRECATION") identityService.certificateFromKey(bobTxIdentity.party.owningKey)
|
||||||
assertEquals(bobTxIdentity, actual!!)
|
assertEquals(bobTxIdentity, actual!!)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -233,13 +233,13 @@ class PersistentIdentityServiceTests {
|
|||||||
|
|
||||||
assertEquals(alice.party, aliceParent!!)
|
assertEquals(alice.party, aliceParent!!)
|
||||||
|
|
||||||
val bobReload = newPersistentIdentityService.certificateFromKey(anonymousBob.party.owningKey)
|
val bobReload = @Suppress("DEPRECATION") newPersistentIdentityService.certificateFromKey(anonymousBob.party.owningKey)
|
||||||
assertEquals(anonymousBob, bobReload!!)
|
assertEquals(anonymousBob, bobReload!!)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `ensure no exception when looking up an unregistered confidential identity`() {
|
fun `ensure no exception when looking up an unregistered confidential identity`() {
|
||||||
val (alice, anonymousAlice) = createConfidentialIdentity(ALICE.name)
|
val (_, anonymousAlice) = createConfidentialIdentity(ALICE.name)
|
||||||
|
|
||||||
// Ensure no exceptions are thrown if we attempt to look up an unregistered CI
|
// Ensure no exceptions are thrown if we attempt to look up an unregistered CI
|
||||||
assertNull(identityService.wellKnownPartyFromAnonymous(AnonymousParty(anonymousAlice.owningKey)))
|
assertNull(identityService.wellKnownPartyFromAnonymous(AnonymousParty(anonymousAlice.owningKey)))
|
||||||
|
@ -110,10 +110,10 @@ class NetworkMapUpdaterTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `process add node updates from network map, with additional node infos from dir`() {
|
fun `process add node updates from network map, with additional node infos from dir`() {
|
||||||
setUpdater()
|
setUpdater()
|
||||||
val (nodeInfo1, signedNodeInfo1) = createNodeInfoAndSigned("Info 1")
|
val (_, signedNodeInfo1) = createNodeInfoAndSigned("Info 1")
|
||||||
val (nodeInfo2, signedNodeInfo2) = createNodeInfoAndSigned("Info 2")
|
val (_, signedNodeInfo2) = createNodeInfoAndSigned("Info 2")
|
||||||
val (nodeInfo3, signedNodeInfo3) = createNodeInfoAndSigned("Info 3")
|
val (_, signedNodeInfo3) = createNodeInfoAndSigned("Info 3")
|
||||||
val (nodeInfo4, signedNodeInfo4) = createNodeInfoAndSigned("Info 4")
|
val (_, signedNodeInfo4) = createNodeInfoAndSigned("Info 4")
|
||||||
val fileNodeInfoAndSigned = createNodeInfoAndSigned("Info from file")
|
val fileNodeInfoAndSigned = createNodeInfoAndSigned("Info from file")
|
||||||
|
|
||||||
//Test adding new node.
|
//Test adding new node.
|
||||||
@ -468,6 +468,7 @@ class NetworkMapUpdaterTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
on { addNodes(any<List<NodeInfo>>()) }.then {
|
on { addNodes(any<List<NodeInfo>>()) }.then {
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
val nodeInfos = it.arguments[0] as List<NodeInfo>
|
val nodeInfos = it.arguments[0] as List<NodeInfo>
|
||||||
nodeInfos.forEach { nodeInfo ->
|
nodeInfos.forEach { nodeInfo ->
|
||||||
addNodeToMockCache(nodeInfo, data)
|
addNodeToMockCache(nodeInfo, data)
|
||||||
|
@ -15,11 +15,7 @@ import net.corda.finance.contracts.FixOf
|
|||||||
import net.corda.finance.contracts.asset.CASH
|
import net.corda.finance.contracts.asset.CASH
|
||||||
import net.corda.finance.contracts.asset.Cash
|
import net.corda.finance.contracts.asset.Cash
|
||||||
import net.corda.irs.flows.RatesFixFlow
|
import net.corda.irs.flows.RatesFixFlow
|
||||||
import net.corda.testing.core.ALICE_NAME
|
import net.corda.testing.core.*
|
||||||
import net.corda.testing.core.BOB_NAME
|
|
||||||
import net.corda.testing.core.DUMMY_NOTARY_NAME
|
|
||||||
import net.corda.testing.core.TestIdentity
|
|
||||||
import net.corda.testing.core.singleIdentity
|
|
||||||
import net.corda.testing.internal.LogHelper
|
import net.corda.testing.internal.LogHelper
|
||||||
import net.corda.testing.node.MockNetwork
|
import net.corda.testing.node.MockNetwork
|
||||||
import net.corda.testing.node.MockNodeParameters
|
import net.corda.testing.node.MockNodeParameters
|
||||||
@ -53,7 +49,7 @@ class OracleNodeTearOffTests {
|
|||||||
@Before
|
@Before
|
||||||
// DOCSTART 1
|
// DOCSTART 1
|
||||||
fun setUp() {
|
fun setUp() {
|
||||||
mockNet = MockNetwork(cordappPackages = listOf("net.corda.finance.contracts", "net.corda.irs"))
|
mockNet = @Suppress("DEPRECATION") MockNetwork(cordappPackages = listOf("net.corda.finance.contracts", "net.corda.irs"))
|
||||||
aliceNode = mockNet.createPartyNode(ALICE_NAME)
|
aliceNode = mockNet.createPartyNode(ALICE_NAME)
|
||||||
oracleNode = mockNet.createNode(MockNodeParameters(legalName = BOB_NAME)).apply {
|
oracleNode = mockNet.createNode(MockNodeParameters(legalName = BOB_NAME)).apply {
|
||||||
transaction {
|
transaction {
|
||||||
|
@ -78,7 +78,7 @@ class CorDappCustomSerializer(
|
|||||||
|
|
||||||
data.withDescribed(descriptor) {
|
data.withDescribed(descriptor) {
|
||||||
data.withList {
|
data.withList {
|
||||||
(proxySerializer as ObjectSerializer).propertySerializers.forEach { (_, serializer) ->
|
proxySerializer.propertySerializers.forEach { (_, serializer) ->
|
||||||
serializer.writeProperty(proxy, this, output, context, debugIndent)
|
serializer.writeProperty(proxy, this, output, context, debugIndent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -123,7 +123,13 @@ class ComposableObjectWriter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun writeObject(obj: Any, data: Data, type: Type, output: SerializationOutput, context: SerializationContext, debugIndent: Int) {
|
fun writeObject(
|
||||||
|
obj: Any, data: Data,
|
||||||
|
@Suppress("UNUSED_PARAMETER") type: Type,
|
||||||
|
output: SerializationOutput,
|
||||||
|
context: SerializationContext,
|
||||||
|
debugIndent: Int
|
||||||
|
) {
|
||||||
data.withDescribed(typeNotation.descriptor) {
|
data.withDescribed(typeNotation.descriptor) {
|
||||||
withList {
|
withList {
|
||||||
propertySerializers.values.forEach { propertySerializer ->
|
propertySerializers.values.forEach { propertySerializer ->
|
||||||
|
@ -48,8 +48,8 @@ class CarpentryDependencyGraph private constructor(private val typesRequiringCar
|
|||||||
private fun RemoteTypeInformation.dependsOn(dependees: Collection<RemoteTypeInformation>) {
|
private fun RemoteTypeInformation.dependsOn(dependees: Collection<RemoteTypeInformation>) {
|
||||||
val dependeesInTypesRequiringCarpentry = dependees.filter { it in typesRequiringCarpentry }
|
val dependeesInTypesRequiringCarpentry = dependees.filter { it in typesRequiringCarpentry }
|
||||||
if (dependeesInTypesRequiringCarpentry.isEmpty()) return // we don't want to put empty sets into the map.
|
if (dependeesInTypesRequiringCarpentry.isEmpty()) return // we don't want to put empty sets into the map.
|
||||||
dependencies.compute(this) { _, dependees ->
|
dependencies.compute(this) { _, dependeesInner ->
|
||||||
dependees?.apply { addAll(dependeesInTypesRequiringCarpentry) } ?:
|
dependeesInner?.apply { addAll(dependeesInTypesRequiringCarpentry) } ?:
|
||||||
dependeesInTypesRequiringCarpentry.toMutableSet()
|
dependeesInTypesRequiringCarpentry.toMutableSet()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,7 @@ internal data class LocalTypeInformationBuilder(val lookup: LocalTypeLookup,
|
|||||||
val previous = validateProperties
|
val previous = validateProperties
|
||||||
return try {
|
return try {
|
||||||
validateProperties = false
|
validateProperties = false
|
||||||
block()
|
this.block()
|
||||||
} finally {
|
} finally {
|
||||||
validateProperties = previous
|
validateProperties = previous
|
||||||
}
|
}
|
||||||
@ -183,7 +183,7 @@ internal data class LocalTypeInformationBuilder(val lookup: LocalTypeLookup,
|
|||||||
val previous = resolutionContext
|
val previous = resolutionContext
|
||||||
return try {
|
return try {
|
||||||
resolutionContext = newContext
|
resolutionContext = newContext
|
||||||
block()
|
this.block()
|
||||||
} finally {
|
} finally {
|
||||||
resolutionContext = previous
|
resolutionContext = previous
|
||||||
}
|
}
|
||||||
@ -253,9 +253,9 @@ internal data class LocalTypeInformationBuilder(val lookup: LocalTypeLookup,
|
|||||||
}
|
}
|
||||||
|
|
||||||
val evolutionConstructors = evolutionConstructors(type).map { ctor ->
|
val evolutionConstructors = evolutionConstructors(type).map { ctor ->
|
||||||
val constructorInformation = buildConstructorInformation(type, ctor)
|
val evolutionConstructorInformation = buildConstructorInformation(type, ctor)
|
||||||
val evolutionProperties = buildObjectProperties(rawType, constructorInformation)
|
val evolutionProperties = buildObjectProperties(rawType, evolutionConstructorInformation)
|
||||||
EvolutionConstructorInformation(constructorInformation, evolutionProperties)
|
EvolutionConstructorInformation(evolutionConstructorInformation, evolutionProperties)
|
||||||
}
|
}
|
||||||
|
|
||||||
return LocalTypeInformation.Composable(type, typeIdentifier, constructorInformation, evolutionConstructors, properties,
|
return LocalTypeInformation.Composable(type, typeIdentifier, constructorInformation, evolutionConstructors, properties,
|
||||||
@ -514,7 +514,7 @@ private fun evolutionConstructors(type: Type): List<KFunction<Any>> {
|
|||||||
val version = it.findAnnotation<DeprecatedConstructorForDeserialization>()?.version
|
val version = it.findAnnotation<DeprecatedConstructorForDeserialization>()?.version
|
||||||
if (version == null) null else version to it
|
if (version == null) null else version to it
|
||||||
}
|
}
|
||||||
.sortedBy { (version, ctor) -> version }
|
.sortedBy { (version, _) -> version }
|
||||||
.map { (version, ctor) -> ctor.apply { isAccessible = true} }
|
.map { (_, ctor) -> ctor.apply { isAccessible = true} }
|
||||||
.toList()
|
.toList()
|
||||||
}
|
}
|
@ -3,10 +3,7 @@ package net.corda.serialization.internal.amqp
|
|||||||
import net.corda.core.serialization.CordaSerializable
|
import net.corda.core.serialization.CordaSerializable
|
||||||
import net.corda.serialization.internal.amqp.testutils.*
|
import net.corda.serialization.internal.amqp.testutils.*
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import java.io.NotSerializableException
|
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
import kotlin.test.assertFails
|
|
||||||
import kotlin.test.assertFailsWith
|
|
||||||
import kotlin.test.fail
|
import kotlin.test.fail
|
||||||
|
|
||||||
// Prior to certain fixes being made within the [PropertySerializaer] classes these simple
|
// Prior to certain fixes being made within the [PropertySerializaer] classes these simple
|
||||||
@ -533,7 +530,7 @@ class DeserializeSimpleTypesTests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@CordaSerializable
|
@CordaSerializable
|
||||||
class Garbo private constructor(value: Int) {
|
class Garbo private constructor(@Suppress("UNUSED_PARAMETER", "unused") value: Int) {
|
||||||
companion object {
|
companion object {
|
||||||
fun make(value: Int) = Garbo(value)
|
fun make(value: Int) = Garbo(value)
|
||||||
}
|
}
|
||||||
@ -600,6 +597,7 @@ No custom serializers registered.
|
|||||||
|
|
||||||
// See CORDA-2782
|
// See CORDA-2782
|
||||||
@Test
|
@Test
|
||||||
|
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN")
|
||||||
fun comparableNotWhitelistedOk() {
|
fun comparableNotWhitelistedOk() {
|
||||||
@CordaSerializable
|
@CordaSerializable
|
||||||
class Ok(val value: String) : java.lang.Comparable<Ok> {
|
class Ok(val value: String) : java.lang.Comparable<Ok> {
|
||||||
|
@ -1,14 +1,12 @@
|
|||||||
package net.corda.serialization.internal.amqp
|
package net.corda.serialization.internal.amqp
|
||||||
|
|
||||||
import net.corda.serialization.internal.AllWhitelist
|
import net.corda.serialization.internal.AllWhitelist
|
||||||
import net.corda.serialization.internal.NotSerializable
|
|
||||||
import net.corda.serialization.internal.model.ConfigurableLocalTypeModel
|
import net.corda.serialization.internal.model.ConfigurableLocalTypeModel
|
||||||
import net.corda.serialization.internal.model.LocalTypeInformation
|
import net.corda.serialization.internal.model.LocalTypeInformation
|
||||||
import net.corda.serialization.internal.model.TypeModellingFingerPrinter
|
import net.corda.serialization.internal.model.TypeModellingFingerPrinter
|
||||||
import org.assertj.core.api.Assertions.assertThat
|
import org.assertj.core.api.Assertions.assertThat
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import kotlin.test.assertNotEquals
|
import kotlin.test.assertNotEquals
|
||||||
import kotlin.test.assertTrue
|
|
||||||
|
|
||||||
class TypeModellingFingerPrinterTests {
|
class TypeModellingFingerPrinterTests {
|
||||||
|
|
||||||
@ -26,7 +24,7 @@ class TypeModellingFingerPrinterTests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Not serializable, because there is no readable property corresponding to the constructor parameter
|
// Not serializable, because there is no readable property corresponding to the constructor parameter
|
||||||
class NonSerializable(a: String)
|
class NonSerializable(@Suppress("UNUSED_PARAMETER") a: String)
|
||||||
|
|
||||||
class HasTypeParameter<T>
|
class HasTypeParameter<T>
|
||||||
data class SuppliesTypeParameter(val value: HasTypeParameter<NonSerializable>)
|
data class SuppliesTypeParameter(val value: HasTypeParameter<NonSerializable>)
|
||||||
|
@ -37,12 +37,12 @@ class LocalTypeModelTests {
|
|||||||
class Nested(
|
class Nested(
|
||||||
val collectionHolder: StringKeyedCollectionHolder<out Int>?,
|
val collectionHolder: StringKeyedCollectionHolder<out Int>?,
|
||||||
private val intArray: IntArray,
|
private val intArray: IntArray,
|
||||||
optionalParam: Short?)
|
@Suppress("UNUSED_PARAMETER") optionalParam: Short?)
|
||||||
|
|
||||||
// This can't be treated as a composable type, because the [intArray] parameter is mandatory but we have no readable
|
// This can't be treated as a composable type, because the [intArray] parameter is mandatory but we have no readable
|
||||||
// field or property to populate it from.
|
// field or property to populate it from.
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
class NonComposableNested(val collectionHolder: StringKeyedCollectionHolder<out Int>?, intArray: IntArray)
|
class NonComposableNested(val collectionHolder: StringKeyedCollectionHolder<out Int>?, @Suppress("UNUSED_PARAMETER") intArray: IntArray)
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `Primitives and collections`() {
|
fun `Primitives and collections`() {
|
||||||
@ -149,7 +149,7 @@ class LocalTypeModelTests {
|
|||||||
|
|
||||||
class AnotherTransitivelyNonComposable(val e: String, val f: Exception, val g: OneMoreTransitivelyNonComposable)
|
class AnotherTransitivelyNonComposable(val e: String, val f: Exception, val g: OneMoreTransitivelyNonComposable)
|
||||||
class OneMoreTransitivelyNonComposable(val h: String, val i: Exception)
|
class OneMoreTransitivelyNonComposable(val h: String, val i: Exception)
|
||||||
class MissingConstructorParameter(val a: String, b: Exception)
|
class MissingConstructorParameter(val a: String, @Suppress("UNUSED_PARAMETER") b: Exception)
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `no unique deserialization constructor creates non-composable type`() {
|
fun `no unique deserialization constructor creates non-composable type`() {
|
||||||
|
@ -193,7 +193,7 @@ fun <A> driver(defaultParameters: DriverParameters = DriverParameters(), dsl: Dr
|
|||||||
isDebug = defaultParameters.isDebug,
|
isDebug = defaultParameters.isDebug,
|
||||||
startNodesInProcess = defaultParameters.startNodesInProcess,
|
startNodesInProcess = defaultParameters.startNodesInProcess,
|
||||||
waitForAllNodesToFinish = defaultParameters.waitForAllNodesToFinish,
|
waitForAllNodesToFinish = defaultParameters.waitForAllNodesToFinish,
|
||||||
extraCordappPackagesToScan = defaultParameters.extraCordappPackagesToScan,
|
extraCordappPackagesToScan = @Suppress("DEPRECATION") defaultParameters.extraCordappPackagesToScan,
|
||||||
notarySpecs = defaultParameters.notarySpecs,
|
notarySpecs = defaultParameters.notarySpecs,
|
||||||
jmxPolicy = defaultParameters.jmxPolicy,
|
jmxPolicy = defaultParameters.jmxPolicy,
|
||||||
compatibilityZone = null,
|
compatibilityZone = null,
|
||||||
|
@ -303,7 +303,7 @@ open class MockNetwork(
|
|||||||
constructor(parameters: MockNetworkParameters) : this(emptyList(), defaultParameters = parameters)
|
constructor(parameters: MockNetworkParameters) : this(emptyList(), defaultParameters = parameters)
|
||||||
|
|
||||||
private val internalMockNetwork = InternalMockNetwork(
|
private val internalMockNetwork = InternalMockNetwork(
|
||||||
cordappPackages,
|
@Suppress("DEPRECATION") cordappPackages,
|
||||||
defaultParameters,
|
defaultParameters,
|
||||||
networkSendManuallyPumped,
|
networkSendManuallyPumped,
|
||||||
threadPerNode,
|
threadPerNode,
|
||||||
|
@ -1009,7 +1009,7 @@ fun <DI : DriverDSL, D : InternalDriverDSL, A> genericDriver(
|
|||||||
isDebug = defaultParameters.isDebug,
|
isDebug = defaultParameters.isDebug,
|
||||||
startNodesInProcess = defaultParameters.startNodesInProcess,
|
startNodesInProcess = defaultParameters.startNodesInProcess,
|
||||||
waitForAllNodesToFinish = defaultParameters.waitForAllNodesToFinish,
|
waitForAllNodesToFinish = defaultParameters.waitForAllNodesToFinish,
|
||||||
extraCordappPackagesToScan = defaultParameters.extraCordappPackagesToScan,
|
extraCordappPackagesToScan = @Suppress("DEPRECATION") defaultParameters.extraCordappPackagesToScan,
|
||||||
jmxPolicy = defaultParameters.jmxPolicy,
|
jmxPolicy = defaultParameters.jmxPolicy,
|
||||||
notarySpecs = defaultParameters.notarySpecs,
|
notarySpecs = defaultParameters.notarySpecs,
|
||||||
compatibilityZone = null,
|
compatibilityZone = null,
|
||||||
@ -1101,7 +1101,7 @@ fun <A> internalDriver(
|
|||||||
systemProperties: Map<String, String> = DriverParameters().systemProperties,
|
systemProperties: Map<String, String> = DriverParameters().systemProperties,
|
||||||
useTestClock: Boolean = DriverParameters().useTestClock,
|
useTestClock: Boolean = DriverParameters().useTestClock,
|
||||||
startNodesInProcess: Boolean = DriverParameters().startNodesInProcess,
|
startNodesInProcess: Boolean = DriverParameters().startNodesInProcess,
|
||||||
extraCordappPackagesToScan: List<String> = DriverParameters().extraCordappPackagesToScan,
|
extraCordappPackagesToScan: List<String> = @Suppress("DEPRECATION") DriverParameters().extraCordappPackagesToScan,
|
||||||
waitForAllNodesToFinish: Boolean = DriverParameters().waitForAllNodesToFinish,
|
waitForAllNodesToFinish: Boolean = DriverParameters().waitForAllNodesToFinish,
|
||||||
notarySpecs: List<NotarySpec> = DriverParameters().notarySpecs,
|
notarySpecs: List<NotarySpec> = DriverParameters().notarySpecs,
|
||||||
jmxPolicy: JmxPolicy = DriverParameters().jmxPolicy,
|
jmxPolicy: JmxPolicy = DriverParameters().jmxPolicy,
|
||||||
|
@ -607,6 +607,7 @@ private fun mockNodeConfiguration(certificatesDirectory: Path): NodeConfiguratio
|
|||||||
doReturn(null).whenever(it).jmxMonitoringHttpPort
|
doReturn(null).whenever(it).jmxMonitoringHttpPort
|
||||||
doReturn(true).whenever(it).devMode
|
doReturn(true).whenever(it).devMode
|
||||||
doReturn(emptyList<String>()).whenever(it).blacklistedAttachmentSigningKeys
|
doReturn(emptyList<String>()).whenever(it).blacklistedAttachmentSigningKeys
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
doReturn(null).whenever(it).compatibilityZoneURL
|
doReturn(null).whenever(it).compatibilityZoneURL
|
||||||
doReturn(null).whenever(it).networkServices
|
doReturn(null).whenever(it).networkServices
|
||||||
doReturn(VerifierType.InMemory).whenever(it).verifierType
|
doReturn(VerifierType.InMemory).whenever(it).verifierType
|
||||||
|
@ -11,8 +11,10 @@ import net.corda.core.node.services.CordaService
|
|||||||
import net.corda.core.serialization.SingletonSerializeAsToken
|
import net.corda.core.serialization.SingletonSerializeAsToken
|
||||||
import net.corda.core.utilities.getOrThrow
|
import net.corda.core.utilities.getOrThrow
|
||||||
import net.corda.core.utilities.unwrap
|
import net.corda.core.utilities.unwrap
|
||||||
import net.corda.testing.core.*
|
import net.corda.testing.core.DUMMY_BANK_A_NAME
|
||||||
import org.assertj.core.api.Assertions.*
|
import net.corda.testing.core.DUMMY_BANK_B_NAME
|
||||||
|
import net.corda.testing.core.singleIdentity
|
||||||
|
import org.assertj.core.api.Assertions.assertThat
|
||||||
import org.junit.After
|
import org.junit.After
|
||||||
import org.junit.Assert.*
|
import org.junit.Assert.*
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
@ -68,7 +70,7 @@ class MockNetworkTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@CordaService
|
@CordaService
|
||||||
class TestService(services: AppServiceHub) : SingletonSerializeAsToken()
|
class TestService(@Suppress("UNUSED_PARAMETER") services: AppServiceHub) : SingletonSerializeAsToken()
|
||||||
|
|
||||||
@InitiatingFlow
|
@InitiatingFlow
|
||||||
class TestInitiator(private val party: Party) : FlowLogic<String>() {
|
class TestInitiator(private val party: Party) : FlowLogic<String>() {
|
||||||
|
@ -38,7 +38,7 @@ class CheckpointSerializationEnvironmentRule(private val inheritable: Boolean =
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Do not call, instead use [SerializationEnvironmentRule] as a [org.junit.Rule]. */
|
/** Do not call, instead use [SerializationEnvironmentRule] as a [org.junit.Rule]. */
|
||||||
fun <T> run(taskLabel: String, task: (SerializationEnvironment) -> T): T {
|
fun <T> run(@Suppress("UNUSED_PARAMETER") taskLabel: String, task: (SerializationEnvironment) -> T): T {
|
||||||
return CheckpointSerializationEnvironmentRule().apply { init() }.runTask(task)
|
return CheckpointSerializationEnvironmentRule().apply { init() }.runTask(task)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -77,10 +77,10 @@ object JarSignatureTestUtils {
|
|||||||
fun Path.getJarSigners(fileName: String) =
|
fun Path.getJarSigners(fileName: String) =
|
||||||
JarInputStream(FileInputStream((this / fileName).toFile())).use(JarSignatureCollector::collectSigners)
|
JarInputStream(FileInputStream((this / fileName).toFile())).use(JarSignatureCollector::collectSigners)
|
||||||
|
|
||||||
fun Path.addManifest(fileName: String, vararg entry: Pair<Attributes.Name, String>) {
|
fun Path.addManifest(fileName: String, vararg entries: Pair<Attributes.Name, String>) {
|
||||||
JarInputStream(FileInputStream((this / fileName).toFile())).use { input ->
|
JarInputStream(FileInputStream((this / fileName).toFile())).use { input ->
|
||||||
val manifest = input.manifest ?: Manifest()
|
val manifest = input.manifest ?: Manifest()
|
||||||
entry.forEach { (attributeName, value) ->
|
entries.forEach { (attributeName, value) ->
|
||||||
manifest.mainAttributes[attributeName] = value
|
manifest.mainAttributes[attributeName] = value
|
||||||
}
|
}
|
||||||
val output = JarOutputStream(FileOutputStream((this / fileName).toFile()), manifest)
|
val output = JarOutputStream(FileOutputStream((this / fileName).toFile()), manifest)
|
||||||
|
@ -5,8 +5,8 @@ import net.corda.nodeapi.internal.DEV_CA_KEY_STORE_PASS
|
|||||||
import net.corda.nodeapi.internal.DEV_CA_TRUST_STORE_PASS
|
import net.corda.nodeapi.internal.DEV_CA_TRUST_STORE_PASS
|
||||||
import net.corda.nodeapi.internal.DEV_CA_TRUST_STORE_PRIVATE_KEY_PASS
|
import net.corda.nodeapi.internal.DEV_CA_TRUST_STORE_PRIVATE_KEY_PASS
|
||||||
import net.corda.nodeapi.internal.config.FileBasedCertificateStoreSupplier
|
import net.corda.nodeapi.internal.config.FileBasedCertificateStoreSupplier
|
||||||
import net.corda.nodeapi.internal.config.SslConfiguration
|
|
||||||
import net.corda.nodeapi.internal.config.MutualSslConfiguration
|
import net.corda.nodeapi.internal.config.MutualSslConfiguration
|
||||||
|
import net.corda.nodeapi.internal.config.SslConfiguration
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
|
|
||||||
class CertificateStoreStubs {
|
class CertificateStoreStubs {
|
||||||
@ -47,7 +47,7 @@ class CertificateStoreStubs {
|
|||||||
fun withCertificatesDirectory(certificatesDirectory: Path, keyStoreFileName: String = KeyStore.DEFAULT_STORE_FILE_NAME,
|
fun withCertificatesDirectory(certificatesDirectory: Path, keyStoreFileName: String = KeyStore.DEFAULT_STORE_FILE_NAME,
|
||||||
keyStorePassword: String = KeyStore.DEFAULT_STORE_PASSWORD, keyPassword: String = keyStorePassword,
|
keyStorePassword: String = KeyStore.DEFAULT_STORE_PASSWORD, keyPassword: String = keyStorePassword,
|
||||||
trustStoreFileName: String = TrustStore.DEFAULT_STORE_FILE_NAME, trustStorePassword: String = TrustStore.DEFAULT_STORE_PASSWORD, trustStoreKeyPassword: String = TrustStore.DEFAULT_KEY_PASSWORD,
|
trustStoreFileName: String = TrustStore.DEFAULT_STORE_FILE_NAME, trustStorePassword: String = TrustStore.DEFAULT_STORE_PASSWORD, trustStoreKeyPassword: String = TrustStore.DEFAULT_KEY_PASSWORD,
|
||||||
useOpenSsl: Boolean = false): MutualSslConfiguration {
|
@Suppress("UNUSED_PARAMETER") useOpenSsl: Boolean = false): MutualSslConfiguration {
|
||||||
|
|
||||||
val keyStore = FileBasedCertificateStoreSupplier(certificatesDirectory / keyStoreFileName, keyStorePassword, keyPassword)
|
val keyStore = FileBasedCertificateStoreSupplier(certificatesDirectory / keyStoreFileName, keyStorePassword, keyPassword)
|
||||||
val trustStore = FileBasedCertificateStoreSupplier(certificatesDirectory / trustStoreFileName, trustStorePassword, trustStoreKeyPassword)
|
val trustStore = FileBasedCertificateStoreSupplier(certificatesDirectory / trustStoreFileName, trustStorePassword, trustStoreKeyPassword)
|
||||||
|
@ -244,7 +244,7 @@ class NetworkBootstrapperRunnerTests {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `test when packages overlap that the bootstrapper fails with a sensible message`() {
|
fun `test when packages overlap that the bootstrapper fails with a sensible message`() {
|
||||||
val (runner, mockBootstrapper) = getRunner()
|
val (runner, _) = getRunner()
|
||||||
val conf = packageOverlapConfigFile.copyToTestDir()
|
val conf = packageOverlapConfigFile.copyToTestDir()
|
||||||
runner.networkParametersFile = conf
|
runner.networkParametersFile = conf
|
||||||
val exitCode = runner.runProgram()
|
val exitCode = runner.runProgram()
|
||||||
@ -255,7 +255,7 @@ class NetworkBootstrapperRunnerTests {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `test when keyfile does not exist then bootstrapper fails with a sensible message`() {
|
fun `test when keyfile does not exist then bootstrapper fails with a sensible message`() {
|
||||||
val (runner, mockBootstrapper) = getRunner()
|
val (runner, _) = getRunner()
|
||||||
runner.networkParametersFile = dirAlice / "filename-that-doesnt-exist"
|
runner.networkParametersFile = dirAlice / "filename-that-doesnt-exist"
|
||||||
val exception = assertFailsWith<FileNotFoundException> { runner.runProgram() }
|
val exception = assertFailsWith<FileNotFoundException> { runner.runProgram() }
|
||||||
assert(exception.message!!.startsWith("Unable to find specified network parameters config file at"))
|
assert(exception.message!!.startsWith("Unable to find specified network parameters config file at"))
|
||||||
|
@ -29,7 +29,7 @@ apply plugin: 'idea'
|
|||||||
description 'A javaagent to allow hooking into Kryo checkpoints'
|
description 'A javaagent to allow hooking into Kryo checkpoints'
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
|
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
||||||
compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
|
compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
|
||||||
compile "javassist:javassist:$javaassist_version"
|
compile "javassist:javassist:$javaassist_version"
|
||||||
compile "com.esotericsoftware:kryo:4.0.0"
|
compile "com.esotericsoftware:kryo:4.0.0"
|
||||||
|
@ -214,16 +214,19 @@ object CheckpointHook : ClassFileTransformer {
|
|||||||
if (clazz.isArray) {
|
if (clazz.isArray) {
|
||||||
log.debug { "readFieldExit array type: $clazz, value: $value]" }
|
log.debug { "readFieldExit array type: $clazz, value: $value]" }
|
||||||
if (Array<Number>::class.java.isAssignableFrom(clazz)) {
|
if (Array<Number>::class.java.isAssignableFrom(clazz)) {
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
val numberValue = value as Array<Number>
|
val numberValue = value as Array<Number>
|
||||||
log.debug { "readFieldExit array of number: $clazz = ${numberValue.joinToString(",")}" }
|
log.debug { "readFieldExit array of number: $clazz = ${numberValue.joinToString(",")}" }
|
||||||
return numberValue.joinToString(",")
|
return numberValue.joinToString(",")
|
||||||
} else if (clazz == Array<Boolean>::class.java) {
|
} else if (clazz == Array<Boolean>::class.java) {
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
val arrayValue = value as Array<Boolean>
|
val arrayValue = value as Array<Boolean>
|
||||||
log.debug { "readFieldExit array of boolean: $clazz = ${arrayValue.joinToString(",")}" }
|
log.debug { "readFieldExit array of boolean: $clazz = ${arrayValue.joinToString(",")}" }
|
||||||
return arrayValue.joinToString(",")
|
return arrayValue.joinToString(",")
|
||||||
}
|
}
|
||||||
// N dimensional arrays
|
// N dimensional arrays
|
||||||
else if (arrayOf<Array<*>>()::class.java.isAssignableFrom(clazz)) {
|
else if (arrayOf<Array<*>>()::class.java.isAssignableFrom(clazz)) {
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
val arrayValue = value as Array<Array<*>>
|
val arrayValue = value as Array<Array<*>>
|
||||||
return arrayValue.map { arrayEntry ->
|
return arrayValue.map { arrayEntry ->
|
||||||
log.debug { "N Dimensional: $clazz, $arrayEntry, ${arrayEntry::class.java}" }
|
log.debug { "N Dimensional: $clazz, $arrayEntry, ${arrayEntry::class.java}" }
|
||||||
@ -264,6 +267,7 @@ object CheckpointHook : ClassFileTransformer {
|
|||||||
log.debug { "readFieldExit boolean array: $clazz = ${arrayValue.joinToString(",")}" }
|
log.debug { "readFieldExit boolean array: $clazz = ${arrayValue.joinToString(",")}" }
|
||||||
return arrayValue.joinToString(",")
|
return arrayValue.joinToString(",")
|
||||||
}
|
}
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
log.debug { "ARRAY OF TYPE: $clazz (size: ${(value as Array<Any?>).size})" }
|
log.debug { "ARRAY OF TYPE: $clazz (size: ${(value as Array<Any?>).size})" }
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
@ -347,6 +351,7 @@ object CheckpointHook : ClassFileTransformer {
|
|||||||
builder.append(CharArray(indent) { ' ' })
|
builder.append(CharArray(indent) { ' ' })
|
||||||
builder.append(" ${statsInfo.fieldName} ")
|
builder.append(" ${statsInfo.fieldName} ")
|
||||||
if (statsInfo.fieldType != null && statsInfo.fieldType.isArray) {
|
if (statsInfo.fieldType != null && statsInfo.fieldType.isArray) {
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
val arrayValue = (statsTree.value as Array<Any?>)
|
val arrayValue = (statsTree.value as Array<Any?>)
|
||||||
builder.append("${statsInfo.fieldType} (array length:${arrayValue.size})")
|
builder.append("${statsInfo.fieldType} (array length:${arrayValue.size})")
|
||||||
} else if (statsInfo.fieldType != null && statsTree.value is Collection<*>) {
|
} else if (statsInfo.fieldType != null && statsTree.value is Collection<*>) {
|
||||||
@ -454,7 +459,6 @@ fun readTrees(events: List<StatsEvent>, index: Int, idMap: IdentityHashMap<Any,
|
|||||||
inField = true
|
inField = true
|
||||||
}
|
}
|
||||||
is StatsEvent.Exit -> {
|
is StatsEvent.Exit -> {
|
||||||
arrayIdx = 0
|
|
||||||
if (idMap.containsKey(event.value)) {
|
if (idMap.containsKey(event.value)) {
|
||||||
val identityInfo = idMap[event.value]!!
|
val identityInfo = idMap[event.value]!!
|
||||||
idMap[event.value] = IdentityInfo(identityInfo.tree, identityInfo.refCount + 1)
|
idMap[event.value] = IdentityInfo(identityInfo.tree, identityInfo.refCount + 1)
|
||||||
@ -472,7 +476,7 @@ fun readTrees(events: List<StatsEvent>, index: Int, idMap: IdentityHashMap<Any,
|
|||||||
if (idMap.containsKey(event.value)) {
|
if (idMap.containsKey(event.value)) {
|
||||||
val identityInfo = idMap[event.value]!!
|
val identityInfo = idMap[event.value]!!
|
||||||
idMap[event.value] = IdentityInfo(identityInfo.tree, identityInfo.refCount + 1)
|
idMap[event.value] = IdentityInfo(identityInfo.tree, identityInfo.refCount + 1)
|
||||||
log.debug { "Skipping repeated StatsEvent.ObjectField: ${event.value} (hashcode:${event.value!!.hashCode()}) (count:${idMap[event.value]?.refCount})" }
|
log.debug { "Skipping repeated StatsEvent.ObjectField: ${event.value} (hashcode:${event.value.hashCode()}) (count:${idMap[event.value]?.refCount})" }
|
||||||
identityInfo
|
identityInfo
|
||||||
} else {
|
} else {
|
||||||
IdentityInfo(StatsTree.Loop(0), 1)
|
IdentityInfo(StatsTree.Loop(0), 1)
|
||||||
|
@ -307,7 +307,7 @@ class InteractiveShellIntegrationTest {
|
|||||||
|
|
||||||
Thread.sleep(5000)
|
Thread.sleep(5000)
|
||||||
|
|
||||||
val (output) = mockRenderPrintWriter()
|
mockRenderPrintWriter()
|
||||||
InteractiveShell.runDumpCheckpoints(aliceNode.rpc as InternalCordaRPCOps)
|
InteractiveShell.runDumpCheckpoints(aliceNode.rpc as InternalCordaRPCOps)
|
||||||
|
|
||||||
val zipFile = (aliceNode.baseDirectory / NodeStartup.LOGS_DIRECTORY_NAME).list().first { "checkpoints_dump-" in it.toString() }
|
val zipFile = (aliceNode.baseDirectory / NodeStartup.LOGS_DIRECTORY_NAME).list().first { "checkpoints_dump-" in it.toString() }
|
||||||
|
@ -568,6 +568,7 @@ object InteractiveShell {
|
|||||||
cordaRPCOps.terminate(true)
|
cordaRPCOps.terminate(true)
|
||||||
|
|
||||||
val latch = CountDownLatch(1)
|
val latch = CountDownLatch(1)
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
cordaRPCOps.pendingFlowsCount().updates.doOnError { error ->
|
cordaRPCOps.pendingFlowsCount().updates.doOnError { error ->
|
||||||
log.error(error.message)
|
log.error(error.message)
|
||||||
throw error
|
throw error
|
||||||
|
@ -295,6 +295,7 @@ object StdoutANSIProgressRenderer : ANSIProgressRenderer() {
|
|||||||
// This line looks weird as hell because the magic code to decide if we really have a TTY or not isn't
|
// This line looks weird as hell because the magic code to decide if we really have a TTY or not isn't
|
||||||
// actually exposed anywhere as a function (weak sauce). So we have to rely on our knowledge of jansi
|
// actually exposed anywhere as a function (weak sauce). So we have to rely on our knowledge of jansi
|
||||||
// implementation details.
|
// implementation details.
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
usingANSI = AnsiConsole.wrapOutputStream(System.out) !is AnsiOutputStream
|
usingANSI = AnsiConsole.wrapOutputStream(System.out) !is AnsiOutputStream
|
||||||
|
|
||||||
if (usingANSI) {
|
if (usingANSI) {
|
||||||
@ -307,6 +308,7 @@ object StdoutANSIProgressRenderer : ANSIProgressRenderer() {
|
|||||||
loggerFor<StdoutANSIProgressRenderer>().warn("Cannot find console appender - progress tracking may not work as expected")
|
loggerFor<StdoutANSIProgressRenderer>().warn("Cannot find console appender - progress tracking may not work as expected")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
val scrollingAppender = object : AbstractOutputStreamAppender<OutputStreamManager>(
|
val scrollingAppender = object : AbstractOutputStreamAppender<OutputStreamManager>(
|
||||||
consoleAppender.name, consoleAppender.layout, consoleAppender.filter,
|
consoleAppender.name, consoleAppender.layout, consoleAppender.filter,
|
||||||
consoleAppender.ignoreExceptions(), true, consoleAppender.manager) {
|
consoleAppender.ignoreExceptions(), true, consoleAppender.manager) {
|
||||||
|
@ -6,13 +6,15 @@ import org.crsh.text.RenderPrintWriter;
|
|||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
||||||
public class OutputFormatCommandTest {
|
public class OutputFormatCommandTest {
|
||||||
|
|
||||||
private InvocationContext mockInvocationContext;
|
private InvocationContext<Map> mockInvocationContext;
|
||||||
private RenderPrintWriter printWriter;
|
private RenderPrintWriter printWriter;
|
||||||
|
|
||||||
private OutputFormatCommand outputFormatCommand;
|
private OutputFormatCommand outputFormatCommand;
|
||||||
|
@ -3,8 +3,6 @@ package net.corda.webserver.internal
|
|||||||
import com.google.common.html.HtmlEscapers.htmlEscaper
|
import com.google.common.html.HtmlEscapers.htmlEscaper
|
||||||
import io.netty.channel.unix.Errors
|
import io.netty.channel.unix.Errors
|
||||||
import net.corda.client.jackson.JacksonSupport
|
import net.corda.client.jackson.JacksonSupport
|
||||||
import net.corda.client.rpc.CordaRPCClient
|
|
||||||
import net.corda.client.rpc.RPCException
|
|
||||||
import net.corda.client.rpc.internal.ReconnectingCordaRPCOps
|
import net.corda.client.rpc.internal.ReconnectingCordaRPCOps
|
||||||
import net.corda.core.internal.errors.AddressBindingException
|
import net.corda.core.internal.errors.AddressBindingException
|
||||||
import net.corda.core.messaging.CordaRPCOps
|
import net.corda.core.messaging.CordaRPCOps
|
||||||
@ -28,7 +26,6 @@ import java.io.IOException
|
|||||||
import java.io.Writer
|
import java.io.Writer
|
||||||
import java.lang.reflect.InvocationTargetException
|
import java.lang.reflect.InvocationTargetException
|
||||||
import java.net.BindException
|
import java.net.BindException
|
||||||
import java.nio.file.NoSuchFileException
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import javax.servlet.http.HttpServletRequest
|
import javax.servlet.http.HttpServletRequest
|
||||||
|
|
||||||
@ -66,6 +63,7 @@ class NodeWebServer(val config: WebServerConfig) {
|
|||||||
val httpsConfiguration = HttpConfiguration()
|
val httpsConfiguration = HttpConfiguration()
|
||||||
httpsConfiguration.outputBufferSize = 32768
|
httpsConfiguration.outputBufferSize = 32768
|
||||||
httpsConfiguration.addCustomizer(SecureRequestCustomizer())
|
httpsConfiguration.addCustomizer(SecureRequestCustomizer())
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
val sslContextFactory = SslContextFactory()
|
val sslContextFactory = SslContextFactory()
|
||||||
sslContextFactory.keyStorePath = config.keyStorePath
|
sslContextFactory.keyStorePath = config.keyStorePath
|
||||||
sslContextFactory.setKeyStorePassword(config.keyStorePassword)
|
sslContextFactory.setKeyStorePassword(config.keyStorePassword)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user