mirror of
https://github.com/corda/corda.git
synced 2025-03-13 07:54:32 +00:00
Add tests that run the checkpoint serializer directly
This commit is contained in:
parent
1ebfccadd0
commit
fed60e5af2
@ -0,0 +1,82 @@
|
|||||||
|
package net.corda.node.customcheckpointserializer
|
||||||
|
|
||||||
|
import com.nhaarman.mockito_kotlin.doReturn
|
||||||
|
import com.nhaarman.mockito_kotlin.whenever
|
||||||
|
import net.corda.core.serialization.EncodingWhitelist
|
||||||
|
import net.corda.core.serialization.internal.CheckpointSerializationContext
|
||||||
|
import net.corda.core.serialization.internal.checkpointDeserialize
|
||||||
|
import net.corda.core.serialization.internal.checkpointSerialize
|
||||||
|
import net.corda.coretesting.internal.rigorousMock
|
||||||
|
import net.corda.nodeapi.internal.serialization.kryo.KryoCheckpointSerializer
|
||||||
|
import net.corda.serialization.internal.AllWhitelist
|
||||||
|
import net.corda.serialization.internal.CheckpointSerializationContextImpl
|
||||||
|
import net.corda.serialization.internal.CordaSerializationEncoding
|
||||||
|
import net.corda.testing.core.internal.CheckpointSerializationEnvironmentRule
|
||||||
|
import org.junit.Assert
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Rule
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import org.junit.runners.Parameterized
|
||||||
|
|
||||||
|
@RunWith(Parameterized::class)
|
||||||
|
class CustomCheckpointSerializerTest(private val compression: CordaSerializationEncoding?) {
|
||||||
|
companion object {
|
||||||
|
@Parameterized.Parameters(name = "{0}")
|
||||||
|
@JvmStatic
|
||||||
|
fun compression() = arrayOf<CordaSerializationEncoding?>(null) + CordaSerializationEncoding.values()
|
||||||
|
}
|
||||||
|
|
||||||
|
@get:Rule
|
||||||
|
val serializationRule = CheckpointSerializationEnvironmentRule(inheritable = true)
|
||||||
|
private lateinit var context: CheckpointSerializationContext
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setup() {
|
||||||
|
context = CheckpointSerializationContextImpl(
|
||||||
|
deserializationClassLoader = javaClass.classLoader,
|
||||||
|
whitelist = AllWhitelist,
|
||||||
|
properties = emptyMap(),
|
||||||
|
objectReferencesEnabled = true,
|
||||||
|
encoding = compression,
|
||||||
|
encodingWhitelist = rigorousMock<EncodingWhitelist>().also {
|
||||||
|
if (compression != null) doReturn(true).whenever(it).acceptEncoding(compression)
|
||||||
|
})
|
||||||
|
KryoCheckpointSerializer.addCordappSerializers(listOf(
|
||||||
|
TestCorDapp.TestAbstractClassSerializer(),
|
||||||
|
TestCorDapp.TestClassSerializer(),
|
||||||
|
TestCorDapp.TestInterfaceSerializer()
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(timeout=300_000)
|
||||||
|
fun `test custom checkpoint serialization`() {
|
||||||
|
testBrokenMapSerialization(DifficultToSerialize.BrokenMapClass())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(timeout=300_000)
|
||||||
|
fun `test custom checkpoint serialization using interface`() {
|
||||||
|
testBrokenMapSerialization(DifficultToSerialize.BrokenMapInterfaceImpl())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(timeout=300_000)
|
||||||
|
fun `test custom checkpoint serialization using abstract class`() {
|
||||||
|
testBrokenMapSerialization(DifficultToSerialize.BrokenMapAbstractImpl())
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun testBrokenMapSerialization(brokenMap : MutableMap<String, String>): MutableMap<String, String> {
|
||||||
|
// Add elements to the map
|
||||||
|
brokenMap.putAll(mapOf("key" to "value"))
|
||||||
|
|
||||||
|
// Serialize/deserialize
|
||||||
|
val checkpoint = brokenMap.checkpointSerialize(context)
|
||||||
|
val deserializedCheckpoint = checkpoint.checkpointDeserialize(context)
|
||||||
|
|
||||||
|
// Check the elements are as expected
|
||||||
|
Assert.assertEquals(1, deserializedCheckpoint.size)
|
||||||
|
Assert.assertEquals("value", deserializedCheckpoint.get("key"))
|
||||||
|
|
||||||
|
// Return map for extra checks
|
||||||
|
return deserializedCheckpoint
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user