mirror of
https://github.com/corda/corda.git
synced 2025-06-01 23:20:54 +00:00
Move simulations to top level
This commit is contained in:
parent
07f44e9e2a
commit
868b23a923
@ -2,13 +2,15 @@ apply plugin: 'kotlin'
|
|||||||
apply plugin: CanonicalizerPlugin
|
apply plugin: CanonicalizerPlugin
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
|
||||||
mavenLocal()
|
mavenLocal()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
jcenter()
|
|
||||||
maven {
|
maven {
|
||||||
url 'http://oss.sonatype.org/content/repositories/snapshots'
|
url 'http://oss.sonatype.org/content/repositories/snapshots'
|
||||||
}
|
}
|
||||||
|
jcenter()
|
||||||
|
maven {
|
||||||
|
url 'https://dl.bintray.com/kotlin/exposed'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
@ -6,7 +6,15 @@ apply plugin: 'kotlin'
|
|||||||
sourceCompatibility = 1.5
|
sourceCompatibility = 1.5
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
maven {
|
||||||
|
url 'http://oss.sonatype.org/content/repositories/snapshots'
|
||||||
|
}
|
||||||
|
jcenter()
|
||||||
|
maven {
|
||||||
|
url 'https://dl.bintray.com/kotlin/exposed'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
compileKotlin {
|
compileKotlin {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package com.r3corda.testing.node
|
package com.r3corda.simulation
|
||||||
|
|
||||||
import com.fasterxml.jackson.module.kotlin.readValue
|
import com.fasterxml.jackson.module.kotlin.readValue
|
||||||
import com.google.common.util.concurrent.FutureCallback
|
import com.google.common.util.concurrent.FutureCallback
|
||||||
@ -15,6 +15,8 @@ import com.r3corda.core.node.services.linearHeadsOfType
|
|||||||
import com.r3corda.core.random63BitValue
|
import com.r3corda.core.random63BitValue
|
||||||
import com.r3corda.core.success
|
import com.r3corda.core.success
|
||||||
import com.r3corda.protocols.TwoPartyDealProtocol
|
import com.r3corda.protocols.TwoPartyDealProtocol
|
||||||
|
import com.r3corda.testing.node.InMemoryMessagingNetwork
|
||||||
|
import com.r3corda.testing.node.MockIdentityService
|
||||||
import java.security.KeyPair
|
import java.security.KeyPair
|
||||||
import java.time.LocalDate
|
import java.time.LocalDate
|
||||||
import java.util.*
|
import java.util.*
|
@ -1,4 +1,4 @@
|
|||||||
package com.r3corda.testing.node
|
package com.r3corda.simulation
|
||||||
|
|
||||||
import com.google.common.util.concurrent.Futures
|
import com.google.common.util.concurrent.Futures
|
||||||
import com.google.common.util.concurrent.ListenableFuture
|
import com.google.common.util.concurrent.ListenableFuture
|
||||||
@ -14,6 +14,10 @@ import com.r3corda.node.services.config.NodeConfiguration
|
|||||||
import com.r3corda.node.services.network.NetworkMapService
|
import com.r3corda.node.services.network.NetworkMapService
|
||||||
import com.r3corda.node.services.transactions.SimpleNotaryService
|
import com.r3corda.node.services.transactions.SimpleNotaryService
|
||||||
import com.r3corda.node.utilities.AddOrRemove
|
import com.r3corda.node.utilities.AddOrRemove
|
||||||
|
import com.r3corda.testing.node.InMemoryMessagingNetwork
|
||||||
|
import com.r3corda.testing.node.MockNetwork
|
||||||
|
import com.r3corda.testing.node.TestClock
|
||||||
|
import com.r3corda.testing.node.setTo
|
||||||
import rx.Observable
|
import rx.Observable
|
||||||
import rx.subjects.PublishSubject
|
import rx.subjects.PublishSubject
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
@ -41,7 +45,7 @@ abstract class Simulation(val networkSendManuallyPumped: Boolean,
|
|||||||
|
|
||||||
// This puts together a mock network of SimulatedNodes.
|
// This puts together a mock network of SimulatedNodes.
|
||||||
|
|
||||||
open class SimulatedNode(dir: Path, config: com.r3corda.node.services.config.NodeConfiguration, mockNet: MockNetwork, networkMapAddress: NodeInfo?,
|
open class SimulatedNode(dir: Path, config: NodeConfiguration, mockNet: MockNetwork, networkMapAddress: NodeInfo?,
|
||||||
advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?) : MockNetwork.MockNode(dir, config, mockNet, networkMapAddress, advertisedServices, id, keyPair) {
|
advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?) : MockNetwork.MockNode(dir, config, mockNet, networkMapAddress, advertisedServices, id, keyPair) {
|
||||||
override fun findMyLocation(): PhysicalLocation? = CityDatabase[configuration.nearestCity]
|
override fun findMyLocation(): PhysicalLocation? = CityDatabase[configuration.nearestCity]
|
||||||
}
|
}
|
||||||
@ -49,7 +53,7 @@ abstract class Simulation(val networkSendManuallyPumped: Boolean,
|
|||||||
inner class BankFactory : MockNetwork.Factory {
|
inner class BankFactory : MockNetwork.Factory {
|
||||||
var counter = 0
|
var counter = 0
|
||||||
|
|
||||||
override fun create(dir: Path, config: com.r3corda.node.services.config.NodeConfiguration, network: MockNetwork, networkMapAddr: NodeInfo?,
|
override fun create(dir: Path, config: NodeConfiguration, network: MockNetwork, networkMapAddr: NodeInfo?,
|
||||||
advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): MockNetwork.MockNode {
|
advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): MockNetwork.MockNode {
|
||||||
val letter = 'A' + counter
|
val letter = 'A' + counter
|
||||||
val city = bankLocations[counter++ % bankLocations.size]
|
val city = bankLocations[counter++ % bankLocations.size]
|
@ -1,8 +1,9 @@
|
|||||||
package com.r3corda.testing.node
|
package com.r3corda.simulation
|
||||||
|
|
||||||
import com.google.common.util.concurrent.Futures
|
import com.google.common.util.concurrent.Futures
|
||||||
import com.google.common.util.concurrent.ListenableFuture
|
import com.google.common.util.concurrent.ListenableFuture
|
||||||
import com.r3corda.contracts.CommercialPaper
|
import com.r3corda.contracts.CommercialPaper
|
||||||
|
import com.r3corda.contracts.asset.DUMMY_CASH_ISSUER
|
||||||
import com.r3corda.contracts.testing.fillWithSomeTestCash
|
import com.r3corda.contracts.testing.fillWithSomeTestCash
|
||||||
import com.r3corda.core.contracts.DOLLARS
|
import com.r3corda.core.contracts.DOLLARS
|
||||||
import com.r3corda.core.contracts.OwnableState
|
import com.r3corda.core.contracts.OwnableState
|
||||||
@ -11,6 +12,8 @@ import com.r3corda.core.contracts.`issued by`
|
|||||||
import com.r3corda.core.days
|
import com.r3corda.core.days
|
||||||
import com.r3corda.core.random63BitValue
|
import com.r3corda.core.random63BitValue
|
||||||
import com.r3corda.core.seconds
|
import com.r3corda.core.seconds
|
||||||
|
import com.r3corda.protocols.TwoPartyTradeProtocol
|
||||||
|
import com.r3corda.testing.node.InMemoryMessagingNetwork
|
||||||
import java.time.Instant
|
import java.time.Instant
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -30,7 +33,7 @@ class TradeSimulation(runAsync: Boolean, latencyInjector: InMemoryMessagingNetwo
|
|||||||
buyer.services.fillWithSomeTestCash(1500.DOLLARS, notary.info.identity)
|
buyer.services.fillWithSomeTestCash(1500.DOLLARS, notary.info.identity)
|
||||||
|
|
||||||
val issuance = run {
|
val issuance = run {
|
||||||
val tx = com.r3corda.contracts.CommercialPaper().generateIssue(seller.info.identity.ref(1, 2, 3), 1100.DOLLARS `issued by` com.r3corda.contracts.asset.DUMMY_CASH_ISSUER,
|
val tx = CommercialPaper().generateIssue(seller.info.identity.ref(1, 2, 3), 1100.DOLLARS `issued by` DUMMY_CASH_ISSUER,
|
||||||
Instant.now() + 10.days, notary.info.identity)
|
Instant.now() + 10.days, notary.info.identity)
|
||||||
tx.setTime(Instant.now(), 30.seconds)
|
tx.setTime(Instant.now(), 30.seconds)
|
||||||
tx.signWith(notary.storage.myLegalIdentityKey)
|
tx.signWith(notary.storage.myLegalIdentityKey)
|
||||||
@ -41,13 +44,13 @@ class TradeSimulation(runAsync: Boolean, latencyInjector: InMemoryMessagingNetwo
|
|||||||
|
|
||||||
val amount = 1000.DOLLARS
|
val amount = 1000.DOLLARS
|
||||||
val sessionID = random63BitValue()
|
val sessionID = random63BitValue()
|
||||||
val buyerProtocol = com.r3corda.protocols.TwoPartyTradeProtocol.Buyer(
|
val buyerProtocol = TwoPartyTradeProtocol.Buyer(
|
||||||
seller.info.identity,
|
seller.info.identity,
|
||||||
notary.info.identity,
|
notary.info.identity,
|
||||||
amount,
|
amount,
|
||||||
CommercialPaper.State::class.java,
|
CommercialPaper.State::class.java,
|
||||||
sessionID)
|
sessionID)
|
||||||
val sellerProtocol = com.r3corda.protocols.TwoPartyTradeProtocol.Seller(
|
val sellerProtocol = TwoPartyTradeProtocol.Seller(
|
||||||
buyer.info.identity,
|
buyer.info.identity,
|
||||||
notary.info,
|
notary.info,
|
||||||
issuance.tx.outRef<OwnableState>(0),
|
issuance.tx.outRef<OwnableState>(0),
|
||||||
@ -58,8 +61,8 @@ class TradeSimulation(runAsync: Boolean, latencyInjector: InMemoryMessagingNetwo
|
|||||||
showConsensusFor(listOf(buyer, seller, notary))
|
showConsensusFor(listOf(buyer, seller, notary))
|
||||||
showProgressFor(listOf(buyer, seller))
|
showProgressFor(listOf(buyer, seller))
|
||||||
|
|
||||||
val buyerFuture = buyer.services.startProtocol("bank.$buyerBankIndex.${com.r3corda.protocols.TwoPartyTradeProtocol.TOPIC}.buyer", buyerProtocol)
|
val buyerFuture = buyer.services.startProtocol("bank.$buyerBankIndex.${TwoPartyTradeProtocol.TOPIC}.buyer", buyerProtocol)
|
||||||
val sellerFuture = seller.services.startProtocol("bank.$sellerBankIndex.${com.r3corda.protocols.TwoPartyTradeProtocol.TOPIC}.seller", sellerProtocol)
|
val sellerFuture = seller.services.startProtocol("bank.$sellerBankIndex.${TwoPartyTradeProtocol.TOPIC}.seller", sellerProtocol)
|
||||||
|
|
||||||
return Futures.successfulAsList(buyerFuture, sellerFuture)
|
return Futures.successfulAsList(buyerFuture, sellerFuture)
|
||||||
}
|
}
|
@ -2,7 +2,7 @@ package com.r3corda.core.testing
|
|||||||
|
|
||||||
import com.google.common.base.Throwables
|
import com.google.common.base.Throwables
|
||||||
import com.r3corda.core.utilities.LogHelper
|
import com.r3corda.core.utilities.LogHelper
|
||||||
import com.r3corda.testing.node.IRSSimulation
|
import com.r3corda.simulation.IRSSimulation
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
class IRSSimulationTest {
|
class IRSSimulationTest {
|
||||||
|
@ -11,6 +11,7 @@ import com.r3corda.core.node.services.WalletService
|
|||||||
import com.r3corda.core.testing.InMemoryWalletService
|
import com.r3corda.core.testing.InMemoryWalletService
|
||||||
import com.r3corda.core.utilities.DUMMY_NOTARY_KEY
|
import com.r3corda.core.utilities.DUMMY_NOTARY_KEY
|
||||||
import com.r3corda.core.utilities.loggerFor
|
import com.r3corda.core.utilities.loggerFor
|
||||||
|
import com.r3corda.node.services.config.NodeConfiguration
|
||||||
import org.slf4j.Logger
|
import org.slf4j.Logger
|
||||||
import java.nio.file.Files
|
import java.nio.file.Files
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
@ -48,18 +49,18 @@ class MockNetwork(private val networkSendManuallyPumped: Boolean = false,
|
|||||||
|
|
||||||
/** Allows customisation of how nodes are created. */
|
/** Allows customisation of how nodes are created. */
|
||||||
interface Factory {
|
interface Factory {
|
||||||
fun create(dir: Path, config: com.r3corda.node.services.config.NodeConfiguration, network: MockNetwork, networkMapAddr: NodeInfo?,
|
fun create(dir: Path, config: NodeConfiguration, network: MockNetwork, networkMapAddr: NodeInfo?,
|
||||||
advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): MockNode
|
advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): MockNode
|
||||||
}
|
}
|
||||||
|
|
||||||
object DefaultFactory : Factory {
|
object DefaultFactory : Factory {
|
||||||
override fun create(dir: Path, config: com.r3corda.node.services.config.NodeConfiguration, network: MockNetwork, networkMapAddr: NodeInfo?,
|
override fun create(dir: Path, config: NodeConfiguration, network: MockNetwork, networkMapAddr: NodeInfo?,
|
||||||
advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): MockNode {
|
advertisedServices: Set<ServiceType>, id: Int, keyPair: KeyPair?): MockNode {
|
||||||
return MockNode(dir, config, network, networkMapAddr, advertisedServices, id, keyPair)
|
return MockNode(dir, config, network, networkMapAddr, advertisedServices, id, keyPair)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open class MockNode(dir: Path, config: com.r3corda.node.services.config.NodeConfiguration, val mockNet: MockNetwork, networkMapAddr: NodeInfo?,
|
open class MockNode(dir: Path, config: NodeConfiguration, val mockNet: MockNetwork, networkMapAddr: NodeInfo?,
|
||||||
advertisedServices: Set<ServiceType>, val id: Int, val keyPair: KeyPair?) : com.r3corda.node.internal.AbstractNode(dir, config, networkMapAddr, advertisedServices, TestClock()) {
|
advertisedServices: Set<ServiceType>, val id: Int, val keyPair: KeyPair?) : com.r3corda.node.internal.AbstractNode(dir, config, networkMapAddr, advertisedServices, TestClock()) {
|
||||||
override val log: Logger = loggerFor<MockNode>()
|
override val log: Logger = loggerFor<MockNode>()
|
||||||
override val serverThread: com.r3corda.node.utilities.AffinityExecutor =
|
override val serverThread: com.r3corda.node.utilities.AffinityExecutor =
|
||||||
@ -113,7 +114,7 @@ class MockNetwork(private val networkSendManuallyPumped: Boolean = false,
|
|||||||
val path = filesystem.getPath("/nodes/$id")
|
val path = filesystem.getPath("/nodes/$id")
|
||||||
if (newNode)
|
if (newNode)
|
||||||
Files.createDirectories(path.resolve("attachments"))
|
Files.createDirectories(path.resolve("attachments"))
|
||||||
val config = object : com.r3corda.node.services.config.NodeConfiguration {
|
val config = object : NodeConfiguration {
|
||||||
override val myLegalName: String = legalName ?: "Mock Company $id"
|
override val myLegalName: String = legalName ?: "Mock Company $id"
|
||||||
override val exportJMXto: String = ""
|
override val exportJMXto: String = ""
|
||||||
override val nearestCity: String = "Atlantis"
|
override val nearestCity: String = "Atlantis"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user