From 349692f831241a54910f2f947d4f9656d05c989d Mon Sep 17 00:00:00 2001 From: Viktor Kolomeyko Date: Tue, 5 Sep 2017 15:25:57 +0100 Subject: [PATCH] CORDA-540: Tighten-up the unit test to prevent concrete collection classes to be used --- .../serialization/ListsSerializationTest.kt | 17 +++++++++++++++++ .../kotlin/net/corda/testing/CoreTestUtils.kt | 6 ++++++ 2 files changed, 23 insertions(+) diff --git a/node-api/src/test/kotlin/net/corda/nodeapi/internal/serialization/ListsSerializationTest.kt b/node-api/src/test/kotlin/net/corda/nodeapi/internal/serialization/ListsSerializationTest.kt index 23b931f651..a5e83e0c01 100644 --- a/node-api/src/test/kotlin/net/corda/nodeapi/internal/serialization/ListsSerializationTest.kt +++ b/node-api/src/test/kotlin/net/corda/nodeapi/internal/serialization/ListsSerializationTest.kt @@ -1,11 +1,15 @@ package net.corda.nodeapi.internal.serialization +import net.corda.core.serialization.CordaSerializable import net.corda.core.serialization.SerializedBytes import net.corda.core.serialization.deserialize import net.corda.core.serialization.serialize import net.corda.node.services.statemachine.SessionData import net.corda.testing.TestDependencyInjectionBase +import net.corda.testing.amqpSpecific +import org.assertj.core.api.Assertions import org.junit.Test +import java.io.NotSerializableException import kotlin.test.assertEquals class ListsSerializationTest : TestDependencyInjectionBase() { @@ -30,6 +34,19 @@ class ListsSerializationTest : TestDependencyInjectionBase() { } } + @CordaSerializable + data class WrongPayloadType(val payload: ArrayList) + + @Test + fun `check throws for forbidden declared type`() = amqpSpecific("Such exceptions are not expected in Kryo mode.") { + val payload = ArrayList() + payload.add(1) + payload.add(2) + val wrongPayloadType = WrongPayloadType(payload) + Assertions.assertThatThrownBy { wrongPayloadType.serialize() } + .isInstanceOf(NotSerializableException::class.java).hasMessageContaining("Cannot derive collection type for declaredType") + } + private inline fun assertEqualAfterRoundTripSerialization(obj: T) { val serializedForm: SerializedBytes = obj.serialize() diff --git a/test-utils/src/main/kotlin/net/corda/testing/CoreTestUtils.kt b/test-utils/src/main/kotlin/net/corda/testing/CoreTestUtils.kt index 87eb8dd992..73a406d3cf 100644 --- a/test-utils/src/main/kotlin/net/corda/testing/CoreTestUtils.kt +++ b/test-utils/src/main/kotlin/net/corda/testing/CoreTestUtils.kt @@ -162,4 +162,10 @@ inline fun kryoSpecific(reason: String, function: () -> Unit) function() } else { loggerFor().info("Ignoring Kryo specific test, reason: $reason" ) +} + +inline fun amqpSpecific(reason: String, function: () -> Unit) = if(AMQP_ENABLED) { + function() +} else { + loggerFor().info("Ignoring AMQP specific test, reason: $reason" ) } \ No newline at end of file