From fefa2bee5e5660742f6d83d4318c9db64d185bb1 Mon Sep 17 00:00:00 2001 From: Joseph Zuniga-Daly Date: Fri, 3 Jul 2020 14:11:53 +0100 Subject: [PATCH] Move broken map into its own source file --- .../CustomCheckpointSerializerCorDapp.kt | 38 ++++++++--------- .../DifficultToSerialize.kt | 42 +++++++++++++++++++ ...ckNetworkCustomCheckpointSerializerTest.kt | 41 +----------------- 3 files changed, 62 insertions(+), 59 deletions(-) create mode 100644 node/src/integration-test/kotlin/net/corda/node/customcheckpointserializer/DifficultToSerialize.kt diff --git a/node/src/integration-test/kotlin/net/corda/node/customcheckpointserializer/CustomCheckpointSerializerCorDapp.kt b/node/src/integration-test/kotlin/net/corda/node/customcheckpointserializer/CustomCheckpointSerializerCorDapp.kt index 9b70fe8efa..df42baa66c 100644 --- a/node/src/integration-test/kotlin/net/corda/node/customcheckpointserializer/CustomCheckpointSerializerCorDapp.kt +++ b/node/src/integration-test/kotlin/net/corda/node/customcheckpointserializer/CustomCheckpointSerializerCorDapp.kt @@ -22,7 +22,7 @@ class CustomCheckpointSerializerCorDapp { override fun call(): Int { // This object is difficult to serialize with Kryo - val difficultToSerialize: MockNetworkCustomCheckpointSerializerTest.BrokenMapAbstract = MockNetworkCustomCheckpointSerializerTest.BrokenMapAbstractImpl() + val difficultToSerialize: DifficultToSerialize.BrokenMapAbstract = DifficultToSerialize.BrokenMapAbstractImpl() difficultToSerialize.putAll(mapOf("foo" to purchase)) // Force a checkpoint @@ -40,7 +40,7 @@ class CustomCheckpointSerializerCorDapp { override fun call(): Int { // This object is difficult to serialize with Kryo - val difficultToSerialize: MockNetworkCustomCheckpointSerializerTest.BrokenMapInterface = MockNetworkCustomCheckpointSerializerTest.BrokenMapInterfaceImpl() + val difficultToSerialize: DifficultToSerialize.BrokenMapInterface = DifficultToSerialize.BrokenMapInterfaceImpl() difficultToSerialize.putAll(mapOf("foo" to purchase)) // Force a checkpoint @@ -57,7 +57,7 @@ class CustomCheckpointSerializerCorDapp { override fun call(): Int { // This object is difficult to serialize with Kryo - val difficultToSerialize: MockNetworkCustomCheckpointSerializerTest.BrokenMapClass = MockNetworkCustomCheckpointSerializerTest.BrokenMapClass() + val difficultToSerialize: DifficultToSerialize.BrokenMapClass = DifficultToSerialize.BrokenMapClass() difficultToSerialize.putAll(mapOf("foo" to purchase)) // Force a checkpoint @@ -70,11 +70,12 @@ class CustomCheckpointSerializerCorDapp { } @StartableByRPC - class TestFlowCheckingReferencesWork(private val reference: MockNetworkCustomCheckpointSerializerTest.BrokenMapClass) : FlowLogic>() { + class TestFlowCheckingReferencesWork(private val reference: DifficultToSerialize.BrokenMapClass) : + FlowLogic>() { private val referenceField = reference @Suspendable - override fun call(): MockNetworkCustomCheckpointSerializerTest.BrokenMapClass { + override fun call(): DifficultToSerialize.BrokenMapClass { val ref = referenceField @@ -95,14 +96,14 @@ class CustomCheckpointSerializerCorDapp { @Suppress("unused") class TestInterfaceSerializer : - CheckpointCustomSerializer, HashMap> { + CheckpointCustomSerializer, HashMap> { - override fun toProxy(obj: MockNetworkCustomCheckpointSerializerTest.BrokenMapInterface): HashMap { + override fun toProxy(obj: DifficultToSerialize.BrokenMapInterface): HashMap { val proxy = HashMap() return obj.toMap(proxy) } - override fun fromProxy(proxy: HashMap): MockNetworkCustomCheckpointSerializerTest.BrokenMapInterface { - return MockNetworkCustomCheckpointSerializerTest.BrokenMapInterfaceImpl() + override fun fromProxy(proxy: HashMap): DifficultToSerialize.BrokenMapInterface { + return DifficultToSerialize.BrokenMapInterfaceImpl() .also { it.putAll(proxy) } } @@ -110,14 +111,14 @@ class CustomCheckpointSerializerCorDapp { @Suppress("unused") class TestClassSerializer : - CheckpointCustomSerializer, HashMap> { + CheckpointCustomSerializer, HashMap> { - override fun toProxy(obj: MockNetworkCustomCheckpointSerializerTest.BrokenMapClass): HashMap { + override fun toProxy(obj: DifficultToSerialize.BrokenMapClass): HashMap { val proxy = HashMap() return obj.toMap(proxy) } - override fun fromProxy(proxy: HashMap): MockNetworkCustomCheckpointSerializerTest.BrokenMapClass { - return MockNetworkCustomCheckpointSerializerTest.BrokenMapClass() + override fun fromProxy(proxy: HashMap): DifficultToSerialize.BrokenMapClass { + return DifficultToSerialize.BrokenMapClass() .also { it.putAll(proxy) } } @@ -125,16 +126,15 @@ class CustomCheckpointSerializerCorDapp { @Suppress("unused") class TestAbstractClassSerializer : - CheckpointCustomSerializer, HashMap> { + CheckpointCustomSerializer, HashMap> { - override fun toProxy(obj: MockNetworkCustomCheckpointSerializerTest.BrokenMapAbstract): HashMap { + override fun toProxy(obj: DifficultToSerialize.BrokenMapAbstract): HashMap { val proxy = HashMap() return obj.toMap(proxy) } - override fun fromProxy(proxy: HashMap): MockNetworkCustomCheckpointSerializerTest.BrokenMapAbstract { - return MockNetworkCustomCheckpointSerializerTest.BrokenMapAbstractImpl() + override fun fromProxy(proxy: HashMap): DifficultToSerialize.BrokenMapAbstract { + return DifficultToSerialize.BrokenMapAbstractImpl() .also { it.putAll(proxy) } } - } -} \ No newline at end of file +} diff --git a/node/src/integration-test/kotlin/net/corda/node/customcheckpointserializer/DifficultToSerialize.kt b/node/src/integration-test/kotlin/net/corda/node/customcheckpointserializer/DifficultToSerialize.kt new file mode 100644 index 0000000000..6797c75415 --- /dev/null +++ b/node/src/integration-test/kotlin/net/corda/node/customcheckpointserializer/DifficultToSerialize.kt @@ -0,0 +1,42 @@ +package net.corda.node.customcheckpointserializer + +import net.corda.core.flows.FlowException + +class DifficultToSerialize { + + // Broken Map + // This map breaks the rules for the put method. Making the normal map serializer fail. + + open class BrokenMapBaseImpl : MutableMap{ + private val map = HashMap() + + override val size: Int + get() = map.size + override val entries: MutableSet> + get() = map.entries + override val keys: MutableSet + get() = map.keys + override val values: MutableCollection + get() = map.values + + override fun containsKey(key: K): Boolean = map.containsKey(key) + override fun containsValue(value: V): Boolean = map.containsValue(value) + override fun get(key: K): V? = map.get(key) + override fun isEmpty(): Boolean = map.isEmpty() + override fun clear() = map.clear() + override fun put(key: K, value: V): V? = throw FlowException("Broken on purpose") + override fun putAll(from: Map) = map.putAll(from) + override fun remove(key: K): V? = map.remove(key) + } + + // A class to test custom serializers applied to implementations + class BrokenMapClass : BrokenMapBaseImpl() + + // An interface and implementation to test custom serializers applied to interface types + interface BrokenMapInterface : MutableMap + class BrokenMapInterfaceImpl : BrokenMapBaseImpl(), BrokenMapInterface + + // An abstract class and implementation to test custom serializers applied to interface types + abstract class BrokenMapAbstract : BrokenMapBaseImpl(), MutableMap + class BrokenMapAbstractImpl : BrokenMapAbstract() +} diff --git a/node/src/integration-test/kotlin/net/corda/node/customcheckpointserializer/MockNetworkCustomCheckpointSerializerTest.kt b/node/src/integration-test/kotlin/net/corda/node/customcheckpointserializer/MockNetworkCustomCheckpointSerializerTest.kt index 42edc8a335..dd0622538c 100644 --- a/node/src/integration-test/kotlin/net/corda/node/customcheckpointserializer/MockNetworkCustomCheckpointSerializerTest.kt +++ b/node/src/integration-test/kotlin/net/corda/node/customcheckpointserializer/MockNetworkCustomCheckpointSerializerTest.kt @@ -1,7 +1,6 @@ package net.corda.node.customcheckpointserializer import co.paralleluniverse.fibers.Suspendable -import net.corda.core.flows.FlowException import net.corda.testing.node.MockNetwork import net.corda.testing.node.MockNetworkParameters import org.assertj.core.api.Assertions @@ -36,7 +35,7 @@ class MockNetworkCustomCheckpointSerializerTest { @Test(timeout = 300_000) fun `check references are restored correctly`() { val node = mockNetwork.createPartyNode() - val expectedReference = BrokenMapClass() + val expectedReference = DifficultToSerialize.BrokenMapClass() expectedReference.putAll(mapOf("one" to 1)) val actualReference = node.startFlow(CustomCheckpointSerializerCorDapp.TestFlowCheckingReferencesWork(expectedReference)).get() @@ -59,42 +58,4 @@ class MockNetworkCustomCheckpointSerializerTest { val result = node.startFlow(CustomCheckpointSerializerCorDapp.TestFlowWithDifficultToSerializeLocalVariableAsAbstract(5)).get() Assertions.assertThat(result).isEqualTo(5) } - - - // Broken Map - // This map breaks the rules for the put method. Making the normal map serializer fail. - - open class BrokenMapBaseImpl : MutableMap{ - private val map = HashMap() - - override val size: Int - get() = map.size - override val entries: MutableSet> - get() = map.entries - override val keys: MutableSet - get() = map.keys - override val values: MutableCollection - get() = map.values - - override fun containsKey(key: K): Boolean = map.containsKey(key) - override fun containsValue(value: V): Boolean = map.containsValue(value) - override fun get(key: K): V? = map.get(key) - override fun isEmpty(): Boolean = map.isEmpty() - override fun clear() = map.clear() - override fun put(key: K, value: V): V? = throw FlowException("Broken on purpose") - override fun putAll(from: Map) = map.putAll(from) - override fun remove(key: K): V? = map.remove(key) - } - - // A class to test custom serializers applied to implementations - class BrokenMapClass : BrokenMapBaseImpl() - - // An interface and implementation to test custom serializers applied to interface types - interface BrokenMapInterface : MutableMap - class BrokenMapInterfaceImpl : BrokenMapBaseImpl(), BrokenMapInterface - - // An abstract class and implementation to test custom serializers applied to interface types - abstract class BrokenMapAbstract : BrokenMapBaseImpl(), MutableMap - class BrokenMapAbstractImpl : BrokenMapAbstract() } -