mirror of
https://github.com/corda/corda.git
synced 2025-01-14 08:49:47 +00:00
RELEASE - Backport fixes
* Rolls back dirty change. * Rolls back unneeded import.
This commit is contained in:
parent
599aa709dd
commit
5e46032f2c
@ -125,22 +125,22 @@ class DriverTests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `driver rejects multiple nodes with the same name parallel`() {
|
fun `driver rejects multiple nodes with the same name`() {
|
||||||
driver(DriverParameters(startNodesInProcess = true, notarySpecs = emptyList())) {
|
|
||||||
val nodes = listOf(newNode(DUMMY_BANK_A_NAME), newNode(DUMMY_BANK_B_NAME), newNode(DUMMY_BANK_A_NAME))
|
driver(DriverParameters(startNodesInProcess = true)) {
|
||||||
assertThatIllegalArgumentException().isThrownBy {
|
|
||||||
nodes.parallelStream().map { it.invoke() }.toList().transpose().getOrThrow()
|
assertThatThrownBy { listOf(newNode(DUMMY_BANK_A_NAME)(), newNode(DUMMY_BANK_B_NAME)(), newNode(DUMMY_BANK_A_NAME)()).transpose().getOrThrow() }.isInstanceOf(IllegalArgumentException::class.java)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `driver rejects multiple nodes with the same organisation name`() {
|
fun `driver rejects multiple nodes with the same name parallel`() {
|
||||||
driver(DriverParameters(startNodesInProcess = true, notarySpecs = emptyList())) {
|
|
||||||
newNode(CordaX500Name(commonName = "Notary", organisation = "R3CEV", locality = "New York", country = "US"))().getOrThrow()
|
driver(DriverParameters(startNodesInProcess = true)) {
|
||||||
assertThatIllegalArgumentException().isThrownBy {
|
|
||||||
newNode(CordaX500Name(commonName = "Regulator", organisation = "R3CEV", locality = "New York", country = "US"))().getOrThrow()
|
val nodes = listOf(newNode(DUMMY_BANK_A_NAME), newNode(DUMMY_BANK_B_NAME), newNode(DUMMY_BANK_A_NAME))
|
||||||
}
|
|
||||||
|
assertThatThrownBy { nodes.parallelStream().map { it.invoke() }.toList().transpose().getOrThrow() }.isInstanceOf(IllegalArgumentException::class.java)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -917,71 +917,6 @@ class DriverDSLImpl(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Keeps track of how many nodes each node sees and gates nodes from completing their startNode [CordaFuture] until all
|
|
||||||
* current nodes see everyone.
|
|
||||||
*/
|
|
||||||
private class NetworkVisibilityController {
|
|
||||||
private val nodeVisibilityHandles = ThreadBox(HashMap<String, VisibilityHandle>())
|
|
||||||
|
|
||||||
fun register(name: CordaX500Name): VisibilityHandle {
|
|
||||||
val handle = VisibilityHandle()
|
|
||||||
nodeVisibilityHandles.locked {
|
|
||||||
require(name.organisation !in keys) {
|
|
||||||
"Node with organisation name ${name.organisation} is already started or starting"
|
|
||||||
}
|
|
||||||
put(name.organisation, handle)
|
|
||||||
}
|
|
||||||
return handle
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun checkIfAllVisible() {
|
|
||||||
nodeVisibilityHandles.locked {
|
|
||||||
val minView = values.stream().mapToInt { it.visibleNodeCount }.min().orElse(0)
|
|
||||||
if (minView >= size) {
|
|
||||||
values.forEach { it.future.set(Unit) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inner class VisibilityHandle : AutoCloseable {
|
|
||||||
internal val future = openFuture<Unit>()
|
|
||||||
internal var visibleNodeCount = 0
|
|
||||||
private var subscription: Subscription? = null
|
|
||||||
|
|
||||||
fun listen(rpc: CordaRPCOps): CordaFuture<Unit> {
|
|
||||||
check(subscription == null)
|
|
||||||
val (snapshot, updates) = rpc.networkMapFeed()
|
|
||||||
visibleNodeCount = snapshot.size
|
|
||||||
checkIfAllVisible()
|
|
||||||
subscription = updates.subscribe {
|
|
||||||
when (it) {
|
|
||||||
is NetworkMapCache.MapChange.Added -> {
|
|
||||||
visibleNodeCount++
|
|
||||||
checkIfAllVisible()
|
|
||||||
}
|
|
||||||
is NetworkMapCache.MapChange.Removed -> {
|
|
||||||
visibleNodeCount--
|
|
||||||
checkIfAllVisible()
|
|
||||||
}
|
|
||||||
is NetworkMapCache.MapChange.Modified -> {
|
|
||||||
// Nothing to do here but better being exhaustive.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return future
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun close() {
|
|
||||||
subscription?.unsubscribe()
|
|
||||||
nodeVisibilityHandles.locked {
|
|
||||||
values -= this@VisibilityHandle
|
|
||||||
checkIfAllVisible()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
interface InternalDriverDSL : DriverDSL, CordformContext {
|
interface InternalDriverDSL : DriverDSL, CordformContext {
|
||||||
private companion object {
|
private companion object {
|
||||||
private val DEFAULT_POLL_INTERVAL = 500.millis
|
private val DEFAULT_POLL_INTERVAL = 500.millis
|
||||||
|
@ -2,6 +2,7 @@ package net.corda.testing.node.internal.network
|
|||||||
|
|
||||||
import net.corda.core.crypto.SecureHash
|
import net.corda.core.crypto.SecureHash
|
||||||
import net.corda.core.crypto.SignedData
|
import net.corda.core.crypto.SignedData
|
||||||
|
import net.corda.core.internal.signWithCert
|
||||||
import net.corda.core.node.NodeInfo
|
import net.corda.core.node.NodeInfo
|
||||||
import net.corda.core.serialization.deserialize
|
import net.corda.core.serialization.deserialize
|
||||||
import net.corda.core.serialization.serialize
|
import net.corda.core.serialization.serialize
|
||||||
|
Loading…
Reference in New Issue
Block a user