From d8e0e8d548adc294b3373520c021e7a19f40c2f3 Mon Sep 17 00:00:00 2001 From: Andras Slemmer Date: Mon, 20 Jun 2016 11:49:54 +0100 Subject: [PATCH] test: Add JsonSupport testing using junit-quickcheck --- build.gradle | 1 + .../r3corda/core/testing/JsonSupportTest.kt | 50 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/test/kotlin/com/r3corda/core/testing/JsonSupportTest.kt diff --git a/build.gradle b/build.gradle index 2f4fdfeab0..86ee5870ed 100644 --- a/build.gradle +++ b/build.gradle @@ -65,6 +65,7 @@ dependencies { // Unit testing helpers. testCompile 'junit:junit:4.12' testCompile 'org.assertj:assertj-core:3.4.1' + testCompile 'com.pholser:junit-quickcheck-core:0.6' } // Package up the demo programs. diff --git a/src/test/kotlin/com/r3corda/core/testing/JsonSupportTest.kt b/src/test/kotlin/com/r3corda/core/testing/JsonSupportTest.kt new file mode 100644 index 0000000000..9b23eac65b --- /dev/null +++ b/src/test/kotlin/com/r3corda/core/testing/JsonSupportTest.kt @@ -0,0 +1,50 @@ +package com.r3corda.core.testing + +import com.pholser.junit.quickcheck.From +import com.pholser.junit.quickcheck.Property +import com.pholser.junit.quickcheck.generator.GenerationStatus +import com.pholser.junit.quickcheck.generator.Generator +import com.pholser.junit.quickcheck.random.SourceOfRandomness +import com.pholser.junit.quickcheck.runner.JUnitQuickcheck +import com.r3corda.core.node.services.testing.MockIdentityService +import com.r3corda.node.utilities.JsonSupport +import net.i2p.crypto.eddsa.EdDSAPrivateKey +import net.i2p.crypto.eddsa.EdDSAPublicKey +import net.i2p.crypto.eddsa.spec.EdDSANamedCurveTable +import net.i2p.crypto.eddsa.spec.EdDSAPrivateKeySpec +import net.i2p.crypto.eddsa.spec.EdDSAPublicKeySpec +import org.junit.runner.RunWith +import kotlin.test.assertEquals + +@RunWith(JUnitQuickcheck::class) +class JsonSupportTest { + + companion object { + val mapper = JsonSupport.createDefaultMapper(MockIdentityService(mutableListOf())) + val ed25519Curve = EdDSANamedCurveTable.getByName(EdDSANamedCurveTable.CURVE_ED25519_SHA512) + } + + /** TODO: factor out generators into a ServiceLoader in order to remove @From annotations. + * @See pholser.github.io + */ + class PrivateKeyGenerator: Generator(EdDSAPrivateKey::class.java) { + override fun generate(random: SourceOfRandomness, status: GenerationStatus): EdDSAPrivateKey { + val seed = random.nextBytes(32) + val privateKeySpec = EdDSAPrivateKeySpec(seed, ed25519Curve) + return EdDSAPrivateKey(privateKeySpec) + } + } + + class PublicKeyGenerator: Generator(EdDSAPublicKey::class.java) { + override fun generate(random: SourceOfRandomness, status: GenerationStatus): EdDSAPublicKey { + val privateKey = PrivateKeyGenerator().generate(random, status) + return EdDSAPublicKey(EdDSAPublicKeySpec(privateKey.a, ed25519Curve)) + } + } + + @Property fun publicKeySerializingWorks(@From(PublicKeyGenerator::class) publicKey: EdDSAPublicKey) { + val serialized = mapper.writeValueAsString(publicKey) + val parsedKey = mapper.readValue(serialized, EdDSAPublicKey::class.java) + assertEquals(publicKey, parsedKey) + } +}