mirror of
https://github.com/corda/corda.git
synced 2025-06-23 01:19:00 +00:00
Corda 1922 serialize states with calculated values (#3938)
* Introduce SerializeForCarpenter annotation * Apply SerializableComputedProperty annotation to Cash.exitKeys, fix bugs * info -> trace * Remove annotation from FungibleAsset, as we do not know whether all implementing classes will provide the property as a calculated value * Remove redundant import * Explicit lambda params * Restore explicit import for Enum valueOf * Moving and rescoping * More meaningful error message * Add java test and documentation * Fix accidentally broken unit test * Ignore superclass annotation if property not calculated in implementing class * Exclude calculated properties from Jackson serialisation * Fix broken test
This commit is contained in:
@ -0,0 +1,107 @@
|
||||
package net.corda.serialization.internal.carpenter;
|
||||
|
||||
import net.corda.core.serialization.SerializableCalculatedProperty;
|
||||
import net.corda.core.serialization.SerializationContext;
|
||||
import net.corda.core.serialization.SerializationFactory;
|
||||
import net.corda.core.serialization.SerializedBytes;
|
||||
import net.corda.serialization.internal.AllWhitelist;
|
||||
import net.corda.serialization.internal.amqp.*;
|
||||
import net.corda.serialization.internal.amqp.Schema;
|
||||
import net.corda.testing.core.SerializationEnvironmentRule;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
|
||||
import static java.util.Collections.singletonList;
|
||||
import static net.corda.serialization.internal.amqp.testutils.AMQPTestUtilsKt.testDefaultFactoryNoEvolution;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class JavaCalculatedValuesToClassCarpenterTest extends AmqpCarpenterBase {
|
||||
public JavaCalculatedValuesToClassCarpenterTest() {
|
||||
super(AllWhitelist.INSTANCE);
|
||||
}
|
||||
|
||||
public interface Parent {
|
||||
@SerializableCalculatedProperty
|
||||
int getDoubled();
|
||||
}
|
||||
|
||||
public static final class C implements Parent {
|
||||
private final int i;
|
||||
|
||||
public C(int i) {
|
||||
this.i = i;
|
||||
}
|
||||
|
||||
@SerializableCalculatedProperty
|
||||
public String getSquared() {
|
||||
return Integer.toString(i * i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDoubled() {
|
||||
return i * 2;
|
||||
}
|
||||
|
||||
public int getI() {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
@Rule
|
||||
public final SerializationEnvironmentRule serializationEnvironmentRule = new SerializationEnvironmentRule();
|
||||
private SerializationContext context;
|
||||
|
||||
@Before
|
||||
public void initSerialization() {
|
||||
SerializationFactory factory = serializationEnvironmentRule.getSerializationFactory();
|
||||
context = factory.getDefaultContext();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void calculatedValues() throws Exception {
|
||||
SerializerFactory factory = testDefaultFactoryNoEvolution();
|
||||
SerializedBytes<C> serialized = serialise(new C(2));
|
||||
ObjectAndEnvelope<C> objAndEnv = new DeserializationInput(factory)
|
||||
.deserializeAndReturnEnvelope(serialized, C.class, context);
|
||||
|
||||
C amqpObj = objAndEnv.getObj();
|
||||
Schema schema = objAndEnv.getEnvelope().getSchema();
|
||||
|
||||
assertEquals(2, amqpObj.getI());
|
||||
assertEquals("4", amqpObj.getSquared());
|
||||
assertEquals(2, schema.getTypes().size());
|
||||
assertTrue(schema.getTypes().get(0) instanceof CompositeType);
|
||||
|
||||
CompositeType concrete = (CompositeType) schema.getTypes().get(0);
|
||||
assertEquals(3, concrete.getFields().size());
|
||||
assertEquals("doubled", concrete.getFields().get(0).getName());
|
||||
assertEquals("int", concrete.getFields().get(0).getType());
|
||||
assertEquals("i", concrete.getFields().get(1).getName());
|
||||
assertEquals("int", concrete.getFields().get(1).getType());
|
||||
assertEquals("squared", concrete.getFields().get(2).getName());
|
||||
assertEquals("string", concrete.getFields().get(2).getType());
|
||||
|
||||
assertEquals(0, AMQPSchemaExtensions.carpenterSchema(schema, ClassLoader.getSystemClassLoader()).getSize());
|
||||
Schema mangledSchema = ClassCarpenterTestUtilsKt.mangleNames(schema, singletonList(C.class.getTypeName()));
|
||||
CarpenterMetaSchema l2 = AMQPSchemaExtensions.carpenterSchema(mangledSchema, ClassLoader.getSystemClassLoader());
|
||||
String mangledClassName = ClassCarpenterTestUtilsKt.mangleName(C.class.getTypeName());
|
||||
|
||||
assertEquals(1, l2.getSize());
|
||||
net.corda.serialization.internal.carpenter.Schema carpenterSchema = l2.getCarpenterSchemas().stream()
|
||||
.filter(s -> s.getName().equals(mangledClassName))
|
||||
.findFirst()
|
||||
.orElseThrow(() -> new IllegalStateException("No schema found for mangled class name " + mangledClassName));
|
||||
|
||||
Class<?> pinochio = new ClassCarpenterImpl(AllWhitelist.INSTANCE).build(carpenterSchema);
|
||||
Object p = pinochio.getConstructors()[0].newInstance(4, 2, "4");
|
||||
|
||||
assertEquals(pinochio.getMethod("getI").invoke(p), amqpObj.getI());
|
||||
assertEquals(pinochio.getMethod("getSquared").invoke(p), amqpObj.getSquared());
|
||||
assertEquals(pinochio.getMethod("getDoubled").invoke(p), amqpObj.getDoubled());
|
||||
|
||||
Parent upcast = (Parent) p;
|
||||
assertEquals(upcast.getDoubled(), amqpObj.getDoubled());
|
||||
}
|
||||
}
|
@ -3,12 +3,12 @@ package net.corda.serialization.internal.amqp
|
||||
import java.io.NotSerializableException
|
||||
|
||||
/**
|
||||
* An implementation of [EvolutionSerializerGetterBase] that disables all evolution within a
|
||||
* An implementation of [EvolutionSerializerProvider] that disables all evolution within a
|
||||
* [SerializerFactory]. This is most useful in testing where it is known that evolution should not be
|
||||
* occurring and where bugs may be hidden by transparent invocation of an [EvolutionSerializer]. This
|
||||
* prevents that by simply throwing an exception whenever such a serializer is requested.
|
||||
*/
|
||||
class EvolutionSerializerGetterTesting : EvolutionSerializerGetterBase() {
|
||||
object FailIfEvolutionAttempted : EvolutionSerializerProvider {
|
||||
override fun getEvolutionSerializer(factory: SerializerFactory,
|
||||
typeNotation: TypeNotation,
|
||||
newSerializer: AMQPSerializer<Any>,
|
@ -42,7 +42,7 @@ class FingerPrinterTestingTests {
|
||||
val factory = SerializerFactory(
|
||||
AllWhitelist,
|
||||
ClassLoader.getSystemClassLoader(),
|
||||
evolutionSerializerGetter = EvolutionSerializerGetterTesting(),
|
||||
evolutionSerializerProvider = FailIfEvolutionAttempted,
|
||||
fingerPrinterConstructor = { _ -> FingerPrinterTesting() })
|
||||
|
||||
val blob = TestSerializationOutput(VERBOSE, factory).serializeAndReturnSchema(C(1, 2L))
|
||||
|
@ -1,6 +1,7 @@
|
||||
package net.corda.serialization.internal.amqp
|
||||
|
||||
import net.corda.core.serialization.ConstructorForDeserialization
|
||||
import net.corda.core.serialization.SerializableCalculatedProperty
|
||||
import net.corda.serialization.internal.amqp.testutils.deserialize
|
||||
import net.corda.serialization.internal.amqp.testutils.serialize
|
||||
import net.corda.serialization.internal.amqp.testutils.testDefaultFactoryNoEvolution
|
||||
@ -61,4 +62,62 @@ class RoundTripTests {
|
||||
val newC = DeserializationInput(factory).deserialize(bytes)
|
||||
newC.copy(l = (newC.l + "d"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun calculatedValues() {
|
||||
data class C(val i: Int) {
|
||||
@get:SerializableCalculatedProperty
|
||||
val squared = i * i
|
||||
}
|
||||
|
||||
val factory = testDefaultFactoryNoEvolution()
|
||||
val bytes = SerializationOutput(factory).serialize(C(2))
|
||||
val deserialized = DeserializationInput(factory).deserialize(bytes)
|
||||
assertThat(deserialized.squared).isEqualTo(4)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun calculatedFunction() {
|
||||
class C {
|
||||
var i: Int = 0
|
||||
@SerializableCalculatedProperty
|
||||
fun getSquared() = i * i
|
||||
}
|
||||
|
||||
val instance = C().apply { i = 2 }
|
||||
val factory = testDefaultFactoryNoEvolution()
|
||||
val bytes = SerializationOutput(factory).serialize(instance)
|
||||
val deserialized = DeserializationInput(factory).deserialize(bytes)
|
||||
assertThat(deserialized.getSquared()).isEqualTo(4)
|
||||
}
|
||||
|
||||
interface I {
|
||||
@get:SerializableCalculatedProperty
|
||||
val squared: Int
|
||||
}
|
||||
|
||||
@Test
|
||||
fun inheritedCalculatedFunction() {
|
||||
class C: I {
|
||||
var i: Int = 0
|
||||
override val squared get() = i * i
|
||||
}
|
||||
|
||||
val instance = C().apply { i = 2 }
|
||||
val factory = testDefaultFactoryNoEvolution()
|
||||
val bytes = SerializationOutput(factory).serialize(instance)
|
||||
val deserialized = DeserializationInput(factory).deserialize(bytes) as I
|
||||
assertThat(deserialized.squared).isEqualTo(4)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun inheritedCalculatedFunctionIsNotCalculated() {
|
||||
class C(override val squared: Int): I
|
||||
|
||||
val instance = C(2)
|
||||
val factory = testDefaultFactoryNoEvolution()
|
||||
val bytes = SerializationOutput(factory).serialize(instance)
|
||||
val deserialized = DeserializationInput(factory).deserialize(bytes) as I
|
||||
assertThat(deserialized.squared).isEqualTo(2)
|
||||
}
|
||||
}
|
||||
|
@ -210,7 +210,7 @@ class SerializationOutputTests(private val compression: CordaSerializationEncodi
|
||||
return SerializerFactory(
|
||||
AllWhitelist,
|
||||
ClassLoader.getSystemClassLoader(),
|
||||
evolutionSerializerGetter = EvolutionSerializerGetterTesting()
|
||||
evolutionSerializerProvider = FailIfEvolutionAttempted
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -23,7 +23,7 @@ fun testDefaultFactoryNoEvolution(): SerializerFactory {
|
||||
return SerializerFactory(
|
||||
AllWhitelist,
|
||||
ClassLoader.getSystemClassLoader(),
|
||||
evolutionSerializerGetter = EvolutionSerializerGetterTesting())
|
||||
evolutionSerializerProvider = FailIfEvolutionAttempted)
|
||||
}
|
||||
|
||||
fun testDefaultFactoryWithWhitelist() = SerializerFactory(EmptyWhitelist, ClassLoader.getSystemClassLoader())
|
||||
|
@ -0,0 +1,101 @@
|
||||
package net.corda.serialization.internal.carpenter
|
||||
|
||||
import net.corda.core.serialization.SerializableCalculatedProperty
|
||||
import net.corda.serialization.internal.AllWhitelist
|
||||
import net.corda.serialization.internal.amqp.CompositeType
|
||||
import net.corda.serialization.internal.amqp.DeserializationInput
|
||||
import net.corda.serialization.internal.amqp.testutils.deserializeAndReturnEnvelope
|
||||
import net.corda.serialization.internal.amqp.testutils.testDefaultFactoryNoEvolution
|
||||
import org.junit.Test
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
class CalculatedValuesToClassCarpenterTests : AmqpCarpenterBase(AllWhitelist) {
|
||||
|
||||
interface Parent {
|
||||
@get:SerializableCalculatedProperty
|
||||
val doubled: Int
|
||||
}
|
||||
|
||||
@Test
|
||||
fun calculatedValues() {
|
||||
data class C(val i: Int): Parent {
|
||||
@get:SerializableCalculatedProperty
|
||||
val squared = (i * i).toString()
|
||||
|
||||
override val doubled get() = i * 2
|
||||
}
|
||||
|
||||
val factory = testDefaultFactoryNoEvolution()
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(C(2)))
|
||||
val amqpObj = obj.obj
|
||||
val serSchema = obj.envelope.schema
|
||||
|
||||
assertEquals(2, amqpObj.i)
|
||||
assertEquals("4", amqpObj.squared)
|
||||
assertEquals(2, serSchema.types.size)
|
||||
require(serSchema.types[0] is CompositeType)
|
||||
|
||||
val concrete = serSchema.types[0] as CompositeType
|
||||
assertEquals(3, concrete.fields.size)
|
||||
assertEquals("doubled", concrete.fields[0].name)
|
||||
assertEquals("int", concrete.fields[0].type)
|
||||
assertEquals("i", concrete.fields[1].name)
|
||||
assertEquals("int", concrete.fields[1].type)
|
||||
assertEquals("squared", concrete.fields[2].name)
|
||||
assertEquals("string", concrete.fields[2].type)
|
||||
|
||||
val l1 = serSchema.carpenterSchema(ClassLoader.getSystemClassLoader())
|
||||
assertEquals(0, l1.size)
|
||||
val mangleSchema = serSchema.mangleNames(listOf((classTestName("C"))))
|
||||
val l2 = mangleSchema.carpenterSchema(ClassLoader.getSystemClassLoader())
|
||||
val aName = mangleName(classTestName("C"))
|
||||
|
||||
assertEquals(1, l2.size)
|
||||
val aSchema = l2.carpenterSchemas.find { it.name == aName }!!
|
||||
|
||||
val pinochio = ClassCarpenterImpl(whitelist = AllWhitelist).build(aSchema)
|
||||
val p = pinochio.constructors[0].newInstance(4, 2, "4")
|
||||
|
||||
assertEquals(pinochio.getMethod("getI").invoke(p), amqpObj.i)
|
||||
assertEquals(pinochio.getMethod("getSquared").invoke(p), amqpObj.squared)
|
||||
assertEquals(pinochio.getMethod("getDoubled").invoke(p), amqpObj.doubled)
|
||||
|
||||
val upcast = p as Parent
|
||||
assertEquals(upcast.doubled, amqpObj.doubled)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun implementingClassDoesNotCalculateValue() {
|
||||
class C(override val doubled: Int): Parent
|
||||
|
||||
val factory = testDefaultFactoryNoEvolution()
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(C(5)))
|
||||
val amqpObj = obj.obj
|
||||
val serSchema = obj.envelope.schema
|
||||
|
||||
assertEquals(2, serSchema.types.size)
|
||||
require(serSchema.types[0] is CompositeType)
|
||||
|
||||
val concrete = serSchema.types[0] as CompositeType
|
||||
assertEquals(1, concrete.fields.size)
|
||||
assertEquals("doubled", concrete.fields[0].name)
|
||||
assertEquals("int", concrete.fields[0].type)
|
||||
|
||||
val l1 = serSchema.carpenterSchema(ClassLoader.getSystemClassLoader())
|
||||
assertEquals(0, l1.size)
|
||||
val mangleSchema = serSchema.mangleNames(listOf((classTestName("C"))))
|
||||
val l2 = mangleSchema.carpenterSchema(ClassLoader.getSystemClassLoader())
|
||||
val aName = mangleName(classTestName("C"))
|
||||
|
||||
assertEquals(1, l2.size)
|
||||
val aSchema = l2.carpenterSchemas.find { it.name == aName }!!
|
||||
|
||||
val pinochio = ClassCarpenterImpl(whitelist = AllWhitelist).build(aSchema)
|
||||
val p = pinochio.constructors[0].newInstance(5)
|
||||
|
||||
assertEquals(pinochio.getMethod("getDoubled").invoke(p), amqpObj.doubled)
|
||||
|
||||
val upcast = p as Parent
|
||||
assertEquals(upcast.doubled, amqpObj.doubled)
|
||||
}
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
package net.corda.serialization.internal.carpenter
|
||||
|
||||
import net.corda.core.serialization.ClassWhitelist
|
||||
import net.corda.core.serialization.SerializedBytes
|
||||
import net.corda.serialization.internal.amqp.*
|
||||
import net.corda.serialization.internal.amqp.Field
|
||||
import net.corda.serialization.internal.amqp.Schema
|
||||
@ -47,7 +48,7 @@ open class AmqpCarpenterBase(whitelist: ClassWhitelist) {
|
||||
var cc = ClassCarpenterImpl(whitelist = whitelist)
|
||||
var factory = SerializerFactoryExternalCarpenter(cc)
|
||||
|
||||
fun serialise(clazz: Any) = SerializationOutput(factory).serialize(clazz)
|
||||
fun <T: Any> serialise(obj: T): SerializedBytes<T> = SerializationOutput(factory).serialize(obj)
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun classTestName(clazz: String) = "${this.javaClass.name}\$${testName()}\$$clazz"
|
||||
}
|
||||
|
@ -30,9 +30,7 @@ class CompositeMembers : AmqpCarpenterBase(AllWhitelist) {
|
||||
val b = B(A(testA), testB)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(b))
|
||||
|
||||
require(obj.obj is B)
|
||||
|
||||
val amqpObj = obj.obj as B
|
||||
val amqpObj = obj.obj
|
||||
|
||||
assertEquals(testB, amqpObj.b)
|
||||
assertEquals(testA, amqpObj.a.a)
|
||||
@ -92,8 +90,6 @@ class CompositeMembers : AmqpCarpenterBase(AllWhitelist) {
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(b))
|
||||
val amqpSchema = obj.envelope.schema.mangleNames(listOf(classTestName("A")))
|
||||
|
||||
require(obj.obj is B)
|
||||
|
||||
amqpSchema.carpenterSchema(ClassLoader.getSystemClassLoader())
|
||||
}
|
||||
|
||||
@ -111,8 +107,6 @@ class CompositeMembers : AmqpCarpenterBase(AllWhitelist) {
|
||||
val b = B(A(testA), testB)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(b))
|
||||
|
||||
require(obj.obj is B)
|
||||
|
||||
val amqpSchema = obj.envelope.schema.mangleNames(listOf(classTestName("B")))
|
||||
val carpenterSchema = amqpSchema.carpenterSchema(ClassLoader.getSystemClassLoader())
|
||||
|
||||
@ -138,9 +132,6 @@ class CompositeMembers : AmqpCarpenterBase(AllWhitelist) {
|
||||
|
||||
val b = B(A(testA), testB)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(b))
|
||||
|
||||
require(obj.obj is B)
|
||||
|
||||
val amqpSchema = obj.envelope.schema.mangleNames(listOf(classTestName("A"), classTestName("B")))
|
||||
val carpenterSchema = amqpSchema.carpenterSchema(ClassLoader.getSystemClassLoader())
|
||||
|
||||
@ -198,8 +189,6 @@ class CompositeMembers : AmqpCarpenterBase(AllWhitelist) {
|
||||
val c = C(B(testA, testB), testC)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(c))
|
||||
|
||||
require(obj.obj is C)
|
||||
|
||||
val amqpSchema = obj.envelope.schema.mangleNames(listOf(classTestName("A"), classTestName("B")))
|
||||
|
||||
amqpSchema.carpenterSchema(ClassLoader.getSystemClassLoader())
|
||||
@ -224,8 +213,6 @@ class CompositeMembers : AmqpCarpenterBase(AllWhitelist) {
|
||||
val c = C(B(testA, testB), testC)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(c))
|
||||
|
||||
require(obj.obj is C)
|
||||
|
||||
val amqpSchema = obj.envelope.schema.mangleNames(listOf(classTestName("A"), classTestName("B")))
|
||||
|
||||
amqpSchema.carpenterSchema(ClassLoader.getSystemClassLoader())
|
||||
@ -250,8 +237,6 @@ class CompositeMembers : AmqpCarpenterBase(AllWhitelist) {
|
||||
val c = C(B(testA, testB), testC)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(c))
|
||||
|
||||
require(obj.obj is C)
|
||||
|
||||
val carpenterSchema = obj.envelope.schema.mangleNames(listOf(classTestName("A"), classTestName("B")))
|
||||
TestMetaCarpenter(carpenterSchema.carpenterSchema(
|
||||
ClassLoader.getSystemClassLoader()), ClassCarpenterImpl(whitelist = AllWhitelist))
|
||||
|
@ -44,7 +44,6 @@ class InheritanceSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWhitelist) {
|
||||
|
||||
assertEquals(testJ, a.j)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
assertTrue(obj.obj is A)
|
||||
val serSchema = obj.envelope.schema
|
||||
assertEquals(2, serSchema.types.size)
|
||||
val l1 = serSchema.carpenterSchema(ClassLoader.getSystemClassLoader())
|
||||
@ -84,8 +83,6 @@ class InheritanceSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWhitelist) {
|
||||
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
|
||||
assertTrue(obj.obj is A)
|
||||
|
||||
val serSchema = obj.envelope.schema
|
||||
|
||||
assertEquals(2, serSchema.types.size)
|
||||
@ -128,8 +125,6 @@ class InheritanceSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWhitelist) {
|
||||
val a = A(testI, testII)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
|
||||
assertTrue(obj.obj is A)
|
||||
|
||||
val serSchema = obj.envelope.schema
|
||||
|
||||
assertEquals(3, serSchema.types.size)
|
||||
@ -176,8 +171,6 @@ class InheritanceSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWhitelist) {
|
||||
val a = A(testI, testIII)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
|
||||
assertTrue(obj.obj is A)
|
||||
|
||||
val serSchema = obj.envelope.schema
|
||||
|
||||
assertEquals(3, serSchema.types.size)
|
||||
@ -225,8 +218,6 @@ class InheritanceSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWhitelist) {
|
||||
val b = B(a, testIIII)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(b))
|
||||
|
||||
assertTrue(obj.obj is B)
|
||||
|
||||
val serSchema = obj.envelope.schema
|
||||
|
||||
// Expected classes are
|
||||
@ -281,8 +272,6 @@ class InheritanceSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWhitelist) {
|
||||
val b = B(a, testIIII)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(b))
|
||||
|
||||
assertTrue(obj.obj is B)
|
||||
|
||||
val serSchema = obj.envelope.schema
|
||||
|
||||
// The classes we're expecting to find:
|
||||
@ -305,8 +294,6 @@ class InheritanceSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWhitelist) {
|
||||
val a = A(testI)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
|
||||
assertTrue(obj.obj is A)
|
||||
|
||||
val serSchema = obj.envelope.schema
|
||||
|
||||
// The classes we're expecting to find:
|
||||
|
@ -21,8 +21,7 @@ class MultiMemberCompositeSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWhi
|
||||
val a = A(testA, testB)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
|
||||
require(obj.obj is A)
|
||||
val amqpObj = obj.obj as A
|
||||
val amqpObj = obj.obj
|
||||
|
||||
assertEquals(testA, amqpObj.a)
|
||||
assertEquals(testB, amqpObj.b)
|
||||
@ -65,8 +64,7 @@ class MultiMemberCompositeSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWhi
|
||||
val a = A(testA, testB)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
|
||||
require(obj.obj is A)
|
||||
val amqpObj = obj.obj as A
|
||||
val amqpObj = obj.obj
|
||||
|
||||
assertEquals(testA, amqpObj.a)
|
||||
assertEquals(testB, amqpObj.b)
|
||||
|
@ -17,9 +17,7 @@ class SingleMemberCompositeSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWh
|
||||
val test = 10
|
||||
val a = A(test)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
|
||||
require(obj.obj is A)
|
||||
val amqpObj = obj.obj as A
|
||||
val amqpObj = obj.obj
|
||||
|
||||
assertEquals(test, amqpObj.a)
|
||||
assertEquals(1, obj.envelope.schema.types.size)
|
||||
@ -53,9 +51,7 @@ class SingleMemberCompositeSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWh
|
||||
val a = A(test)
|
||||
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
|
||||
require(obj.obj is A)
|
||||
val amqpObj = obj.obj as A
|
||||
val amqpObj = obj.obj
|
||||
|
||||
assertEquals(test, amqpObj.a)
|
||||
assertEquals(1, obj.envelope.schema.types.size)
|
||||
@ -83,9 +79,7 @@ class SingleMemberCompositeSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWh
|
||||
val test = 10L
|
||||
val a = A(test)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
|
||||
require(obj.obj is A)
|
||||
val amqpObj = obj.obj as A
|
||||
val amqpObj = obj.obj
|
||||
|
||||
assertEquals(test, amqpObj.a)
|
||||
assertEquals(1, obj.envelope.schema.types.size)
|
||||
@ -118,9 +112,7 @@ class SingleMemberCompositeSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWh
|
||||
val test = 10.toShort()
|
||||
val a = A(test)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
|
||||
require(obj.obj is A)
|
||||
val amqpObj = obj.obj as A
|
||||
val amqpObj = obj.obj
|
||||
|
||||
assertEquals(test, amqpObj.a)
|
||||
assertEquals(1, obj.envelope.schema.types.size)
|
||||
@ -153,9 +145,7 @@ class SingleMemberCompositeSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWh
|
||||
val test = 10.0
|
||||
val a = A(test)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
|
||||
require(obj.obj is A)
|
||||
val amqpObj = obj.obj as A
|
||||
val amqpObj = obj.obj
|
||||
|
||||
assertEquals(test, amqpObj.a)
|
||||
assertEquals(1, obj.envelope.schema.types.size)
|
||||
@ -188,9 +178,7 @@ class SingleMemberCompositeSchemaToClassCarpenterTests : AmqpCarpenterBase(AllWh
|
||||
val test = 10.0F
|
||||
val a = A(test)
|
||||
val obj = DeserializationInput(factory).deserializeAndReturnEnvelope(serialise(a))
|
||||
|
||||
require(obj.obj is A)
|
||||
val amqpObj = obj.obj as A
|
||||
val amqpObj = obj.obj
|
||||
|
||||
assertEquals(test, amqpObj.a)
|
||||
assertEquals(1, obj.envelope.schema.types.size)
|
||||
|
Reference in New Issue
Block a user