mirror of
https://github.com/corda/corda.git
synced 2025-06-06 01:11:45 +00:00
Checking that the smoke tests don't have the node on their classpath.
This commit is contained in:
parent
2e0e78e883
commit
837e8800e8
4
.idea/compiler.xml
generated
4
.idea/compiler.xml
generated
@ -2,6 +2,8 @@
|
|||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="CompilerConfiguration">
|
<component name="CompilerConfiguration">
|
||||||
<bytecodeTargetLevel target="1.8">
|
<bytecodeTargetLevel target="1.8">
|
||||||
|
<module name="api-scanner_main" target="1.8" />
|
||||||
|
<module name="api-scanner_test" target="1.8" />
|
||||||
<module name="attachment-demo_integrationTest" target="1.8" />
|
<module name="attachment-demo_integrationTest" target="1.8" />
|
||||||
<module name="attachment-demo_main" target="1.8" />
|
<module name="attachment-demo_main" target="1.8" />
|
||||||
<module name="attachment-demo_test" target="1.8" />
|
<module name="attachment-demo_test" target="1.8" />
|
||||||
@ -27,7 +29,9 @@
|
|||||||
<module name="cordformation_main" target="1.8" />
|
<module name="cordformation_main" target="1.8" />
|
||||||
<module name="cordformation_runnodes" target="1.8" />
|
<module name="cordformation_runnodes" target="1.8" />
|
||||||
<module name="cordformation_test" target="1.8" />
|
<module name="cordformation_test" target="1.8" />
|
||||||
|
<module name="core_integrationTest" target="1.8" />
|
||||||
<module name="core_main" target="1.8" />
|
<module name="core_main" target="1.8" />
|
||||||
|
<module name="core_smokeTest" target="1.8" />
|
||||||
<module name="core_test" target="1.8" />
|
<module name="core_test" target="1.8" />
|
||||||
<module name="demobench_main" target="1.8" />
|
<module name="demobench_main" target="1.8" />
|
||||||
<module name="demobench_test" target="1.8" />
|
<module name="demobench_test" target="1.8" />
|
||||||
|
@ -7,6 +7,52 @@ apply plugin: 'com.jfrog.artifactory'
|
|||||||
|
|
||||||
description 'Corda core'
|
description 'Corda core'
|
||||||
|
|
||||||
|
evaluationDependsOn(':node:capsule')
|
||||||
|
|
||||||
|
configurations {
|
||||||
|
integrationTestCompile.extendsFrom testCompile
|
||||||
|
integrationTestRuntime.extendsFrom testRuntime
|
||||||
|
|
||||||
|
smokeTestCompile.extendsFrom compile
|
||||||
|
smokeTestRuntime.extendsFrom runtime
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
integrationTest {
|
||||||
|
kotlin {
|
||||||
|
compileClasspath += main.output + test.output
|
||||||
|
runtimeClasspath += main.output + test.output
|
||||||
|
srcDir file('src/integration-test/kotlin')
|
||||||
|
}
|
||||||
|
java {
|
||||||
|
compileClasspath += main.output + test.output
|
||||||
|
runtimeClasspath += main.output + test.output
|
||||||
|
srcDir file('src/integration-test/java')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
smokeTest {
|
||||||
|
kotlin {
|
||||||
|
// We must NOT have any Node code on the classpath, so do NOT
|
||||||
|
// include the test or integrationTest dependencies here.
|
||||||
|
compileClasspath += main.output
|
||||||
|
runtimeClasspath += main.output
|
||||||
|
srcDir file('src/smoke-test/kotlin')
|
||||||
|
}
|
||||||
|
java {
|
||||||
|
compileClasspath += main.output
|
||||||
|
runtimeClasspath += main.output
|
||||||
|
srcDir file('src/smoke-test/java')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
processSmokeTestResources {
|
||||||
|
// Bring in the fully built corda.jar for use by NodeFactory in the smoke tests
|
||||||
|
from(project(':node:capsule').tasks['buildCordaJAR']) {
|
||||||
|
rename 'corda-(.*)', 'corda.jar'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
@ -14,7 +60,6 @@ buildscript {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
|
||||||
testCompile "junit:junit:$junit_version"
|
testCompile "junit:junit:$junit_version"
|
||||||
testCompile "commons-fileupload:commons-fileupload:$fileupload_version"
|
testCompile "commons-fileupload:commons-fileupload:$fileupload_version"
|
||||||
|
|
||||||
@ -48,6 +93,11 @@ dependencies {
|
|||||||
// Guava: Google utilities library.
|
// Guava: Google utilities library.
|
||||||
testCompile "com.google.guava:guava:$guava_version"
|
testCompile "com.google.guava:guava:$guava_version"
|
||||||
|
|
||||||
|
// Smoke tests do NOT have any Node code on the classpath!
|
||||||
|
smokeTestCompile project(':smoke-test-utils')
|
||||||
|
smokeTestCompile "org.assertj:assertj-core:${assertj_version}"
|
||||||
|
smokeTestCompile "junit:junit:$junit_version"
|
||||||
|
|
||||||
// RxJava: observable streams of events.
|
// RxJava: observable streams of events.
|
||||||
compile "io.reactivex:rxjava:$rxjava_version"
|
compile "io.reactivex:rxjava:$rxjava_version"
|
||||||
|
|
||||||
@ -87,6 +137,22 @@ task testJar(type: Jar) {
|
|||||||
from sourceSets.test.output
|
from sourceSets.test.output
|
||||||
}
|
}
|
||||||
|
|
||||||
|
task integrationTest(type: Test) {
|
||||||
|
testClassesDirs = sourceSets.integrationTest.output.classesDirs
|
||||||
|
classpath = sourceSets.integrationTest.runtimeClasspath
|
||||||
|
}
|
||||||
|
|
||||||
|
task smokeTestJar(type: Jar) {
|
||||||
|
classifier 'smokeTests'
|
||||||
|
from sourceSets.smokeTest.output
|
||||||
|
}
|
||||||
|
|
||||||
|
task smokeTest(type: Test) {
|
||||||
|
dependsOn smokeTestJar
|
||||||
|
testClassesDirs = sourceSets.smokeTest.output.classesDirs
|
||||||
|
classpath = sourceSets.smokeTest.runtimeClasspath
|
||||||
|
}
|
||||||
|
|
||||||
artifacts {
|
artifacts {
|
||||||
testArtifacts testJar
|
testArtifacts testJar
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package net.corda.node
|
package net.corda.core.cordapp
|
||||||
|
|
||||||
import co.paralleluniverse.fibers.Suspendable
|
import co.paralleluniverse.fibers.Suspendable
|
||||||
import net.corda.core.flows.*
|
import net.corda.core.flows.*
|
||||||
@ -11,7 +11,6 @@ import net.corda.core.internal.list
|
|||||||
import net.corda.core.messaging.startFlow
|
import net.corda.core.messaging.startFlow
|
||||||
import net.corda.core.utilities.getOrThrow
|
import net.corda.core.utilities.getOrThrow
|
||||||
import net.corda.core.utilities.unwrap
|
import net.corda.core.utilities.unwrap
|
||||||
import net.corda.node.internal.cordapp.CordappLoader
|
|
||||||
import net.corda.nodeapi.User
|
import net.corda.nodeapi.User
|
||||||
import net.corda.smoketesting.NodeConfig
|
import net.corda.smoketesting.NodeConfig
|
||||||
import net.corda.smoketesting.NodeProcess
|
import net.corda.smoketesting.NodeProcess
|
||||||
@ -23,6 +22,7 @@ import kotlin.streams.toList
|
|||||||
|
|
||||||
class CordappSmokeTest {
|
class CordappSmokeTest {
|
||||||
private companion object {
|
private companion object {
|
||||||
|
private const val CORDAPPS_DIR_NAME = "cordapps"
|
||||||
val user = User("user1", "test", permissions = setOf("ALL"))
|
val user = User("user1", "test", permissions = setOf("ALL"))
|
||||||
val port = AtomicInteger(15100)
|
val port = AtomicInteger(15100)
|
||||||
}
|
}
|
||||||
@ -38,9 +38,10 @@ class CordappSmokeTest {
|
|||||||
users = listOf(user)
|
users = listOf(user)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `FlowContent appName returns the filename of the CorDapp jar`() {
|
fun `FlowContent appName returns the filename of the CorDapp jar`() {
|
||||||
val cordappsDir = (factory.baseDirectory(aliceConfig) / CordappLoader.CORDAPPS_DIR_NAME).createDirectories()
|
val cordappsDir = (factory.baseDirectory(aliceConfig) / CORDAPPS_DIR_NAME).createDirectories()
|
||||||
// Find the jar file for the smoke tests of this module
|
// Find the jar file for the smoke tests of this module
|
||||||
val selfCordapp = Paths.get("build", "libs").list {
|
val selfCordapp = Paths.get("build", "libs").list {
|
||||||
it.filter { "-smokeTests" in it.toString() }.toList().single()
|
it.filter { "-smokeTests" in it.toString() }.toList().single()
|
||||||
@ -61,7 +62,7 @@ class CordappSmokeTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `empty cordapps directory`() {
|
fun `empty cordapps directory`() {
|
||||||
(factory.baseDirectory(aliceConfig) / CordappLoader.CORDAPPS_DIR_NAME).createDirectories()
|
(factory.baseDirectory(aliceConfig) / CORDAPPS_DIR_NAME).createDirectories()
|
||||||
factory.create(aliceConfig).close()
|
factory.create(aliceConfig).close()
|
||||||
}
|
}
|
||||||
|
|
@ -19,9 +19,6 @@ configurations {
|
|||||||
|
|
||||||
integrationTestCompile.extendsFrom testCompile
|
integrationTestCompile.extendsFrom testCompile
|
||||||
integrationTestRuntime.extendsFrom testRuntime
|
integrationTestRuntime.extendsFrom testRuntime
|
||||||
|
|
||||||
smokeTestCompile.extendsFrom compile
|
|
||||||
smokeTestRuntime.extendsFrom runtime
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
@ -40,20 +37,6 @@ sourceSets {
|
|||||||
srcDir file('src/integration-test/resources')
|
srcDir file('src/integration-test/resources')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
smokeTest {
|
|
||||||
kotlin {
|
|
||||||
// We must NOT have any Node code on the classpath, so do NOT
|
|
||||||
// include the test or integrationTest dependencies here.
|
|
||||||
compileClasspath += main.output
|
|
||||||
runtimeClasspath += main.output
|
|
||||||
srcDir file('src/smoke-test/kotlin')
|
|
||||||
}
|
|
||||||
java {
|
|
||||||
compileClasspath += main.output
|
|
||||||
runtimeClasspath += main.output
|
|
||||||
srcDir file('src/smoke-test/java')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use manual resource copying of log4j2.xml rather than source sets.
|
// Use manual resource copying of log4j2.xml rather than source sets.
|
||||||
@ -62,13 +45,6 @@ processResources {
|
|||||||
from file("$rootDir/config/dev/log4j2.xml")
|
from file("$rootDir/config/dev/log4j2.xml")
|
||||||
}
|
}
|
||||||
|
|
||||||
processSmokeTestResources {
|
|
||||||
// Bring in the fully built corda.jar for use by NodeFactory in the smoke tests
|
|
||||||
from(project(':node:capsule').tasks.buildCordaJAR) {
|
|
||||||
rename 'corda-(.*)', 'corda.jar'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// To find potential version conflicts, run "gradle htmlDependencyReport" and then look in
|
// To find potential version conflicts, run "gradle htmlDependencyReport" and then look in
|
||||||
// build/reports/project/dependencies/index.html for green highlighted parts of the tree.
|
// build/reports/project/dependencies/index.html for green highlighted parts of the tree.
|
||||||
|
|
||||||
@ -181,11 +157,6 @@ dependencies {
|
|||||||
integrationTestCompile "junit:junit:$junit_version"
|
integrationTestCompile "junit:junit:$junit_version"
|
||||||
integrationTestCompile "org.assertj:assertj-core:${assertj_version}"
|
integrationTestCompile "org.assertj:assertj-core:${assertj_version}"
|
||||||
|
|
||||||
// Smoke tests do NOT have any Node code on the classpath!
|
|
||||||
smokeTestCompile project(':smoke-test-utils')
|
|
||||||
smokeTestCompile "org.assertj:assertj-core:${assertj_version}"
|
|
||||||
smokeTestCompile "junit:junit:$junit_version"
|
|
||||||
|
|
||||||
// Jetty dependencies for NetworkMapClient test.
|
// Jetty dependencies for NetworkMapClient test.
|
||||||
// Web stuff: for HTTP[S] servlets
|
// Web stuff: for HTTP[S] servlets
|
||||||
testCompile "org.eclipse.jetty:jetty-servlet:${jetty_version}"
|
testCompile "org.eclipse.jetty:jetty-servlet:${jetty_version}"
|
||||||
@ -203,17 +174,6 @@ task integrationTest(type: Test) {
|
|||||||
classpath = sourceSets.integrationTest.runtimeClasspath
|
classpath = sourceSets.integrationTest.runtimeClasspath
|
||||||
}
|
}
|
||||||
|
|
||||||
task smokeTestJar(type: Jar) {
|
|
||||||
classifier 'smokeTests'
|
|
||||||
from sourceSets.smokeTest.output
|
|
||||||
}
|
|
||||||
|
|
||||||
task smokeTest(type: Test) {
|
|
||||||
dependsOn smokeTestJar
|
|
||||||
testClassesDirs = sourceSets.smokeTest.output.classesDirs
|
|
||||||
classpath = sourceSets.smokeTest.runtimeClasspath
|
|
||||||
}
|
|
||||||
|
|
||||||
jar {
|
jar {
|
||||||
baseName 'corda-node'
|
baseName 'corda-node'
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
// This class is used by the smoke tests as a check that the node module isn't on their classpath
|
||||||
@file:JvmName("Corda")
|
@file:JvmName("Corda")
|
||||||
|
|
||||||
package net.corda.node
|
package net.corda.node
|
||||||
|
@ -15,15 +15,13 @@ import java.util.concurrent.Executors
|
|||||||
import java.util.concurrent.TimeUnit.SECONDS
|
import java.util.concurrent.TimeUnit.SECONDS
|
||||||
|
|
||||||
class NodeProcess(
|
class NodeProcess(
|
||||||
val config: NodeConfig,
|
private val config: NodeConfig,
|
||||||
val nodeDir: Path,
|
private val nodeDir: Path,
|
||||||
private val node: Process,
|
private val node: Process,
|
||||||
private val client: CordaRPCClient
|
private val client: CordaRPCClient
|
||||||
) : AutoCloseable {
|
) : AutoCloseable {
|
||||||
private companion object {
|
private companion object {
|
||||||
val log = loggerFor<NodeProcess>()
|
val log = loggerFor<NodeProcess>()
|
||||||
val javaPath: Path = Paths.get(System.getProperty("java.home"), "bin", "java")
|
|
||||||
val formatter: DateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss").withZone(systemDefault())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun connect(): CordaRPCConnection {
|
fun connect(): CordaRPCConnection {
|
||||||
@ -43,13 +41,24 @@ class NodeProcess(
|
|||||||
(nodeDir / "artemis").toFile().deleteRecursively()
|
(nodeDir / "artemis").toFile().deleteRecursively()
|
||||||
}
|
}
|
||||||
|
|
||||||
class Factory(val buildDirectory: Path = Paths.get("build"),
|
class Factory(
|
||||||
val cordaJar: Path = Paths.get(this::class.java.getResource("/corda.jar").toURI())) {
|
private val buildDirectory: Path = Paths.get("build"),
|
||||||
val nodesDirectory = buildDirectory / formatter.format(Instant.now())
|
private val cordaJar: Path = Paths.get(this::class.java.getResource("/corda.jar").toURI())
|
||||||
|
) {
|
||||||
|
companion object {
|
||||||
|
val javaPath: Path = Paths.get(System.getProperty("java.home"), "bin", "java")
|
||||||
|
val formatter: DateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss").withZone(systemDefault())
|
||||||
init {
|
init {
|
||||||
nodesDirectory.createDirectories()
|
try {
|
||||||
|
Class.forName("net.corda.node.Corda")
|
||||||
|
throw Error("Smoke test has the node in its classpath. Please remove the offending dependency.")
|
||||||
|
} catch (e: ClassNotFoundException) {
|
||||||
|
// If the class can't be found then we're good!
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private val nodesDirectory = (buildDirectory / formatter.format(Instant.now())).createDirectories()
|
||||||
|
|
||||||
fun baseDirectory(config: NodeConfig): Path = nodesDirectory / config.commonName
|
fun baseDirectory(config: NodeConfig): Path = nodesDirectory / config.commonName
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user