An enterprise-grade Java-based, Apache 2.0 licensed Ethereum client https://wiki.hyperledger.org/display/besu
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
besu/ethereum/core/build.gradle

155 lines
5.1 KiB

6 years ago
apply plugin: 'java-library'
jar {
baseName 'pantheon-core'
manifest {
attributes('Implementation-Title': baseName,
'Implementation-Version': project.version)
}
}
dependencies {
implementation project(':crypto')
implementation project(':ethereum:rlp')
implementation project(':ethereum:trie')
implementation project(':services:kvstore')
implementation 'com.fasterxml.jackson.core:jackson-databind'
implementation 'com.google.guava:guava'
implementation 'io.vertx:vertx-core'
implementation 'org.apache.logging.log4j:log4j-api'
runtime 'org.apache.logging.log4j:log4j-core'
testImplementation project(path:':ethereum:referencetests', configuration: 'testOutput')
testImplementation project(':testutil')
testImplementation 'org.assertj:assertj-core'
testImplementation 'org.mockito:mockito-core'
testImplementation 'junit:junit'
integrationTestImplementation 'org.assertj:assertj-core'
integrationTestImplementation 'org.mockito:mockito-core'
integrationTestImplementation 'junit:junit'
testSupportImplementation project(':testutil')
testSupportImplementation 'org.assertj:assertj-core'
testSupportImplementation 'org.mockito:mockito-core'
testSupportImplementation 'junit:junit'
}
configurations { testArtifacts }
task testJar (type: Jar) {
baseName = "${project.name}-test"
from sourceSets.test.output
}
test {
exclude 'tech/pegasys/pantheon/ethereum/vm/**ReferenceTest.class'
exclude 'tech/pegasys/pantheon/ethereum/vm/blockchain/**.class'
exclude 'tech/pegasys/pantheon/ethereum/vm/generalstate/**.class'
6 years ago
}
def generateTestFiles(FileTree jsonPath, File resourcesPath, File templateFile, String pathstrip, String destination, String namePrefix) {
def referenceTestTemplate = templateFile.text
// This is how many json files to include in each test file
def fileSets = jsonPath.getFiles().collate(5)
fileSets.each { fileSet ->
def resPath = resourcesPath.getPath().replaceAll("\\\\", "/")
def name = fileSet
.find({ !it.getName().toString().startsWith(".")})
.getPath()
.toString()
6 years ago
.replaceAll("\\\\", "/")
.replaceAll(resPath + "/", "")
.replaceAll(pathstrip, "")
.replaceAll(".json", "")
.replaceAll("/", "_")
.replaceAll("\\^", "")
.replaceAll("\\-", "")
.replaceAll("\\+", "")
def paths = []
fileSet.each { testJsonFile ->
if (!testJsonFile.getName().toString().startsWith(".")) {
paths << testJsonFile.getPath().toString()
.replaceAll(resPath + "/", "")
}
}
def testFile = file(destination + "/" + namePrefix + "_" + name + ".java")
def allPaths = '"' + paths.join('", "') + '"';
def testFileContents = referenceTestTemplate
.replaceAll("%%TESTS_FILE%%", allPaths)
.replaceAll("%%TESTS_NAME%%", namePrefix + "_" + name)
testFile.newWriter().withWriter { w -> w << testFileContents }
}
}
task blockchainReferenceTestsSetup {
generateTestFiles(
fileTree('../referencetests/src/test/resources/BlockchainTests'),
file("../referencetests/src/test/resources"),
file("./src/test/resources/tech/pegasys/pantheon/ethereum/vm/BlockchainReferenceTest.java.template"),
6 years ago
"BlockchainTests/",
"./src/test/java/tech/pegasys/pantheon/ethereum/vm/blockchain",
6 years ago
"BlockchainReferenceTest"
)
}
compileTestJava.dependsOn(blockchainReferenceTestsSetup)
task generalstateReferenceTestsSetup {
generateTestFiles(
fileTree("../referencetests/src/test/resources/GeneralStateTests"),
file("../referencetests/src/test/resources"),
file("./src/test/resources/tech/pegasys/pantheon/ethereum/vm/GeneralStateReferenceTest.java.template"),
6 years ago
"GeneralStateTests/",
"./src/test/java/tech/pegasys/pantheon/ethereum/vm/generalstate",
6 years ago
"GeneralStateReferenceTest"
)
}
compileTestJava.dependsOn(generalstateReferenceTestsSetup)
task generalstateRegressionReferenceTestsSetup {
generateTestFiles(
fileTree("./src/test/resources/regressions/generalstate"),
file("./src/test/resources"),
file("./src/test/resources/tech/pegasys/pantheon/ethereum/vm/GeneralStateReferenceTest.java.template"),
6 years ago
"regressions/generalstate/",
"./src/test/java/tech/pegasys/pantheon/ethereum/vm/generalstate",
6 years ago
"GeneralStateRegressionReferenceTest"
)
}
compileTestJava.dependsOn(generalstateRegressionReferenceTestsSetup)
task cleanupReferenceTests(type: Delete) {
delete fileTree("./src/test/java/tech/pegasys/pantheon/ethereum/vm/generalstate/") {
6 years ago
include("**/GeneralStateReferenceTest*.java")
include("**/GeneralStateRegressionReferenceTest*.java")
}
delete fileTree("./src/test/java/tech/pegasys/pantheon/ethereum/vm/blockchain/") { include("**/BlockchainReferenceTest*.java") }
6 years ago
}
clean.dependsOn(cleanupReferenceTests)
task referenceTests(type: Test, dependsOn: ["compileTestJava"]) {
scanForTestClasses = false
enableAssertions = true
include 'tech/pegasys/pantheon/ethereum/vm/**ReferenceTest.class'
include 'tech/pegasys/pantheon/ethereum/vm/blockchain/**.class'
include 'tech/pegasys/pantheon/ethereum/vm/generalstate/**.class'
6 years ago
}
artifacts {
testArtifacts testJar
testSupportArtifacts testSupportJar
}