From 9c743897fd9c525838cfa35ee85d573c90148ab5 Mon Sep 17 00:00:00 2001 From: Chris Rankin Date: Wed, 12 Feb 2020 17:15:46 +0000 Subject: [PATCH] CORDA-3590: Optimise classloading for DJVM deserialization. (#5944) --- .../djvm/DelegatingClassLoader.kt | 2 +- .../djvm/DeserializeDurationTest.kt | 39 +++++++++++++++++++ .../djvm/DeserializeOffsetTimeTest.kt | 2 +- 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 serialization-djvm/src/test/kotlin/net/corda/serialization/djvm/DeserializeDurationTest.kt diff --git a/serialization-djvm/src/main/kotlin/net/corda/serialization/djvm/DelegatingClassLoader.kt b/serialization-djvm/src/main/kotlin/net/corda/serialization/djvm/DelegatingClassLoader.kt index 9be12a86b2..ce916bd2ff 100644 --- a/serialization-djvm/src/main/kotlin/net/corda/serialization/djvm/DelegatingClassLoader.kt +++ b/serialization-djvm/src/main/kotlin/net/corda/serialization/djvm/DelegatingClassLoader.kt @@ -5,6 +5,6 @@ import net.corda.djvm.rewiring.SandboxClassLoader class DelegatingClassLoader(private val delegate: SandboxClassLoader) : ClassLoader(null) { @Throws(ClassNotFoundException::class) override fun loadClass(name: String, resolve: Boolean): Class<*> { - return delegate.loadForSandbox(name).type + return delegate.toSandboxClass(name) } } diff --git a/serialization-djvm/src/test/kotlin/net/corda/serialization/djvm/DeserializeDurationTest.kt b/serialization-djvm/src/test/kotlin/net/corda/serialization/djvm/DeserializeDurationTest.kt new file mode 100644 index 0000000000..7a2c6a4db8 --- /dev/null +++ b/serialization-djvm/src/test/kotlin/net/corda/serialization/djvm/DeserializeDurationTest.kt @@ -0,0 +1,39 @@ +package net.corda.serialization.djvm + +import net.corda.core.serialization.internal._contextSerializationEnv +import net.corda.core.serialization.serialize +import net.corda.serialization.djvm.SandboxType.KOTLIN +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.extension.ExtendWith +import org.junit.jupiter.api.fail +import java.time.Duration +import java.util.function.Function + +@ExtendWith(LocalSerialization::class) +class DeserializeDurationTest : TestBase(KOTLIN) { + @Test + fun `test deserializing duration`() { + val duration = Duration.ofSeconds(12345, 6789) + val data = duration.serialize() + + sandbox { + _contextSerializationEnv.set(createSandboxSerializationEnv(classLoader)) + + val sandboxDuration = data.deserializeFor(classLoader) + + val taskFactory = classLoader.createRawTaskFactory() + val showDuration = taskFactory.compose(classLoader.createSandboxFunction()).apply(ShowDuration::class.java) + val result = showDuration.apply(sandboxDuration) ?: fail("Result cannot be null") + + assertEquals(duration.toString(), result.toString()) + assertEquals(SANDBOX_STRING, result::class.java.name) + } + } + + class ShowDuration : Function { + override fun apply(duration: Duration): String { + return duration.toString() + } + } +} diff --git a/serialization-djvm/src/test/kotlin/net/corda/serialization/djvm/DeserializeOffsetTimeTest.kt b/serialization-djvm/src/test/kotlin/net/corda/serialization/djvm/DeserializeOffsetTimeTest.kt index 5d12059e0e..c23fe08ebe 100644 --- a/serialization-djvm/src/test/kotlin/net/corda/serialization/djvm/DeserializeOffsetTimeTest.kt +++ b/serialization-djvm/src/test/kotlin/net/corda/serialization/djvm/DeserializeOffsetTimeTest.kt @@ -13,7 +13,7 @@ import java.util.function.Function @ExtendWith(LocalSerialization::class) class DeserializeOffsetTimeTest : TestBase(KOTLIN) { @Test - fun `test deserializing instant`() { + fun `test deserializing offset time`() { val time = OffsetTime.now() val data = time.serialize()