From 4183d55650d0f88f3a144ab27167920aaf86a1d5 Mon Sep 17 00:00:00 2001 From: Chris Rankin Date: Fri, 7 Sep 2018 15:07:06 +0100 Subject: [PATCH] ENT-1906: Publish corda-deterministic-verifier artifact for testing cordapps. (#3910) --- build.gradle | 1 + core-deterministic/build.gradle | 28 +++++------ core-deterministic/testing/build.gradle | 6 +-- .../testing/common/build.gradle | 16 ------- core-deterministic/testing/data/build.gradle | 2 +- .../corda/deterministic/data/GenerateData.kt | 4 +- .../data/TransactionGenerator.kt | 6 +-- .../crypto/TransactionSignatureTest.kt | 2 +- ...aveletTest.kt => VerifyTransactionTest.kt} | 12 ++--- .../testing/verifier/build.gradle | 48 +++++++++++++++++++ .../verifier}/LocalSerializationRule.kt | 4 +- .../verifier}/MockContractAttachment.kt | 2 +- .../deterministic/verifier}/SampleData.kt | 2 +- .../TransactionVerificationRequest.kt | 2 +- .../corda/deterministic/verifier/Verifier.kt} | 6 +-- djvm/build.gradle | 1 - serialization-deterministic/build.gradle | 20 ++++---- settings.gradle | 2 +- 18 files changed, 98 insertions(+), 66 deletions(-) delete mode 100644 core-deterministic/testing/common/build.gradle rename core-deterministic/testing/src/test/kotlin/net/corda/deterministic/txverify/{EnclaveletTest.kt => VerifyTransactionTest.kt} (55%) create mode 100644 core-deterministic/testing/verifier/build.gradle rename core-deterministic/testing/{common/src/main/kotlin/net/corda/deterministic/common => verifier/src/main/kotlin/net/corda/deterministic/verifier}/LocalSerializationRule.kt (98%) rename core-deterministic/testing/{common/src/main/kotlin/net/corda/deterministic/common => verifier/src/main/kotlin/net/corda/deterministic/verifier}/MockContractAttachment.kt (93%) rename core-deterministic/testing/{common/src/main/kotlin/net/corda/deterministic/common => verifier/src/main/kotlin/net/corda/deterministic/verifier}/SampleData.kt (76%) rename core-deterministic/testing/{common/src/main/kotlin/net/corda/deterministic/common => verifier/src/main/kotlin/net/corda/deterministic/verifier}/TransactionVerificationRequest.kt (97%) rename core-deterministic/testing/{common/src/main/kotlin/net/corda/deterministic/common/Enclavelet.kt => verifier/src/main/kotlin/net/corda/deterministic/verifier/Verifier.kt} (84%) diff --git a/build.gradle b/build.gradle index 0a6da2a708..a1ae6ac906 100644 --- a/build.gradle +++ b/build.gradle @@ -331,6 +331,7 @@ bintrayConfig { 'corda-rpc', 'corda-core', 'corda-core-deterministic', + 'corda-deterministic-verifier', 'corda-djvm', 'corda', 'corda-finance', diff --git a/core-deterministic/build.gradle b/core-deterministic/build.gradle index 6627a80cd8..839384fdd7 100644 --- a/core-deterministic/build.gradle +++ b/core-deterministic/build.gradle @@ -11,8 +11,8 @@ def javaHome = System.getProperty('java.home') def jarBaseName = "corda-${project.name}".toString() configurations { - runtimeLibraries - runtimeArtifacts.extendsFrom runtimeLibraries + deterministicLibraries + deterministicArtifacts.extendsFrom deterministicLibraries } dependencies { @@ -20,14 +20,14 @@ dependencies { // Configure these by hand. It should be a minimal subset of core's dependencies, // and without any obviously non-deterministic ones such as Hibernate. - runtimeLibraries "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - runtimeLibraries "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" - runtimeLibraries "org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final" - runtimeLibraries "org.bouncycastle:bcprov-jdk15on:$bouncycastle_version" - runtimeLibraries "org.bouncycastle:bcpkix-jdk15on:$bouncycastle_version" - runtimeLibraries "com.google.code.findbugs:jsr305:$jsr305_version" - runtimeLibraries "net.i2p.crypto:eddsa:$eddsa_version" - runtimeLibraries "org.slf4j:slf4j-api:$slf4j_version" + deterministicLibraries "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + deterministicLibraries "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" + deterministicLibraries "org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final" + deterministicLibraries "org.bouncycastle:bcprov-jdk15on:$bouncycastle_version" + deterministicLibraries "org.bouncycastle:bcpkix-jdk15on:$bouncycastle_version" + deterministicLibraries "com.google.code.findbugs:jsr305:$jsr305_version" + deterministicLibraries "net.i2p.crypto:eddsa:$eddsa_version" + deterministicLibraries "org.slf4j:slf4j-api:$slf4j_version" } jar { @@ -112,7 +112,7 @@ task determinise(type: ProGuardTask) { libraryjars file("$javaHome/lib/rt.jar") libraryjars file("$javaHome/lib/jce.jar") - configurations.runtimeLibraries.forEach { + configurations.deterministicLibraries.forEach { libraryjars it, filter: '!META-INF/versions/**' } @@ -152,7 +152,7 @@ task checkDeterminism(type: ProGuardTask, dependsOn: jdkTask) { libraryjars deterministic_rt_jar - configurations.runtimeLibraries.forEach { + configurations.deterministicLibraries.forEach { libraryjars it, filter: '!META-INF/versions/**' } @@ -173,12 +173,12 @@ assemble.dependsOn checkDeterminism def deterministicJar = metafix.outputs.files.singleFile artifacts { - runtimeArtifacts file: deterministicJar, name: jarBaseName, type: 'jar', extension: 'jar', builtBy: metafix + deterministicArtifacts file: deterministicJar, name: jarBaseName, type: 'jar', extension: 'jar', builtBy: metafix publish file: deterministicJar, name: jarBaseName, type: 'jar', extension: 'jar', builtBy: metafix } publish { - dependenciesFrom configurations.runtimeArtifacts + dependenciesFrom configurations.deterministicArtifacts publishSources = false publishJavadoc = false name jarBaseName diff --git a/core-deterministic/testing/build.gradle b/core-deterministic/testing/build.gradle index a472f5cde5..bb007715eb 100644 --- a/core-deterministic/testing/build.gradle +++ b/core-deterministic/testing/build.gradle @@ -1,10 +1,10 @@ apply plugin: 'kotlin' dependencies { - testCompile project(path: ':core-deterministic', configuration: 'runtimeArtifacts') - testCompile project(path: ':serialization-deterministic', configuration: 'runtimeArtifacts') + testCompile project(path: ':core-deterministic', configuration: 'deterministicArtifacts') + testCompile project(path: ':serialization-deterministic', configuration: 'deterministicArtifacts') + testCompile project(path: ':core-deterministic:testing:verifier', configuration: 'deterministicArtifacts') testCompile project(path: ':core-deterministic:testing:data', configuration: 'testData') - testCompile project(':core-deterministic:testing:common') testCompile(project(':finance')) { transitive = false } diff --git a/core-deterministic/testing/common/build.gradle b/core-deterministic/testing/common/build.gradle deleted file mode 100644 index f7c48a6c7a..0000000000 --- a/core-deterministic/testing/common/build.gradle +++ /dev/null @@ -1,16 +0,0 @@ -apply from: '../../../deterministic.gradle' -apply plugin: 'idea' - -dependencies { - compileOnly project(path: ':core-deterministic', configuration: 'runtimeArtifacts') - compileOnly project(path: ':serialization-deterministic', configuration: 'runtimeArtifacts') - compileOnly "junit:junit:$junit_version" -} - -idea { - module { - if (project.hasProperty("deterministic_idea_sdk")) { - jdkName project.property("deterministic_idea_sdk") as String - } - } -} diff --git a/core-deterministic/testing/data/build.gradle b/core-deterministic/testing/data/build.gradle index d203ae5572..59992d92eb 100644 --- a/core-deterministic/testing/data/build.gradle +++ b/core-deterministic/testing/data/build.gradle @@ -8,7 +8,7 @@ dependencies { testCompile project(':core') testCompile project(':finance') testCompile project(':node-driver') - testCompile project(':core-deterministic:testing:common') + testCompile project(path: ':core-deterministic:testing:verifier', configuration: 'runtimeArtifacts') testCompile "org.jetbrains.kotlin:kotlin-stdlib-jdk8" testCompile "org.jetbrains.kotlin:kotlin-reflect" diff --git a/core-deterministic/testing/data/src/test/kotlin/net/corda/deterministic/data/GenerateData.kt b/core-deterministic/testing/data/src/test/kotlin/net/corda/deterministic/data/GenerateData.kt index 0304661183..1ada19e231 100644 --- a/core-deterministic/testing/data/src/test/kotlin/net/corda/deterministic/data/GenerateData.kt +++ b/core-deterministic/testing/data/src/test/kotlin/net/corda/deterministic/data/GenerateData.kt @@ -1,8 +1,8 @@ package net.corda.deterministic.data import net.corda.core.serialization.deserialize -import net.corda.deterministic.common.LocalSerializationRule -import net.corda.deterministic.common.TransactionVerificationRequest +import net.corda.deterministic.verifier.LocalSerializationRule +import net.corda.deterministic.verifier.TransactionVerificationRequest import org.junit.Before import org.junit.Rule import org.junit.Test diff --git a/core-deterministic/testing/data/src/test/kotlin/net/corda/deterministic/data/TransactionGenerator.kt b/core-deterministic/testing/data/src/test/kotlin/net/corda/deterministic/data/TransactionGenerator.kt index a6b704077e..d777bf9df1 100644 --- a/core-deterministic/testing/data/src/test/kotlin/net/corda/deterministic/data/TransactionGenerator.kt +++ b/core-deterministic/testing/data/src/test/kotlin/net/corda/deterministic/data/TransactionGenerator.kt @@ -7,9 +7,9 @@ import net.corda.core.identity.AnonymousParty import net.corda.core.identity.CordaX500Name import net.corda.core.identity.Party import net.corda.core.serialization.serialize -import net.corda.deterministic.common.MockContractAttachment -import net.corda.deterministic.common.SampleCommandData -import net.corda.deterministic.common.TransactionVerificationRequest +import net.corda.deterministic.verifier.MockContractAttachment +import net.corda.deterministic.verifier.SampleCommandData +import net.corda.deterministic.verifier.TransactionVerificationRequest import net.corda.finance.POUNDS import net.corda.finance.`issued by` import net.corda.finance.contracts.asset.Cash.* diff --git a/core-deterministic/testing/src/test/kotlin/net/corda/deterministic/crypto/TransactionSignatureTest.kt b/core-deterministic/testing/src/test/kotlin/net/corda/deterministic/crypto/TransactionSignatureTest.kt index 5935c13b3c..4825d4787f 100644 --- a/core-deterministic/testing/src/test/kotlin/net/corda/deterministic/crypto/TransactionSignatureTest.kt +++ b/core-deterministic/testing/src/test/kotlin/net/corda/deterministic/crypto/TransactionSignatureTest.kt @@ -3,7 +3,7 @@ package net.corda.deterministic.crypto import net.corda.core.crypto.* import net.corda.deterministic.KeyStoreProvider import net.corda.deterministic.CheatingSecurityProvider -import net.corda.deterministic.common.LocalSerializationRule +import net.corda.deterministic.verifier.LocalSerializationRule import org.junit.* import org.junit.rules.RuleChain import java.security.* diff --git a/core-deterministic/testing/src/test/kotlin/net/corda/deterministic/txverify/EnclaveletTest.kt b/core-deterministic/testing/src/test/kotlin/net/corda/deterministic/txverify/VerifyTransactionTest.kt similarity index 55% rename from core-deterministic/testing/src/test/kotlin/net/corda/deterministic/txverify/EnclaveletTest.kt rename to core-deterministic/testing/src/test/kotlin/net/corda/deterministic/txverify/VerifyTransactionTest.kt index 84bab1d1b7..6526ca3c51 100644 --- a/core-deterministic/testing/src/test/kotlin/net/corda/deterministic/txverify/EnclaveletTest.kt +++ b/core-deterministic/testing/src/test/kotlin/net/corda/deterministic/txverify/VerifyTransactionTest.kt @@ -1,29 +1,29 @@ package net.corda.deterministic.txverify import net.corda.deterministic.bytesOfResource -import net.corda.deterministic.common.LocalSerializationRule -import net.corda.deterministic.common.verifyInEnclave +import net.corda.deterministic.verifier.LocalSerializationRule +import net.corda.deterministic.verifier.verifyTransaction import net.corda.finance.contracts.asset.Cash.Commands.* import org.assertj.core.api.Assertions.assertThat import org.junit.ClassRule import org.junit.Test import kotlin.test.assertFailsWith -class EnclaveletTest { +class VerifyTransactionTest { companion object { @ClassRule @JvmField - val serialization = LocalSerializationRule(EnclaveletTest::class) + val serialization = LocalSerializationRule(VerifyTransactionTest::class) } @Test fun success() { - verifyInEnclave(bytesOfResource("txverify/tx-success.bin")) + verifyTransaction(bytesOfResource("txverify/tx-success.bin")) } @Test fun failure() { - val e = assertFailsWith { verifyInEnclave(bytesOfResource("txverify/tx-failure.bin")) } + val e = assertFailsWith { verifyTransaction(bytesOfResource("txverify/tx-failure.bin")) } assertThat(e).hasMessageContaining("Required ${Move::class.java.canonicalName} command") } } diff --git a/core-deterministic/testing/verifier/build.gradle b/core-deterministic/testing/verifier/build.gradle new file mode 100644 index 0000000000..259a9c3110 --- /dev/null +++ b/core-deterministic/testing/verifier/build.gradle @@ -0,0 +1,48 @@ +apply plugin: 'java-library' +apply from: '../../../deterministic.gradle' +apply plugin: 'net.corda.plugins.publish-utils' +apply plugin: 'com.jfrog.artifactory' +apply plugin: 'idea' + +description 'Test utilities for deterministic contract verification' + +configurations { + deterministicArtifacts + runtimeArtifacts.extendsFrom api +} + +dependencies { + deterministicArtifacts project(path: ':serialization-deterministic', configuration: 'deterministicArtifacts') + deterministicArtifacts project(path: ':core-deterministic', configuration: 'deterministicArtifacts') + + runtimeArtifacts project(':serialization') + runtimeArtifacts project(':core') + + // Compile against the deterministic artifacts to ensure that we use only the deterministic API subset. + compileOnly configurations.deterministicArtifacts + api "junit:junit:$junit_version" +} + +jar { + baseName 'corda-deterministic-verifier' +} + +artifacts { + deterministicArtifacts jar + runtimeArtifacts jar + publish jar +} + +publish { + // Our published POM will contain dependencies on the non-deterministic Corda artifacts. + dependenciesFrom configurations.runtimeArtifacts + name jar.baseName +} + +idea { + module { + if (project.hasProperty("deterministic_idea_sdk")) { + jdkName project.property("deterministic_idea_sdk") as String + } + } +} diff --git a/core-deterministic/testing/common/src/main/kotlin/net/corda/deterministic/common/LocalSerializationRule.kt b/core-deterministic/testing/verifier/src/main/kotlin/net/corda/deterministic/verifier/LocalSerializationRule.kt similarity index 98% rename from core-deterministic/testing/common/src/main/kotlin/net/corda/deterministic/common/LocalSerializationRule.kt rename to core-deterministic/testing/verifier/src/main/kotlin/net/corda/deterministic/verifier/LocalSerializationRule.kt index 05c8c3bc5c..15848a4be4 100644 --- a/core-deterministic/testing/common/src/main/kotlin/net/corda/deterministic/common/LocalSerializationRule.kt +++ b/core-deterministic/testing/verifier/src/main/kotlin/net/corda/deterministic/verifier/LocalSerializationRule.kt @@ -1,4 +1,4 @@ -package net.corda.deterministic.common +package net.corda.deterministic.verifier import net.corda.core.serialization.ClassWhitelist import net.corda.core.serialization.SerializationContext @@ -83,4 +83,4 @@ class LocalSerializationRule(private val label: String) : TestRule { return canDeserializeVersion(magic) && target == P2P } } -} \ No newline at end of file +} diff --git a/core-deterministic/testing/common/src/main/kotlin/net/corda/deterministic/common/MockContractAttachment.kt b/core-deterministic/testing/verifier/src/main/kotlin/net/corda/deterministic/verifier/MockContractAttachment.kt similarity index 93% rename from core-deterministic/testing/common/src/main/kotlin/net/corda/deterministic/common/MockContractAttachment.kt rename to core-deterministic/testing/verifier/src/main/kotlin/net/corda/deterministic/verifier/MockContractAttachment.kt index 1526825683..0e28c9647e 100644 --- a/core-deterministic/testing/common/src/main/kotlin/net/corda/deterministic/common/MockContractAttachment.kt +++ b/core-deterministic/testing/verifier/src/main/kotlin/net/corda/deterministic/verifier/MockContractAttachment.kt @@ -1,4 +1,4 @@ -package net.corda.deterministic.common +package net.corda.deterministic.verifier import net.corda.core.contracts.Attachment import net.corda.core.contracts.ContractClassName diff --git a/core-deterministic/testing/common/src/main/kotlin/net/corda/deterministic/common/SampleData.kt b/core-deterministic/testing/verifier/src/main/kotlin/net/corda/deterministic/verifier/SampleData.kt similarity index 76% rename from core-deterministic/testing/common/src/main/kotlin/net/corda/deterministic/common/SampleData.kt rename to core-deterministic/testing/verifier/src/main/kotlin/net/corda/deterministic/verifier/SampleData.kt index 025fa148fa..9c4cfdcb59 100644 --- a/core-deterministic/testing/common/src/main/kotlin/net/corda/deterministic/common/SampleData.kt +++ b/core-deterministic/testing/verifier/src/main/kotlin/net/corda/deterministic/verifier/SampleData.kt @@ -1,5 +1,5 @@ @file:JvmName("SampleData") -package net.corda.deterministic.common +package net.corda.deterministic.verifier import net.corda.core.contracts.TypeOnlyCommandData diff --git a/core-deterministic/testing/common/src/main/kotlin/net/corda/deterministic/common/TransactionVerificationRequest.kt b/core-deterministic/testing/verifier/src/main/kotlin/net/corda/deterministic/verifier/TransactionVerificationRequest.kt similarity index 97% rename from core-deterministic/testing/common/src/main/kotlin/net/corda/deterministic/common/TransactionVerificationRequest.kt rename to core-deterministic/testing/verifier/src/main/kotlin/net/corda/deterministic/verifier/TransactionVerificationRequest.kt index f2c825ba61..96a886a618 100644 --- a/core-deterministic/testing/common/src/main/kotlin/net/corda/deterministic/common/TransactionVerificationRequest.kt +++ b/core-deterministic/testing/verifier/src/main/kotlin/net/corda/deterministic/verifier/TransactionVerificationRequest.kt @@ -1,4 +1,4 @@ -package net.corda.deterministic.common +package net.corda.deterministic.verifier import net.corda.core.contracts.Attachment import net.corda.core.contracts.ContractAttachment diff --git a/core-deterministic/testing/common/src/main/kotlin/net/corda/deterministic/common/Enclavelet.kt b/core-deterministic/testing/verifier/src/main/kotlin/net/corda/deterministic/verifier/Verifier.kt similarity index 84% rename from core-deterministic/testing/common/src/main/kotlin/net/corda/deterministic/common/Enclavelet.kt rename to core-deterministic/testing/verifier/src/main/kotlin/net/corda/deterministic/verifier/Verifier.kt index 720a2bc4ff..e7a710d707 100644 --- a/core-deterministic/testing/common/src/main/kotlin/net/corda/deterministic/common/Enclavelet.kt +++ b/core-deterministic/testing/verifier/src/main/kotlin/net/corda/deterministic/verifier/Verifier.kt @@ -1,5 +1,5 @@ -@file:JvmName("Enclavelet") -package net.corda.deterministic.common +@file:JvmName("Verifier") +package net.corda.deterministic.verifier import net.corda.core.serialization.deserialize import net.corda.core.transactions.LedgerTransaction @@ -11,7 +11,7 @@ import net.corda.core.transactions.LedgerTransaction * TODO: Transaction data is meant to be encrypted under an enclave-private key. */ @Throws(Exception::class) -fun verifyInEnclave(reqBytes: ByteArray) { +fun verifyTransaction(reqBytes: ByteArray) { deserialize(reqBytes).verify() } diff --git a/djvm/build.gradle b/djvm/build.gradle index b3447b63ac..2cf5b11d72 100644 --- a/djvm/build.gradle +++ b/djvm/build.gradle @@ -49,6 +49,5 @@ artifacts { publish { dependenciesFrom configurations.shadow - disableDefaultJar true name shadowJar.baseName } diff --git a/serialization-deterministic/build.gradle b/serialization-deterministic/build.gradle index 4b146c6b80..74190fd20a 100644 --- a/serialization-deterministic/build.gradle +++ b/serialization-deterministic/build.gradle @@ -11,8 +11,8 @@ def javaHome = System.getProperty('java.home') def jarBaseName = "corda-${project.name}".toString() configurations { - runtimeLibraries - runtimeArtifacts.extendsFrom runtimeLibraries + deterministicLibraries + deterministicArtifacts.extendsFrom deterministicLibraries } dependencies { @@ -20,10 +20,10 @@ dependencies { // Configure these by hand. It should be a minimal subset of dependencies, // and without any obviously non-deterministic ones such as Hibernate. - runtimeLibraries project(path: ':core-deterministic', configuration: 'runtimeArtifacts') - runtimeLibraries "org.apache.qpid:proton-j:$protonj_version" - runtimeLibraries "org.iq80.snappy:snappy:$snappy_version" - runtimeLibraries "com.google.guava:guava:$guava_version" + deterministicLibraries project(path: ':core-deterministic', configuration: 'deterministicArtifacts') + deterministicLibraries "org.apache.qpid:proton-j:$protonj_version" + deterministicLibraries "org.iq80.snappy:snappy:$snappy_version" + deterministicLibraries "com.google.guava:guava:$guava_version" } jar { @@ -108,7 +108,7 @@ task determinise(type: ProGuardTask) { libraryjars file("$javaHome/lib/rt.jar") libraryjars file("$javaHome/lib/jce.jar") - configurations.runtimeLibraries.forEach { + configurations.deterministicLibraries.forEach { libraryjars it, filter: '!META-INF/versions/**' } @@ -142,7 +142,7 @@ task checkDeterminism(type: ProGuardTask, dependsOn: jdkTask) { libraryjars deterministic_rt_jar - configurations.runtimeLibraries.forEach { + configurations.deterministicLibraries.forEach { libraryjars it, filter: '!META-INF/versions/**' } @@ -162,12 +162,12 @@ assemble.dependsOn checkDeterminism def deterministicJar = metafix.outputs.files.singleFile artifacts { - runtimeArtifacts file: deterministicJar, name: jarBaseName, type: 'jar', extension: 'jar', builtBy: metafix + deterministicArtifacts file: deterministicJar, name: jarBaseName, type: 'jar', extension: 'jar', builtBy: metafix publish file: deterministicJar, name: jarBaseName, type: 'jar', extension: 'jar', builtBy: metafix } publish { - dependenciesFrom configurations.runtimeArtifacts + dependenciesFrom configurations.deterministicArtifacts publishSources = false publishJavadoc = false name jarBaseName diff --git a/settings.gradle b/settings.gradle index af4fa37e68..596d28d790 100644 --- a/settings.gradle +++ b/settings.gradle @@ -63,7 +63,7 @@ include 'serialization' if (JavaVersion.current() == JavaVersion.VERSION_1_8) { include 'core-deterministic' include 'core-deterministic:testing' - include 'core-deterministic:testing:common' include 'core-deterministic:testing:data' + include 'core-deterministic:testing:verifier' include 'serialization-deterministic' }