mirror of
https://github.com/corda/corda.git
synced 2025-06-17 14:48:16 +00:00
Attempt to make NodeStatePersistenceTests more stable (#1895)
By ensuring that the nodes are properly started and aware of each other before firing any flows through them. Also minor refactoring.
This commit is contained in:
@ -7,6 +7,7 @@ import net.corda.core.flows.FlowLogic
|
|||||||
import net.corda.core.flows.StartableByRPC
|
import net.corda.core.flows.StartableByRPC
|
||||||
import net.corda.core.identity.AbstractParty
|
import net.corda.core.identity.AbstractParty
|
||||||
import net.corda.core.identity.Party
|
import net.corda.core.identity.Party
|
||||||
|
import net.corda.core.internal.concurrent.transpose
|
||||||
import net.corda.core.messaging.startFlow
|
import net.corda.core.messaging.startFlow
|
||||||
import net.corda.core.schemas.MappedSchema
|
import net.corda.core.schemas.MappedSchema
|
||||||
import net.corda.core.schemas.PersistentState
|
import net.corda.core.schemas.PersistentState
|
||||||
@ -21,6 +22,8 @@ import net.corda.node.services.FlowPermissions
|
|||||||
import net.corda.nodeapi.User
|
import net.corda.nodeapi.User
|
||||||
import net.corda.testing.DUMMY_NOTARY
|
import net.corda.testing.DUMMY_NOTARY
|
||||||
import net.corda.testing.chooseIdentity
|
import net.corda.testing.chooseIdentity
|
||||||
|
import net.corda.testing.driver.DriverDSLExposedInterface
|
||||||
|
import net.corda.testing.driver.NodeHandle
|
||||||
import net.corda.testing.driver.driver
|
import net.corda.testing.driver.driver
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import java.lang.management.ManagementFactory
|
import java.lang.management.ManagementFactory
|
||||||
@ -36,15 +39,20 @@ class NodeStatePersistenceTests {
|
|||||||
val user = User("mark", "dadada", setOf(FlowPermissions.startFlowPermission<SendMessageFlow>()))
|
val user = User("mark", "dadada", setOf(FlowPermissions.startFlowPermission<SendMessageFlow>()))
|
||||||
val message = Message("Hello world!")
|
val message = Message("Hello world!")
|
||||||
driver(isDebug = true, startNodesInProcess = isQuasarAgentSpecified()) {
|
driver(isDebug = true, startNodesInProcess = isQuasarAgentSpecified()) {
|
||||||
startNotaryNode(DUMMY_NOTARY.name, validating = false).getOrThrow()
|
val (nodeName, notaryNodeHandle) = {
|
||||||
var nodeHandle = startNode(rpcUsers = listOf(user)).getOrThrow()
|
val notaryNodeHandle = startNotaryNode(DUMMY_NOTARY.name, validating = false).getOrThrow()
|
||||||
val nodeName = nodeHandle.nodeInfo.chooseIdentity().name
|
val nodeHandle = startNode(rpcUsers = listOf(user)).getOrThrow()
|
||||||
nodeHandle.rpcClientToNode().start(user.username, user.password).use {
|
ensureAcquainted(notaryNodeHandle, nodeHandle)
|
||||||
it.proxy.startFlow(::SendMessageFlow, message).returnValue.getOrThrow()
|
val nodeName = nodeHandle.nodeInfo.chooseIdentity().name
|
||||||
}
|
nodeHandle.rpcClientToNode().start(user.username, user.password).use {
|
||||||
nodeHandle.stop().getOrThrow()
|
it.proxy.startFlow(::SendMessageFlow, message).returnValue.getOrThrow()
|
||||||
|
}
|
||||||
|
nodeHandle.stop().getOrThrow()
|
||||||
|
nodeName to notaryNodeHandle
|
||||||
|
}()
|
||||||
|
|
||||||
nodeHandle = startNode(providedName = nodeName, rpcUsers = listOf(user)).getOrThrow()
|
val nodeHandle = startNode(providedName = nodeName, rpcUsers = listOf(user)).getOrThrow()
|
||||||
|
ensureAcquainted(notaryNodeHandle, nodeHandle)
|
||||||
nodeHandle.rpcClientToNode().start(user.username, user.password).use {
|
nodeHandle.rpcClientToNode().start(user.username, user.password).use {
|
||||||
val page = it.proxy.vaultQuery(MessageState::class.java)
|
val page = it.proxy.vaultQuery(MessageState::class.java)
|
||||||
val retrievedMessage = page.states.singleOrNull()?.state?.data?.message
|
val retrievedMessage = page.states.singleOrNull()?.state?.data?.message
|
||||||
@ -52,6 +60,10 @@ class NodeStatePersistenceTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun DriverDSLExposedInterface.ensureAcquainted(one: NodeHandle, another: NodeHandle) {
|
||||||
|
listOf(one.pollUntilKnowsAbout(another), another.pollUntilKnowsAbout(one)).transpose().getOrThrow()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun isQuasarAgentSpecified(): Boolean {
|
fun isQuasarAgentSpecified(): Boolean {
|
||||||
@ -95,7 +107,7 @@ object MessageSchemaV1 : MappedSchema(
|
|||||||
) : PersistentState()
|
) : PersistentState()
|
||||||
}
|
}
|
||||||
|
|
||||||
val MESSAGE_CONTRACT_PROGRAM_ID = "net.corda.test.node.MessageContract"
|
const val MESSAGE_CONTRACT_PROGRAM_ID = "net.corda.test.node.MessageContract"
|
||||||
|
|
||||||
open class MessageContract : Contract {
|
open class MessageContract : Contract {
|
||||||
override fun verify(tx: LedgerTransaction) {
|
override fun verify(tx: LedgerTransaction) {
|
||||||
|
Reference in New Issue
Block a user