mirror of
https://github.com/corda/corda.git
synced 2025-04-06 19:07:08 +00:00
ENT-1906: Publish corda-deterministic-verifier artifact for testing cordapps. (#3910)
This commit is contained in:
parent
4f8a564104
commit
4183d55650
@ -331,6 +331,7 @@ bintrayConfig {
|
||||
'corda-rpc',
|
||||
'corda-core',
|
||||
'corda-core-deterministic',
|
||||
'corda-deterministic-verifier',
|
||||
'corda-djvm',
|
||||
'corda',
|
||||
'corda-finance',
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
@ -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"
|
||||
|
@ -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
|
||||
|
@ -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.*
|
||||
|
@ -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.*
|
||||
|
@ -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<Exception> { verifyInEnclave(bytesOfResource("txverify/tx-failure.bin")) }
|
||||
val e = assertFailsWith<Exception> { verifyTransaction(bytesOfResource("txverify/tx-failure.bin")) }
|
||||
assertThat(e).hasMessageContaining("Required ${Move::class.java.canonicalName} command")
|
||||
}
|
||||
}
|
48
core-deterministic/testing/verifier/build.gradle
Normal file
48
core-deterministic/testing/verifier/build.gradle
Normal file
@ -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
|
||||
}
|
||||
}
|
||||
}
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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
|
@ -1,5 +1,5 @@
|
||||
@file:JvmName("SampleData")
|
||||
package net.corda.deterministic.common
|
||||
package net.corda.deterministic.verifier
|
||||
|
||||
import net.corda.core.contracts.TypeOnlyCommandData
|
||||
|
@ -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
|
@ -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()
|
||||
}
|
||||
|
@ -49,6 +49,5 @@ artifacts {
|
||||
|
||||
publish {
|
||||
dependenciesFrom configurations.shadow
|
||||
disableDefaultJar true
|
||||
name shadowJar.baseName
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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'
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user