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

209 lines
8.0 KiB

/*
* Copyright ConsenSys AG.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*
* SPDX-License-Identifier: Apache-2.0
*/
apply plugin: 'java-library'
jar {
archiveBaseName = 'besu-core'
manifest {
attributes(
'Specification-Title': archiveBaseName,
'Specification-Version': project.version,
'Implementation-Title': archiveBaseName,
'Implementation-Version': calculateVersion()
)
}
}
dependencies {
annotationProcessor 'org.openjdk.jmh:jmh-generator-annprocess'
implementation project(':config')
implementation project(':crypto')
implementation project(':enclave')
implementation project(':ethereum:rlp')
implementation project(':ethereum:trie')
implementation project(':metrics:core')
implementation project(':plugin-api')
implementation project(':services:kvstore')
implementation 'com.fasterxml.jackson.core:jackson-databind'
implementation 'com.google.guava:guava'
implementation 'io.vertx:vertx-core'
implementation 'net.java.dev.jna:jna'
implementation 'org.apache.logging.log4j:log4j-api'
implementation 'org.apache.tuweni:tuweni-bytes'
implementation 'org.apache.tuweni:tuweni-units'
implementation 'org.hyperledger.besu:altbn128'
runtimeOnly 'org.apache.logging.log4j:log4j-core'
testImplementation project(path: ':config', configuration: 'testSupportArtifacts')
testImplementation project(path:':ethereum:referencetests', configuration: 'testOutput')
testImplementation project(':testutil')
testImplementation 'junit:junit'
testImplementation 'org.apache.logging.log4j:log4j-core'
testImplementation 'org.apache.tuweni:tuweni-bytes'
testImplementation 'org.apache.tuweni:tuweni-io'
testImplementation 'org.apache.tuweni:tuweni-units'
testImplementation 'org.assertj:assertj-core'
testImplementation 'org.mockito:mockito-core'
integrationTestImplementation project(path: ':config', configuration: 'testSupportArtifacts')
integrationTestImplementation project(':testutil')
integrationTestImplementation 'junit:junit'
integrationTestImplementation 'net.consensys:orion'
integrationTestImplementation 'org.assertj:assertj-core'
integrationTestImplementation 'org.mockito:mockito-core'
testSupportImplementation project(path: ':config', configuration: 'testSupportArtifacts')
testSupportImplementation project(':ethereum:eth')
testSupportImplementation project(':testutil')
testSupportImplementation 'junit:junit'
testSupportImplementation 'org.assertj:assertj-core'
testSupportImplementation 'org.mockito:mockito-core'
jmhImplementation project(path: ':config', configuration: 'testSupportArtifacts')
jmhImplementation project(':crypto')
jmhImplementation project(path: ':ethereum:core', configuration: 'testSupportArtifacts')
jmhImplementation project(':ethereum:rlp')
jmhImplementation project(':ethereum:trie')
jmhImplementation project(':metrics:core')
jmhImplementation project(':plugin-api')
jmhImplementation project(':plugins:rocksdb')
jmhImplementation project(':services:kvstore')
jmhImplementation project(':util')
jmhImplementation 'com.google.guava:guava'
}
configurations { testArtifacts }
task testJar (type: Jar) {
archiveBaseName = "${project.name}-test"
from sourceSets.test.output
}
test {
exclude 'org/hyperledger/besu/ethereum/mainnet/DifficultyCalculatorTests.class'
exclude 'org/hyperledger/besu/ethereum/core/TransactionTest.class'
exclude 'org/hyperledger/besu/ethereum/vm/**ReferenceTest.class'
exclude 'org/hyperledger/besu/ethereum/vm/blockchain/**.class'
exclude 'org/hyperledger/besu/ethereum/vm/generalstate/**.class'
}
def generateTestFiles(FileTree jsonPath, 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.eachWithIndex { fileSet, idx ->
def paths = []
fileSet.each { testJsonFile ->
if (!testJsonFile.getName().toString().startsWith(".")) {
String parentDirectory = testJsonFile.getParentFile().getName()
String testFile = testJsonFile.getName()
if(testJsonFile.getParentFile().getName() == pathstrip) {
paths << pathstrip + "/" + testFile
} else if(testJsonFile.getParentFile().getParentFile().getName() != pathstrip) {
paths << pathstrip + "/" + testJsonFile.getParentFile().getParentFile().getName() + "/" + parentDirectory + "/" + testFile
} else {
paths << pathstrip + "/" + parentDirectory + "/" + testFile
}
}
}
def testFile = file(destination + "/" + namePrefix + "_" + idx + ".java")
def allPaths = '"' + paths.join('", "') + '"'
def testFileContents = referenceTestTemplate
.replaceAll("%%TESTS_FILE%%", allPaths)
.replaceAll("%%TESTS_NAME%%", namePrefix + "_" + idx)
testFile.newWriter().withWriter { w -> w << testFileContents }
}
}
task blockchainReferenceTestsSetup {
generateTestFiles(
fileTree('../referencetests/src/test/resources/BlockchainTests'),
file("./src/test/resources/org/hyperledger/besu/ethereum/vm/BlockchainReferenceTest.java.template"),
"BlockchainTests",
"./src/test/java/org/hyperledger/besu/ethereum/vm/blockchain",
"BlockchainReferenceTest"
)
}
task generalstateReferenceTestsSetup {
generateTestFiles(
fileTree("../referencetests/src/test/resources/GeneralStateTests"),
file("./src/test/resources/org/hyperledger/besu/ethereum/vm/GeneralStateReferenceTest.java.template"),
"GeneralStateTests",
"./src/test/java/org/hyperledger/besu/ethereum/vm/generalstate",
"GeneralStateReferenceTest"
)
}
task generalstateRegressionReferenceTestsSetup {
generateTestFiles(
fileTree("./src/test/resources/regressions/generalstate"),
file("./src/test/resources/org/hyperledger/besu/ethereum/vm/GeneralStateReferenceTest.java.template"),
"regressions",
"./src/test/java/org/hyperledger/besu/ethereum/vm/generalstate",
"GeneralStateRegressionReferenceTest"
)
}
task cleanupReferenceTests(type: Delete) {
delete fileTree("./src/test/java/org/hyperledger/besu/ethereum/vm/generalstate/") {
include("**/GeneralStateReferenceTest*.java")
include("**/GeneralStateRegressionReferenceTest*.java")
}
delete fileTree("./src/test/java/org/hyperledger/besu/ethereum/vm/blockchain/") { include("**/BlockchainReferenceTest*.java") }
}
clean.dependsOn(cleanupReferenceTests)
task referenceTests(type: Test, dependsOn: [
"blockchainReferenceTestsSetup",
"generalstateReferenceTestsSetup",
"generalstateRegressionReferenceTestsSetup",
"compileTestJava"
]) {
compileTestJava.mustRunAfter blockchainReferenceTestsSetup
compileTestJava.mustRunAfter generalstateReferenceTestsSetup
compileTestJava.mustRunAfter generalstateRegressionReferenceTestsSetup
doFirst {
if (!file("../referencetests/src/test/resources/README.md").exists()) {
throw new GradleException("ethereum/referencetests/src/test/resources/README.md missing: please clone submodules (git submodule update --init --recursive)")
}
}
scanForTestClasses = false
enableAssertions = true
include 'org/hyperledger/besu/ethereum/core/TransactionTest.class'
include 'org/hyperledger/besu/ethereum/mainnet/DifficultyCalculatorTests.class'
include 'org/hyperledger/besu/ethereum/vm/**ReferenceTest.class'
include 'org/hyperledger/besu/ethereum/vm/blockchain/**.class'
include 'org/hyperledger/besu/ethereum/vm/generalstate/**.class'
}
artifacts {
testArtifacts testJar
testSupportArtifacts testSupportJar
}