mirror of
https://github.com/corda/corda.git
synced 2025-03-22 03:55:26 +00:00
Carpenter bug fixes
Squashed commit messages: * Nested schema creation now works with dependencies recursvly created in the carpenter * Remove spurious prints from tests * Remove warnings * Don't add cladd member dep by name Since that's the name of the field, not the type we depend on. If we do we'll never actually be able to craft the type as the dependency chain will be horribly broken Various bug fixes * Fix merge issue where types weren't being seen as Prims * IntelliJ auto code cleanup / reformat * Whitespace changes * Add comment blocking as I like seeing it in files
This commit is contained in:
parent
d76c1e75a4
commit
9ab6a72ea8
@ -12,12 +12,6 @@ import java.lang.reflect.GenericArrayType
|
||||
import java.lang.reflect.ParameterizedType
|
||||
import java.lang.reflect.Type
|
||||
import java.lang.reflect.WildcardType
|
||||
import java.lang.Float
|
||||
import java.lang.Long
|
||||
import java.lang.Short
|
||||
import java.lang.Double
|
||||
import java.lang.Character
|
||||
//import java.lang.Boolean
|
||||
import java.util.*
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import java.util.concurrent.CopyOnWriteArrayList
|
||||
|
@ -7,10 +7,12 @@ import net.corda.core.identity.AbstractParty
|
||||
import net.corda.core.serialization.CordaSerializable
|
||||
import net.corda.core.serialization.EmptyWhitelist
|
||||
import net.corda.core.serialization.KryoAMQPSerializer
|
||||
import net.corda.core.CordaRuntimeException
|
||||
import net.corda.core.serialization.amqp.SerializerFactory.Companion.isPrimitive
|
||||
import net.corda.core.utilities.CordaRuntimeException
|
||||
import net.corda.nodeapi.RPCException
|
||||
import net.corda.testing.MEGA_CORP
|
||||
import net.corda.testing.MEGA_CORP_PUBKEY
|
||||
import org.apache.qpid.proton.amqp.*
|
||||
import org.apache.qpid.proton.codec.DecoderImpl
|
||||
import org.apache.qpid.proton.codec.EncoderImpl
|
||||
import org.junit.Test
|
||||
@ -27,6 +29,14 @@ import kotlin.test.assertTrue
|
||||
class SerializationOutputTests {
|
||||
data class Foo(val bar: String, val pub: Int)
|
||||
|
||||
data class testFloat(val f: Float)
|
||||
|
||||
data class testDouble(val d: Double)
|
||||
|
||||
data class testShort(val s: Short)
|
||||
|
||||
data class testBoolean(val b : Boolean)
|
||||
|
||||
interface FooInterface {
|
||||
val pub: Int
|
||||
}
|
||||
@ -159,12 +169,61 @@ class SerializationOutputTests {
|
||||
return desObj2
|
||||
}
|
||||
|
||||
@Test
|
||||
fun isPrimitive() {
|
||||
assertTrue(isPrimitive(Character::class.java))
|
||||
assertTrue(isPrimitive(Boolean::class.java))
|
||||
assertTrue(isPrimitive(Byte::class.java))
|
||||
assertTrue(isPrimitive(UnsignedByte::class.java))
|
||||
assertTrue(isPrimitive(Short::class.java))
|
||||
assertTrue(isPrimitive(UnsignedShort::class.java))
|
||||
assertTrue(isPrimitive(Int::class.java))
|
||||
assertTrue(isPrimitive(UnsignedInteger::class.java))
|
||||
assertTrue(isPrimitive(Long::class.java))
|
||||
assertTrue(isPrimitive(UnsignedLong::class.java))
|
||||
assertTrue(isPrimitive(Float::class.java))
|
||||
assertTrue(isPrimitive(Double::class.java))
|
||||
assertTrue(isPrimitive(Decimal32::class.java))
|
||||
assertTrue(isPrimitive(Decimal64::class.java))
|
||||
assertTrue(isPrimitive(Decimal128::class.java))
|
||||
assertTrue(isPrimitive(Char::class.java))
|
||||
assertTrue(isPrimitive(Date::class.java))
|
||||
assertTrue(isPrimitive(UUID::class.java))
|
||||
assertTrue(isPrimitive(ByteArray::class.java))
|
||||
assertTrue(isPrimitive(String::class.java))
|
||||
assertTrue(isPrimitive(Symbol::class.java))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test foo`() {
|
||||
val obj = Foo("Hello World!", 123)
|
||||
serdes(obj)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test float`() {
|
||||
val obj = testFloat(10.0F)
|
||||
serdes(obj)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test double`() {
|
||||
val obj = testDouble(10.0)
|
||||
serdes(obj)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test short`() {
|
||||
val obj = testShort(1)
|
||||
serdes(obj)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test bool`() {
|
||||
val obj = testBoolean(true)
|
||||
serdes(obj)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test foo implements`() {
|
||||
val obj = FooImplements("Hello World!", 123)
|
||||
@ -524,4 +583,4 @@ class SerializationOutputTests {
|
||||
val obj = StateRef(SecureHash.randomSHA256(), 0)
|
||||
serdes(obj, factory, factory2)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,8 @@ import net.corda.core.serialization.carpenter.Schema
|
||||
|
||||
import net.corda.core.serialization.amqp.CompositeType
|
||||
|
||||
/**********************************************************************************************************************/
|
||||
|
||||
abstract class MetaCarpenterBase (val schemas : CarpenterSchemas) {
|
||||
|
||||
private val cc = ClassCarpenter()
|
||||
@ -35,6 +37,8 @@ abstract class MetaCarpenterBase (val schemas : CarpenterSchemas) {
|
||||
abstract fun build()
|
||||
}
|
||||
|
||||
/**********************************************************************************************************************/
|
||||
|
||||
class MetaCarpenter (schemas : CarpenterSchemas) : MetaCarpenterBase (schemas) {
|
||||
override fun build() {
|
||||
while (schemas.carpenterSchemas.isNotEmpty()) {
|
||||
@ -44,6 +48,8 @@ class MetaCarpenter (schemas : CarpenterSchemas) : MetaCarpenterBase (schemas) {
|
||||
}
|
||||
}
|
||||
|
||||
/**********************************************************************************************************************/
|
||||
|
||||
class TestMetaCarpenter (schemas : CarpenterSchemas) : MetaCarpenterBase (schemas) {
|
||||
override fun build() {
|
||||
println ("TestMetaCarpenter::build")
|
||||
@ -51,3 +57,5 @@ class TestMetaCarpenter (schemas : CarpenterSchemas) : MetaCarpenterBase (schema
|
||||
step (schemas.carpenterSchemas.removeAt(0))
|
||||
}
|
||||
}
|
||||
|
||||
/**********************************************************************************************************************/
|
||||
|
@ -15,31 +15,32 @@ fun curruptName(name: String) = "${name}__carpenter"
|
||||
|
||||
/* given a list of class names work through the amqp envelope schema and alter any that
|
||||
match in the fashion defined above */
|
||||
fun Schema.curruptName (names: List<String>) : Schema {
|
||||
val newTypes : MutableList<TypeNotation> = mutableListOf()
|
||||
fun Schema.curruptName(names: List<String>): Schema {
|
||||
val newTypes: MutableList<TypeNotation> = mutableListOf()
|
||||
|
||||
for (type in types) {
|
||||
val newName = if (type.name in names) curruptName (type.name) else type.name
|
||||
val newName = if (type.name in names) curruptName(type.name) else type.name
|
||||
|
||||
val newProvides = type.provides.map {
|
||||
it -> if (it in names) curruptName (it) else it
|
||||
it ->
|
||||
if (it in names) curruptName(it) else it
|
||||
}
|
||||
|
||||
val newFields = mutableListOf<Field>()
|
||||
|
||||
(type as CompositeType).fields.forEach {
|
||||
val type = if (it.type in names) curruptName (it.type) else it.type
|
||||
val type = if (it.type in names) curruptName(it.type) else it.type
|
||||
|
||||
val requires = if (it.requires.isNotEmpty() && (it.requires[0] in names))
|
||||
listOf (curruptName (it.requires[0])) else it.requires
|
||||
listOf(curruptName(it.requires[0])) else it.requires
|
||||
|
||||
newFields.add (it.copy (type=type, requires=requires))
|
||||
newFields.add(it.copy(type = type, requires = requires))
|
||||
}
|
||||
|
||||
newTypes.add (type.copy (name=newName, provides=newProvides, fields=newFields))
|
||||
newTypes.add(type.copy(name = newName, provides = newProvides, fields = newFields))
|
||||
}
|
||||
|
||||
return Schema (types=newTypes)
|
||||
return Schema(types = newTypes)
|
||||
}
|
||||
|
||||
/**********************************************************************************************************************/
|
||||
@ -47,7 +48,7 @@ fun Schema.curruptName (names: List<String>) : Schema {
|
||||
open class AmqpCarpenterBase {
|
||||
var factory = SerializerFactory()
|
||||
|
||||
fun serialise (clazz : Any) = SerializationOutput(factory).serialize(clazz)
|
||||
fun serialise(clazz: Any) = SerializationOutput(factory).serialize(clazz)
|
||||
fun testName() = Thread.currentThread().stackTrace[2].methodName
|
||||
inline fun classTestName(clazz: String) = "${this.javaClass.name}\$${testName()}\$$clazz"
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ interface I_ {
|
||||
class CompositeMembers : AmqpCarpenterBase() {
|
||||
|
||||
@Test
|
||||
fun bothKnown () {
|
||||
fun bothKnown() {
|
||||
val testA = 10
|
||||
val testB = 20
|
||||
|
||||
@ -28,7 +28,7 @@ class CompositeMembers : AmqpCarpenterBase() {
|
||||
data class A(val a: Int)
|
||||
|
||||
@CordaSerializable
|
||||
data class B (val a: A, var b: Int)
|
||||
data class B(val a: A, var b: Int)
|
||||
|
||||
val b = B(A(testA), testB)
|
||||
|
||||
@ -44,11 +44,8 @@ class CompositeMembers : AmqpCarpenterBase() {
|
||||
assert(obj.second.schema.types[0] is CompositeType)
|
||||
assert(obj.second.schema.types[1] is CompositeType)
|
||||
|
||||
println (obj.second.schema.types[0] as CompositeType)
|
||||
println (obj.second.schema.types[1] as CompositeType)
|
||||
|
||||
var amqpSchemaA : CompositeType? = null
|
||||
var amqpSchemaB : CompositeType? = null
|
||||
var amqpSchemaA: CompositeType? = null
|
||||
var amqpSchemaB: CompositeType? = null
|
||||
|
||||
for (type in obj.second.schema.types) {
|
||||
when (type.name.split ("$").last()) {
|
||||
@ -57,37 +54,36 @@ class CompositeMembers : AmqpCarpenterBase() {
|
||||
}
|
||||
}
|
||||
|
||||
assert (amqpSchemaA != null)
|
||||
assert (amqpSchemaB != null)
|
||||
assert(amqpSchemaA != null)
|
||||
assert(amqpSchemaB != null)
|
||||
|
||||
/*
|
||||
* Just ensure the amqp schema matches what we want before we go messing
|
||||
* around with the internals
|
||||
*/
|
||||
assertEquals(1, amqpSchemaA?.fields?.size)
|
||||
assertEquals("a", amqpSchemaA!!.fields[0].name)
|
||||
assertEquals(1, amqpSchemaA?.fields?.size)
|
||||
assertEquals("a", amqpSchemaA!!.fields[0].name)
|
||||
assertEquals("int", amqpSchemaA.fields[0].type)
|
||||
|
||||
|
||||
assertEquals(2, amqpSchemaB?.fields?.size)
|
||||
assertEquals("a", amqpSchemaB!!.fields[0].name)
|
||||
assertEquals(2, amqpSchemaB?.fields?.size)
|
||||
assertEquals("a", amqpSchemaB!!.fields[0].name)
|
||||
assertEquals(classTestName("A"), amqpSchemaB.fields[0].type)
|
||||
assertEquals("b", amqpSchemaB.fields[1].name)
|
||||
assertEquals("b", amqpSchemaB.fields[1].name)
|
||||
assertEquals("int", amqpSchemaB.fields[1].type)
|
||||
|
||||
val metaSchema = obj.second.schema.carpenterSchema()
|
||||
|
||||
/* if we know all the classes there is nothing to really achieve here */
|
||||
assert (metaSchema.carpenterSchemas.isEmpty())
|
||||
assert (metaSchema.dependsOn.isEmpty())
|
||||
assert (metaSchema.dependencies.isEmpty())
|
||||
assert(metaSchema.carpenterSchemas.isEmpty())
|
||||
assert(metaSchema.dependsOn.isEmpty())
|
||||
assert(metaSchema.dependencies.isEmpty())
|
||||
}
|
||||
|
||||
/* you cannot have an element of a composite class we know about
|
||||
that is unknown as that should be impossible. If we have the containing
|
||||
class in the class path then we must have all of it's constituent elements */
|
||||
@Test(expected = UncarpentableException::class)
|
||||
fun nestedIsUnknown () {
|
||||
fun nestedIsUnknown() {
|
||||
val testA = 10
|
||||
val testB = 20
|
||||
|
||||
@ -96,7 +92,8 @@ class CompositeMembers : AmqpCarpenterBase() {
|
||||
|
||||
@CordaSerializable
|
||||
data class B(val a: A, var b: Int)
|
||||
val b = B(A(testA), testB)
|
||||
|
||||
val b = B(A(testA), testB)
|
||||
|
||||
val obj = DeserializationInput(factory).deserializeRtnEnvelope(serialise(b))
|
||||
val amqpSchema = obj.second.schema.curruptName(listOf (classTestName ("A")))
|
||||
@ -107,7 +104,7 @@ class CompositeMembers : AmqpCarpenterBase() {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ParentIsUnknown () {
|
||||
fun ParentIsUnknown() {
|
||||
val testA = 10
|
||||
val testB = 20
|
||||
|
||||
@ -116,27 +113,28 @@ class CompositeMembers : AmqpCarpenterBase() {
|
||||
|
||||
@CordaSerializable
|
||||
data class B(val a: A, var b: Int)
|
||||
|
||||
val b = B(A(testA), testB)
|
||||
|
||||
val obj = DeserializationInput(factory).deserializeRtnEnvelope(serialise(b))
|
||||
|
||||
assert(obj.first is B)
|
||||
|
||||
val amqpSchema = obj.second.schema.curruptName(listOf (classTestName ("B")))
|
||||
val amqpSchema = obj.envelope.schema.curruptName(listOf(classTestName("B")))
|
||||
|
||||
val carpenterSchema = amqpSchema.carpenterSchema()
|
||||
|
||||
assertEquals (1, carpenterSchema.size)
|
||||
assertEquals(1, carpenterSchema.size)
|
||||
|
||||
val metaCarpenter = MetaCarpenter (carpenterSchema)
|
||||
val metaCarpenter = MetaCarpenter(carpenterSchema)
|
||||
|
||||
metaCarpenter.build()
|
||||
|
||||
assert (curruptName(classTestName("B")) in metaCarpenter.objects)
|
||||
assert(curruptName(classTestName("B")) in metaCarpenter.objects)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun BothUnkown () {
|
||||
fun BothUnkown() {
|
||||
val testA = 10
|
||||
val testB = 20
|
||||
|
||||
@ -145,54 +143,55 @@ class CompositeMembers : AmqpCarpenterBase() {
|
||||
|
||||
@CordaSerializable
|
||||
data class B(val a: A, var b: Int)
|
||||
|
||||
val b = B(A(testA), testB)
|
||||
|
||||
val obj = DeserializationInput(factory).deserializeRtnEnvelope(serialise(b))
|
||||
|
||||
assert(obj.first is B)
|
||||
|
||||
val amqpSchema = obj.second.schema.curruptName(listOf (classTestName ("A"), classTestName ("B")))
|
||||
val amqpSchema = obj.envelope.schema.curruptName(listOf(classTestName("A"), classTestName("B")))
|
||||
|
||||
val carpenterSchema = amqpSchema.carpenterSchema()
|
||||
|
||||
/* just verify we're in the expected initial state, A is carpentable, B is not because
|
||||
it depends on A and the dependency chains are in place */
|
||||
assertEquals (1, carpenterSchema.size)
|
||||
assertEquals (curruptName(classTestName("A")), carpenterSchema.carpenterSchemas.first().name)
|
||||
assertEquals (1, carpenterSchema.dependencies.size)
|
||||
assert (curruptName(classTestName("B")) in carpenterSchema.dependencies)
|
||||
assertEquals (1, carpenterSchema.dependsOn.size)
|
||||
assert (curruptName(classTestName("A")) in carpenterSchema.dependsOn)
|
||||
assertEquals(1, carpenterSchema.size)
|
||||
assertEquals(curruptName(classTestName("A")), carpenterSchema.carpenterSchemas.first().name)
|
||||
assertEquals(1, carpenterSchema.dependencies.size)
|
||||
assert(curruptName(classTestName("B")) in carpenterSchema.dependencies)
|
||||
assertEquals(1, carpenterSchema.dependsOn.size)
|
||||
assert(curruptName(classTestName("A")) in carpenterSchema.dependsOn)
|
||||
|
||||
/* test meta carpenter lets us single step over the creation */
|
||||
val metaCarpenter = TestMetaCarpenter (carpenterSchema)
|
||||
val metaCarpenter = TestMetaCarpenter(carpenterSchema)
|
||||
|
||||
/* we've built nothing so nothing should be there */
|
||||
assertEquals (0, metaCarpenter.objects.size)
|
||||
assertEquals(0, metaCarpenter.objects.size)
|
||||
|
||||
/* first iteration, carpent A, resolve deps and mark B as carpentable */
|
||||
metaCarpenter.build()
|
||||
|
||||
/* one build iteration should have carpetned up A and worked out that B is now buildable
|
||||
given it's depedencies have been satisfied */
|
||||
assertTrue (curruptName(classTestName("A")) in metaCarpenter.objects)
|
||||
assertFalse (curruptName(classTestName("B")) in metaCarpenter.objects)
|
||||
assertTrue(curruptName(classTestName("A")) in metaCarpenter.objects)
|
||||
assertFalse(curruptName(classTestName("B")) in metaCarpenter.objects)
|
||||
|
||||
assertEquals (1, carpenterSchema.carpenterSchemas.size)
|
||||
assertEquals (curruptName(classTestName("B")), carpenterSchema.carpenterSchemas.first().name)
|
||||
assertTrue (carpenterSchema.dependencies.isEmpty())
|
||||
assertTrue (carpenterSchema.dependsOn.isEmpty())
|
||||
assertEquals(1, carpenterSchema.carpenterSchemas.size)
|
||||
assertEquals(curruptName(classTestName("B")), carpenterSchema.carpenterSchemas.first().name)
|
||||
assertTrue(carpenterSchema.dependencies.isEmpty())
|
||||
assertTrue(carpenterSchema.dependsOn.isEmpty())
|
||||
|
||||
/* second manual iteration, will carpent B */
|
||||
metaCarpenter.build()
|
||||
assert (curruptName(classTestName("A")) in metaCarpenter.objects)
|
||||
assert (curruptName(classTestName("B")) in metaCarpenter.objects)
|
||||
assert(curruptName(classTestName("A")) in metaCarpenter.objects)
|
||||
assert(curruptName(classTestName("B")) in metaCarpenter.objects)
|
||||
|
||||
assertTrue (carpenterSchema.carpenterSchemas.isEmpty())
|
||||
assertTrue(carpenterSchema.carpenterSchemas.isEmpty())
|
||||
}
|
||||
|
||||
@Test(expected = UncarpentableException::class)
|
||||
fun nestedIsUnkownInherited () {
|
||||
fun nestedIsUnkownInherited() {
|
||||
val testA = 10
|
||||
val testB = 20
|
||||
val testC = 30
|
||||
@ -201,7 +200,7 @@ class CompositeMembers : AmqpCarpenterBase() {
|
||||
open class A(val a: Int)
|
||||
|
||||
@CordaSerializable
|
||||
class B(a: Int, var b: Int) : A (a)
|
||||
class B(a: Int, var b: Int) : A(a)
|
||||
|
||||
@CordaSerializable
|
||||
data class C(val b: B, var c: Int)
|
||||
@ -212,13 +211,13 @@ class CompositeMembers : AmqpCarpenterBase() {
|
||||
|
||||
assert(obj.first is C)
|
||||
|
||||
val amqpSchema = obj.second.schema.curruptName(listOf (classTestName ("A"), classTestName ("B")))
|
||||
val amqpSchema = obj.envelope.schema.curruptName(listOf(classTestName("A"), classTestName("B")))
|
||||
|
||||
amqpSchema.carpenterSchema()
|
||||
}
|
||||
|
||||
@Test(expected = UncarpentableException::class)
|
||||
fun nestedIsUnknownInheritedUnkown () {
|
||||
fun nestedIsUnknownInheritedUnkown() {
|
||||
val testA = 10
|
||||
val testB = 20
|
||||
val testC = 30
|
||||
@ -227,7 +226,7 @@ class CompositeMembers : AmqpCarpenterBase() {
|
||||
open class A(val a: Int)
|
||||
|
||||
@CordaSerializable
|
||||
class B(a: Int, var b: Int) : A (a)
|
||||
class B(a: Int, var b: Int) : A(a)
|
||||
|
||||
@CordaSerializable
|
||||
data class C(val b: B, var c: Int)
|
||||
@ -238,13 +237,13 @@ class CompositeMembers : AmqpCarpenterBase() {
|
||||
|
||||
assert(obj.first is C)
|
||||
|
||||
val amqpSchema = obj.second.schema.curruptName(listOf (classTestName ("A"), classTestName ("B")))
|
||||
val amqpSchema = obj.envelope.schema.curruptName(listOf(classTestName("A"), classTestName("B")))
|
||||
|
||||
amqpSchema.carpenterSchema()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun parentsIsUnknownWithUnkownInheritedMember () {
|
||||
fun parentsIsUnknownWithUnkownInheritedMember() {
|
||||
val testA = 10
|
||||
val testB = 20
|
||||
val testC = 30
|
||||
@ -253,7 +252,7 @@ class CompositeMembers : AmqpCarpenterBase() {
|
||||
open class A(val a: Int)
|
||||
|
||||
@CordaSerializable
|
||||
class B(a: Int, var b: Int) : A (a)
|
||||
class B(a: Int, var b: Int) : A(a)
|
||||
|
||||
@CordaSerializable
|
||||
data class C(val b: B, var c: Int)
|
||||
@ -264,7 +263,7 @@ class CompositeMembers : AmqpCarpenterBase() {
|
||||
|
||||
assert(obj.first is C)
|
||||
|
||||
val amqpSchema = obj.second.schema.curruptName(listOf (classTestName ("A"), classTestName ("B")))
|
||||
val amqpSchema = obj.envelope.schema.curruptName(listOf(classTestName("A"), classTestName("B")))
|
||||
}
|
||||
|
||||
|
||||
@ -273,7 +272,7 @@ class CompositeMembers : AmqpCarpenterBase() {
|
||||
* but we do know about I_
|
||||
*/
|
||||
@Test
|
||||
fun nestedIsInterfaceToUnknown () {
|
||||
fun nestedIsInterfaceToUnknown() {
|
||||
val testA = 10
|
||||
val testB = 20
|
||||
|
||||
@ -282,7 +281,8 @@ class CompositeMembers : AmqpCarpenterBase() {
|
||||
|
||||
@CordaSerializable
|
||||
data class B(val a: A, var b: Int)
|
||||
val b = B(A(testA), testB)
|
||||
|
||||
val b = B(A(testA), testB)
|
||||
|
||||
val obj = DeserializationInput(factory).deserializeRtnEnvelope(serialise(b))
|
||||
|
||||
@ -299,6 +299,7 @@ class CompositeMembers : AmqpCarpenterBase() {
|
||||
|
||||
@CordaSerializable
|
||||
data class B(val a: A, var b: Int)
|
||||
|
||||
val b = B(A(testA), testB)
|
||||
|
||||
val obj = DeserializationInput(factory).deserializeRtnEnvelope(serialise(b))
|
||||
@ -316,6 +317,7 @@ class CompositeMembers : AmqpCarpenterBase() {
|
||||
|
||||
@CordaSerializable
|
||||
data class B(val a: A, var b: Int)
|
||||
|
||||
val b = B(A(testA), testB)
|
||||
|
||||
val obj = DeserializationInput(factory).deserializeRtnEnvelope(serialise(b))
|
||||
|
@ -11,31 +11,31 @@ import kotlin.test.*
|
||||
|
||||
@CordaSerializable
|
||||
interface J {
|
||||
val j : Int
|
||||
val j: Int
|
||||
}
|
||||
|
||||
/*******************************************************************************************************/
|
||||
|
||||
@CordaSerializable
|
||||
interface I {
|
||||
val i : Int
|
||||
val i: Int
|
||||
}
|
||||
|
||||
@CordaSerializable
|
||||
interface II {
|
||||
val ii : Int
|
||||
val ii: Int
|
||||
}
|
||||
|
||||
@CordaSerializable
|
||||
interface III : I {
|
||||
val iii : Int
|
||||
val iii: Int
|
||||
override val i: Int
|
||||
}
|
||||
|
||||
@CordaSerializable
|
||||
interface IIII {
|
||||
val iiii : Int
|
||||
val i : I
|
||||
val iiii: Int
|
||||
val i: I
|
||||
}
|
||||
|
||||
/*******************************************************************************************************/
|
||||
@ -66,14 +66,14 @@ class InheritanceSchemaToClassCarpenterTests : AmqpCarpenterBase() {
|
||||
it's extremely unlikely we'd need to carpent any classes */
|
||||
assertEquals(0, l1.size)
|
||||
|
||||
val curruptSchema = serSchema.curruptName (listOf (classTestName ("A")))
|
||||
val curruptSchema = serSchema.curruptName(listOf(classTestName("A")))
|
||||
|
||||
val l2 = curruptSchema.carpenterSchema()
|
||||
|
||||
assertEquals(1, l2.size)
|
||||
val aSchema = l2.carpenterSchemas.find { it.name == curruptName(classTestName("A")) }
|
||||
|
||||
assertNotEquals (null, aSchema)
|
||||
assertNotEquals(null, aSchema)
|
||||
|
||||
assertEquals(curruptName(classTestName("A")), aSchema!!.name)
|
||||
assertEquals(1, aSchema.interfaces.size)
|
||||
@ -115,7 +115,7 @@ class InheritanceSchemaToClassCarpenterTests : AmqpCarpenterBase() {
|
||||
it's extremely unlikely we'd need to carpent any classes */
|
||||
assertEquals(0, l1.size)
|
||||
|
||||
val curruptSchema = serSchema.curruptName (listOf (classTestName("A")))
|
||||
val curruptSchema = serSchema.curruptName(listOf(classTestName("A")))
|
||||
val aName = curruptName(classTestName("A"))
|
||||
|
||||
val l2 = curruptSchema.carpenterSchema()
|
||||
@ -143,13 +143,13 @@ class InheritanceSchemaToClassCarpenterTests : AmqpCarpenterBase() {
|
||||
|
||||
@Test
|
||||
fun multipleInterfaces() {
|
||||
val testI = 20
|
||||
val testI = 20
|
||||
val testII = 40
|
||||
|
||||
class A(override val i: Int, override val ii: Int) : I, II
|
||||
|
||||
val a = A(testI, testII)
|
||||
val obj = DeserializationInput(factory).deserializeRtnEnvelope(serialise(a))
|
||||
val a = A(testI, testII)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
|
||||
assert(obj.first is A)
|
||||
|
||||
@ -166,8 +166,8 @@ class InheritanceSchemaToClassCarpenterTests : AmqpCarpenterBase() {
|
||||
/* pretend we don't know the class we've been sent, i.e. it's unknown to the class loader, and thus
|
||||
needs some carpentry */
|
||||
|
||||
val curruptSchema = serSchema.curruptName (listOf (classTestName ("A")))
|
||||
val l2 = curruptSchema.carpenterSchema()
|
||||
val curruptSchema = serSchema.curruptName(listOf(classTestName("A")))
|
||||
val l2 = curruptSchema.carpenterSchema()
|
||||
val aName = curruptName(classTestName("A"))
|
||||
|
||||
assertEquals(1, l2.size)
|
||||
@ -178,31 +178,31 @@ class InheritanceSchemaToClassCarpenterTests : AmqpCarpenterBase() {
|
||||
|
||||
assertEquals(aName, aSchema!!.name)
|
||||
assertEquals(2, aSchema.interfaces.size)
|
||||
assert (net.corda.carpenter.I::class.java in aSchema.interfaces)
|
||||
assert (net.corda.carpenter.II::class.java in aSchema.interfaces)
|
||||
assert(net.corda.carpenter.I::class.java in aSchema.interfaces)
|
||||
assert(net.corda.carpenter.II::class.java in aSchema.interfaces)
|
||||
|
||||
val aBuilder = ClassCarpenter().build(aSchema)
|
||||
|
||||
val objA = aBuilder.constructors[0].newInstance(testI, testII)
|
||||
val i = objA as I
|
||||
val i = objA as I
|
||||
val ii = objA as II
|
||||
|
||||
assertEquals(aBuilder.getMethod("getI").invoke(objA), testI)
|
||||
assertEquals(aBuilder.getMethod("getIi").invoke(objA), testII)
|
||||
|
||||
assertEquals(a.i, i.i)
|
||||
assertEquals(a.i, i.i)
|
||||
assertEquals(a.ii, ii.ii)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun nestedInterfaces() {
|
||||
val testI = 20
|
||||
val testIII = 60
|
||||
val testI = 20
|
||||
val testIII = 60
|
||||
|
||||
class A(override val i: Int, override val iii : Int) : III
|
||||
class A(override val i: Int, override val iii: Int) : III
|
||||
|
||||
val a = A(testI, testIII)
|
||||
val obj = DeserializationInput(factory).deserializeRtnEnvelope(serialise(a))
|
||||
val a = A(testI, testIII)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
|
||||
assert(obj.first is A)
|
||||
|
||||
@ -216,7 +216,7 @@ class InheritanceSchemaToClassCarpenterTests : AmqpCarpenterBase() {
|
||||
it's extremely unlikely we'd need to carpent any classes */
|
||||
assertEquals(0, l1.size)
|
||||
|
||||
val curruptSchema = serSchema.curruptName (listOf (classTestName ("A")))
|
||||
val curruptSchema = serSchema.curruptName(listOf(classTestName("A")))
|
||||
val l2 = curruptSchema.carpenterSchema()
|
||||
val aName = curruptName(classTestName("A"))
|
||||
|
||||
@ -228,30 +228,30 @@ class InheritanceSchemaToClassCarpenterTests : AmqpCarpenterBase() {
|
||||
|
||||
assertEquals(aName, aSchema!!.name)
|
||||
assertEquals(2, aSchema.interfaces.size)
|
||||
assert (net.corda.carpenter.I::class.java in aSchema.interfaces)
|
||||
assert (net.corda.carpenter.III::class.java in aSchema.interfaces)
|
||||
assert(net.corda.carpenter.I::class.java in aSchema.interfaces)
|
||||
assert(net.corda.carpenter.III::class.java in aSchema.interfaces)
|
||||
|
||||
val aBuilder = ClassCarpenter().build(aSchema)
|
||||
|
||||
val objA = aBuilder.constructors[0].newInstance(testI, testIII)
|
||||
val i = objA as I
|
||||
val i = objA as I
|
||||
val iii = objA as III
|
||||
|
||||
assertEquals(aBuilder.getMethod("getI").invoke(objA), testI)
|
||||
assertEquals(aBuilder.getMethod("getIii").invoke(objA), testIII)
|
||||
|
||||
assertEquals(a.i, i.i)
|
||||
assertEquals(a.i, iii.i)
|
||||
assertEquals(a.i, i.i)
|
||||
assertEquals(a.i, iii.i)
|
||||
assertEquals(a.iii, iii.iii)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun memberInterface() {
|
||||
val testI = 25
|
||||
val testIIII = 50
|
||||
val testI = 25
|
||||
val testIIII = 50
|
||||
|
||||
class A(override val i: Int) : I
|
||||
class B(override val i : I, override val iiii : Int) : IIII
|
||||
class B(override val i: I, override val iiii: Int) : IIII
|
||||
|
||||
val a = A(testI)
|
||||
val b = B(a, testIIII)
|
||||
@ -270,20 +270,20 @@ class InheritanceSchemaToClassCarpenterTests : AmqpCarpenterBase() {
|
||||
*/
|
||||
assertEquals(4, serSchema.types.size)
|
||||
|
||||
val curruptSchema = serSchema.curruptName (listOf (classTestName ("A"), classTestName ("B")))
|
||||
val cSchema = curruptSchema.carpenterSchema()
|
||||
val aName = curruptName(classTestName("A"))
|
||||
val bName = curruptName(classTestName("B"))
|
||||
val curruptSchema = serSchema.curruptName(listOf(classTestName("A"), classTestName("B")))
|
||||
val cSchema = curruptSchema.carpenterSchema()
|
||||
val aName = curruptName(classTestName("A"))
|
||||
val bName = curruptName(classTestName("B"))
|
||||
|
||||
assertEquals(2, cSchema.size)
|
||||
|
||||
val aCarpenterSchema = cSchema.carpenterSchemas.find { it.name == aName }
|
||||
val bCarpenterSchema = cSchema.carpenterSchemas.find { it.name == bName }
|
||||
|
||||
assertNotEquals (null, aCarpenterSchema)
|
||||
assertNotEquals (null, bCarpenterSchema)
|
||||
assertNotEquals(null, aCarpenterSchema)
|
||||
assertNotEquals(null, bCarpenterSchema)
|
||||
|
||||
val cc = ClassCarpenter()
|
||||
val cc = ClassCarpenter()
|
||||
val cc2 = ClassCarpenter()
|
||||
|
||||
val bBuilder = cc.build(bCarpenterSchema!!)
|
||||
@ -307,10 +307,11 @@ class InheritanceSchemaToClassCarpenterTests : AmqpCarpenterBase() {
|
||||
to have a concrete class loaded without having access to all of it's elements */
|
||||
@Test(expected = UncarpentableException::class)
|
||||
fun memberInterface2() {
|
||||
val testI = 25
|
||||
val testIIII = 50
|
||||
val testI = 25
|
||||
val testIIII = 50
|
||||
|
||||
class A(override val i: Int) : I
|
||||
class B(override val i : I, override val iiii : Int) : IIII
|
||||
class B(override val i: I, override val iiii: Int) : IIII
|
||||
|
||||
val a = A(testI)
|
||||
val b = B(a, testIIII)
|
||||
@ -331,13 +332,13 @@ class InheritanceSchemaToClassCarpenterTests : AmqpCarpenterBase() {
|
||||
assertEquals(4, serSchema.types.size)
|
||||
|
||||
/* ignore the return as we expect this to throw */
|
||||
serSchema.curruptName (listOf (
|
||||
serSchema.curruptName(listOf(
|
||||
classTestName("A"), "${this.javaClass.`package`.name}.I")).carpenterSchema()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun interfaceAndImplementation() {
|
||||
val testI = 25
|
||||
val testI = 25
|
||||
|
||||
class A(override val i: Int) : I
|
||||
|
||||
@ -356,38 +357,38 @@ class InheritanceSchemaToClassCarpenterTests : AmqpCarpenterBase() {
|
||||
*/
|
||||
assertEquals(2, serSchema.types.size)
|
||||
|
||||
val amqpSchema = serSchema.curruptName (listOf (classTestName("A"), "${this.javaClass.`package`.name}.I"))
|
||||
val amqpSchema = serSchema.curruptName(listOf(classTestName("A"), "${this.javaClass.`package`.name}.I"))
|
||||
|
||||
val aName = curruptName (classTestName("A"))
|
||||
val iName = curruptName ("${this.javaClass.`package`.name}.I")
|
||||
val aName = curruptName(classTestName("A"))
|
||||
val iName = curruptName("${this.javaClass.`package`.name}.I")
|
||||
|
||||
val carpenterSchema = amqpSchema.carpenterSchema()
|
||||
|
||||
/* whilst there are two unknown classes within the envelope A depends on I so we can't construct a
|
||||
schema for A until we have for I */
|
||||
assertEquals (1, carpenterSchema.size)
|
||||
assertNotEquals (null, carpenterSchema.carpenterSchemas.find { it.name == iName })
|
||||
assertEquals(1, carpenterSchema.size)
|
||||
assertNotEquals(null, carpenterSchema.carpenterSchemas.find { it.name == iName })
|
||||
|
||||
/* since we can't build A it should list I as a dependency*/
|
||||
assert (aName in carpenterSchema.dependencies)
|
||||
assertEquals (1, carpenterSchema.dependencies[aName]!!.second.size)
|
||||
assertEquals (iName, carpenterSchema.dependencies[aName]!!.second[0])
|
||||
assert(aName in carpenterSchema.dependencies)
|
||||
assertEquals(1, carpenterSchema.dependencies[aName]!!.second.size)
|
||||
assertEquals(iName, carpenterSchema.dependencies[aName]!!.second[0])
|
||||
|
||||
/* and conversly I should have A listed as a dependent */
|
||||
assert(iName in carpenterSchema.dependsOn)
|
||||
assertEquals(1, carpenterSchema.dependsOn[iName]!!.size)
|
||||
assertEquals(aName, carpenterSchema.dependsOn[iName]!![0])
|
||||
|
||||
val mc = MetaCarpenter (carpenterSchema)
|
||||
val mc = MetaCarpenter(carpenterSchema)
|
||||
|
||||
mc.build()
|
||||
|
||||
assertEquals (0, mc.schemas.carpenterSchemas.size)
|
||||
assertEquals (0, mc.schemas.dependencies.size)
|
||||
assertEquals (0, mc.schemas.dependsOn.size)
|
||||
assertEquals (2, mc.objects.size)
|
||||
assert (aName in mc.objects)
|
||||
assert (iName in mc.objects)
|
||||
assertEquals(0, mc.schemas.carpenterSchemas.size)
|
||||
assertEquals(0, mc.schemas.dependencies.size)
|
||||
assertEquals(0, mc.schemas.dependsOn.size)
|
||||
assertEquals(2, mc.objects.size)
|
||||
assert(aName in mc.objects)
|
||||
assert(iName in mc.objects)
|
||||
|
||||
mc.objects[aName]!!.constructors[0].newInstance(testI)
|
||||
}
|
||||
@ -408,51 +409,51 @@ class InheritanceSchemaToClassCarpenterTests : AmqpCarpenterBase() {
|
||||
"${this.javaClass.`package`.name}.I",
|
||||
"${this.javaClass.`package`.name}.II"))
|
||||
|
||||
val aName = curruptName (classTestName("A"))
|
||||
val iName = curruptName ("${this.javaClass.`package`.name}.I")
|
||||
val iiName = curruptName ("${this.javaClass.`package`.name}.II")
|
||||
val aName = curruptName(classTestName("A"))
|
||||
val iName = curruptName("${this.javaClass.`package`.name}.I")
|
||||
val iiName = curruptName("${this.javaClass.`package`.name}.II")
|
||||
|
||||
val carpenterSchema = amqpSchema.carpenterSchema()
|
||||
|
||||
/* there is nothing preventing us from carpenting up the two interfaces so
|
||||
our initial list should contain both interface with A being dependent on both
|
||||
and each having A as a dependent */
|
||||
assertEquals (2, carpenterSchema.carpenterSchemas.size)
|
||||
assertNotNull (carpenterSchema.carpenterSchemas.find { it.name == iName })
|
||||
assertNotNull (carpenterSchema.carpenterSchemas.find { it.name == iiName })
|
||||
assertNull (carpenterSchema.carpenterSchemas.find { it.name == aName })
|
||||
assertEquals(2, carpenterSchema.carpenterSchemas.size)
|
||||
assertNotNull(carpenterSchema.carpenterSchemas.find { it.name == iName })
|
||||
assertNotNull(carpenterSchema.carpenterSchemas.find { it.name == iiName })
|
||||
assertNull(carpenterSchema.carpenterSchemas.find { it.name == aName })
|
||||
|
||||
assert (iName in carpenterSchema.dependsOn)
|
||||
assertEquals (1, carpenterSchema.dependsOn[iName]?.size)
|
||||
assertNotNull (carpenterSchema.dependsOn[iName]?.find ( { it == aName }))
|
||||
assert(iName in carpenterSchema.dependsOn)
|
||||
assertEquals(1, carpenterSchema.dependsOn[iName]?.size)
|
||||
assertNotNull(carpenterSchema.dependsOn[iName]?.find({ it == aName }))
|
||||
|
||||
assert (iiName in carpenterSchema.dependsOn)
|
||||
assertEquals (1, carpenterSchema.dependsOn[iiName]?.size)
|
||||
assertNotNull (carpenterSchema.dependsOn[iiName]?.find { it == aName })
|
||||
assert(iiName in carpenterSchema.dependsOn)
|
||||
assertEquals(1, carpenterSchema.dependsOn[iiName]?.size)
|
||||
assertNotNull(carpenterSchema.dependsOn[iiName]?.find { it == aName })
|
||||
|
||||
assert (aName in carpenterSchema.dependencies)
|
||||
assertEquals (2, carpenterSchema.dependencies[aName]!!.second.size)
|
||||
assertNotNull (carpenterSchema.dependencies[aName]!!.second.find { it == iName })
|
||||
assertNotNull (carpenterSchema.dependencies[aName]!!.second.find { it == iiName })
|
||||
assert(aName in carpenterSchema.dependencies)
|
||||
assertEquals(2, carpenterSchema.dependencies[aName]!!.second.size)
|
||||
assertNotNull(carpenterSchema.dependencies[aName]!!.second.find { it == iName })
|
||||
assertNotNull(carpenterSchema.dependencies[aName]!!.second.find { it == iiName })
|
||||
|
||||
val mc = MetaCarpenter (carpenterSchema)
|
||||
val mc = MetaCarpenter(carpenterSchema)
|
||||
|
||||
mc.build()
|
||||
assertEquals (0, mc.schemas.carpenterSchemas.size)
|
||||
assertEquals (0, mc.schemas.dependencies.size)
|
||||
assertEquals (0, mc.schemas.dependsOn.size)
|
||||
assertEquals (3, mc.objects.size)
|
||||
assert (aName in mc.objects)
|
||||
assert (iName in mc.objects)
|
||||
assert (iiName in mc.objects)
|
||||
assertEquals(0, mc.schemas.carpenterSchemas.size)
|
||||
assertEquals(0, mc.schemas.dependencies.size)
|
||||
assertEquals(0, mc.schemas.dependsOn.size)
|
||||
assertEquals(3, mc.objects.size)
|
||||
assert(aName in mc.objects)
|
||||
assert(iName in mc.objects)
|
||||
assert(iiName in mc.objects)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun nestedInterfacesAndImplementation() {
|
||||
val testI = 7
|
||||
val testI = 7
|
||||
val testIII = 11
|
||||
|
||||
class A(override val i: Int, override val iii : Int) : III
|
||||
class A(override val i: Int, override val iii: Int) : III
|
||||
|
||||
val a = A(testI, testIII)
|
||||
|
||||
@ -463,51 +464,51 @@ class InheritanceSchemaToClassCarpenterTests : AmqpCarpenterBase() {
|
||||
"${this.javaClass.`package`.name}.I",
|
||||
"${this.javaClass.`package`.name}.III"))
|
||||
|
||||
val aName = curruptName (classTestName("A"))
|
||||
val iName = curruptName ("${this.javaClass.`package`.name}.I")
|
||||
val iiiName = curruptName ("${this.javaClass.`package`.name}.III")
|
||||
val aName = curruptName(classTestName("A"))
|
||||
val iName = curruptName("${this.javaClass.`package`.name}.I")
|
||||
val iiiName = curruptName("${this.javaClass.`package`.name}.III")
|
||||
|
||||
val carpenterSchema = amqpSchema.carpenterSchema()
|
||||
|
||||
/* Since A depends on III and III extends I we will have to construct them
|
||||
* in that reverse order (I -> III -> A) */
|
||||
assertEquals (1, carpenterSchema.carpenterSchemas.size)
|
||||
assertNotNull (carpenterSchema.carpenterSchemas.find { it.name == iName })
|
||||
assertNull (carpenterSchema.carpenterSchemas.find { it.name == iiiName })
|
||||
assertNull (carpenterSchema.carpenterSchemas.find { it.name == aName })
|
||||
assertEquals(1, carpenterSchema.carpenterSchemas.size)
|
||||
assertNotNull(carpenterSchema.carpenterSchemas.find { it.name == iName })
|
||||
assertNull(carpenterSchema.carpenterSchemas.find { it.name == iiiName })
|
||||
assertNull(carpenterSchema.carpenterSchemas.find { it.name == aName })
|
||||
|
||||
/* I has III as a direct dependent and A as an indirect one */
|
||||
assert (iName in carpenterSchema.dependsOn)
|
||||
assertEquals (2, carpenterSchema.dependsOn[iName]?.size)
|
||||
assertNotNull (carpenterSchema.dependsOn[iName]?.find ( { it == iiiName }))
|
||||
assertNotNull (carpenterSchema.dependsOn[iName]?.find ( { it == aName }))
|
||||
assert(iName in carpenterSchema.dependsOn)
|
||||
assertEquals(2, carpenterSchema.dependsOn[iName]?.size)
|
||||
assertNotNull(carpenterSchema.dependsOn[iName]?.find({ it == iiiName }))
|
||||
assertNotNull(carpenterSchema.dependsOn[iName]?.find({ it == aName }))
|
||||
|
||||
/* III has A as a dependent */
|
||||
assert (iiiName in carpenterSchema.dependsOn)
|
||||
assertEquals (1, carpenterSchema.dependsOn[iiiName]?.size)
|
||||
assertNotNull (carpenterSchema.dependsOn[iiiName]?.find { it == aName })
|
||||
assert(iiiName in carpenterSchema.dependsOn)
|
||||
assertEquals(1, carpenterSchema.dependsOn[iiiName]?.size)
|
||||
assertNotNull(carpenterSchema.dependsOn[iiiName]?.find { it == aName })
|
||||
|
||||
/* converly III depends on I */
|
||||
assert (iiiName in carpenterSchema.dependencies)
|
||||
assertEquals (1, carpenterSchema.dependencies[iiiName]!!.second.size)
|
||||
assertNotNull (carpenterSchema.dependencies[iiiName]!!.second.find { it == iName })
|
||||
assert(iiiName in carpenterSchema.dependencies)
|
||||
assertEquals(1, carpenterSchema.dependencies[iiiName]!!.second.size)
|
||||
assertNotNull(carpenterSchema.dependencies[iiiName]!!.second.find { it == iName })
|
||||
|
||||
/* and A depends on III and I*/
|
||||
assert (aName in carpenterSchema.dependencies)
|
||||
assertEquals (2, carpenterSchema.dependencies[aName]!!.second.size)
|
||||
assertNotNull (carpenterSchema.dependencies[aName]!!.second.find { it == iiiName })
|
||||
assertNotNull (carpenterSchema.dependencies[aName]!!.second.find { it == iName })
|
||||
assert(aName in carpenterSchema.dependencies)
|
||||
assertEquals(2, carpenterSchema.dependencies[aName]!!.second.size)
|
||||
assertNotNull(carpenterSchema.dependencies[aName]!!.second.find { it == iiiName })
|
||||
assertNotNull(carpenterSchema.dependencies[aName]!!.second.find { it == iName })
|
||||
|
||||
val mc = MetaCarpenter (carpenterSchema)
|
||||
val mc = MetaCarpenter(carpenterSchema)
|
||||
|
||||
mc.build()
|
||||
assertEquals (0, mc.schemas.carpenterSchemas.size)
|
||||
assertEquals (0, mc.schemas.dependencies.size)
|
||||
assertEquals (0, mc.schemas.dependsOn.size)
|
||||
assertEquals (3, mc.objects.size)
|
||||
assert (aName in mc.objects)
|
||||
assert (iName in mc.objects)
|
||||
assert (iiiName in mc.objects)
|
||||
assertEquals(0, mc.schemas.carpenterSchemas.size)
|
||||
assertEquals(0, mc.schemas.dependencies.size)
|
||||
assertEquals(0, mc.schemas.dependsOn.size)
|
||||
assertEquals(3, mc.objects.size)
|
||||
assert(aName in mc.objects)
|
||||
assert(iName in mc.objects)
|
||||
assert(iiiName in mc.objects)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -32,19 +32,19 @@ class MultiMemberCompositeSchemaToClassCarpenterTests : AmqpCarpenterBase() {
|
||||
|
||||
var amqpSchema = obj.second.schema.types[0] as CompositeType
|
||||
|
||||
assertEquals(2, amqpSchema.fields.size)
|
||||
assertEquals("a", amqpSchema.fields[0].name)
|
||||
assertEquals(2, amqpSchema.fields.size)
|
||||
assertEquals("a", amqpSchema.fields[0].name)
|
||||
assertEquals("int", amqpSchema.fields[0].type)
|
||||
assertEquals("b", amqpSchema.fields[1].name)
|
||||
assertEquals("b", amqpSchema.fields[1].name)
|
||||
assertEquals("int", amqpSchema.fields[1].type)
|
||||
|
||||
val carpenterSchema = CarpenterSchemas.newInstance()
|
||||
amqpSchema.carpenterSchema(carpenterSchemas = carpenterSchema, force = true)
|
||||
|
||||
assertEquals (1, carpenterSchema.size)
|
||||
val aSchema = carpenterSchema.carpenterSchemas.find { it.name == classTestName ("A") }
|
||||
assertEquals(1, carpenterSchema.size)
|
||||
val aSchema = carpenterSchema.carpenterSchemas.find { it.name == classTestName("A") }
|
||||
|
||||
assertNotEquals (null, aSchema)
|
||||
assertNotEquals(null, aSchema)
|
||||
|
||||
val pinochio = ClassCarpenter().build(aSchema!!)
|
||||
|
||||
@ -76,16 +76,16 @@ class MultiMemberCompositeSchemaToClassCarpenterTests : AmqpCarpenterBase() {
|
||||
|
||||
val amqpSchema = obj.second.schema.types[0] as CompositeType
|
||||
|
||||
assertEquals(2, amqpSchema.fields.size)
|
||||
assertEquals("a", amqpSchema.fields[0].name)
|
||||
assertEquals("int", amqpSchema.fields[0].type)
|
||||
assertEquals("b", amqpSchema.fields[1].name)
|
||||
assertEquals(2, amqpSchema.fields.size)
|
||||
assertEquals("a", amqpSchema.fields[0].name)
|
||||
assertEquals("int", amqpSchema.fields[0].type)
|
||||
assertEquals("b", amqpSchema.fields[1].name)
|
||||
assertEquals("string", amqpSchema.fields[1].type)
|
||||
|
||||
val carpenterSchema = CarpenterSchemas.newInstance()
|
||||
amqpSchema.carpenterSchema(carpenterSchemas = carpenterSchema, force = true)
|
||||
|
||||
assertEquals (1, carpenterSchema.size)
|
||||
assertEquals(1, carpenterSchema.size)
|
||||
val aSchema = carpenterSchema.carpenterSchemas.find { it.name == classTestName("A") }
|
||||
|
||||
assertNotEquals(null, aSchema)
|
||||
|
@ -1,44 +1,47 @@
|
||||
package net.corda.carpenter
|
||||
|
||||
import net.corda.carpenter.test.AmqpCarpenterBase
|
||||
import net.corda.core.serialization.CordaSerializable
|
||||
import net.corda.core.serialization.amqp.*
|
||||
import net.corda.core.serialization.carpenter.CarpenterSchemas
|
||||
import org.junit.Test
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
|
||||
class SingleMemberCompositeSchemaToClassCarpenterTests {
|
||||
private var factory = SerializerFactory()
|
||||
|
||||
fun serialise (clazz : Any) = SerializationOutput(factory).serialize(clazz)
|
||||
class SingleMemberCompositeSchemaToClassCarpenterTests : AmqpCarpenterBase() {
|
||||
|
||||
@Test
|
||||
fun singleInteger() {
|
||||
val test = 10
|
||||
|
||||
@CordaSerializable
|
||||
data class A(val a : Int)
|
||||
data class A(val a: Int)
|
||||
|
||||
val a = A (test)
|
||||
val obj = DeserializationInput(factory).deserializeRtnEnvelope(serialise (a))
|
||||
val a = A(test)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
|
||||
assert (obj.first is A)
|
||||
val amqpObj = obj.first as A
|
||||
assert(obj.obj is A)
|
||||
val amqpObj = obj.obj as A
|
||||
|
||||
assertEquals (test, amqpObj.a)
|
||||
assertEquals (1, obj.second.schema.types.size)
|
||||
assert (obj.second.schema.types[0] is CompositeType)
|
||||
assertEquals(test, amqpObj.a)
|
||||
assertEquals(1, obj.envelope.schema.types.size)
|
||||
assert(obj.envelope.schema.types[0] is CompositeType)
|
||||
|
||||
val amqpSchema = obj.second.schema.types[0] as CompositeType
|
||||
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
||||
|
||||
assertEquals (1, amqpSchema.fields.size)
|
||||
assertEquals ("a", amqpSchema.fields[0].name)
|
||||
assertEquals ("int", amqpSchema.fields[0].type)
|
||||
assertEquals(1, amqpSchema.fields.size)
|
||||
assertEquals("a", amqpSchema.fields[0].name)
|
||||
assertEquals("int", amqpSchema.fields[0].type)
|
||||
|
||||
val pinochio = ClassCarpenter().build(amqpSchema.carpenterSchema())
|
||||
val carpenterSchema = CarpenterSchemas.newInstance()
|
||||
amqpSchema.carpenterSchema(carpenterSchemas = carpenterSchema, force = true)
|
||||
|
||||
val p = pinochio.constructors[0].newInstance (test)
|
||||
val aSchema = carpenterSchema.carpenterSchemas.find { it.name == classTestName("A") }!!
|
||||
val pinochio = ClassCarpenter().build(aSchema)
|
||||
|
||||
assertEquals (pinochio.getMethod("getA").invoke (p), amqpObj.a)
|
||||
val p = pinochio.constructors[0].newInstance(test)
|
||||
|
||||
assertEquals(pinochio.getMethod("getA").invoke(p), amqpObj.a)
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -46,29 +49,30 @@ class SingleMemberCompositeSchemaToClassCarpenterTests {
|
||||
val test = "ten"
|
||||
|
||||
@CordaSerializable
|
||||
data class A(val a : String)
|
||||
var a = A (test)
|
||||
data class A(val a: String)
|
||||
|
||||
val obj = DeserializationInput(factory).deserializeRtnEnvelope(serialise (a))
|
||||
val a = A(test)
|
||||
|
||||
assert (obj.first is A)
|
||||
val amqpObj = obj.first as A
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
|
||||
assertEquals (test, amqpObj.a)
|
||||
assertEquals (1, obj.second.schema.types.size)
|
||||
assert (obj.second.schema.types[0] is CompositeType)
|
||||
assert(obj.obj is A)
|
||||
val amqpObj = obj.obj as A
|
||||
|
||||
var amqpSchema = obj.second.schema.types[0] as CompositeType
|
||||
assertEquals(test, amqpObj.a)
|
||||
assertEquals(1, obj.envelope.schema.types.size)
|
||||
assert(obj.envelope.schema.types[0] is CompositeType)
|
||||
|
||||
assertEquals (1, amqpSchema.fields.size)
|
||||
assertEquals ("a", amqpSchema.fields[0].name)
|
||||
assertEquals ("string", amqpSchema.fields[0].type)
|
||||
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
||||
|
||||
var pinochio = ClassCarpenter().build(amqpSchema.carpenterSchema())
|
||||
val carpenterSchema = CarpenterSchemas.newInstance()
|
||||
amqpSchema.carpenterSchema(carpenterSchemas = carpenterSchema, force = true)
|
||||
|
||||
val p = pinochio.constructors[0].newInstance (test)
|
||||
val aSchema = carpenterSchema.carpenterSchemas.find { it.name == classTestName("A") }!!
|
||||
val pinochio = ClassCarpenter().build(aSchema)
|
||||
|
||||
assertEquals (pinochio.getMethod("getA").invoke (p), amqpObj.a)
|
||||
val p = pinochio.constructors[0].newInstance(test)
|
||||
|
||||
assertEquals(pinochio.getMethod("getA").invoke(p), amqpObj.a)
|
||||
}
|
||||
|
||||
/*
|
||||
@ -78,25 +82,31 @@ class SingleMemberCompositeSchemaToClassCarpenterTests {
|
||||
|
||||
@CordaSerializable
|
||||
data class A(val a : Char)
|
||||
var a = A (test)
|
||||
val a = A(test)
|
||||
|
||||
val obj = DeserializationInput(factory).deserializeRtnEnvelope(serialise (a))
|
||||
val obj = DeserializationInput(factory).deserializeRtnEnvelope(serialise(a))
|
||||
|
||||
assert (obj.first is A)
|
||||
val amqpObj = obj.first as A
|
||||
assert (obj.obj is A)
|
||||
val amqpObj = obj.obj as A
|
||||
|
||||
assertEquals (test, amqpObj.a)
|
||||
assertEquals (1, obj.second.schema.types.size)
|
||||
assertEquals (1, obj.second.schema.types.size)
|
||||
assert (obj.second.schema.types[0] is CompositeType)
|
||||
assertEquals (1, obj.envelope.schema.types.size)
|
||||
assertEquals (1, obj.envelope.schema.types.size)
|
||||
assert (obj.envelope.schema.types[0] is CompositeType)
|
||||
|
||||
var amqpSchema = obj.second.schema.types[0] as CompositeType
|
||||
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
||||
|
||||
assertEquals (1, amqpSchema.fields.size)
|
||||
assertEquals ("a", amqpSchema.fields[0].name)
|
||||
assertEquals ("char", amqpSchema.fields[0].type)
|
||||
|
||||
var pinochio = ClassCarpenter().build(ClassCarpenter.Schema(amqpSchema.name, amqpSchema.carpenterSchema()))
|
||||
val carpenterSchema = CarpenterSchema.newInstance()
|
||||
amqpSchema.carpenterSchema(carpenterSchema = carpenterSchema, force = true)
|
||||
|
||||
assert (classTestName ("A") in carpenterSchema.carpenterSchemas)
|
||||
|
||||
val aSchema = carpenterSchema.carpenterSchemas[classTestName ("A")]!!
|
||||
val pinochio = ClassCarpenter().build(aSchema)
|
||||
|
||||
val p = pinochio.constructors[0].newInstance (test)
|
||||
|
||||
@ -109,30 +119,33 @@ class SingleMemberCompositeSchemaToClassCarpenterTests {
|
||||
val test = 10L
|
||||
|
||||
@CordaSerializable
|
||||
data class A(val a : Long)
|
||||
data class A(val a: Long)
|
||||
|
||||
var a = A (test)
|
||||
var a = A(test)
|
||||
|
||||
val obj = DeserializationInput(factory).deserializeRtnEnvelope(serialise (a))
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
|
||||
assert (obj.first is A)
|
||||
val amqpObj = obj.first as A
|
||||
assert(obj.obj is A)
|
||||
val amqpObj = obj.obj as A
|
||||
|
||||
assertEquals (test, amqpObj.a)
|
||||
assertEquals (1, obj.second.schema.types.size)
|
||||
assert (obj.second.schema.types[0] is CompositeType)
|
||||
assertEquals(test, amqpObj.a)
|
||||
assertEquals(1, obj.envelope.schema.types.size)
|
||||
assert(obj.envelope.schema.types[0] is CompositeType)
|
||||
|
||||
var amqpSchema = obj.second.schema.types[0] as CompositeType
|
||||
var amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
||||
|
||||
assertEquals (1, amqpSchema.fields.size)
|
||||
assertEquals ("a", amqpSchema.fields[0].name)
|
||||
assertEquals ("long", amqpSchema.fields[0].type)
|
||||
assertEquals(1, amqpSchema.fields.size)
|
||||
assertEquals("a", amqpSchema.fields[0].name)
|
||||
assertEquals("long", amqpSchema.fields[0].type)
|
||||
|
||||
var pinochio = ClassCarpenter().build(amqpSchema.carpenterSchema())
|
||||
val carpenterSchema = CarpenterSchemas.newInstance()
|
||||
amqpSchema.carpenterSchema(carpenterSchemas = carpenterSchema, force = true)
|
||||
|
||||
val p = pinochio.constructors[0].newInstance (test)
|
||||
val aSchema = carpenterSchema.carpenterSchemas.find { it.name == classTestName("A") }!!
|
||||
val pinochio = ClassCarpenter().build(aSchema)
|
||||
val p = pinochio.constructors[0].newInstance(test)
|
||||
|
||||
assertEquals (pinochio.getMethod("getA").invoke (p), amqpObj.a)
|
||||
assertEquals(pinochio.getMethod("getA").invoke(p), amqpObj.a)
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -140,30 +153,33 @@ class SingleMemberCompositeSchemaToClassCarpenterTests {
|
||||
val test = 10.toShort()
|
||||
|
||||
@CordaSerializable
|
||||
data class A(val a : Short)
|
||||
data class A(val a: Short)
|
||||
|
||||
var a = A (test)
|
||||
var a = A(test)
|
||||
|
||||
val obj = DeserializationInput(factory).deserializeRtnEnvelope(serialise (a))
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
|
||||
assert (obj.first is A)
|
||||
val amqpObj = obj.first as A
|
||||
assert(obj.obj is A)
|
||||
val amqpObj = obj.obj as A
|
||||
|
||||
assertEquals (test, amqpObj.a)
|
||||
assertEquals (1, obj.second.schema.types.size)
|
||||
assert (obj.second.schema.types[0] is CompositeType)
|
||||
assertEquals(test, amqpObj.a)
|
||||
assertEquals(1, obj.envelope.schema.types.size)
|
||||
assert(obj.envelope.schema.types[0] is CompositeType)
|
||||
|
||||
var amqpSchema = obj.second.schema.types[0] as CompositeType
|
||||
var amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
||||
|
||||
assertEquals (1, amqpSchema.fields.size)
|
||||
assertEquals ("a", amqpSchema.fields[0].name)
|
||||
assertEquals ("short", amqpSchema.fields[0].type)
|
||||
assertEquals(1, amqpSchema.fields.size)
|
||||
assertEquals("a", amqpSchema.fields[0].name)
|
||||
assertEquals("short", amqpSchema.fields[0].type)
|
||||
|
||||
var pinochio = ClassCarpenter().build(amqpSchema.carpenterSchema())
|
||||
val carpenterSchema = CarpenterSchemas.newInstance()
|
||||
amqpSchema.carpenterSchema(carpenterSchemas = carpenterSchema, force = true)
|
||||
|
||||
val p = pinochio.constructors[0].newInstance (test)
|
||||
val aSchema = carpenterSchema.carpenterSchemas.find { it.name == classTestName("A") }!!
|
||||
val pinochio = ClassCarpenter().build(aSchema)
|
||||
val p = pinochio.constructors[0].newInstance(test)
|
||||
|
||||
assertEquals (pinochio.getMethod("getA").invoke (p), amqpObj.a)
|
||||
assertEquals(pinochio.getMethod("getA").invoke(p), amqpObj.a)
|
||||
}
|
||||
|
||||
/*
|
||||
@ -178,14 +194,14 @@ class SingleMemberCompositeSchemaToClassCarpenterTests {
|
||||
|
||||
val obj = DeserializationInput(factory).deserializeRtnEnvelope(serialise (a))
|
||||
|
||||
assert (obj.first is A)
|
||||
val amqpObj = obj.first as A
|
||||
assert (obj.obj is A)
|
||||
val amqpObj = obj.obj as A
|
||||
|
||||
assertEquals (test, amqpObj.a)
|
||||
assertEquals (1, obj.second.schema.types.size)
|
||||
assert (obj.second.schema.types[0] is CompositeType)
|
||||
assertEquals (1, obj.envelope.schema.types.size)
|
||||
assert (obj.envelope.schema.types[0] is CompositeType)
|
||||
|
||||
var amqpSchema = obj.second.schema.types[0] as CompositeType
|
||||
var amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
||||
|
||||
assertEquals (1, amqpSchema.fields.size)
|
||||
assertEquals ("a", amqpSchema.fields[0].name)
|
||||
@ -204,60 +220,66 @@ class SingleMemberCompositeSchemaToClassCarpenterTests {
|
||||
val test = 10.0
|
||||
|
||||
@CordaSerializable
|
||||
data class A(val a : Double)
|
||||
data class A(val a: Double)
|
||||
|
||||
var a = A (test)
|
||||
val a = A(test)
|
||||
|
||||
val obj = DeserializationInput(factory).deserializeRtnEnvelope(serialise (a))
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
|
||||
assert (obj.first is A)
|
||||
val amqpObj = obj.first as A
|
||||
assert(obj.obj is A)
|
||||
val amqpObj = obj.obj as A
|
||||
|
||||
assertEquals (test, amqpObj.a)
|
||||
assertEquals (1, obj.second.schema.types.size)
|
||||
assert (obj.second.schema.types[0] is CompositeType)
|
||||
assertEquals(test, amqpObj.a)
|
||||
assertEquals(1, obj.envelope.schema.types.size)
|
||||
assert(obj.envelope.schema.types[0] is CompositeType)
|
||||
|
||||
var amqpSchema = obj.second.schema.types[0] as CompositeType
|
||||
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
||||
|
||||
assertEquals (1, amqpSchema.fields.size)
|
||||
assertEquals ("a", amqpSchema.fields[0].name)
|
||||
assertEquals ("double", amqpSchema.fields[0].type)
|
||||
assertEquals(1, amqpSchema.fields.size)
|
||||
assertEquals("a", amqpSchema.fields[0].name)
|
||||
assertEquals("double", amqpSchema.fields[0].type)
|
||||
|
||||
var pinochio = ClassCarpenter().build(amqpSchema.carpenterSchema())
|
||||
val carpenterSchema = CarpenterSchemas.newInstance()
|
||||
amqpSchema.carpenterSchema(carpenterSchemas = carpenterSchema, force = true)
|
||||
|
||||
val p = pinochio.constructors[0].newInstance (test)
|
||||
val aSchema = carpenterSchema.carpenterSchemas.find { it.name == classTestName("A") }!!
|
||||
val pinochio = ClassCarpenter().build(aSchema)
|
||||
val p = pinochio.constructors[0].newInstance(test)
|
||||
|
||||
assertEquals (pinochio.getMethod("getA").invoke (p), amqpObj.a)
|
||||
assertEquals(pinochio.getMethod("getA").invoke(p), amqpObj.a)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun singleFloat() {
|
||||
val test = 10.0F
|
||||
val test: Float = 10.0F
|
||||
|
||||
@CordaSerializable
|
||||
data class A(val a : Float)
|
||||
data class A(val a: Float)
|
||||
|
||||
var a = A (test)
|
||||
val a = A(test)
|
||||
|
||||
val obj = DeserializationInput(factory).deserializeRtnEnvelope(serialise (a))
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
|
||||
assert (obj.first is A)
|
||||
val amqpObj = obj.first as A
|
||||
assert(obj.obj is A)
|
||||
val amqpObj = obj.obj as A
|
||||
|
||||
assertEquals (test, amqpObj.a)
|
||||
assertEquals (1, obj.second.schema.types.size)
|
||||
assert (obj.second.schema.types[0] is CompositeType)
|
||||
assertEquals(test, amqpObj.a)
|
||||
assertEquals(1, obj.envelope.schema.types.size)
|
||||
assert(obj.envelope.schema.types[0] is CompositeType)
|
||||
|
||||
var amqpSchema = obj.second.schema.types[0] as CompositeType
|
||||
val amqpSchema = obj.envelope.schema.types[0] as CompositeType
|
||||
|
||||
assertEquals (1, amqpSchema.fields.size)
|
||||
assertEquals ("a", amqpSchema.fields[0].name)
|
||||
assertEquals ("float", amqpSchema.fields[0].type)
|
||||
assertEquals(1, amqpSchema.fields.size)
|
||||
assertEquals("a", amqpSchema.fields[0].name)
|
||||
assertEquals("float", amqpSchema.fields[0].type)
|
||||
|
||||
var pinochio = ClassCarpenter().build(amqpSchema.carpenterSchema())
|
||||
val carpenterSchema = CarpenterSchemas.newInstance()
|
||||
amqpSchema.carpenterSchema(carpenterSchemas = carpenterSchema, force = true)
|
||||
|
||||
val p = pinochio.constructors[0].newInstance (test)
|
||||
val aSchema = carpenterSchema.carpenterSchemas.find { it.name == classTestName("A") }!!
|
||||
val pinochio = ClassCarpenter().build(aSchema)
|
||||
val p = pinochio.constructors[0].newInstance(test)
|
||||
|
||||
// assertEquals (pinochio.getMethod("getA").invoke (p), amqpObj.a)
|
||||
assertEquals(pinochio.getMethod("getA").invoke(p), amqpObj.a)
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user