mirror of
https://github.com/corda/corda.git
synced 2025-02-21 01:42:24 +00:00
Merge pull request #936 from corda/os-merge-d620e71
O/S merge from d620e71
This commit is contained in:
commit
11b78296eb
@ -116,7 +116,7 @@ class FlattenedList<A>(val sourceList: ObservableList<out ObservableValue<out A>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
endChange()
|
endChange()
|
||||||
assert(sourceList.size == indexMap.size)
|
require(sourceList.size == indexMap.size)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun get(index: Int): A = sourceList[index].value
|
override fun get(index: Int): A = sourceList[index].value
|
||||||
|
@ -101,7 +101,7 @@ class RPCStabilityTests {
|
|||||||
// This is a less than check because threads from other tests may be shutting down while this test is running.
|
// This is a less than check because threads from other tests may be shutting down while this test is running.
|
||||||
// This is therefore a "best effort" check. When this test is run on its own this should be a strict equality.
|
// This is therefore a "best effort" check. When this test is run on its own this should be a strict equality.
|
||||||
// In case of failure we output the threads along with their stacktraces to get an idea what was running at a time.
|
// In case of failure we output the threads along with their stacktraces to get an idea what was running at a time.
|
||||||
assert(threadsBefore.keys.size >= threadsAfter.keys.size, { "threadsBefore: $threadsBefore\nthreadsAfter: $threadsAfter" })
|
require(threadsBefore.keys.size >= threadsAfter.keys.size, { "threadsBefore: $threadsBefore\nthreadsAfter: $threadsAfter" })
|
||||||
} finally {
|
} finally {
|
||||||
executor.shutdownNow()
|
executor.shutdownNow()
|
||||||
}
|
}
|
||||||
|
@ -60,12 +60,12 @@ class PluginRegistrationTest {
|
|||||||
val classpath = outputLines.filter { it.contains(" classpath:") }.last()
|
val classpath = outputLines.filter { it.contains(" classpath:") }.last()
|
||||||
|
|
||||||
// If DummyJdbcDriver has been registered it should have printed a message
|
// If DummyJdbcDriver has been registered it should have printed a message
|
||||||
assert(outputLines.count { it.contains("[DummyJDBCDriver] hello") } > 0) {
|
require(outputLines.count { it.contains("[DummyJDBCDriver] hello") } > 0) {
|
||||||
"Cannot find registration message from installed jdbc driver"
|
"Cannot find registration message from installed jdbc driver"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check the printed classpath contains 'nodeJarDir'
|
// Check the printed classpath contains 'nodeJarDir'
|
||||||
assert(classpath.contains(jarDir)) {
|
require(classpath.contains(jarDir)) {
|
||||||
"Expected to find $jarDir in printed classpath"
|
"Expected to find $jarDir in printed classpath"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -540,7 +540,7 @@ transaction ourselves, we can automatically gather the signatures of the other r
|
|||||||
:dedent: 12
|
:dedent: 12
|
||||||
|
|
||||||
Each required signer will need to respond by invoking its own ``SignTransactionFlow`` subclass to check the
|
Each required signer will need to respond by invoking its own ``SignTransactionFlow`` subclass to check the
|
||||||
transaction and provide their signature if they are satisfied:
|
transaction (by implementing the ``checkTransaction`` method) and provide their signature if they are satisfied:
|
||||||
|
|
||||||
.. container:: codeset
|
.. container:: codeset
|
||||||
|
|
||||||
@ -556,6 +556,14 @@ transaction and provide their signature if they are satisfied:
|
|||||||
:end-before: DOCEND 16
|
:end-before: DOCEND 16
|
||||||
:dedent: 12
|
:dedent: 12
|
||||||
|
|
||||||
|
Types of things to check include:
|
||||||
|
|
||||||
|
* Ensuring that the transaction received is the expected type, i.e. has the expected type of inputs and outputs
|
||||||
|
* Checking that the properties of the outputs are expected, this is in the absence of integrating reference
|
||||||
|
data sources to facilitate this
|
||||||
|
* Checking that the transaction is not incorrectly spending (perhaps maliciously) asset states, as potentially
|
||||||
|
the transaction creator has access to some of signer's state references
|
||||||
|
|
||||||
SendTransactionFlow/ReceiveTransactionFlow
|
SendTransactionFlow/ReceiveTransactionFlow
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
Verifying a transaction received from a counterparty also requires verification of every transaction in its
|
Verifying a transaction received from a counterparty also requires verification of every transaction in its
|
||||||
|
@ -4,7 +4,6 @@ Component library
|
|||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
flow-library
|
|
||||||
contract-catalogue
|
contract-catalogue
|
||||||
financial-model
|
financial-model
|
||||||
contract-irs
|
contract-irs
|
@ -42,6 +42,7 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkArgument;
|
||||||
import static net.corda.core.contracts.ContractsDSL.requireThat;
|
import static net.corda.core.contracts.ContractsDSL.requireThat;
|
||||||
import static net.corda.core.crypto.Crypto.generateKeyPair;
|
import static net.corda.core.crypto.Crypto.generateKeyPair;
|
||||||
|
|
||||||
@ -665,7 +666,7 @@ public class FlowCookbookJava {
|
|||||||
requireThat(require -> {
|
requireThat(require -> {
|
||||||
// Any additional checking we see fit...
|
// Any additional checking we see fit...
|
||||||
DummyState outputState = (DummyState) stx.getTx().getOutputs().get(0).getData();
|
DummyState outputState = (DummyState) stx.getTx().getOutputs().get(0).getData();
|
||||||
assert (outputState.getMagicNumber() == 777);
|
checkArgument(outputState.getMagicNumber() == 777);
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -645,7 +645,7 @@ class ResponderFlow(val counterpartySession: FlowSession) : FlowLogic<Unit>() {
|
|||||||
override fun checkTransaction(stx: SignedTransaction) = requireThat {
|
override fun checkTransaction(stx: SignedTransaction) = requireThat {
|
||||||
// Any additional checking we see fit...
|
// Any additional checking we see fit...
|
||||||
val outputState = stx.tx.outputsOfType<DummyState>().single()
|
val outputState = stx.tx.outputsOfType<DummyState>().single()
|
||||||
assert(outputState.magicNumber == 777)
|
require(outputState.magicNumber == 777)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,61 +0,0 @@
|
|||||||
Flow library
|
|
||||||
============
|
|
||||||
|
|
||||||
There are a number of built-in flows supplied with Corda, which cover some core functionality.
|
|
||||||
|
|
||||||
FinalityFlow
|
|
||||||
------------
|
|
||||||
|
|
||||||
The ``FinalityFlow`` verifies the given transactions, then sends them to the specified notary.
|
|
||||||
|
|
||||||
If the notary agrees that the transactions are acceptable then they are from that point onwards committed to the ledger,
|
|
||||||
and will be written through to the vault. Additionally they will be distributed to the parties reflected in the participants
|
|
||||||
list of the states.
|
|
||||||
|
|
||||||
The transactions will be topologically sorted before commitment to ensure that dependencies are committed before
|
|
||||||
dependers, so you don't need to do this yourself.
|
|
||||||
|
|
||||||
The transactions are expected to have already been resolved: if their dependencies are not available in local storage or
|
|
||||||
within the given set, verification will fail. They must have signatures from all necessary parties other than the notary.
|
|
||||||
|
|
||||||
If specified, the extra recipients are sent all the given transactions. The base set of parties to inform of each
|
|
||||||
transaction are calculated on a per transaction basis from the contract-given set of participants.
|
|
||||||
|
|
||||||
The flow returns the same transactions, in the same order, with the additional signatures.
|
|
||||||
|
|
||||||
|
|
||||||
CollectSignaturesFlow
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
The ``CollectSignaturesFlow`` is used to automate the collection of signatures from the counterparties to a transaction.
|
|
||||||
|
|
||||||
You use the ``CollectSignaturesFlow`` by passing it a ``SignedTransaction`` which has at least been signed by yourself.
|
|
||||||
The flow will handle the resolution of the counterparty identities and request a signature from each counterparty.
|
|
||||||
|
|
||||||
Finally, the flow will verify all the signatures and return a ``SignedTransaction`` with all the collected signatures.
|
|
||||||
|
|
||||||
When using this flow on the responding side you will have to subclass the ``AbstractCollectSignaturesFlowResponder`` and
|
|
||||||
provide your own implementation of the ``checkTransaction`` method. This is to add additional verification logic on the
|
|
||||||
responder side. Types of things you will need to check include:
|
|
||||||
|
|
||||||
* Ensuring that the transaction you are receiving is the transaction you *EXPECT* to receive. I.e. is has the expected
|
|
||||||
type of inputs and outputs
|
|
||||||
* Checking that the properties of the outputs are as you would expect, this is in the absence of integrating reference
|
|
||||||
data sources to facilitate this for us
|
|
||||||
* Checking that the transaction is not incorrectly spending (perhaps maliciously) one of your asset states, as potentially
|
|
||||||
the transaction creator has access to some of your state references
|
|
||||||
|
|
||||||
Typically after calling the ``CollectSignaturesFlow`` you then called the ``FinalityFlow``.
|
|
||||||
|
|
||||||
SendTransactionFlow/ReceiveTransactionFlow
|
|
||||||
------------------------------------------
|
|
||||||
|
|
||||||
The ``SendTransactionFlow`` and ``ReceiveTransactionFlow`` are used to automate the verification of the transaction by
|
|
||||||
recursively checking the validity of all the dependencies. Once a transaction is received and checked it's inserted into
|
|
||||||
local storage so it can be relayed and won't be checked again.
|
|
||||||
|
|
||||||
The ``SendTransactionFlow`` sends the transaction to the counterparty and listen for data request as the counterparty
|
|
||||||
validating the transaction, extra checks can be implemented to restrict data access by overriding the ``verifyDataRequest``
|
|
||||||
method inside ``SendTransactionFlow``.
|
|
||||||
|
|
||||||
The ``ReceiveTransactionFlow`` returns a verified ``SignedTransaction``.
|
|
@ -76,7 +76,7 @@ logic behind common processes such as:
|
|||||||
* Gathering signatures from counterparty nodes
|
* Gathering signatures from counterparty nodes
|
||||||
* Verifying a chain of transactions
|
* Verifying a chain of transactions
|
||||||
|
|
||||||
Further information on the available built-in flows can be found in :doc:`flow-library`.
|
Further information on the available built-in flows can be found in :doc:`api-flows`.
|
||||||
|
|
||||||
Concurrency
|
Concurrency
|
||||||
-----------
|
-----------
|
||||||
|
@ -67,7 +67,7 @@ class StatusTransitions<out S, in R, T : StatusTrackingContractState<S, R>>(priv
|
|||||||
// for each combination of in x out which should normally be at most 1...
|
// for each combination of in x out which should normally be at most 1...
|
||||||
inputStates.forEach { inp ->
|
inputStates.forEach { inp ->
|
||||||
outputStates.forEach { outp ->
|
outputStates.forEach { outp ->
|
||||||
assert((inp != null) || (outp != null))
|
require(inp != null || outp != null)
|
||||||
val options = matchingTransitions(inp?.status, outp?.status, cmd.value)
|
val options = matchingTransitions(inp?.status, outp?.status, cmd.value)
|
||||||
|
|
||||||
val signerGroup = options.groupBy { it.signer }.entries.singleOrNull()
|
val signerGroup = options.groupBy { it.signer }.entries.singleOrNull()
|
||||||
|
@ -59,7 +59,7 @@ class CashScenarioRunner(options: OptionSet) : AbstractScenarioRunner(options),
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Verify
|
// Verify
|
||||||
assert(allPayments.size == (iterCount * 2)) { "Expected number of payments is ${iterCount * 2}, actual number of payments: ${allPayments.size}" }
|
require(allPayments.size == (iterCount * 2)) { "Expected number of payments is ${iterCount * 2}, actual number of payments: ${allPayments.size}" }
|
||||||
val criteria = QueryCriteria.VaultQueryCriteria(status = Vault.StateStatus.ALL)
|
val criteria = QueryCriteria.VaultQueryCriteria(status = Vault.StateStatus.ALL)
|
||||||
// TODO: Potentially implement paging validation logic for bigger data sets.
|
// TODO: Potentially implement paging validation logic for bigger data sets.
|
||||||
val pageSpecification = PageSpecification(pageNumber = 1, pageSize = Int.MAX_VALUE)
|
val pageSpecification = PageSpecification(pageNumber = 1, pageSize = Int.MAX_VALUE)
|
||||||
@ -83,7 +83,7 @@ class CashScenarioRunner(options: OptionSet) : AbstractScenarioRunner(options),
|
|||||||
val allStatesForParty = hashesByParty[recipient] ?: throw IllegalArgumentException("Cannot find states for party: $recipient in transaction: $transactionId")
|
val allStatesForParty = hashesByParty[recipient] ?: throw IllegalArgumentException("Cannot find states for party: $recipient in transaction: $transactionId")
|
||||||
|
|
||||||
// Recipient definitely should have hash of a transaction in its states.
|
// Recipient definitely should have hash of a transaction in its states.
|
||||||
assert(transactionId in allStatesForParty) { "States for party: $recipient should contain reference: $transactionId" }
|
require(transactionId in allStatesForParty) { "States for party: $recipient should contain reference: $transactionId" }
|
||||||
}
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
@ -31,7 +31,7 @@ class LinearStateScenarioRunner(options: OptionSet) : AbstractScenarioRunner(opt
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Verify
|
// Verify
|
||||||
assert(results.size == iterCount) { "Expected number of results is $iterCount, actual number of payments: ${results.size}" }
|
require(results.size == iterCount) { "Expected number of results is $iterCount, actual number of payments: ${results.size}" }
|
||||||
val criteria = QueryCriteria.VaultQueryCriteria(status = Vault.StateStatus.ALL)
|
val criteria = QueryCriteria.VaultQueryCriteria(status = Vault.StateStatus.ALL)
|
||||||
// TODO: Potentially implement paging validation logic for bigger data sets.
|
// TODO: Potentially implement paging validation logic for bigger data sets.
|
||||||
val pageSpecification = PageSpecification(pageNumber = 1, pageSize = Int.MAX_VALUE)
|
val pageSpecification = PageSpecification(pageNumber = 1, pageSize = Int.MAX_VALUE)
|
||||||
|
@ -214,7 +214,7 @@ class UniversalContract : Contract {
|
|||||||
val rest = extractRemainder(arr, action)
|
val rest = extractRemainder(arr, action)
|
||||||
|
|
||||||
// for now - let's assume not
|
// for now - let's assume not
|
||||||
assert(rest is Zero)
|
require(rest is Zero)
|
||||||
|
|
||||||
requireThat {
|
requireThat {
|
||||||
"action must have a time-window" using (tx.timeWindow != null)
|
"action must have a time-window" using (tx.timeWindow != null)
|
||||||
|
@ -135,7 +135,7 @@ fun actions(arrangement: Arrangement): Map<String, Action> = when (arrangement)
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun debugCompare(left: String, right: String) {
|
fun debugCompare(left: String, right: String) {
|
||||||
assert(left == right)
|
require(left == right)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <T> debugCompare(perLeft: Perceivable<T>, perRight: Perceivable<T>) {
|
fun <T> debugCompare(perLeft: Perceivable<T>, perRight: Perceivable<T>) {
|
||||||
@ -152,7 +152,7 @@ fun <T> debugCompare(perLeft: Perceivable<T>, perRight: Perceivable<T>) {
|
|||||||
if (perRight is PerceivableOperation) {
|
if (perRight is PerceivableOperation) {
|
||||||
debugCompare(perLeft.left, perRight.left)
|
debugCompare(perLeft.left, perRight.left)
|
||||||
debugCompare(perLeft.right, perRight.right)
|
debugCompare(perLeft.right, perRight.right)
|
||||||
assert(perLeft.op == perRight.op)
|
require(perLeft.op == perRight.op)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -162,7 +162,7 @@ fun <T> debugCompare(perLeft: Perceivable<T>, perRight: Perceivable<T>) {
|
|||||||
debugCompare(perLeft.interest, perRight.interest)
|
debugCompare(perLeft.interest, perRight.interest)
|
||||||
debugCompare(perLeft.start, perRight.start)
|
debugCompare(perLeft.start, perRight.start)
|
||||||
debugCompare(perLeft.end, perRight.end)
|
debugCompare(perLeft.end, perRight.end)
|
||||||
assert(perLeft.dayCountConvention == perRight.dayCountConvention)
|
require(perLeft.dayCountConvention == perRight.dayCountConvention)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -176,25 +176,25 @@ fun <T> debugCompare(perLeft: Perceivable<T>, perRight: Perceivable<T>) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(false)
|
require(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun debugCompare(parLeft: Party, parRight: Party) {
|
fun debugCompare(parLeft: Party, parRight: Party) {
|
||||||
assert(parLeft == parRight)
|
require(parLeft == parRight)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun debugCompare(left: Frequency, right: Frequency) {
|
fun debugCompare(left: Frequency, right: Frequency) {
|
||||||
assert(left == right)
|
require(left == right)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun debugCompare(left: LocalDate, right: LocalDate) {
|
fun debugCompare(left: LocalDate, right: LocalDate) {
|
||||||
assert(left == right)
|
require(left == right)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun debugCompare(parLeft: Set<Party>, parRight: Set<Party>) {
|
fun debugCompare(parLeft: Set<Party>, parRight: Set<Party>) {
|
||||||
if (parLeft == parRight) return
|
if (parLeft == parRight) return
|
||||||
|
|
||||||
assert(parLeft == parRight)
|
require(parLeft == parRight)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun debugCompare(arrLeft: Arrangement, arrRight: Arrangement) {
|
fun debugCompare(arrLeft: Arrangement, arrRight: Arrangement) {
|
||||||
@ -239,5 +239,5 @@ fun debugCompare(arrLeft: Arrangement, arrRight: Arrangement) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(false)
|
require(false)
|
||||||
}
|
}
|
||||||
|
@ -69,7 +69,7 @@ class ZkClientTests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
leaderGain.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
leaderGain.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
||||||
assert(client.isLeader())
|
require(client.isLeader())
|
||||||
client.close()
|
client.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ class ZkClientTests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
leaderGain.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
leaderGain.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
||||||
assert(client.isLeader())
|
require(client.isLeader())
|
||||||
client.relinquishLeadership()
|
client.relinquishLeadership()
|
||||||
leaderLoss.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
leaderLoss.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
||||||
assertFalse(client.isLeader())
|
assertFalse(client.isLeader())
|
||||||
@ -117,7 +117,7 @@ class ZkClientTests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
aliceLeaderGain.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
aliceLeaderGain.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
||||||
assert(alice.isLeader())
|
require(alice.isLeader())
|
||||||
if (bobLeaderGain.count == 0L) //wait to lose leadership if leader at some point
|
if (bobLeaderGain.count == 0L) //wait to lose leadership if leader at some point
|
||||||
bobLeaderLoss.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
bobLeaderLoss.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
||||||
assertFalse(bob.isLeader())
|
assertFalse(bob.isLeader())
|
||||||
@ -152,7 +152,7 @@ class ZkClientTests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
aliceLeaderGain.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
aliceLeaderGain.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
||||||
assert(alice.isLeader())
|
require(alice.isLeader())
|
||||||
if (bobLeaderGain.count == 0L) //wait to lose leadership if leader at some point
|
if (bobLeaderGain.count == 0L) //wait to lose leadership if leader at some point
|
||||||
bobLeaderLoss.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
bobLeaderLoss.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
||||||
assertFalse(bob.isLeader())
|
assertFalse(bob.isLeader())
|
||||||
@ -167,7 +167,7 @@ class ZkClientTests {
|
|||||||
bobLeaderGain2.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS) // wait for bob to become leader
|
bobLeaderGain2.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS) // wait for bob to become leader
|
||||||
|
|
||||||
assertFalse(alice.isLeader())
|
assertFalse(alice.isLeader())
|
||||||
assert(bob.isLeader())
|
require(bob.isLeader())
|
||||||
assertFalse(chip.isLeader())
|
assertFalse(chip.isLeader())
|
||||||
|
|
||||||
val chipLeaderGain2 = CountDownLatch(1)
|
val chipLeaderGain2 = CountDownLatch(1)
|
||||||
@ -178,7 +178,7 @@ class ZkClientTests {
|
|||||||
|
|
||||||
assertFalse(alice.isLeader())
|
assertFalse(alice.isLeader())
|
||||||
assertFalse(bob.isLeader())
|
assertFalse(bob.isLeader())
|
||||||
assert(chip.isLeader())
|
require(chip.isLeader())
|
||||||
|
|
||||||
listOf(alice, bob, chip).forEach { client -> client.close() }
|
listOf(alice, bob, chip).forEach { client -> client.close() }
|
||||||
}
|
}
|
||||||
@ -199,7 +199,7 @@ class ZkClientTests {
|
|||||||
chip.requestLeadership()
|
chip.requestLeadership()
|
||||||
|
|
||||||
chipLeaderGain.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
chipLeaderGain.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
||||||
assert(chip.isLeader())
|
require(chip.isLeader())
|
||||||
|
|
||||||
bob.start()
|
bob.start()
|
||||||
bob.addLeadershipListener(SyncHelperListener(bob.nodeId, bobLeaderGain, bobLeaderLoss))
|
bob.addLeadershipListener(SyncHelperListener(bob.nodeId, bobLeaderGain, bobLeaderLoss))
|
||||||
@ -207,7 +207,7 @@ class ZkClientTests {
|
|||||||
|
|
||||||
chipLeaderLoss.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
chipLeaderLoss.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
||||||
bobLeaderGain.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
bobLeaderGain.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
||||||
assert(bob.isLeader())
|
require(bob.isLeader())
|
||||||
assertFalse(chip.isLeader())
|
assertFalse(chip.isLeader())
|
||||||
|
|
||||||
alice.start()
|
alice.start()
|
||||||
@ -217,7 +217,7 @@ class ZkClientTests {
|
|||||||
bobLeaderLoss.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
bobLeaderLoss.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
||||||
aliceLeaderGain.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
aliceLeaderGain.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
||||||
|
|
||||||
assert(alice.isLeader())
|
require(alice.isLeader())
|
||||||
assertFalse(bob.isLeader())
|
assertFalse(bob.isLeader())
|
||||||
assertFalse(chip.isLeader())
|
assertFalse(chip.isLeader())
|
||||||
|
|
||||||
@ -249,14 +249,14 @@ class ZkClientTests {
|
|||||||
aliceLeaderGain.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
aliceLeaderGain.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
||||||
if (chipLeaderGain.count == 0L) //wait to lose leadership if leader at some point
|
if (chipLeaderGain.count == 0L) //wait to lose leadership if leader at some point
|
||||||
chipLeaderLoss.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
chipLeaderLoss.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
||||||
assert(alice.isLeader())
|
require(alice.isLeader())
|
||||||
assertFalse(chip.isLeader())
|
assertFalse(chip.isLeader())
|
||||||
|
|
||||||
bob.start()
|
bob.start()
|
||||||
bob.addLeadershipListener(SyncHelperListener(bob.nodeId, bobLeaderGain))
|
bob.addLeadershipListener(SyncHelperListener(bob.nodeId, bobLeaderGain))
|
||||||
bob.requestLeadership()
|
bob.requestLeadership()
|
||||||
|
|
||||||
assert(alice.isLeader())
|
require(alice.isLeader())
|
||||||
assertFalse(bob.isLeader())
|
assertFalse(bob.isLeader())
|
||||||
assertFalse(chip.isLeader())
|
assertFalse(chip.isLeader())
|
||||||
|
|
||||||
@ -270,7 +270,7 @@ class ZkClientTests {
|
|||||||
chipLeaderLoss2.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
chipLeaderLoss2.await(ELECTION_TIMEOUT, TimeUnit.MILLISECONDS)
|
||||||
|
|
||||||
assertFalse(alice.isLeader())
|
assertFalse(alice.isLeader())
|
||||||
assert(bob.isLeader())
|
require(bob.isLeader())
|
||||||
assertFalse(chip.isLeader())
|
assertFalse(chip.isLeader())
|
||||||
|
|
||||||
listOf(alice, bob, chip).forEach { client -> client.close() }
|
listOf(alice, bob, chip).forEach { client -> client.close() }
|
||||||
@ -318,8 +318,8 @@ class ZkClientTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(leaderCount <= 1)
|
require(leaderCount <= 1)
|
||||||
assert(leaderBuffer.size <= 1)
|
require(leaderBuffer.size <= 1)
|
||||||
if (leaderBuffer.size == 1) {
|
if (leaderBuffer.size == 1) {
|
||||||
println(leaderBuffer)
|
println(leaderBuffer)
|
||||||
assertEquals(leaderBuffer.first(), leaderId)
|
assertEquals(leaderBuffer.first(), leaderId)
|
||||||
|
@ -194,7 +194,7 @@ class MySQLNotaryServiceTests : IntegrationTest() {
|
|||||||
val transactionCount = 100
|
val transactionCount = 100
|
||||||
val results = notaryNode.services.startFlow(RequestGenerationFlow(notaryService, transactionCount)).resultFuture.get()
|
val results = notaryNode.services.startFlow(RequestGenerationFlow(notaryService, transactionCount)).resultFuture.get()
|
||||||
assertEquals(transactionCount, results.size)
|
assertEquals(transactionCount, results.size)
|
||||||
assert(results.all { it === Result.Success })
|
require(results.all { it === Result.Success })
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -203,7 +203,7 @@ class MySQLNotaryServiceTests : IntegrationTest() {
|
|||||||
val transactionCount = 10
|
val transactionCount = 10
|
||||||
val results = notaryNode.services.startFlow(RequestGenerationFlow(notaryService, transactionCount, 50)).resultFuture.get()
|
val results = notaryNode.services.startFlow(RequestGenerationFlow(notaryService, transactionCount, 50)).resultFuture.get()
|
||||||
assertEquals(transactionCount, results.size)
|
assertEquals(transactionCount, results.size)
|
||||||
assert(results.all { it === Result.Success })
|
require(results.all { it === Result.Success })
|
||||||
}
|
}
|
||||||
|
|
||||||
private class RequestGenerationFlow(
|
private class RequestGenerationFlow(
|
||||||
|
@ -87,7 +87,7 @@ class ImmutableClassSerializer<T : Any>(val klass: KClass<T>) : Serializer<T>()
|
|||||||
// Verify that this class is immutable (all properties are final).
|
// Verify that this class is immutable (all properties are final).
|
||||||
// We disable this check inside SGX as the reflection blows up.
|
// We disable this check inside SGX as the reflection blows up.
|
||||||
if (!SgxSupport.isInsideEnclave) {
|
if (!SgxSupport.isInsideEnclave) {
|
||||||
assert(props.none { it is KMutableProperty<*> })
|
require(props.none { it is KMutableProperty<*> })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,7 +123,7 @@ class ImmutableClassSerializer<T : Any>(val klass: KClass<T>) : Serializer<T>()
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun read(kryo: Kryo, input: Input, type: Class<T>): T {
|
override fun read(kryo: Kryo, input: Input, type: Class<T>): T {
|
||||||
assert(type.kotlin == klass)
|
require(type.kotlin == klass)
|
||||||
val numFields = input.readVarInt(true)
|
val numFields = input.readVarInt(true)
|
||||||
val fieldTypeHash = input.readInt()
|
val fieldTypeHash = input.readInt()
|
||||||
|
|
||||||
|
@ -34,6 +34,6 @@ class EnterpriseNodeTest {
|
|||||||
|
|
||||||
val expectedPattern = if (custom == null) "${expectedName}_London_GB_\\d+_\\d+_\\d+_\\d+" else expectedName
|
val expectedPattern = if (custom == null) "${expectedName}_London_GB_\\d+_\\d+_\\d+_\\d+" else expectedName
|
||||||
val createdName = EnterpriseNode.getGraphitePrefix(nodeConfig)
|
val createdName = EnterpriseNode.getGraphitePrefix(nodeConfig)
|
||||||
assert(Regex(expectedPattern).matches(createdName), { "${createdName} did not match ${expectedPattern}" })
|
require(Regex(expectedPattern).matches(createdName), { "${createdName} did not match ${expectedPattern}" })
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -131,7 +131,7 @@ class RPCSecurityManagerTest {
|
|||||||
id = AuthServiceId("TEST"))
|
id = AuthServiceId("TEST"))
|
||||||
val subject = userRealm.buildSubject("foo")
|
val subject = userRealm.buildSubject("foo")
|
||||||
for (action in allActions) {
|
for (action in allActions) {
|
||||||
assert(!subject.isPermitted(action)) {
|
require(!subject.isPermitted(action)) {
|
||||||
"Invalid subject should not be allowed to call $action"
|
"Invalid subject should not be allowed to call $action"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -153,24 +153,24 @@ class RPCSecurityManagerTest {
|
|||||||
for (request in permitted) {
|
for (request in permitted) {
|
||||||
val call = request.first()
|
val call = request.first()
|
||||||
val args = request.drop(1).toTypedArray()
|
val args = request.drop(1).toTypedArray()
|
||||||
assert(subject.isPermitted(request.first(), *args)) {
|
require(subject.isPermitted(request.first(), *args)) {
|
||||||
"User ${subject.principal} should be permitted $call with target '${request.toList()}'"
|
"User ${subject.principal} should be permitted $call with target '${request.toList()}'"
|
||||||
}
|
}
|
||||||
if (args.isEmpty()) {
|
if (args.isEmpty()) {
|
||||||
assert(subject.isPermitted(request.first(), "XXX")) {
|
require(subject.isPermitted(request.first(), "XXX")) {
|
||||||
"User ${subject.principal} should be permitted $call with any target"
|
"User ${subject.principal} should be permitted $call with any target"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
disabled.forEach {
|
disabled.forEach {
|
||||||
assert(!subject.isPermitted(it)) {
|
require(!subject.isPermitted(it)) {
|
||||||
"Permissions $permissions should not allow to call $it"
|
"Permissions $permissions should not allow to call $it"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
disabled.filter { !permitted.contains(listOf(it, "foo")) }.forEach {
|
disabled.filter { !permitted.contains(listOf(it, "foo")) }.forEach {
|
||||||
assert(!subject.isPermitted(it, "foo")) {
|
require(!subject.isPermitted(it, "foo")) {
|
||||||
"Permissions $permissions should not allow to call $it with argument 'foo'"
|
"Permissions $permissions should not allow to call $it with argument 'foo'"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -149,7 +149,7 @@ class ClassCarpenterImpl(cl: ClassLoader, override val whitelist: ClassWhitelist
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(schema.name in _loaded)
|
require(schema.name in _loaded)
|
||||||
|
|
||||||
return _loaded[schema.name]!!
|
return _loaded[schema.name]!!
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,7 @@ abstract class MetaCarpenterBase(val schemas: CarpenterMetaSchema, val cc: Class
|
|||||||
// carpented class existing and remove it from their dependency list, If that
|
// carpented class existing and remove it from their dependency list, If that
|
||||||
// list is now empty we have no impediment to carpenting that class up
|
// list is now empty we have no impediment to carpenting that class up
|
||||||
schemas.dependsOn.remove(newObject.name)?.forEach { dependent ->
|
schemas.dependsOn.remove(newObject.name)?.forEach { dependent ->
|
||||||
assert(newObject.name in schemas.dependencies[dependent]!!.second)
|
require(newObject.name in schemas.dependencies[dependent]!!.second)
|
||||||
|
|
||||||
schemas.dependencies[dependent]?.second?.remove(newObject.name)
|
schemas.dependencies[dependent]?.second?.remove(newObject.name)
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ open class NonNullableField(field: Class<out Any?>) : ClassField(field) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun nullTest(mv: MethodVisitor, slot: Int) {
|
override fun nullTest(mv: MethodVisitor, slot: Int) {
|
||||||
assert(name != unsetName)
|
require(name != unsetName)
|
||||||
|
|
||||||
if (!field.isPrimitive) {
|
if (!field.isPrimitive) {
|
||||||
with(mv) {
|
with(mv) {
|
||||||
@ -113,7 +113,7 @@ class NullableField(field: Class<out Any?>) : ClassField(field) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun nullTest(mv: MethodVisitor, slot: Int) {
|
override fun nullTest(mv: MethodVisitor, slot: Int) {
|
||||||
assert(name != unsetName)
|
require(name != unsetName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,8 +180,8 @@ class ClassCarpenterTest {
|
|||||||
|
|
||||||
val iface = cc.build(schema1)
|
val iface = cc.build(schema1)
|
||||||
|
|
||||||
assert(iface.isInterface)
|
require(iface.isInterface)
|
||||||
assert(iface.constructors.isEmpty())
|
require(iface.constructors.isEmpty())
|
||||||
assertEquals(iface.declaredMethods.size, 1)
|
assertEquals(iface.declaredMethods.size, 1)
|
||||||
assertEquals(iface.declaredMethods[0].name, "getA")
|
assertEquals(iface.declaredMethods[0].name, "getA")
|
||||||
|
|
||||||
|
@ -40,15 +40,15 @@ class CompositeMembers : AmqpCarpenterBase(AllWhitelist) {
|
|||||||
val b = B(A(testA), testB)
|
val b = B(A(testA), testB)
|
||||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(b))
|
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(b))
|
||||||
|
|
||||||
assert(obj.obj is B)
|
require(obj.obj is B)
|
||||||
|
|
||||||
val amqpObj = obj.obj as B
|
val amqpObj = obj.obj as B
|
||||||
|
|
||||||
assertEquals(testB, amqpObj.b)
|
assertEquals(testB, amqpObj.b)
|
||||||
assertEquals(testA, amqpObj.a.a)
|
assertEquals(testA, amqpObj.a.a)
|
||||||
assertEquals(2, obj.envelope.schema.types.size)
|
assertEquals(2, obj.envelope.schema.types.size)
|
||||||
assert(obj.envelope.schema.types[0] is CompositeType)
|
require(obj.envelope.schema.types[0] is CompositeType)
|
||||||
assert(obj.envelope.schema.types[1] is CompositeType)
|
require(obj.envelope.schema.types[1] is CompositeType)
|
||||||
|
|
||||||
var amqpSchemaA: CompositeType? = null
|
var amqpSchemaA: CompositeType? = null
|
||||||
var amqpSchemaB: CompositeType? = null
|
var amqpSchemaB: CompositeType? = null
|
||||||
@ -60,8 +60,8 @@ class CompositeMembers : AmqpCarpenterBase(AllWhitelist) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(amqpSchemaA != null)
|
require(amqpSchemaA != null)
|
||||||
assert(amqpSchemaB != null)
|
require(amqpSchemaB != null)
|
||||||
|
|
||||||
// Just ensure the amqp schema matches what we want before we go messing
|
// Just ensure the amqp schema matches what we want before we go messing
|
||||||
// around with the internals
|
// around with the internals
|
||||||
@ -78,9 +78,9 @@ class CompositeMembers : AmqpCarpenterBase(AllWhitelist) {
|
|||||||
val metaSchema = obj.envelope.schema.carpenterSchema(ClassLoader.getSystemClassLoader())
|
val metaSchema = obj.envelope.schema.carpenterSchema(ClassLoader.getSystemClassLoader())
|
||||||
|
|
||||||
// if we know all the classes there is nothing to really achieve here
|
// if we know all the classes there is nothing to really achieve here
|
||||||
assert(metaSchema.carpenterSchemas.isEmpty())
|
require(metaSchema.carpenterSchemas.isEmpty())
|
||||||
assert(metaSchema.dependsOn.isEmpty())
|
require(metaSchema.dependsOn.isEmpty())
|
||||||
assert(metaSchema.dependencies.isEmpty())
|
require(metaSchema.dependencies.isEmpty())
|
||||||
}
|
}
|
||||||
|
|
||||||
// you cannot have an element of a composite class we know about
|
// you cannot have an element of a composite class we know about
|
||||||
@ -102,7 +102,7 @@ class CompositeMembers : AmqpCarpenterBase(AllWhitelist) {
|
|||||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(b))
|
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(b))
|
||||||
val amqpSchema = obj.envelope.schema.mangleNames(listOf(classTestName("A")))
|
val amqpSchema = obj.envelope.schema.mangleNames(listOf(classTestName("A")))
|
||||||
|
|
||||||
assert(obj.obj is B)
|
require(obj.obj is B)
|
||||||
|
|
||||||
amqpSchema.carpenterSchema(ClassLoader.getSystemClassLoader())
|
amqpSchema.carpenterSchema(ClassLoader.getSystemClassLoader())
|
||||||
}
|
}
|
||||||
@ -121,7 +121,7 @@ class CompositeMembers : AmqpCarpenterBase(AllWhitelist) {
|
|||||||
val b = B(A(testA), testB)
|
val b = B(A(testA), testB)
|
||||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(b))
|
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(b))
|
||||||
|
|
||||||
assert(obj.obj is B)
|
require(obj.obj is B)
|
||||||
|
|
||||||
val amqpSchema = obj.envelope.schema.mangleNames(listOf(classTestName("B")))
|
val amqpSchema = obj.envelope.schema.mangleNames(listOf(classTestName("B")))
|
||||||
val carpenterSchema = amqpSchema.carpenterSchema(ClassLoader.getSystemClassLoader())
|
val carpenterSchema = amqpSchema.carpenterSchema(ClassLoader.getSystemClassLoader())
|
||||||
@ -132,7 +132,7 @@ class CompositeMembers : AmqpCarpenterBase(AllWhitelist) {
|
|||||||
|
|
||||||
metaCarpenter.build()
|
metaCarpenter.build()
|
||||||
|
|
||||||
assert(mangleName(classTestName("B")) in metaCarpenter.objects)
|
require(mangleName(classTestName("B")) in metaCarpenter.objects)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -149,7 +149,7 @@ class CompositeMembers : AmqpCarpenterBase(AllWhitelist) {
|
|||||||
val b = B(A(testA), testB)
|
val b = B(A(testA), testB)
|
||||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(b))
|
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(b))
|
||||||
|
|
||||||
assert(obj.obj is B)
|
require(obj.obj is B)
|
||||||
|
|
||||||
val amqpSchema = obj.envelope.schema.mangleNames(listOf(classTestName("A"), classTestName("B")))
|
val amqpSchema = obj.envelope.schema.mangleNames(listOf(classTestName("A"), classTestName("B")))
|
||||||
val carpenterSchema = amqpSchema.carpenterSchema(ClassLoader.getSystemClassLoader())
|
val carpenterSchema = amqpSchema.carpenterSchema(ClassLoader.getSystemClassLoader())
|
||||||
@ -159,9 +159,9 @@ class CompositeMembers : AmqpCarpenterBase(AllWhitelist) {
|
|||||||
assertEquals(1, carpenterSchema.size)
|
assertEquals(1, carpenterSchema.size)
|
||||||
assertEquals(mangleName(classTestName("A")), carpenterSchema.carpenterSchemas.first().name)
|
assertEquals(mangleName(classTestName("A")), carpenterSchema.carpenterSchemas.first().name)
|
||||||
assertEquals(1, carpenterSchema.dependencies.size)
|
assertEquals(1, carpenterSchema.dependencies.size)
|
||||||
assert(mangleName(classTestName("B")) in carpenterSchema.dependencies)
|
require(mangleName(classTestName("B")) in carpenterSchema.dependencies)
|
||||||
assertEquals(1, carpenterSchema.dependsOn.size)
|
assertEquals(1, carpenterSchema.dependsOn.size)
|
||||||
assert(mangleName(classTestName("A")) in carpenterSchema.dependsOn)
|
require(mangleName(classTestName("A")) in carpenterSchema.dependsOn)
|
||||||
|
|
||||||
val metaCarpenter = TestMetaCarpenter(carpenterSchema, ClassCarpenterImpl(whitelist = AllWhitelist))
|
val metaCarpenter = TestMetaCarpenter(carpenterSchema, ClassCarpenterImpl(whitelist = AllWhitelist))
|
||||||
|
|
||||||
@ -182,8 +182,8 @@ class CompositeMembers : AmqpCarpenterBase(AllWhitelist) {
|
|||||||
|
|
||||||
// second manual iteration, will carpent B
|
// second manual iteration, will carpent B
|
||||||
metaCarpenter.build()
|
metaCarpenter.build()
|
||||||
assert(mangleName(classTestName("A")) in metaCarpenter.objects)
|
require(mangleName(classTestName("A")) in metaCarpenter.objects)
|
||||||
assert(mangleName(classTestName("B")) in metaCarpenter.objects)
|
require(mangleName(classTestName("B")) in metaCarpenter.objects)
|
||||||
|
|
||||||
// and we must be finished
|
// and we must be finished
|
||||||
assertTrue(carpenterSchema.carpenterSchemas.isEmpty())
|
assertTrue(carpenterSchema.carpenterSchemas.isEmpty())
|
||||||
@ -208,7 +208,7 @@ class CompositeMembers : AmqpCarpenterBase(AllWhitelist) {
|
|||||||
val c = C(B(testA, testB), testC)
|
val c = C(B(testA, testB), testC)
|
||||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(c))
|
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(c))
|
||||||
|
|
||||||
assert(obj.obj is C)
|
require(obj.obj is C)
|
||||||
|
|
||||||
val amqpSchema = obj.envelope.schema.mangleNames(listOf(classTestName("A"), classTestName("B")))
|
val amqpSchema = obj.envelope.schema.mangleNames(listOf(classTestName("A"), classTestName("B")))
|
||||||
|
|
||||||
@ -234,7 +234,7 @@ class CompositeMembers : AmqpCarpenterBase(AllWhitelist) {
|
|||||||
val c = C(B(testA, testB), testC)
|
val c = C(B(testA, testB), testC)
|
||||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(c))
|
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(c))
|
||||||
|
|
||||||
assert(obj.obj is C)
|
require(obj.obj is C)
|
||||||
|
|
||||||
val amqpSchema = obj.envelope.schema.mangleNames(listOf(classTestName("A"), classTestName("B")))
|
val amqpSchema = obj.envelope.schema.mangleNames(listOf(classTestName("A"), classTestName("B")))
|
||||||
|
|
||||||
@ -260,7 +260,7 @@ class CompositeMembers : AmqpCarpenterBase(AllWhitelist) {
|
|||||||
val c = C(B(testA, testB), testC)
|
val c = C(B(testA, testB), testC)
|
||||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(c))
|
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(c))
|
||||||
|
|
||||||
assert(obj.obj is C)
|
require(obj.obj is C)
|
||||||
|
|
||||||
val carpenterSchema = obj.envelope.schema.mangleNames(listOf(classTestName("A"), classTestName("B")))
|
val carpenterSchema = obj.envelope.schema.mangleNames(listOf(classTestName("A"), classTestName("B")))
|
||||||
TestMetaCarpenter(carpenterSchema.carpenterSchema(
|
TestMetaCarpenter(carpenterSchema.carpenterSchema(
|
||||||
@ -283,7 +283,7 @@ class CompositeMembers : AmqpCarpenterBase(AllWhitelist) {
|
|||||||
val b = B(testA, testB)
|
val b = B(testA, testB)
|
||||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(b))
|
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(b))
|
||||||
|
|
||||||
assert(obj.obj is B)
|
require(obj.obj is B)
|
||||||
|
|
||||||
val carpenterSchema = obj.envelope.schema.mangleNames(listOf(classTestName("A"), classTestName("B")))
|
val carpenterSchema = obj.envelope.schema.mangleNames(listOf(classTestName("A"), classTestName("B")))
|
||||||
val metaCarpenter = TestMetaCarpenter(carpenterSchema.carpenterSchema())
|
val metaCarpenter = TestMetaCarpenter(carpenterSchema.carpenterSchema())
|
||||||
|
@ -31,13 +31,13 @@ class MultiMemberCompositeSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWhi
|
|||||||
val a = A(testA, testB)
|
val a = A(testA, testB)
|
||||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||||
|
|
||||||
assert(obj.obj is A)
|
require(obj.obj is A)
|
||||||
val amqpObj = obj.obj as A
|
val amqpObj = obj.obj as A
|
||||||
|
|
||||||
assertEquals(testA, amqpObj.a)
|
assertEquals(testA, amqpObj.a)
|
||||||
assertEquals(testB, amqpObj.b)
|
assertEquals(testB, amqpObj.b)
|
||||||
assertEquals(1, obj.envelope.schema.types.size)
|
assertEquals(1, obj.envelope.schema.types.size)
|
||||||
assert(obj.envelope.schema.types[0] is CompositeType)
|
require(obj.envelope.schema.types[0] is CompositeType)
|
||||||
|
|
||||||
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
||||||
|
|
||||||
@ -75,13 +75,13 @@ class MultiMemberCompositeSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWhi
|
|||||||
val a = A(testA, testB)
|
val a = A(testA, testB)
|
||||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||||
|
|
||||||
assert(obj.obj is A)
|
require(obj.obj is A)
|
||||||
val amqpObj = obj.obj as A
|
val amqpObj = obj.obj as A
|
||||||
|
|
||||||
assertEquals(testA, amqpObj.a)
|
assertEquals(testA, amqpObj.a)
|
||||||
assertEquals(testB, amqpObj.b)
|
assertEquals(testB, amqpObj.b)
|
||||||
assertEquals(1, obj.envelope.schema.types.size)
|
assertEquals(1, obj.envelope.schema.types.size)
|
||||||
assert(obj.envelope.schema.types[0] is CompositeType)
|
require(obj.envelope.schema.types[0] is CompositeType)
|
||||||
|
|
||||||
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
||||||
|
|
||||||
|
@ -28,12 +28,12 @@ class SingleMemberCompositeSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWh
|
|||||||
val a = A(test)
|
val a = A(test)
|
||||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||||
|
|
||||||
assert(obj.obj is A)
|
require(obj.obj is A)
|
||||||
val amqpObj = obj.obj as A
|
val amqpObj = obj.obj as A
|
||||||
|
|
||||||
assertEquals(test, amqpObj.a)
|
assertEquals(test, amqpObj.a)
|
||||||
assertEquals(1, obj.envelope.schema.types.size)
|
assertEquals(1, obj.envelope.schema.types.size)
|
||||||
assert(obj.envelope.schema.types[0] is CompositeType)
|
require(obj.envelope.schema.types[0] is CompositeType)
|
||||||
|
|
||||||
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
||||||
|
|
||||||
@ -64,12 +64,12 @@ class SingleMemberCompositeSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWh
|
|||||||
|
|
||||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||||
|
|
||||||
assert(obj.obj is A)
|
require(obj.obj is A)
|
||||||
val amqpObj = obj.obj as A
|
val amqpObj = obj.obj as A
|
||||||
|
|
||||||
assertEquals(test, amqpObj.a)
|
assertEquals(test, amqpObj.a)
|
||||||
assertEquals(1, obj.envelope.schema.types.size)
|
assertEquals(1, obj.envelope.schema.types.size)
|
||||||
assert(obj.envelope.schema.types[0] is CompositeType)
|
require(obj.envelope.schema.types[0] is CompositeType)
|
||||||
|
|
||||||
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
||||||
val carpenterSchema = CarpenterMetaSchema.newInstance()
|
val carpenterSchema = CarpenterMetaSchema.newInstance()
|
||||||
@ -94,12 +94,12 @@ class SingleMemberCompositeSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWh
|
|||||||
val a = A(test)
|
val a = A(test)
|
||||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||||
|
|
||||||
assert(obj.obj is A)
|
require(obj.obj is A)
|
||||||
val amqpObj = obj.obj as A
|
val amqpObj = obj.obj as A
|
||||||
|
|
||||||
assertEquals(test, amqpObj.a)
|
assertEquals(test, amqpObj.a)
|
||||||
assertEquals(1, obj.envelope.schema.types.size)
|
assertEquals(1, obj.envelope.schema.types.size)
|
||||||
assert(obj.envelope.schema.types[0] is CompositeType)
|
require(obj.envelope.schema.types[0] is CompositeType)
|
||||||
|
|
||||||
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
||||||
|
|
||||||
@ -129,12 +129,12 @@ class SingleMemberCompositeSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWh
|
|||||||
val a = A(test)
|
val a = A(test)
|
||||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||||
|
|
||||||
assert(obj.obj is A)
|
require(obj.obj is A)
|
||||||
val amqpObj = obj.obj as A
|
val amqpObj = obj.obj as A
|
||||||
|
|
||||||
assertEquals(test, amqpObj.a)
|
assertEquals(test, amqpObj.a)
|
||||||
assertEquals(1, obj.envelope.schema.types.size)
|
assertEquals(1, obj.envelope.schema.types.size)
|
||||||
assert(obj.envelope.schema.types[0] is CompositeType)
|
require(obj.envelope.schema.types[0] is CompositeType)
|
||||||
|
|
||||||
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
||||||
|
|
||||||
@ -164,12 +164,12 @@ class SingleMemberCompositeSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWh
|
|||||||
val a = A(test)
|
val a = A(test)
|
||||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||||
|
|
||||||
assert(obj.obj is A)
|
require(obj.obj is A)
|
||||||
val amqpObj = obj.obj as A
|
val amqpObj = obj.obj as A
|
||||||
|
|
||||||
assertEquals(test, amqpObj.a)
|
assertEquals(test, amqpObj.a)
|
||||||
assertEquals(1, obj.envelope.schema.types.size)
|
assertEquals(1, obj.envelope.schema.types.size)
|
||||||
assert(obj.envelope.schema.types[0] is CompositeType)
|
require(obj.envelope.schema.types[0] is CompositeType)
|
||||||
|
|
||||||
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
||||||
|
|
||||||
@ -199,12 +199,12 @@ class SingleMemberCompositeSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWh
|
|||||||
val a = A(test)
|
val a = A(test)
|
||||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||||
|
|
||||||
assert(obj.obj is A)
|
require(obj.obj is A)
|
||||||
val amqpObj = obj.obj as A
|
val amqpObj = obj.obj as A
|
||||||
|
|
||||||
assertEquals(test, amqpObj.a)
|
assertEquals(test, amqpObj.a)
|
||||||
assertEquals(1, obj.envelope.schema.types.size)
|
assertEquals(1, obj.envelope.schema.types.size)
|
||||||
assert(obj.envelope.schema.types[0] is CompositeType)
|
require(obj.envelope.schema.types[0] is CompositeType)
|
||||||
|
|
||||||
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user