diff --git a/.idea/compiler.xml b/.idea/compiler.xml index ab8839639e..3628d6937c 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -55,6 +55,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -175,6 +353,8 @@ + + diff --git a/core-tests/build.gradle b/core-tests/build.gradle new file mode 100644 index 0000000000..52cf606abe --- /dev/null +++ b/core-tests/build.gradle @@ -0,0 +1,158 @@ +apply plugin: 'kotlin' +apply plugin: 'kotlin-jpa' +apply plugin: 'net.corda.plugins.quasar-utils' +apply plugin: 'net.corda.plugins.publish-utils' +apply plugin: 'net.corda.plugins.api-scanner' + +description 'Corda core tests' + +configurations { + integrationTestCompile.extendsFrom testCompile + integrationTestRuntimeOnly.extendsFrom testRuntimeOnly + + smokeTestCompile.extendsFrom compile + smokeTestRuntimeOnly.extendsFrom runtimeOnly +} + +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. + srcDir file('src/smoke-test/kotlin') + } + java { + 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' + } +} + +dependencies { + + testImplementation "org.junit.jupiter:junit-jupiter-api:${junit_jupiter_version}" + testImplementation "junit:junit:$junit_version" + testRuntimeOnly "org.junit.vintage:junit-vintage-engine:${junit_vintage_version}" + testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:${junit_jupiter_version}" + testRuntimeOnly "org.junit.platform:junit-platform-launcher:${junit_platform_version}" + + testCompile "commons-fileupload:commons-fileupload:$fileupload_version" + testCompile project(":core") + testCompile project(path: ':core', configuration: 'testArtifacts') + + // Guava: Google test library (collections test suite) + testCompile "com.google.guava:guava-testlib:$guava_version" + + // Bring in the MockNode infrastructure for writing protocol unit tests. + testCompile project(":node-driver") + + compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" + testCompile "org.jetbrains.kotlin:kotlin-test:$kotlin_version" + + // Hamkrest, for fluent, composable matchers + testCompile "com.natpryce:hamkrest:$hamkrest_version" + + // SLF4J: commons-logging bindings for a SLF4J back end + compile "org.slf4j:jcl-over-slf4j:$slf4j_version" + compile "org.slf4j:slf4j-api:$slf4j_version" + + // AssertJ: for fluent assertions for testing + testCompile "org.assertj:assertj-core:${assertj_version}" + + // Guava: Google utilities library. + testCompile "com.google.guava:guava:$guava_version" + + // Smoke tests do NOT have any Node code on the classpath! + smokeTestImplementation "org.junit.jupiter:junit-jupiter-api:${junit_jupiter_version}" + smokeTestImplementation "junit:junit:$junit_version" + + smokeTestRuntimeOnly "org.junit.vintage:junit-vintage-engine:${junit_vintage_version}" + smokeTestRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:${junit_jupiter_version}" + smokeTestRuntimeOnly "org.junit.platform:junit-platform-launcher:${junit_platform_version}" + + smokeTestCompile project(':smoke-test-utils') + smokeTestCompile "org.assertj:assertj-core:${assertj_version}" + +} + +configurations { + testArtifacts.extendsFrom testRuntimeClasspath +} + +tasks.withType(Test) { + // fork a new test process for every test class + forkEvery = 10 +} + +task testJar(type: Jar) { + classifier "tests" + 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 +} + +// quasar exclusions upon agent code instrumentation at run-time +quasar { + excludePackages.addAll( + "antlr**", + "com.codahale**", + "com.fasterxml.**", + "com.github.benmanes.caffeine.**", + "com.google.**", + "com.lmax.**", + "com.zaxxer.**", + "net.bytebuddy**", + "io.github.classgraph**", + "io.netty*", + "liquibase**", + "net.i2p.crypto.**", + "nonapi.io.github.classgraph.**", + "org.apiguardian.**", + "org.bouncycastle**", + "org.codehaus.**", + "org.h2**", + "org.hibernate**", + "org.jboss.**", + "org.objenesis**", + "org.w3c.**", + "org.xml**", + "org.yaml**", + "rx**") +} + +artifacts { + testArtifacts testJar +} diff --git a/core/src/smoke-test/kotlin/net/corda/core/NodeVersioningTest.kt b/core-tests/src/smoke-test/kotlin/net/corda/coretests/NodeVersioningTest.kt similarity index 99% rename from core/src/smoke-test/kotlin/net/corda/core/NodeVersioningTest.kt rename to core-tests/src/smoke-test/kotlin/net/corda/coretests/NodeVersioningTest.kt index 9cca6d959a..0cc4064413 100644 --- a/core/src/smoke-test/kotlin/net/corda/core/NodeVersioningTest.kt +++ b/core-tests/src/smoke-test/kotlin/net/corda/coretests/NodeVersioningTest.kt @@ -1,4 +1,4 @@ -package net.corda.core +package net.corda.coretests import co.paralleluniverse.fibers.Suspendable import net.corda.core.flows.FlowLogic diff --git a/core/src/smoke-test/kotlin/net/corda/core/cordapp/CordappSmokeTest.kt b/core-tests/src/smoke-test/kotlin/net/corda/coretests/cordapp/CordappSmokeTest.kt similarity index 97% rename from core/src/smoke-test/kotlin/net/corda/core/cordapp/CordappSmokeTest.kt rename to core-tests/src/smoke-test/kotlin/net/corda/coretests/cordapp/CordappSmokeTest.kt index 6e9cf72bff..ce9566aaec 100644 --- a/core/src/smoke-test/kotlin/net/corda/core/cordapp/CordappSmokeTest.kt +++ b/core-tests/src/smoke-test/kotlin/net/corda/coretests/cordapp/CordappSmokeTest.kt @@ -1,4 +1,4 @@ -package net.corda.core.cordapp +package net.corda.coretests.cordapp import co.paralleluniverse.fibers.Suspendable import net.corda.core.crypto.Crypto.generateKeyPair @@ -94,7 +94,7 @@ class CordappSmokeTest { factory.create(aliceConfig).use { alice -> alice.connect(superUser).use { connectionToAlice -> val aliceIdentity = connectionToAlice.proxy.nodeInfo().legalIdentitiesAndCerts.first().party - val future = connectionToAlice.proxy.startFlow(::GatherContextsFlow, aliceIdentity).returnValue + val future = connectionToAlice.proxy.startFlow(CordappSmokeTest::GatherContextsFlow, aliceIdentity).returnValue val (sessionInitContext, sessionConfirmContext) = future.getOrThrow() val selfCordappName = selfCordapp.fileName.toString().removeSuffix(".jar") assertThat(sessionInitContext.appName).isEqualTo(selfCordappName) diff --git a/core/src/test/java/net/corda/core/contracts/AmountParsingTest.java b/core-tests/src/test/java/net/corda/coretests/contracts/AmountParsingTest.java similarity index 81% rename from core/src/test/java/net/corda/core/contracts/AmountParsingTest.java rename to core-tests/src/test/java/net/corda/coretests/contracts/AmountParsingTest.java index 1b23374ce2..359f23c15c 100644 --- a/core/src/test/java/net/corda/core/contracts/AmountParsingTest.java +++ b/core-tests/src/test/java/net/corda/coretests/contracts/AmountParsingTest.java @@ -1,5 +1,6 @@ -package net.corda.core.contracts; +package net.corda.coretests.contracts; +import net.corda.core.contracts.Amount; import org.junit.Test; import static net.corda.finance.Currencies.POUNDS; diff --git a/core/src/test/java/net/corda/core/flows/FlowsInJavaTest.java b/core-tests/src/test/java/net/corda/coretests/flows/FlowsInJavaTest.java similarity index 98% rename from core/src/test/java/net/corda/core/flows/FlowsInJavaTest.java rename to core-tests/src/test/java/net/corda/coretests/flows/FlowsInJavaTest.java index 6dce0bb36a..a2aa12a970 100644 --- a/core/src/test/java/net/corda/core/flows/FlowsInJavaTest.java +++ b/core-tests/src/test/java/net/corda/coretests/flows/FlowsInJavaTest.java @@ -1,7 +1,8 @@ -package net.corda.core.flows; +package net.corda.coretests.flows; import co.paralleluniverse.fibers.Suspendable; import com.google.common.primitives.Primitives; +import net.corda.core.flows.*; import net.corda.core.identity.Party; import net.corda.testing.core.TestConstants; import net.corda.testing.node.MockNetwork; diff --git a/core/src/test/java/net/corda/core/flows/SerializationApiInJavaTest.java b/core-tests/src/test/java/net/corda/coretests/flows/SerializationApiInJavaTest.java similarity index 97% rename from core/src/test/java/net/corda/core/flows/SerializationApiInJavaTest.java rename to core-tests/src/test/java/net/corda/coretests/flows/SerializationApiInJavaTest.java index 9f48a7ba0a..b02f530e1a 100644 --- a/core/src/test/java/net/corda/core/flows/SerializationApiInJavaTest.java +++ b/core-tests/src/test/java/net/corda/coretests/flows/SerializationApiInJavaTest.java @@ -1,4 +1,4 @@ -package net.corda.core.flows; +package net.corda.coretests.flows; import net.corda.core.serialization.SerializationDefaults; import net.corda.core.serialization.SerializationFactory; diff --git a/core/src/test/java/net/corda/core/schemas/BadSchemaJavaV1.java b/core-tests/src/test/java/net/corda/coretests/schemas/BadSchemaJavaV1.java similarity index 86% rename from core/src/test/java/net/corda/core/schemas/BadSchemaJavaV1.java rename to core-tests/src/test/java/net/corda/coretests/schemas/BadSchemaJavaV1.java index 63178184d9..92bb0c588e 100644 --- a/core/src/test/java/net/corda/core/schemas/BadSchemaJavaV1.java +++ b/core-tests/src/test/java/net/corda/coretests/schemas/BadSchemaJavaV1.java @@ -1,4 +1,7 @@ -package net.corda.core.schemas; +package net.corda.coretests.schemas; + +import net.corda.core.schemas.MappedSchema; +import net.corda.core.schemas.PersistentState; import javax.persistence.*; import java.util.Arrays; diff --git a/core/src/test/java/net/corda/core/schemas/BadSchemaNoGetterJavaV1.java b/core-tests/src/test/java/net/corda/coretests/schemas/BadSchemaNoGetterJavaV1.java similarity index 83% rename from core/src/test/java/net/corda/core/schemas/BadSchemaNoGetterJavaV1.java rename to core-tests/src/test/java/net/corda/coretests/schemas/BadSchemaNoGetterJavaV1.java index 36534df566..bee292ee53 100644 --- a/core/src/test/java/net/corda/core/schemas/BadSchemaNoGetterJavaV1.java +++ b/core-tests/src/test/java/net/corda/coretests/schemas/BadSchemaNoGetterJavaV1.java @@ -1,4 +1,7 @@ -package net.corda.core.schemas; +package net.corda.coretests.schemas; + +import net.corda.core.schemas.MappedSchema; +import net.corda.core.schemas.PersistentState; import javax.persistence.*; import java.util.Arrays; diff --git a/core/src/test/java/net/corda/core/schemas/GoodSchemaJavaV1.java b/core-tests/src/test/java/net/corda/coretests/schemas/GoodSchemaJavaV1.java similarity index 79% rename from core/src/test/java/net/corda/core/schemas/GoodSchemaJavaV1.java rename to core-tests/src/test/java/net/corda/coretests/schemas/GoodSchemaJavaV1.java index a7b507b2b0..e37db3b26e 100644 --- a/core/src/test/java/net/corda/core/schemas/GoodSchemaJavaV1.java +++ b/core-tests/src/test/java/net/corda/coretests/schemas/GoodSchemaJavaV1.java @@ -1,4 +1,7 @@ -package net.corda.core.schemas; +package net.corda.coretests.schemas; + +import net.corda.core.schemas.MappedSchema; +import net.corda.core.schemas.PersistentState; import javax.persistence.Column; import javax.persistence.Entity; diff --git a/core/src/test/java/net/corda/core/schemas/PoliteSchemaJavaV1.java b/core-tests/src/test/java/net/corda/coretests/schemas/PoliteSchemaJavaV1.java similarity index 86% rename from core/src/test/java/net/corda/core/schemas/PoliteSchemaJavaV1.java rename to core-tests/src/test/java/net/corda/coretests/schemas/PoliteSchemaJavaV1.java index e1bd6b1970..31327a3d5e 100644 --- a/core/src/test/java/net/corda/core/schemas/PoliteSchemaJavaV1.java +++ b/core-tests/src/test/java/net/corda/coretests/schemas/PoliteSchemaJavaV1.java @@ -1,4 +1,7 @@ -package net.corda.core.schemas; +package net.corda.coretests.schemas; + +import net.corda.core.schemas.MappedSchema; +import net.corda.core.schemas.PersistentState; import javax.persistence.Column; import javax.persistence.Entity; diff --git a/core/src/test/java/net/corda/core/schemas/TestJavaSchemaFamily.java b/core-tests/src/test/java/net/corda/coretests/schemas/TestJavaSchemaFamily.java similarity index 51% rename from core/src/test/java/net/corda/core/schemas/TestJavaSchemaFamily.java rename to core-tests/src/test/java/net/corda/coretests/schemas/TestJavaSchemaFamily.java index c2131097f3..20c7dfb60a 100644 --- a/core/src/test/java/net/corda/core/schemas/TestJavaSchemaFamily.java +++ b/core-tests/src/test/java/net/corda/coretests/schemas/TestJavaSchemaFamily.java @@ -1,4 +1,4 @@ -package net.corda.core.schemas; +package net.corda.coretests.schemas; public class TestJavaSchemaFamily { } diff --git a/core/src/test/java/net/corda/core/schemas/TrickySchemaJavaV1.java b/core-tests/src/test/java/net/corda/coretests/schemas/TrickySchemaJavaV1.java similarity index 87% rename from core/src/test/java/net/corda/core/schemas/TrickySchemaJavaV1.java rename to core-tests/src/test/java/net/corda/coretests/schemas/TrickySchemaJavaV1.java index 1d3926440b..8a3e943d71 100644 --- a/core/src/test/java/net/corda/core/schemas/TrickySchemaJavaV1.java +++ b/core-tests/src/test/java/net/corda/coretests/schemas/TrickySchemaJavaV1.java @@ -1,4 +1,7 @@ -package net.corda.core.schemas; +package net.corda.coretests.schemas; + +import net.corda.core.schemas.MappedSchema; +import net.corda.core.schemas.PersistentState; import javax.persistence.Column; import javax.persistence.Entity; diff --git a/core/src/test/kotlin/net/corda/core/contracts/AmountTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/contracts/AmountTests.kt similarity index 97% rename from core/src/test/kotlin/net/corda/core/contracts/AmountTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/contracts/AmountTests.kt index f35931bb9f..8025913133 100644 --- a/core/src/test/kotlin/net/corda/core/contracts/AmountTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/contracts/AmountTests.kt @@ -1,6 +1,10 @@ -package net.corda.core.contracts +package net.corda.coretests.contracts +import net.corda.core.contracts.Amount import net.corda.core.contracts.Amount.Companion.sumOrZero +import net.corda.core.contracts.AmountTransfer +import net.corda.core.contracts.SourceAndAmount +import net.corda.core.contracts.TokenizableAssetInfo import net.corda.finance.* import org.junit.Test import java.math.BigDecimal diff --git a/core/src/test/kotlin/net/corda/core/contracts/ConstraintsPropagationTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/contracts/ConstraintsPropagationTests.kt similarity index 95% rename from core/src/test/kotlin/net/corda/core/contracts/ConstraintsPropagationTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/contracts/ConstraintsPropagationTests.kt index 3496e66fe2..902df821c8 100644 --- a/core/src/test/kotlin/net/corda/core/contracts/ConstraintsPropagationTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/contracts/ConstraintsPropagationTests.kt @@ -1,8 +1,9 @@ -package net.corda.core.contracts +package net.corda.coretests.contracts import com.nhaarman.mockito_kotlin.doReturn import com.nhaarman.mockito_kotlin.mock import com.nhaarman.mockito_kotlin.whenever +import net.corda.core.contracts.* import net.corda.core.crypto.Crypto import net.corda.core.crypto.SecureHash import net.corda.core.crypto.SecureHash.Companion.allOnesHash @@ -11,7 +12,6 @@ import net.corda.core.crypto.SignableData import net.corda.core.crypto.SignatureMetadata import net.corda.core.identity.AbstractParty import net.corda.core.identity.CordaX500Name -import net.corda.core.internal.AttachmentWithContext import net.corda.core.internal.canBeTransitionedFrom import net.corda.core.internal.inputStream import net.corda.core.internal.toPath @@ -33,7 +33,6 @@ import net.corda.testing.core.internal.JarSignatureTestUtils.generateKey import net.corda.testing.core.internal.SelfCleaningDir import net.corda.testing.internal.MockCordappProvider import net.corda.testing.node.MockServices -import net.corda.testing.node.internal.MockNetworkParametersStorage import net.corda.testing.node.ledger import org.junit.* import java.security.PublicKey @@ -56,7 +55,7 @@ class ConstraintsPropagationTests { val BOB = TestIdentity(CordaX500Name("BOB", "London", "GB")) val BOB_PARTY get() = BOB.party val BOB_PUBKEY get() = BOB.publicKey - const val noPropagationContractClassName = "net.corda.core.contracts.NoPropagationContract" + const val noPropagationContractClassName = "net.corda.coretests.contracts.NoPropagationContract" const val propagatingContractClassName = "net.corda.core.contracts.PropagationContract" private lateinit var keyStoreDir: SelfCleaningDir @@ -102,14 +101,14 @@ class ConstraintsPropagationTests { ledgerServices.ledger(DUMMY_NOTARY) { ledgerServices.recordTransaction(transaction { attachment(Cash.PROGRAM_ID, SecureHash.allOnesHash) - output(Cash.PROGRAM_ID, "c1", DUMMY_NOTARY, null, HashAttachmentConstraint(SecureHash.allOnesHash), Cash.State(1000.POUNDS `issued by` ALICE_PARTY.ref(1), ALICE_PARTY)) + output(Cash.PROGRAM_ID, "c1", DUMMY_NOTARY, null, HashAttachmentConstraint(allOnesHash), Cash.State(1000.POUNDS `issued by` ALICE_PARTY.ref(1), ALICE_PARTY)) command(ALICE_PUBKEY, Cash.Commands.Issue()) verifies() }) transaction { attachment(Cash.PROGRAM_ID, SecureHash.allOnesHash) input("c1") - output(Cash.PROGRAM_ID, "c2", DUMMY_NOTARY, null, HashAttachmentConstraint(SecureHash.allOnesHash), Cash.State(1000.POUNDS `issued by` ALICE_PARTY.ref(1), BOB_PARTY)) + output(Cash.PROGRAM_ID, "c2", DUMMY_NOTARY, null, HashAttachmentConstraint(allOnesHash), Cash.State(1000.POUNDS `issued by` ALICE_PARTY.ref(1), BOB_PARTY)) command(ALICE_PUBKEY, Cash.Commands.Move()) verifies() } @@ -162,7 +161,7 @@ class ConstraintsPropagationTests { ledgerServices.ledger(DUMMY_NOTARY) { transaction { attachment(Cash.PROGRAM_ID, SecureHash.zeroHash) - output(Cash.PROGRAM_ID, "c1", DUMMY_NOTARY, null, HashAttachmentConstraint(SecureHash.zeroHash), Cash.State(1000.POUNDS `issued by` ALICE_PARTY.ref(1), ALICE_PARTY)) + output(Cash.PROGRAM_ID, "c1", DUMMY_NOTARY, null, HashAttachmentConstraint(zeroHash), Cash.State(1000.POUNDS `issued by` ALICE_PARTY.ref(1), ALICE_PARTY)) command(ALICE_PUBKEY, Cash.Commands.Issue()) verifies() } @@ -170,7 +169,7 @@ class ConstraintsPropagationTests { transaction { attachment(Cash.PROGRAM_ID, SecureHash.allOnesHash) input("c1") - output(Cash.PROGRAM_ID, "c2", DUMMY_NOTARY, null, HashAttachmentConstraint(SecureHash.allOnesHash), Cash.State(1000.POUNDS `issued by` ALICE_PARTY.ref(1), BOB_PARTY)) + output(Cash.PROGRAM_ID, "c2", DUMMY_NOTARY, null, HashAttachmentConstraint(allOnesHash), Cash.State(1000.POUNDS `issued by` ALICE_PARTY.ref(1), BOB_PARTY)) command(ALICE_PUBKEY, Cash.Commands.Move()) verifies() } @@ -183,7 +182,7 @@ class ConstraintsPropagationTests { ledgerServices.ledger(DUMMY_NOTARY) { ledgerServices.recordTransaction(transaction { attachment(Cash.PROGRAM_ID, SecureHash.zeroHash) - output(Cash.PROGRAM_ID, "c1", DUMMY_NOTARY, null, HashAttachmentConstraint(SecureHash.zeroHash), Cash.State(1000.POUNDS `issued by` ALICE_PARTY.ref(1), ALICE_PARTY)) + output(Cash.PROGRAM_ID, "c1", DUMMY_NOTARY, null, HashAttachmentConstraint(zeroHash), Cash.State(1000.POUNDS `issued by` ALICE_PARTY.ref(1), ALICE_PARTY)) command(ALICE_PUBKEY, Cash.Commands.Issue()) verifies() }) @@ -223,7 +222,7 @@ class ConstraintsPropagationTests { transaction { attachment(Cash.PROGRAM_ID, SecureHash.zeroHash) input("c1") - output(Cash.PROGRAM_ID, "c2", DUMMY_NOTARY, null, HashAttachmentConstraint(SecureHash.zeroHash), Cash.State(1000.POUNDS `issued by` ALICE_PARTY.ref(1), BOB_PARTY)) + output(Cash.PROGRAM_ID, "c2", DUMMY_NOTARY, null, HashAttachmentConstraint(zeroHash), Cash.State(1000.POUNDS `issued by` ALICE_PARTY.ref(1), BOB_PARTY)) command(ALICE_PUBKEY, Cash.Commands.Move()) verifies() } @@ -278,7 +277,7 @@ class ConstraintsPropagationTests { ledgerServices.ledger(DUMMY_NOTARY) { ledgerServices.recordTransaction(transaction { attachment(noPropagationContractClassName, SecureHash.zeroHash) - output(noPropagationContractClassName, "c1", DUMMY_NOTARY, null, HashAttachmentConstraint(SecureHash.zeroHash), NoPropagationContractState()) + output(noPropagationContractClassName, "c1", DUMMY_NOTARY, null, HashAttachmentConstraint(zeroHash), NoPropagationContractState()) command(ALICE_PUBKEY, NoPropagationContract.Create()) verifies() }) @@ -365,7 +364,10 @@ class ConstraintsPropagationTests { assertFalse(AlwaysAcceptAttachmentConstraint.canBeTransitionedFrom(HashAttachmentConstraint(SecureHash.randomSHA256()), attachment)) // Fail when encounter a AutomaticPlaceholderConstraint - assertFailsWith { HashAttachmentConstraint(SecureHash.randomSHA256()).canBeTransitionedFrom(AutomaticPlaceholderConstraint, attachment) } + assertFailsWith { + HashAttachmentConstraint(SecureHash.randomSHA256()) + .canBeTransitionedFrom(AutomaticPlaceholderConstraint, attachment) + } assertFailsWith { AutomaticPlaceholderConstraint.canBeTransitionedFrom(AutomaticPlaceholderConstraint, attachment) } } diff --git a/core/src/test/kotlin/net/corda/core/contracts/ContractHierarchyTest.kt b/core-tests/src/test/kotlin/net/corda/coretests/contracts/ContractHierarchyTest.kt similarity index 98% rename from core/src/test/kotlin/net/corda/core/contracts/ContractHierarchyTest.kt rename to core-tests/src/test/kotlin/net/corda/coretests/contracts/ContractHierarchyTest.kt index c2e5aa6c1b..f8ea216011 100644 --- a/core/src/test/kotlin/net/corda/core/contracts/ContractHierarchyTest.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/contracts/ContractHierarchyTest.kt @@ -1,6 +1,7 @@ -package net.corda.core.contracts +package net.corda.coretests.contracts import co.paralleluniverse.fibers.Suspendable +import net.corda.core.contracts.* import net.corda.core.flows.* import net.corda.core.identity.AbstractParty import net.corda.core.identity.Party diff --git a/core/src/test/kotlin/net/corda/core/contracts/ContractsDSLTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/contracts/ContractsDSLTests.kt similarity index 98% rename from core/src/test/kotlin/net/corda/core/contracts/ContractsDSLTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/contracts/ContractsDSLTests.kt index 294aebd427..bbf47ac034 100644 --- a/core/src/test/kotlin/net/corda/core/contracts/ContractsDSLTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/contracts/ContractsDSLTests.kt @@ -1,5 +1,6 @@ -package net.corda.core.contracts +package net.corda.coretests.contracts +import net.corda.core.contracts.* import net.corda.core.identity.AbstractParty import net.corda.core.identity.CordaX500Name import net.corda.core.identity.Party @@ -57,7 +58,7 @@ class RequireSingleCommandTests(private val testFunction: (Collection(SecureHash.sha256("1"), SecureHash.sha256("5"), SecureHash.sha256("0"), SecureHash.sha256("19"))) // First leaf. - assertEquals(0, pmt.leafIndex(SecureHash.sha256("0"))) + assertEquals(0, pmt.accessLeafIndex(SecureHash.sha256("0"))) // Second leaf. - assertEquals(1, pmt.leafIndex(SecureHash.sha256("1"))) + assertEquals(1, pmt.accessLeafIndex(SecureHash.sha256("1"))) // A random leaf. - assertEquals(5, pmt.leafIndex(SecureHash.sha256("5"))) + assertEquals(5, pmt.accessLeafIndex(SecureHash.sha256("5"))) // The last leaf. - assertEquals(19, pmt.leafIndex(SecureHash.sha256("19"))) + assertEquals(19, pmt.accessLeafIndex(SecureHash.sha256("19"))) // The provided hash is not in the tree. - assertFailsWith { pmt.leafIndex(SecureHash.sha256("10")) } + assertFailsWith { pmt.accessLeafIndex(SecureHash.sha256("10")) } // The provided hash is not in the tree (using a leaf that didn't exist in the original Merkle tree). - assertFailsWith { pmt.leafIndex(SecureHash.sha256("30")) } + assertFailsWith { pmt.accessLeafIndex(SecureHash.sha256("30")) } val pmtFirstElementOnly = PartialMerkleTree.build(merkleTree, listOf(SecureHash.sha256("0"))) - assertEquals(0, pmtFirstElementOnly.leafIndex(SecureHash.sha256("0"))) + assertEquals(0, pmtFirstElementOnly.accessLeafIndex(SecureHash.sha256("0"))) // The provided hash is not in the tree. - assertFailsWith { pmtFirstElementOnly.leafIndex(SecureHash.sha256("10")) } + assertFailsWith { pmtFirstElementOnly.accessLeafIndex(SecureHash.sha256("10")) } val pmtLastElementOnly = PartialMerkleTree.build(merkleTree, listOf(SecureHash.sha256("19"))) - assertEquals(19, pmtLastElementOnly.leafIndex(SecureHash.sha256("19"))) + assertEquals(19, pmtLastElementOnly.accessLeafIndex(SecureHash.sha256("19"))) // The provided hash is not in the tree. - assertFailsWith { pmtLastElementOnly.leafIndex(SecureHash.sha256("10")) } + assertFailsWith { pmtLastElementOnly.accessLeafIndex(SecureHash.sha256("10")) } val pmtOneElement = PartialMerkleTree.build(merkleTree, listOf(SecureHash.sha256("5"))) - assertEquals(5, pmtOneElement.leafIndex(SecureHash.sha256("5"))) + assertEquals(5, pmtOneElement.accessLeafIndex(SecureHash.sha256("5"))) // The provided hash is not in the tree. - assertFailsWith { pmtOneElement.leafIndex(SecureHash.sha256("10")) } + assertFailsWith { pmtOneElement.accessLeafIndex(SecureHash.sha256("10")) } val pmtAllIncluded = PartialMerkleTree.build(merkleTree, sampleLeaves) - for (i in 0..19) assertEquals(i, pmtAllIncluded.leafIndex(SecureHash.sha256(i.toString()))) + for (i in 0..19) assertEquals(i, pmtAllIncluded.accessLeafIndex(SecureHash.sha256(i.toString()))) // The provided hash is not in the tree (using a leaf that didn't exist in the original Merkle tree). - assertFailsWith { pmtAllIncluded.leafIndex(SecureHash.sha256("30")) } + assertFailsWith { pmtAllIncluded.accessLeafIndex(SecureHash.sha256("30")) } } @Test diff --git a/core/src/test/kotlin/net/corda/core/crypto/SignedDataTest.kt b/core-tests/src/test/kotlin/net/corda/coretests/crypto/SignedDataTest.kt similarity index 89% rename from core/src/test/kotlin/net/corda/core/crypto/SignedDataTest.kt rename to core-tests/src/test/kotlin/net/corda/coretests/crypto/SignedDataTest.kt index b7310756d4..0d5e7fb361 100644 --- a/core/src/test/kotlin/net/corda/core/crypto/SignedDataTest.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/crypto/SignedDataTest.kt @@ -1,5 +1,8 @@ -package net.corda.core.crypto +package net.corda.coretests.crypto +import net.corda.core.crypto.SignedData +import net.corda.core.crypto.generateKeyPair +import net.corda.core.crypto.sign import net.corda.core.serialization.SerializedBytes import net.corda.core.serialization.serialize import net.corda.testing.core.SerializationEnvironmentRule diff --git a/core/src/test/kotlin/net/corda/core/crypto/TransactionSignatureTest.kt b/core-tests/src/test/kotlin/net/corda/coretests/crypto/TransactionSignatureTest.kt similarity index 98% rename from core/src/test/kotlin/net/corda/core/crypto/TransactionSignatureTest.kt rename to core-tests/src/test/kotlin/net/corda/coretests/crypto/TransactionSignatureTest.kt index 4958d58de6..e3a38ee443 100644 --- a/core/src/test/kotlin/net/corda/core/crypto/TransactionSignatureTest.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/crypto/TransactionSignatureTest.kt @@ -1,5 +1,6 @@ -package net.corda.core.crypto +package net.corda.coretests.crypto +import net.corda.core.crypto.* import net.corda.testing.core.SerializationEnvironmentRule import org.junit.Rule import org.junit.Test diff --git a/core/src/test/kotlin/net/corda/core/crypto/X509NameConstraintsTest.kt b/core-tests/src/test/kotlin/net/corda/coretests/crypto/X509NameConstraintsTest.kt similarity index 99% rename from core/src/test/kotlin/net/corda/core/crypto/X509NameConstraintsTest.kt rename to core-tests/src/test/kotlin/net/corda/coretests/crypto/X509NameConstraintsTest.kt index acb2f014b8..61bac911f2 100644 --- a/core/src/test/kotlin/net/corda/core/crypto/X509NameConstraintsTest.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/crypto/X509NameConstraintsTest.kt @@ -1,5 +1,6 @@ -package net.corda.core.crypto +package net.corda.coretests.crypto +import net.corda.core.crypto.Crypto import net.corda.core.identity.CordaX500Name import net.corda.nodeapi.internal.crypto.CertificateType import net.corda.nodeapi.internal.crypto.X509KeyStore diff --git a/core/src/test/kotlin/net/corda/core/flows/AttachmentTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/flows/AttachmentTests.kt similarity index 97% rename from core/src/test/kotlin/net/corda/core/flows/AttachmentTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/flows/AttachmentTests.kt index 1e09bf261a..efd8dcb91d 100644 --- a/core/src/test/kotlin/net/corda/core/flows/AttachmentTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/flows/AttachmentTests.kt @@ -1,11 +1,14 @@ -package net.corda.core.flows +package net.corda.coretests.flows import co.paralleluniverse.fibers.Suspendable import com.natpryce.hamkrest.* import com.natpryce.hamkrest.assertion.assertThat import net.corda.core.contracts.Attachment import net.corda.core.crypto.SecureHash -import net.corda.core.flows.mixins.WithMockNet +import net.corda.core.flows.FlowLogic +import net.corda.core.flows.FlowSession +import net.corda.core.flows.InitiatedBy +import net.corda.core.flows.InitiatingFlow import net.corda.core.identity.CordaX500Name import net.corda.core.identity.Party import net.corda.core.internal.FetchAttachmentsFlow diff --git a/core/src/test/kotlin/net/corda/core/flows/CollectSignaturesFlowTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/flows/CollectSignaturesFlowTests.kt similarity index 97% rename from core/src/test/kotlin/net/corda/core/flows/CollectSignaturesFlowTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/flows/CollectSignaturesFlowTests.kt index 376b0ced1b..fa9ba22d64 100644 --- a/core/src/test/kotlin/net/corda/core/flows/CollectSignaturesFlowTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/flows/CollectSignaturesFlowTests.kt @@ -1,12 +1,16 @@ -package net.corda.core.flows +package net.corda.coretests.flows import co.paralleluniverse.fibers.Suspendable import com.natpryce.hamkrest.assertion.assertThat import net.corda.core.contracts.Command import net.corda.core.contracts.StateAndContract import net.corda.core.contracts.requireThat -import net.corda.core.flows.mixins.WithContracts import net.corda.core.identity.* +import net.corda.core.flows.* +import net.corda.core.identity.CordaX500Name +import net.corda.core.identity.Party +import net.corda.core.identity.excludeHostNode +import net.corda.core.identity.groupAbstractPartyByWellKnownParty import net.corda.core.node.services.IdentityService import net.corda.core.transactions.SignedTransaction import net.corda.core.transactions.TransactionBuilder diff --git a/core/src/test/kotlin/net/corda/core/flows/ContractUpgradeFlowRPCTest.kt b/core-tests/src/test/kotlin/net/corda/coretests/flows/ContractUpgradeFlowRPCTest.kt similarity index 97% rename from core/src/test/kotlin/net/corda/core/flows/ContractUpgradeFlowRPCTest.kt rename to core-tests/src/test/kotlin/net/corda/coretests/flows/ContractUpgradeFlowRPCTest.kt index 56c16f5652..4af71df2d1 100644 --- a/core/src/test/kotlin/net/corda/core/flows/ContractUpgradeFlowRPCTest.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/flows/ContractUpgradeFlowRPCTest.kt @@ -1,4 +1,4 @@ -package net.corda.core.flows +package net.corda.coretests.flows import com.natpryce.hamkrest.and import com.natpryce.hamkrest.anything @@ -8,8 +8,7 @@ import com.natpryce.hamkrest.isA import net.corda.core.CordaRuntimeException import net.corda.core.contracts.ContractState import net.corda.core.contracts.StateAndRef -import net.corda.core.flows.mixins.WithContracts -import net.corda.core.flows.mixins.WithFinality +import net.corda.core.flows.ContractUpgradeFlow import net.corda.core.messaging.CordaRPCOps import net.corda.core.transactions.ContractUpgradeLedgerTransaction import net.corda.core.transactions.SignedTransaction diff --git a/core/src/test/kotlin/net/corda/core/flows/ContractUpgradeFlowTest.kt b/core-tests/src/test/kotlin/net/corda/coretests/flows/ContractUpgradeFlowTest.kt similarity index 97% rename from core/src/test/kotlin/net/corda/core/flows/ContractUpgradeFlowTest.kt rename to core-tests/src/test/kotlin/net/corda/coretests/flows/ContractUpgradeFlowTest.kt index 94df3054e3..b391e5cce2 100644 --- a/core/src/test/kotlin/net/corda/core/flows/ContractUpgradeFlowTest.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/flows/ContractUpgradeFlowTest.kt @@ -1,10 +1,9 @@ -package net.corda.core.flows +package net.corda.coretests.flows import com.natpryce.hamkrest.* import com.natpryce.hamkrest.assertion.assertThat import net.corda.core.contracts.* -import net.corda.core.flows.mixins.WithContracts -import net.corda.core.flows.mixins.WithFinality +import net.corda.core.flows.UnexpectedFlowEndException import net.corda.core.identity.AbstractParty import net.corda.core.internal.Emoji import net.corda.core.transactions.ContractUpgradeLedgerTransaction @@ -168,7 +167,7 @@ class ContractUpgradeFlowTest : WithContracts, WithFinality { override fun withNewOwner(newOwner: AbstractParty) = CommandAndState(Cash.Commands.Move(), copy(owners = listOf(newOwner))) } - override fun upgrade(state: Cash.State) = CashV2.State(state.amount.times(1000), listOf(state.owner)) + override fun upgrade(state: Cash.State) = State(state.amount.times(1000), listOf(state.owner)) override fun verify(tx: LedgerTransaction) {} } diff --git a/core/src/test/kotlin/net/corda/core/flows/FastThreadLocalTest.kt b/core-tests/src/test/kotlin/net/corda/coretests/flows/FastThreadLocalTest.kt similarity index 99% rename from core/src/test/kotlin/net/corda/core/flows/FastThreadLocalTest.kt rename to core-tests/src/test/kotlin/net/corda/coretests/flows/FastThreadLocalTest.kt index 701f02cc75..a11b336081 100644 --- a/core/src/test/kotlin/net/corda/core/flows/FastThreadLocalTest.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/flows/FastThreadLocalTest.kt @@ -1,4 +1,4 @@ -package net.corda.core.flows +package net.corda.coretests.flows import co.paralleluniverse.fibers.Fiber import co.paralleluniverse.fibers.FiberExecutorScheduler diff --git a/core/src/test/kotlin/net/corda/core/flows/FinalityFlowTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/flows/FinalityFlowTests.kt similarity index 96% rename from core/src/test/kotlin/net/corda/core/flows/FinalityFlowTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/flows/FinalityFlowTests.kt index dfcfcba4a8..5285e6b46c 100644 --- a/core/src/test/kotlin/net/corda/core/flows/FinalityFlowTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/flows/FinalityFlowTests.kt @@ -1,9 +1,9 @@ -package net.corda.core.flows +package net.corda.coretests.flows import com.natpryce.hamkrest.and import com.natpryce.hamkrest.assertion.assertThat -import net.corda.core.flows.mixins.WithFinality -import net.corda.core.flows.mixins.WithFinality.FinalityInvoker +import net.corda.core.flows.FinalityFlow +import net.corda.coretests.flows.WithFinality.FinalityInvoker import net.corda.core.identity.Party import net.corda.core.internal.cordapp.CordappResolver import net.corda.core.transactions.SignedTransaction diff --git a/core/src/test/kotlin/net/corda/core/flows/ReceiveAllFlowTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/flows/ReceiveAllFlowTests.kt similarity index 95% rename from core/src/test/kotlin/net/corda/core/flows/ReceiveAllFlowTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/flows/ReceiveAllFlowTests.kt index 48fccc8839..1f83302dd3 100644 --- a/core/src/test/kotlin/net/corda/core/flows/ReceiveAllFlowTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/flows/ReceiveAllFlowTests.kt @@ -1,12 +1,16 @@ -package net.corda.core.flows +package net.corda.coretests.flows import co.paralleluniverse.fibers.Suspendable import com.natpryce.hamkrest.assertion.assertThat -import net.corda.core.flows.mixins.WithMockNet +import net.corda.core.flows.FlowLogic +import net.corda.core.flows.InitiatingFlow import net.corda.core.identity.Party import net.corda.core.utilities.UntrustworthyData import net.corda.core.utilities.unwrap import net.corda.testing.core.singleIdentity +import net.corda.testing.flows.from +import net.corda.testing.flows.receiveAll +import net.corda.testing.flows.registerCordappFlowFactory import net.corda.testing.internal.matchers.flow.willReturn import net.corda.testing.node.internal.InternalMockNetwork import net.corda.testing.node.internal.TestStartedNode diff --git a/core/src/test/kotlin/net/corda/core/flows/ReceiveFinalityFlowTest.kt b/core-tests/src/test/kotlin/net/corda/coretests/flows/ReceiveFinalityFlowTest.kt similarity index 97% rename from core/src/test/kotlin/net/corda/core/flows/ReceiveFinalityFlowTest.kt rename to core-tests/src/test/kotlin/net/corda/coretests/flows/ReceiveFinalityFlowTest.kt index f3eeb05421..395ff5ad19 100644 --- a/core/src/test/kotlin/net/corda/core/flows/ReceiveFinalityFlowTest.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/flows/ReceiveFinalityFlowTest.kt @@ -1,7 +1,8 @@ -package net.corda.core.flows +package net.corda.coretests.flows import net.corda.core.contracts.FungibleAsset import net.corda.core.contracts.TransactionVerificationException +import net.corda.core.flows.StateMachineRunId import net.corda.core.node.services.queryBy import net.corda.core.toFuture import net.corda.core.utilities.OpaqueBytes diff --git a/core/src/test/kotlin/net/corda/core/flows/ReferencedStatesFlowTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/flows/ReferencedStatesFlowTests.kt similarity index 99% rename from core/src/test/kotlin/net/corda/core/flows/ReferencedStatesFlowTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/flows/ReferencedStatesFlowTests.kt index d85ed222b1..8c7b9bc1dd 100644 --- a/core/src/test/kotlin/net/corda/core/flows/ReferencedStatesFlowTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/flows/ReferencedStatesFlowTests.kt @@ -1,7 +1,8 @@ -package net.corda.core.flows +package net.corda.coretests.flows import co.paralleluniverse.fibers.Suspendable import net.corda.core.contracts.* +import net.corda.core.flows.* import net.corda.core.identity.AbstractParty import net.corda.core.identity.Party import net.corda.core.node.StatesToRecord diff --git a/core/src/test/kotlin/net/corda/core/flows/TestNoSecurityDataVendingFlow.kt b/core-tests/src/test/kotlin/net/corda/coretests/flows/TestNoSecurityDataVendingFlow.kt similarity index 87% rename from core/src/test/kotlin/net/corda/core/flows/TestNoSecurityDataVendingFlow.kt rename to core-tests/src/test/kotlin/net/corda/coretests/flows/TestNoSecurityDataVendingFlow.kt index 94181067e8..c203e64d5b 100644 --- a/core/src/test/kotlin/net/corda/core/flows/TestNoSecurityDataVendingFlow.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/flows/TestNoSecurityDataVendingFlow.kt @@ -1,6 +1,8 @@ -package net.corda.core.flows +package net.corda.coretests.flows import co.paralleluniverse.fibers.Suspendable +import net.corda.core.flows.DataVendingFlow +import net.corda.core.flows.FlowSession import net.corda.core.internal.FetchDataFlow import net.corda.core.internal.RetrieveAnyTransactionPayload import net.corda.core.utilities.UntrustworthyData diff --git a/core/src/test/kotlin/net/corda/core/flows/mixins/WithContracts.kt b/core-tests/src/test/kotlin/net/corda/coretests/flows/WithContracts.kt similarity index 99% rename from core/src/test/kotlin/net/corda/core/flows/mixins/WithContracts.kt rename to core-tests/src/test/kotlin/net/corda/coretests/flows/WithContracts.kt index 7206b1ce76..4fe288449a 100644 --- a/core/src/test/kotlin/net/corda/core/flows/mixins/WithContracts.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/flows/WithContracts.kt @@ -1,4 +1,4 @@ -package net.corda.core.flows.mixins +package net.corda.coretests.flows import net.corda.core.contracts.ContractState import net.corda.core.contracts.PartyAndReference diff --git a/core/src/test/kotlin/net/corda/core/flows/mixins/WithFinality.kt b/core-tests/src/test/kotlin/net/corda/coretests/flows/WithFinality.kt similarity index 94% rename from core/src/test/kotlin/net/corda/core/flows/mixins/WithFinality.kt rename to core-tests/src/test/kotlin/net/corda/coretests/flows/WithFinality.kt index 45a2363151..5e1daa8a09 100644 --- a/core/src/test/kotlin/net/corda/core/flows/mixins/WithFinality.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/flows/WithFinality.kt @@ -1,4 +1,4 @@ -package net.corda.core.flows.mixins +package net.corda.coretests.flows import co.paralleluniverse.fibers.Suspendable import com.natpryce.hamkrest.MatchResult @@ -25,7 +25,7 @@ interface WithFinality : WithMockNet { } fun CordaRPCOps.finalise(stx: SignedTransaction, vararg recipients: Party): FlowHandle { - return startFlow(::FinalityInvoker, stx, recipients.toSet(), emptySet()).andRunNetwork() + return startFlow(WithFinality::FinalityInvoker, stx, recipients.toSet(), emptySet()).andRunNetwork() } //endregion diff --git a/core/src/test/kotlin/net/corda/core/flows/mixins/WithMockNet.kt b/core-tests/src/test/kotlin/net/corda/coretests/flows/WithMockNet.kt similarity index 98% rename from core/src/test/kotlin/net/corda/core/flows/mixins/WithMockNet.kt rename to core-tests/src/test/kotlin/net/corda/coretests/flows/WithMockNet.kt index 02c70ecc3f..2fa84b7486 100644 --- a/core/src/test/kotlin/net/corda/core/flows/mixins/WithMockNet.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/flows/WithMockNet.kt @@ -1,4 +1,4 @@ -package net.corda.core.flows.mixins +package net.corda.coretests.flows import com.natpryce.hamkrest.* import net.corda.core.contracts.ContractState diff --git a/core/src/test/kotlin/net/corda/core/identity/PartyAndCertificateTest.kt b/core-tests/src/test/kotlin/net/corda/coretests/indentity/PartyAndCertificateTest.kt similarity index 93% rename from core/src/test/kotlin/net/corda/core/identity/PartyAndCertificateTest.kt rename to core-tests/src/test/kotlin/net/corda/coretests/indentity/PartyAndCertificateTest.kt index f64b243de5..e00693f6cc 100644 --- a/core/src/test/kotlin/net/corda/core/identity/PartyAndCertificateTest.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/indentity/PartyAndCertificateTest.kt @@ -1,8 +1,11 @@ -package net.corda.core.identity +package net.corda.coretests.indentity import com.google.common.jimfs.Configuration.unix import com.google.common.jimfs.Jimfs import net.corda.core.crypto.entropyToKeyPair +import net.corda.core.identity.CordaX500Name +import net.corda.core.identity.Party +import net.corda.core.identity.PartyAndCertificate import net.corda.core.serialization.deserialize import net.corda.core.serialization.serialize import net.corda.nodeapi.internal.crypto.X509KeyStore diff --git a/core/src/test/kotlin/net/corda/core/identity/PartyTest.kt b/core-tests/src/test/kotlin/net/corda/coretests/indentity/PartyTest.kt similarity index 82% rename from core/src/test/kotlin/net/corda/core/identity/PartyTest.kt rename to core-tests/src/test/kotlin/net/corda/coretests/indentity/PartyTest.kt index 84d33b9e3c..73a1652535 100644 --- a/core/src/test/kotlin/net/corda/core/identity/PartyTest.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/indentity/PartyTest.kt @@ -1,6 +1,9 @@ -package net.corda.core.identity +package net.corda.coretests.indentity import net.corda.core.crypto.entropyToKeyPair +import net.corda.core.identity.AbstractParty +import net.corda.core.identity.AnonymousParty +import net.corda.core.identity.Party import net.corda.testing.core.ALICE_NAME import org.junit.Test import java.math.BigInteger diff --git a/core/src/test/kotlin/net/corda/core/internal/CertRoleTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/internal/CertRoleTests.kt similarity index 98% rename from core/src/test/kotlin/net/corda/core/internal/CertRoleTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/internal/CertRoleTests.kt index 49653648de..d2e9873913 100644 --- a/core/src/test/kotlin/net/corda/core/internal/CertRoleTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/internal/CertRoleTests.kt @@ -1,6 +1,7 @@ -package net.corda.core.internal +package net.corda.coretests.internal import net.corda.core.crypto.Crypto +import net.corda.core.internal.CertRole import net.corda.nodeapi.internal.crypto.CertificateType import net.corda.nodeapi.internal.crypto.X509Utilities import org.bouncycastle.asn1.ASN1Integer diff --git a/core/src/test/kotlin/net/corda/core/internal/NetworkParametersResolutionTest.kt b/core-tests/src/test/kotlin/net/corda/coretests/internal/NetworkParametersResolutionTest.kt similarity index 98% rename from core/src/test/kotlin/net/corda/core/internal/NetworkParametersResolutionTest.kt rename to core-tests/src/test/kotlin/net/corda/coretests/internal/NetworkParametersResolutionTest.kt index 9ba69574bf..be15f8c450 100644 --- a/core/src/test/kotlin/net/corda/core/internal/NetworkParametersResolutionTest.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/internal/NetworkParametersResolutionTest.kt @@ -1,4 +1,4 @@ -package net.corda.core.internal +package net.corda.coretests.internal import net.corda.core.contracts.TransactionVerificationException import net.corda.core.crypto.Crypto @@ -6,6 +6,8 @@ import net.corda.core.crypto.SignableData import net.corda.core.crypto.SignatureMetadata import net.corda.core.identity.CordaX500Name import net.corda.core.identity.Party +import net.corda.core.internal.NetworkParametersStorage +import net.corda.core.internal.createComponentGroups import net.corda.core.node.NetworkParameters import net.corda.core.node.NotaryInfo import net.corda.core.node.ServiceHub diff --git a/core/src/test/kotlin/net/corda/core/internal/ResolveTransactionsFlowTest.kt b/core-tests/src/test/kotlin/net/corda/coretests/internal/ResolveTransactionsFlowTest.kt similarity index 97% rename from core/src/test/kotlin/net/corda/core/internal/ResolveTransactionsFlowTest.kt rename to core-tests/src/test/kotlin/net/corda/coretests/internal/ResolveTransactionsFlowTest.kt index 5319c332e9..48f5798983 100644 --- a/core/src/test/kotlin/net/corda/core/internal/ResolveTransactionsFlowTest.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/internal/ResolveTransactionsFlowTest.kt @@ -1,15 +1,19 @@ -package net.corda.core.internal +package net.corda.coretests.internal import co.paralleluniverse.fibers.Suspendable import net.corda.core.crypto.SecureHash import net.corda.core.flows.* import net.corda.core.identity.CordaX500Name import net.corda.core.identity.Party +import net.corda.core.internal.FetchDataFlow +import net.corda.core.internal.ResolveTransactionsFlow +import net.corda.core.internal.TESTDSL_UPLOADER import net.corda.core.transactions.SignedTransaction import net.corda.core.utilities.NonEmptySet import net.corda.core.utilities.getOrThrow import net.corda.core.utilities.sequence import net.corda.core.utilities.unwrap +import net.corda.coretests.flows.TestNoSecurityDataVendingFlow import net.corda.testing.contracts.DummyContract import net.corda.testing.core.singleIdentity import net.corda.testing.node.MockNetwork diff --git a/core/src/test/kotlin/net/corda/core/internal/TopologicalSortTest.kt b/core-tests/src/test/kotlin/net/corda/coretests/internal/TopologicalSortTest.kt similarity index 98% rename from core/src/test/kotlin/net/corda/core/internal/TopologicalSortTest.kt rename to core-tests/src/test/kotlin/net/corda/coretests/internal/TopologicalSortTest.kt index 556070f2c6..bb335449fa 100644 --- a/core/src/test/kotlin/net/corda/core/internal/TopologicalSortTest.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/internal/TopologicalSortTest.kt @@ -1,4 +1,4 @@ -package net.corda.core.internal +package net.corda.coretests.internal import net.corda.client.mock.Generator import net.corda.core.contracts.* @@ -8,6 +8,7 @@ import net.corda.core.crypto.TransactionSignature import net.corda.core.crypto.sign import net.corda.core.identity.AbstractParty import net.corda.core.identity.Party +import net.corda.core.internal.topologicalSort import net.corda.core.serialization.serialize import net.corda.core.transactions.CoreTransaction import net.corda.core.transactions.SignedTransaction diff --git a/core/src/test/kotlin/net/corda/core/node/NetworkParametersTest.kt b/core-tests/src/test/kotlin/net/corda/coretests/node/NetworkParametersTest.kt similarity index 98% rename from core/src/test/kotlin/net/corda/core/node/NetworkParametersTest.kt rename to core-tests/src/test/kotlin/net/corda/coretests/node/NetworkParametersTest.kt index 939763db56..b74749d157 100644 --- a/core/src/test/kotlin/net/corda/core/node/NetworkParametersTest.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/node/NetworkParametersTest.kt @@ -1,9 +1,11 @@ -package net.corda.core.node +package net.corda.coretests.node import com.nhaarman.mockito_kotlin.doReturn import com.nhaarman.mockito_kotlin.whenever import net.corda.core.crypto.generateKeyPair import net.corda.core.internal.getPackageOwnerOf +import net.corda.core.node.NetworkParameters +import net.corda.core.node.NotaryInfo import net.corda.core.node.services.AttachmentId import net.corda.core.utilities.OpaqueBytes import net.corda.core.utilities.days diff --git a/core/src/test/kotlin/net/corda/core/node/NodeInfoTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/node/NodeInfoTests.kt similarity index 95% rename from core/src/test/kotlin/net/corda/core/node/NodeInfoTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/node/NodeInfoTests.kt index b79744466c..fd4c3a66d0 100644 --- a/core/src/test/kotlin/net/corda/core/node/NodeInfoTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/node/NodeInfoTests.kt @@ -1,5 +1,6 @@ -package net.corda.core.node +package net.corda.coretests.node +import net.corda.core.node.NodeInfo import net.corda.core.utilities.NetworkHostAndPort import net.corda.testing.core.TestIdentity import net.corda.testing.core.getTestPartyAndCertificate diff --git a/core/src/test/kotlin/net/corda/core/node/VaultUpdateTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/node/VaultUpdateTests.kt similarity index 97% rename from core/src/test/kotlin/net/corda/core/node/VaultUpdateTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/node/VaultUpdateTests.kt index d56bdfef57..ed0108c48a 100644 --- a/core/src/test/kotlin/net/corda/core/node/VaultUpdateTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/node/VaultUpdateTests.kt @@ -1,4 +1,4 @@ -package net.corda.core.node +package net.corda.coretests.node import net.corda.core.contracts.* import net.corda.core.crypto.SecureHash @@ -14,7 +14,7 @@ import kotlin.test.assertFailsWith class VaultUpdateTests { private companion object { - const val DUMMY_PROGRAM_ID = "net.corda.core.node.VaultUpdateTests\$DummyContract" + const val DUMMY_PROGRAM_ID = "net.corda.coretests.node.VaultUpdateTests\$DummyContract" val DUMMY_NOTARY = TestIdentity(DUMMY_NOTARY_NAME, 20).party val emptyUpdate = Vault.Update(emptySet(), emptySet(), type = Vault.UpdateType.GENERAL, references = emptySet()) } diff --git a/core/src/test/kotlin/net/corda/core/schemas/MappedSchemasCrossReferenceDetectionTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/schemas/MappedSchemasCrossReferenceDetectionTests.kt similarity index 89% rename from core/src/test/kotlin/net/corda/core/schemas/MappedSchemasCrossReferenceDetectionTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/schemas/MappedSchemasCrossReferenceDetectionTests.kt index e194d8c3dd..1d6b0ef145 100644 --- a/core/src/test/kotlin/net/corda/core/schemas/MappedSchemasCrossReferenceDetectionTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/schemas/MappedSchemasCrossReferenceDetectionTests.kt @@ -1,7 +1,9 @@ -package net.corda.core.schemas +package net.corda.coretests.schemas +import net.corda.core.schemas.MappedSchema import net.corda.core.schemas.MappedSchemaValidator.fieldsFromOtherMappedSchema import net.corda.core.schemas.MappedSchemaValidator.methodsFromOtherMappedSchema +import net.corda.core.schemas.PersistentState import net.corda.finance.schemas.CashSchema import org.assertj.core.api.Assertions.assertThat import org.junit.Test @@ -9,7 +11,7 @@ import javax.persistence.* class MappedSchemasCrossReferenceDetectionTests { - object GoodSchema : MappedSchema(schemaFamily = CashSchema.javaClass, version = 1, mappedTypes = listOf(State::class.java)) { + object GoodSchema : MappedSchema(schemaFamily = CashSchema.javaClass, version = 1, mappedTypes = listOf(GoodSchema.State::class.java)) { @Entity class State( @Column @@ -17,7 +19,7 @@ class MappedSchemasCrossReferenceDetectionTests { ) : PersistentState() } - object BadSchema : MappedSchema(schemaFamily = CashSchema.javaClass, version = 1, mappedTypes = listOf(State::class.java)) { + object BadSchema : MappedSchema(schemaFamily = CashSchema.javaClass, version = 1, mappedTypes = listOf(BadSchema.State::class.java)) { @Entity class State( @Column @@ -30,7 +32,7 @@ class MappedSchemasCrossReferenceDetectionTests { ) : PersistentState() } - object TrickySchema : MappedSchema(schemaFamily = CashSchema.javaClass, version = 1, mappedTypes = listOf(State::class.java)) { + object TrickySchema : MappedSchema(schemaFamily = CashSchema.javaClass, version = 1, mappedTypes = listOf(TrickySchema.State::class.java)) { @Entity class State( @Column @@ -41,7 +43,7 @@ class MappedSchemasCrossReferenceDetectionTests { ) : PersistentState() } - object PoliteSchema : MappedSchema(schemaFamily = CashSchema.javaClass, version = 1, mappedTypes = listOf(State::class.java)) { + object PoliteSchema : MappedSchema(schemaFamily = CashSchema.javaClass, version = 1, mappedTypes = listOf(PoliteSchema.State::class.java)) { @Entity class State( @Column diff --git a/core/src/test/kotlin/net/corda/core/serialization/AttachmentSerializationTest.kt b/core-tests/src/test/kotlin/net/corda/coretests/serialization/AttachmentSerializationTest.kt similarity index 98% rename from core/src/test/kotlin/net/corda/core/serialization/AttachmentSerializationTest.kt rename to core-tests/src/test/kotlin/net/corda/coretests/serialization/AttachmentSerializationTest.kt index 72619fb2de..d4f43f2156 100644 --- a/core/src/test/kotlin/net/corda/core/serialization/AttachmentSerializationTest.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/serialization/AttachmentSerializationTest.kt @@ -1,4 +1,4 @@ -package net.corda.core.serialization +package net.corda.coretests.serialization import co.paralleluniverse.fibers.Suspendable import net.corda.core.contracts.Attachment @@ -9,11 +9,13 @@ import net.corda.core.internal.FetchAttachmentsFlow import net.corda.core.internal.FetchDataFlow import net.corda.core.utilities.getOrThrow import net.corda.core.utilities.unwrap +import net.corda.coretests.flows.TestNoSecurityDataVendingFlow import net.corda.node.services.persistence.NodeAttachmentService import net.corda.nodeapi.internal.persistence.currentDBSession import net.corda.testing.core.ALICE_NAME import net.corda.testing.core.BOB_NAME import net.corda.testing.core.singleIdentity +import net.corda.testing.flows.registerCordappFlowFactory import net.corda.testing.node.internal.InternalMockNetwork import net.corda.testing.node.internal.InternalMockNodeParameters import net.corda.testing.node.internal.TestStartedNode diff --git a/core/src/test/kotlin/net/corda/core/serialization/CommandsSerializationTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/serialization/CommandsSerializationTests.kt similarity index 81% rename from core/src/test/kotlin/net/corda/core/serialization/CommandsSerializationTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/serialization/CommandsSerializationTests.kt index 64c30bdf8c..7b236e14ca 100644 --- a/core/src/test/kotlin/net/corda/core/serialization/CommandsSerializationTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/serialization/CommandsSerializationTests.kt @@ -1,5 +1,7 @@ -package net.corda.core.serialization +package net.corda.coretests.serialization +import net.corda.core.serialization.deserialize +import net.corda.core.serialization.serialize import net.corda.finance.contracts.CommercialPaper import net.corda.finance.contracts.asset.Cash import net.corda.testing.core.SerializationEnvironmentRule diff --git a/core/src/test/kotlin/net/corda/core/serialization/NotaryExceptionSerializationTest.kt b/core-tests/src/test/kotlin/net/corda/coretests/serialization/NotaryExceptionSerializationTest.kt similarity index 89% rename from core/src/test/kotlin/net/corda/core/serialization/NotaryExceptionSerializationTest.kt rename to core-tests/src/test/kotlin/net/corda/coretests/serialization/NotaryExceptionSerializationTest.kt index c0a9a642f6..5bb7317ca1 100644 --- a/core/src/test/kotlin/net/corda/core/serialization/NotaryExceptionSerializationTest.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/serialization/NotaryExceptionSerializationTest.kt @@ -1,4 +1,4 @@ -package net.corda.core.serialization +package net.corda.coretests.serialization import net.corda.core.contracts.StateRef import net.corda.core.crypto.SecureHash @@ -6,6 +6,8 @@ import net.corda.core.crypto.sha256 import net.corda.core.flows.NotaryError import net.corda.core.flows.NotaryException import net.corda.core.flows.StateConsumptionDetails +import net.corda.core.serialization.deserialize +import net.corda.core.serialization.serialize import net.corda.testing.core.SerializationEnvironmentRule import org.junit.Rule import org.junit.Test diff --git a/core/src/test/kotlin/net/corda/core/serialization/TransactionSerializationTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/serialization/TransactionSerializationTests.kt similarity index 92% rename from core/src/test/kotlin/net/corda/core/serialization/TransactionSerializationTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/serialization/TransactionSerializationTests.kt index 1b5ea3dc37..27caa404ab 100644 --- a/core/src/test/kotlin/net/corda/core/serialization/TransactionSerializationTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/serialization/TransactionSerializationTests.kt @@ -1,4 +1,4 @@ -package net.corda.core.serialization +package net.corda.coretests.serialization import com.nhaarman.mockito_kotlin.mock import net.corda.core.contracts.* @@ -6,6 +6,8 @@ import net.corda.core.crypto.* import net.corda.core.identity.AbstractParty import net.corda.core.identity.CordaX500Name import net.corda.core.node.NotaryInfo +import net.corda.core.serialization.deserialize +import net.corda.core.serialization.serialize import net.corda.core.transactions.* import net.corda.core.utilities.seconds import net.corda.finance.POUNDS @@ -39,7 +41,7 @@ class TransactionSerializationTests { @Rule @JvmField val testSerialization = SerializationEnvironmentRule() - private val TEST_CASH_PROGRAM_ID = "net.corda.core.serialization.TransactionSerializationTests\$TestCash" + private val TEST_CASH_PROGRAM_ID = "net.corda.coretests.serialization.TransactionSerializationTests\$TestCash" class TestCash : Contract { override fun verify(tx: LedgerTransaction) { @@ -70,11 +72,11 @@ class TransactionSerializationTests { val outputState = TransactionState(TestCash.State(depositRef, 600.POUNDS, MEGA_CORP), TEST_CASH_PROGRAM_ID, DUMMY_NOTARY) val changeState = TransactionState(TestCash.State(depositRef, 400.POUNDS, MEGA_CORP), TEST_CASH_PROGRAM_ID, DUMMY_NOTARY) - val megaCorpServices = object : MockServices(listOf("net.corda.core.serialization"), MEGA_CORP.name, mock(), testNetworkParameters(notaries = listOf(NotaryInfo(DUMMY_NOTARY, true))), MEGA_CORP_KEY) { + val megaCorpServices = object : MockServices(listOf("net.corda.coretests.serialization"), MEGA_CORP.name, mock(), testNetworkParameters(notaries = listOf(NotaryInfo(DUMMY_NOTARY, true))), MEGA_CORP_KEY) { //override mock implementation with a real one override fun loadContractAttachment(stateRef: StateRef): Attachment = servicesForResolution.loadContractAttachment(stateRef) } - val notaryServices = MockServices(listOf("net.corda.core.serialization"), DUMMY_NOTARY.name, rigorousMock(), DUMMY_NOTARY_KEY) + val notaryServices = MockServices(listOf("net.corda.coretests.serialization"), DUMMY_NOTARY.name, rigorousMock(), DUMMY_NOTARY_KEY) lateinit var tx: TransactionBuilder @Before diff --git a/core/src/test/kotlin/net/corda/core/transactions/AttachmentsClassLoaderSerializationTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/transactions/AttachmentsClassLoaderSerializationTests.kt similarity index 99% rename from core/src/test/kotlin/net/corda/core/transactions/AttachmentsClassLoaderSerializationTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/transactions/AttachmentsClassLoaderSerializationTests.kt index 007463d280..fc98d7a04d 100644 --- a/core/src/test/kotlin/net/corda/core/transactions/AttachmentsClassLoaderSerializationTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/transactions/AttachmentsClassLoaderSerializationTests.kt @@ -1,4 +1,4 @@ -package net.corda.core.transactions +package net.corda.coretests.transactions import net.corda.core.contracts.Contract import net.corda.core.crypto.SecureHash diff --git a/core/src/test/kotlin/net/corda/core/transactions/AttachmentsClassLoaderTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/transactions/AttachmentsClassLoaderTests.kt similarity index 99% rename from core/src/test/kotlin/net/corda/core/transactions/AttachmentsClassLoaderTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/transactions/AttachmentsClassLoaderTests.kt index 6f1924b2e3..2b8666a0ea 100644 --- a/core/src/test/kotlin/net/corda/core/transactions/AttachmentsClassLoaderTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/transactions/AttachmentsClassLoaderTests.kt @@ -1,4 +1,4 @@ -package net.corda.core.transactions +package net.corda.coretests.transactions import net.corda.core.contracts.Attachment import net.corda.core.contracts.Contract diff --git a/core/src/test/kotlin/net/corda/core/transactions/CompatibleTransactionTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/transactions/CompatibleTransactionTests.kt similarity index 92% rename from core/src/test/kotlin/net/corda/core/transactions/CompatibleTransactionTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/transactions/CompatibleTransactionTests.kt index 579e23d57b..4a26b8d4cc 100644 --- a/core/src/test/kotlin/net/corda/core/transactions/CompatibleTransactionTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/transactions/CompatibleTransactionTests.kt @@ -1,12 +1,15 @@ -package net.corda.core.transactions +package net.corda.coretests.transactions import net.corda.core.contracts.* import net.corda.core.contracts.ComponentGroupEnum.* import net.corda.core.crypto.* import net.corda.core.internal.createComponentGroups +import net.corda.core.internal.accessAvailableComponentHashes +import net.corda.core.internal.accessGroupHashes +import net.corda.core.internal.accessGroupMerkleRoots import net.corda.core.serialization.serialize +import net.corda.core.transactions.* import net.corda.core.utilities.OpaqueBytes -import net.corda.testing.common.internal.testNetworkParameters import net.corda.testing.contracts.DummyContract import net.corda.testing.contracts.DummyState import net.corda.testing.core.* @@ -14,6 +17,7 @@ import org.junit.Rule import org.junit.Test import java.time.Instant import java.util.function.Predicate +import kotlin.reflect.KVisibility import kotlin.test.* class CompatibleTransactionTests { @@ -77,7 +81,7 @@ class CompatibleTransactionTests { assertNotEquals(wireTransactionA, wireTransactionOtherPrivacySalt) // Full Merkle root is computed from the list of Merkle roots of each component group. - assertEquals(wireTransactionA.merkleTree.hash, MerkleTree.getMerkleTree(wireTransactionA.groupHashes).hash) + assertEquals(wireTransactionA.merkleTree.hash, MerkleTree.getMerkleTree(wireTransactionA.accessGroupHashes()).hash) // Trying to add an empty component group (not allowed), e.g. the empty attachmentGroup. val componentGroupsEmptyAttachment = listOf( @@ -107,12 +111,12 @@ class CompatibleTransactionTests { assertNotEquals(wireTransaction1ShuffledInputs, wireTransactionA) // Inputs group Merkle roots are not equal. - assertNotEquals(wireTransactionA.groupsMerkleRoots[INPUTS_GROUP.ordinal], wireTransaction1ShuffledInputs.groupsMerkleRoots[INPUTS_GROUP.ordinal]) + assertNotEquals(wireTransactionA.accessGroupMerkleRoots()[INPUTS_GROUP.ordinal], wireTransaction1ShuffledInputs.accessGroupMerkleRoots()[INPUTS_GROUP.ordinal]) // But outputs group Merkle leaf (and the rest) remained the same. - assertEquals(wireTransactionA.groupsMerkleRoots[OUTPUTS_GROUP.ordinal], wireTransaction1ShuffledInputs.groupsMerkleRoots[OUTPUTS_GROUP.ordinal]) - assertEquals(wireTransactionA.groupsMerkleRoots[NOTARY_GROUP.ordinal], wireTransaction1ShuffledInputs.groupsMerkleRoots[NOTARY_GROUP.ordinal]) - assertNull(wireTransactionA.groupsMerkleRoots[ATTACHMENTS_GROUP.ordinal]) - assertNull(wireTransaction1ShuffledInputs.groupsMerkleRoots[ATTACHMENTS_GROUP.ordinal]) + assertEquals(wireTransactionA.accessGroupMerkleRoots()[OUTPUTS_GROUP.ordinal], wireTransaction1ShuffledInputs.accessGroupMerkleRoots()[OUTPUTS_GROUP.ordinal]) + assertEquals(wireTransactionA.accessGroupMerkleRoots()[NOTARY_GROUP.ordinal], wireTransaction1ShuffledInputs.accessGroupMerkleRoots()[NOTARY_GROUP.ordinal]) + assertNull(wireTransactionA.accessGroupMerkleRoots()[ATTACHMENTS_GROUP.ordinal]) + assertNull(wireTransaction1ShuffledInputs.accessGroupMerkleRoots()[ATTACHMENTS_GROUP.ordinal]) // Group leaves (components) ordering does not affect the id. In this case, we added outputs group before inputs. val shuffledComponentGroupsA = listOf( @@ -414,7 +418,8 @@ class CompatibleTransactionTests { @Test fun `FilteredTransaction signer manipulation tests`() { // Required to call the private constructor. - val ftxConstructor = ::FilteredTransaction + val ftxConstructor = FilteredTransaction::class.constructors.first() + // 1st and 3rd commands require a signature from KEY_1. val twoCommandsforKey1 = listOf(dummyCommand(DUMMY_KEY_1.public, DUMMY_KEY_2.public), dummyCommand(DUMMY_KEY_2.public), dummyCommand(DUMMY_KEY_1.public)) @@ -448,7 +453,7 @@ class CompatibleTransactionTests { val key2CommandsFtx = wtx.buildFilteredTransaction(Predicate(::filterKEY2Commands)) // val commandDataComponents = key1CommandsFtx.filteredComponentGroups[0].components - val commandDataHashes = wtx.availableComponentHashes[ComponentGroupEnum.COMMANDS_GROUP.ordinal]!! + val commandDataHashes = wtx.accessAvailableComponentHashes()[ComponentGroupEnum.COMMANDS_GROUP.ordinal]!! val noLastCommandDataPMT = PartialMerkleTree.build( MerkleTree.getMerkleTree(commandDataHashes), commandDataHashes.subList(0, 1) @@ -456,14 +461,14 @@ class CompatibleTransactionTests { val noLastCommandDataComponents = key1CommandsFtx.filteredComponentGroups[0].components.subList(0, 1) val noLastCommandDataNonces = key1CommandsFtx.filteredComponentGroups[0].nonces.subList(0, 1) val noLastCommandDataGroup = FilteredComponentGroup( - ComponentGroupEnum.COMMANDS_GROUP.ordinal, + COMMANDS_GROUP.ordinal, noLastCommandDataComponents, noLastCommandDataNonces, noLastCommandDataPMT ) val signerComponents = key1CommandsFtx.filteredComponentGroups[1].components - val signerHashes = wtx.availableComponentHashes[ComponentGroupEnum.SIGNERS_GROUP.ordinal]!! + val signerHashes = wtx.accessAvailableComponentHashes()[ComponentGroupEnum.SIGNERS_GROUP.ordinal]!! val noLastSignerPMT = PartialMerkleTree.build( MerkleTree.getMerkleTree(signerHashes), signerHashes.subList(0, 2) @@ -471,13 +476,13 @@ class CompatibleTransactionTests { val noLastSignerComponents = key1CommandsFtx.filteredComponentGroups[1].components.subList(0, 2) val noLastSignerNonces = key1CommandsFtx.filteredComponentGroups[1].nonces.subList(0, 2) val noLastSignerGroup = FilteredComponentGroup( - ComponentGroupEnum.SIGNERS_GROUP.ordinal, + SIGNERS_GROUP.ordinal, noLastSignerComponents, noLastSignerNonces, noLastSignerPMT ) val noLastSignerGroupSamePartialTree = FilteredComponentGroup( - ComponentGroupEnum.SIGNERS_GROUP.ordinal, + SIGNERS_GROUP.ordinal, noLastSignerComponents, noLastSignerNonces, key1CommandsFtx.filteredComponentGroups[1].partialMerkleTree) // We don't update that, so we can catch the index mismatch. @@ -493,12 +498,12 @@ class CompatibleTransactionTests { // A command with no corresponding signer detected // because the pointer of CommandData (3rd leaf) cannot find a corresponding (3rd) signer. val updatedFilteredComponentsNoSignersKey1SamePMT = listOf(key1CommandsFtx.filteredComponentGroups[0], noLastSignerGroupSamePartialTree) - assertFails { ftxConstructor.invoke(key1CommandsFtx.id, updatedFilteredComponentsNoSignersKey1SamePMT, key1CommandsFtx.groupHashes) } + assertFails { ftxConstructor.call(key1CommandsFtx.id, updatedFilteredComponentsNoSignersKey1SamePMT, key1CommandsFtx.groupHashes) } // Remove both last signer (KEY1) and related command. // Update partial Merkle tree for signers. val updatedFilteredComponentsNoLastCommandAndSigners = listOf(noLastCommandDataGroup, noLastSignerGroup) - val ftxNoLastCommandAndSigners = ftxConstructor.invoke(key1CommandsFtx.id, updatedFilteredComponentsNoLastCommandAndSigners, key1CommandsFtx.groupHashes) + val ftxNoLastCommandAndSigners = ftxConstructor.call(key1CommandsFtx.id, updatedFilteredComponentsNoLastCommandAndSigners, key1CommandsFtx.groupHashes) // verify() will pass as the transaction is well-formed. ftxNoLastCommandAndSigners.verify() // checkCommandVisibility() will not pass, because checkAllComponentsVisible(ComponentGroupEnum.SIGNERS_GROUP) will fail. @@ -507,7 +512,7 @@ class CompatibleTransactionTests { // Remove last signer for which there is no pointer from a visible commandData. This is the case of Key2. // Do not change partial Merkle tree for signers. // This time the object can be constructed as there is no pointer mismatch. - val ftxNoLastSigner = ftxConstructor.invoke(key2CommandsFtx.id, updatedFilteredComponentsNoSignersKey2SamePMT, key2CommandsFtx.groupHashes) + val ftxNoLastSigner = ftxConstructor.call(key2CommandsFtx.id, updatedFilteredComponentsNoSignersKey2SamePMT, key2CommandsFtx.groupHashes) // verify() will fail as we didn't change the partial Merkle tree. assertFailsWith { ftxNoLastSigner.verify() } // checkCommandVisibility() will not pass. @@ -515,7 +520,7 @@ class CompatibleTransactionTests { // Remove last signer for which there is no pointer from a visible commandData. This is the case of Key2. // Update partial Merkle tree for signers. - val ftxNoLastSignerB = ftxConstructor.invoke(key2CommandsFtx.id, updatedFilteredComponentsNoSignersKey2, key2CommandsFtx.groupHashes) + val ftxNoLastSignerB = ftxConstructor.call(key2CommandsFtx.id, updatedFilteredComponentsNoSignersKey2, key2CommandsFtx.groupHashes) // verify() will pass, the transaction is well-formed. ftxNoLastSignerB.verify() // But, checkAllComponentsVisible() will not pass. @@ -524,7 +529,7 @@ class CompatibleTransactionTests { // Modify last signer (we have a pointer from commandData). // Update partial Merkle tree for signers. val alterSignerComponents = signerComponents.subList(0, 2) + signerComponents[1] // Third one is removed and the 2nd command is added twice. - val alterSignersHashes = wtx.availableComponentHashes[ComponentGroupEnum.SIGNERS_GROUP.ordinal]!!.subList(0, 2) + componentHash(key1CommandsFtx.filteredComponentGroups[1].nonces[2], alterSignerComponents[2]) + val alterSignersHashes = wtx.accessAvailableComponentHashes()[ComponentGroupEnum.SIGNERS_GROUP.ordinal]!!.subList(0, 2) + componentHash(key1CommandsFtx.filteredComponentGroups[1].nonces[2], alterSignerComponents[2]) val alterMTree = MerkleTree.getMerkleTree(alterSignersHashes) val alterSignerPMTK = PartialMerkleTree.build( alterMTree, @@ -532,7 +537,7 @@ class CompatibleTransactionTests { ) val alterSignerGroup = FilteredComponentGroup( - ComponentGroupEnum.SIGNERS_GROUP.ordinal, + SIGNERS_GROUP.ordinal, alterSignerComponents, key1CommandsFtx.filteredComponentGroups[1].nonces, alterSignerPMTK @@ -540,14 +545,14 @@ class CompatibleTransactionTests { val alterFilteredComponents = listOf(key1CommandsFtx.filteredComponentGroups[0], alterSignerGroup) // Do not update groupHashes. - val ftxAlterSigner = ftxConstructor.invoke(key1CommandsFtx.id, alterFilteredComponents, key1CommandsFtx.groupHashes) + val ftxAlterSigner = ftxConstructor.call(key1CommandsFtx.id, alterFilteredComponents, key1CommandsFtx.groupHashes) // Visible components in signers group cannot be verified against their partial Merkle tree. assertFailsWith { ftxAlterSigner.verify() } // Also, checkAllComponentsVisible() will not pass (groupHash matching will fail). assertFailsWith { ftxAlterSigner.checkCommandVisibility(DUMMY_KEY_1.public) } // Update groupHashes. - val ftxAlterSignerB = ftxConstructor.invoke(key1CommandsFtx.id, alterFilteredComponents, key1CommandsFtx.groupHashes.subList(0, 6) + alterMTree.hash) + val ftxAlterSignerB = ftxConstructor.call(key1CommandsFtx.id, alterFilteredComponents, key1CommandsFtx.groupHashes.subList(0, 6) + alterMTree.hash) // Visible components in signers group cannot be verified against their partial Merkle tree. assertFailsWith { ftxAlterSignerB.verify() } // Also, checkAllComponentsVisible() will not pass (top level Merkle tree cannot be verified against transaction's id). diff --git a/core/src/test/kotlin/net/corda/core/transactions/LedgerTransactionQueryTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/transactions/LedgerTransactionQueryTests.kt similarity index 98% rename from core/src/test/kotlin/net/corda/core/transactions/LedgerTransactionQueryTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/transactions/LedgerTransactionQueryTests.kt index d9bf2ae115..44e315872b 100644 --- a/core/src/test/kotlin/net/corda/core/transactions/LedgerTransactionQueryTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/transactions/LedgerTransactionQueryTests.kt @@ -1,4 +1,4 @@ -package net.corda.core.transactions +package net.corda.coretests.transactions import com.nhaarman.mockito_kotlin.doReturn import com.nhaarman.mockito_kotlin.mock @@ -9,11 +9,12 @@ import net.corda.core.identity.AbstractParty import net.corda.core.identity.CordaX500Name import net.corda.core.identity.Party import net.corda.core.node.NotaryInfo +import net.corda.core.transactions.LedgerTransaction +import net.corda.core.transactions.TransactionBuilder import net.corda.node.services.api.IdentityServiceInternal import net.corda.testing.common.internal.testNetworkParameters import net.corda.testing.contracts.DummyContract import net.corda.testing.core.* -import net.corda.testing.internal.rigorousMock import net.corda.testing.node.MockServices import org.junit.Before import org.junit.Rule diff --git a/core/src/test/kotlin/net/corda/core/transactions/ReferenceInputStateTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/transactions/ReferenceInputStateTests.kt similarity index 94% rename from core/src/test/kotlin/net/corda/core/transactions/ReferenceInputStateTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/transactions/ReferenceInputStateTests.kt index d93cacdb66..a13f3fb172 100644 --- a/core/src/test/kotlin/net/corda/core/transactions/ReferenceInputStateTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/transactions/ReferenceInputStateTests.kt @@ -1,4 +1,4 @@ -package net.corda.core.transactions +package net.corda.coretests.transactions import com.nhaarman.mockito_kotlin.doReturn import com.nhaarman.mockito_kotlin.mock @@ -10,6 +10,8 @@ import net.corda.core.identity.AbstractParty import net.corda.core.identity.CordaX500Name import net.corda.core.identity.Party import net.corda.core.node.NotaryInfo +import net.corda.core.transactions.LedgerTransaction +import net.corda.core.transactions.TransactionBuilder import net.corda.finance.DOLLARS import net.corda.finance.`issued by` import net.corda.finance.contracts.asset.Cash @@ -18,16 +20,13 @@ import net.corda.testing.common.internal.testNetworkParameters import net.corda.testing.core.DUMMY_NOTARY_NAME import net.corda.testing.core.SerializationEnvironmentRule import net.corda.testing.core.TestIdentity -import net.corda.testing.internal.rigorousMock import net.corda.testing.node.MockServices import net.corda.testing.node.ledger -import org.assertj.core.api.Assertions import org.assertj.core.api.Assertions.* import org.junit.Rule import org.junit.Test -import kotlin.test.assertFailsWith -const val CONTRACT_ID = "net.corda.core.transactions.ReferenceStateTests\$ExampleContract" +const val CONTRACT_ID = "net.corda.coretests.transactions.ReferenceStateTests\$ExampleContract" class ReferenceStateTests { private companion object { @@ -47,7 +46,7 @@ class ReferenceStateTests { val defaultIssuer = ISSUER.ref(1) val bobCash = Cash.State(amount = 1000.DOLLARS `issued by` defaultIssuer, owner = BOB_PARTY) private val ledgerServices = MockServices( - cordappPackages = listOf("net.corda.core.transactions", "net.corda.finance.contracts.asset"), + cordappPackages = listOf("net.corda.coretests.transactions", "net.corda.finance.contracts.asset"), initialIdentity = ALICE, identityService = mock().also { doReturn(ALICE_PARTY).whenever(it).partyFromKey(ALICE_PUBKEY) @@ -203,7 +202,8 @@ class ReferenceStateTests { val state = ExampleState(ALICE_PARTY, "HELLO CORDA") val stateAndRef = StateAndRef(TransactionState(state, CONTRACT_ID, DUMMY_NOTARY, constraint = AlwaysAcceptAttachmentConstraint), StateRef(SecureHash.zeroHash, 0)) assertThatIllegalArgumentException().isThrownBy { - TransactionBuilder(notary = DUMMY_NOTARY).addInputState(stateAndRef).addReferenceState(stateAndRef.referenced()) + TransactionBuilder(notary = DUMMY_NOTARY) + .addInputState(stateAndRef).addReferenceState(stateAndRef.referenced()) }.withMessage("A StateRef cannot be both an input and a reference input in the same transaction.") } } \ No newline at end of file diff --git a/core/src/test/kotlin/net/corda/core/transactions/TransactionBuilderTest.kt b/core-tests/src/test/kotlin/net/corda/coretests/transactions/TransactionBuilderTest.kt similarity index 98% rename from core/src/test/kotlin/net/corda/core/transactions/TransactionBuilderTest.kt rename to core-tests/src/test/kotlin/net/corda/coretests/transactions/TransactionBuilderTest.kt index abadaedeb7..8239db61a5 100644 --- a/core/src/test/kotlin/net/corda/core/transactions/TransactionBuilderTest.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/transactions/TransactionBuilderTest.kt @@ -1,4 +1,4 @@ -package net.corda.core.transactions +package net.corda.coretests.transactions import com.nhaarman.mockito_kotlin.doReturn import com.nhaarman.mockito_kotlin.mock @@ -15,6 +15,7 @@ import net.corda.core.node.ZoneVersionTooLowException import net.corda.core.node.services.AttachmentStorage import net.corda.core.node.services.NetworkParametersService import net.corda.core.serialization.serialize +import net.corda.core.transactions.TransactionBuilder import net.corda.testing.common.internal.testNetworkParameters import net.corda.testing.contracts.DummyContract import net.corda.testing.contracts.DummyState diff --git a/core/src/test/kotlin/net/corda/core/transactions/TransactionEncumbranceTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/transactions/TransactionEncumbranceTests.kt similarity index 98% rename from core/src/test/kotlin/net/corda/core/transactions/TransactionEncumbranceTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/transactions/TransactionEncumbranceTests.kt index fe1747d2bb..3fb91fb95a 100644 --- a/core/src/test/kotlin/net/corda/core/transactions/TransactionEncumbranceTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/transactions/TransactionEncumbranceTests.kt @@ -1,4 +1,4 @@ -package net.corda.core.transactions +package net.corda.coretests.transactions import com.nhaarman.mockito_kotlin.doReturn import com.nhaarman.mockito_kotlin.mock @@ -7,6 +7,8 @@ import net.corda.core.contracts.* import net.corda.core.identity.AbstractParty import net.corda.core.identity.CordaX500Name import net.corda.core.node.NotaryInfo +import net.corda.core.transactions.LedgerTransaction +import net.corda.core.transactions.TransactionBuilder import net.corda.finance.DOLLARS import net.corda.finance.`issued by` import net.corda.finance.contracts.asset.Cash @@ -15,7 +17,6 @@ import net.corda.testing.common.internal.testNetworkParameters import net.corda.testing.core.DUMMY_NOTARY_NAME import net.corda.testing.core.SerializationEnvironmentRule import net.corda.testing.core.TestIdentity -import net.corda.testing.internal.rigorousMock import net.corda.testing.node.MockServices import net.corda.testing.node.ledger import org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType @@ -25,7 +26,7 @@ import java.time.Instant import java.time.temporal.ChronoUnit import kotlin.test.assertFailsWith -const val TEST_TIMELOCK_ID = "net.corda.core.transactions.TransactionEncumbranceTests\$DummyTimeLock" +const val TEST_TIMELOCK_ID = "net.corda.coretests.transactions.TransactionEncumbranceTests\$DummyTimeLock" class TransactionEncumbranceTests { @Rule diff --git a/core/src/test/kotlin/net/corda/core/transactions/TransactionTests.kt b/core-tests/src/test/kotlin/net/corda/coretests/transactions/TransactionTests.kt similarity index 96% rename from core/src/test/kotlin/net/corda/core/transactions/TransactionTests.kt rename to core-tests/src/test/kotlin/net/corda/coretests/transactions/TransactionTests.kt index 92889e2217..8dae611a06 100644 --- a/core/src/test/kotlin/net/corda/core/transactions/TransactionTests.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/transactions/TransactionTests.kt @@ -1,4 +1,4 @@ -package net.corda.core.transactions +package net.corda.coretests.transactions import com.nhaarman.mockito_kotlin.doReturn import com.nhaarman.mockito_kotlin.whenever @@ -8,7 +8,10 @@ import net.corda.core.crypto.CompositeKey import net.corda.core.identity.Party import net.corda.core.internal.AbstractAttachment import net.corda.core.internal.TESTDSL_UPLOADER +import net.corda.core.internal.createLedgerTransaction import net.corda.core.node.NotaryInfo +import net.corda.core.transactions.SignedTransaction +import net.corda.core.transactions.WireTransaction import net.corda.testing.common.internal.testNetworkParameters import net.corda.testing.contracts.DummyContract import net.corda.testing.core.* @@ -17,7 +20,6 @@ import net.corda.testing.internal.fakeAttachment import net.corda.testing.internal.rigorousMock import org.junit.Rule import org.junit.Test -import java.io.InputStream import java.math.BigInteger import java.security.KeyPair import java.security.PublicKey @@ -129,7 +131,7 @@ class TransactionTests { val id = SecureHash.randomSHA256() val timeWindow: TimeWindow? = null val privacySalt = PrivacySalt() - val transaction = LedgerTransaction.create( + val transaction = createLedgerTransaction( inputs, outputs, commands, @@ -182,7 +184,7 @@ class TransactionTests { val timeWindow: TimeWindow? = null val privacySalt = PrivacySalt() - fun buildTransaction() = LedgerTransaction.create( + fun buildTransaction() = createLedgerTransaction( inputs, outputs, commands, @@ -193,7 +195,7 @@ class TransactionTests { privacySalt, testNetworkParameters(notaries = listOf(NotaryInfo(DUMMY_NOTARY, true))), emptyList(), - isAttachmentTrusted = {true} + isAttachmentTrusted = { true } ) assertFailsWith { buildTransaction().verify() } diff --git a/core/src/test/kotlin/net/corda/core/utilities/KotlinUtilsTest.kt b/core-tests/src/test/kotlin/net/corda/coretests/utilities/KotlinUtilsTest.kt similarity index 97% rename from core/src/test/kotlin/net/corda/core/utilities/KotlinUtilsTest.kt rename to core-tests/src/test/kotlin/net/corda/coretests/utilities/KotlinUtilsTest.kt index debb6307f0..8f92f1d352 100644 --- a/core/src/test/kotlin/net/corda/core/utilities/KotlinUtilsTest.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/utilities/KotlinUtilsTest.kt @@ -1,10 +1,11 @@ -package net.corda.core.utilities +package net.corda.coretests.utilities import com.esotericsoftware.kryo.KryoException import net.corda.core.crypto.random63BitValue import net.corda.core.serialization.* import net.corda.core.serialization.internal.checkpointDeserialize import net.corda.core.serialization.internal.checkpointSerialize +import net.corda.core.utilities.transient import net.corda.node.serialization.kryo.KRYO_CHECKPOINT_CONTEXT import net.corda.serialization.internal.CheckpointSerializationContextImpl import net.corda.testing.core.SerializationEnvironmentRule diff --git a/core/src/test/kotlin/net/corda/core/utilities/NonEmptySetTest.kt b/core-tests/src/test/kotlin/net/corda/coretests/utilities/NonEmptySetTest.kt similarity index 96% rename from core/src/test/kotlin/net/corda/core/utilities/NonEmptySetTest.kt rename to core-tests/src/test/kotlin/net/corda/coretests/utilities/NonEmptySetTest.kt index b404ded1fc..21a14e30fd 100644 --- a/core/src/test/kotlin/net/corda/core/utilities/NonEmptySetTest.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/utilities/NonEmptySetTest.kt @@ -1,4 +1,4 @@ -package net.corda.core.utilities +package net.corda.coretests.utilities import com.google.common.collect.testing.SetTestSuiteBuilder import com.google.common.collect.testing.TestIntegerSetGenerator @@ -7,6 +7,7 @@ import com.google.common.collect.testing.features.CollectionSize import junit.framework.TestSuite import net.corda.core.serialization.deserialize import net.corda.core.serialization.serialize +import net.corda.core.utilities.NonEmptySet import net.corda.testing.core.SerializationEnvironmentRule import org.assertj.core.api.Assertions.assertThat import org.assertj.core.api.Assertions.assertThatThrownBy diff --git a/core/src/test/kotlin/net/corda/core/utilities/ProgressTrackerTest.kt b/core-tests/src/test/kotlin/net/corda/coretests/utilities/ProgressTrackerTest.kt similarity index 98% rename from core/src/test/kotlin/net/corda/core/utilities/ProgressTrackerTest.kt rename to core-tests/src/test/kotlin/net/corda/coretests/utilities/ProgressTrackerTest.kt index fa2569a3cb..e6147336f3 100644 --- a/core/src/test/kotlin/net/corda/core/utilities/ProgressTrackerTest.kt +++ b/core-tests/src/test/kotlin/net/corda/coretests/utilities/ProgressTrackerTest.kt @@ -1,9 +1,10 @@ -package net.corda.core.utilities +package net.corda.coretests.utilities import net.corda.core.serialization.internal.checkpointDeserialize import net.corda.core.serialization.internal.checkpointSerialize -import net.corda.core.utilities.ProgressTrackerTest.NonSingletonSteps.first -import net.corda.core.utilities.ProgressTrackerTest.NonSingletonSteps.first2 +import net.corda.core.utilities.ProgressTracker +import net.corda.coretests.utilities.ProgressTrackerTest.NonSingletonSteps.first +import net.corda.coretests.utilities.ProgressTrackerTest.NonSingletonSteps.first2 import net.corda.testing.core.internal.CheckpointSerializationEnvironmentRule import org.assertj.core.api.Assertions.assertThat import org.junit.Before diff --git a/core/src/test/kotlin/net/corda/isolated/contracts/DummyContractBackdoor.kt b/core-tests/src/test/kotlin/net/corda/isolated/contracts/DummyContractBackdoor.kt similarity index 100% rename from core/src/test/kotlin/net/corda/isolated/contracts/DummyContractBackdoor.kt rename to core-tests/src/test/kotlin/net/corda/isolated/contracts/DummyContractBackdoor.kt diff --git a/core/src/test/resources/isolated.jar b/core-tests/src/test/resources/isolated.jar similarity index 100% rename from core/src/test/resources/isolated.jar rename to core-tests/src/test/resources/isolated.jar diff --git a/core/src/test/resources/net/corda/core/transactions/isolated-4.0.jar b/core-tests/src/test/resources/net/corda/coretests/transactions/isolated-4.0.jar similarity index 100% rename from core/src/test/resources/net/corda/core/transactions/isolated-4.0.jar rename to core-tests/src/test/resources/net/corda/coretests/transactions/isolated-4.0.jar diff --git a/core/src/test/resources/net/corda/core/transactions/old-isolated.jar b/core-tests/src/test/resources/net/corda/coretests/transactions/old-isolated.jar similarity index 100% rename from core/src/test/resources/net/corda/core/transactions/old-isolated.jar rename to core-tests/src/test/resources/net/corda/coretests/transactions/old-isolated.jar diff --git a/core/build.gradle b/core/build.gradle index 4d2b75ab34..f4cf4a642e 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -17,42 +17,6 @@ configurations { smokeTestRuntimeOnly.extendsFrom runtimeOnly } -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' - } -} - dependencies { testImplementation "org.junit.jupiter:junit-jupiter-api:${junit_jupiter_version}" @@ -66,9 +30,6 @@ dependencies { // Guava: Google test library (collections test suite) testCompile "com.google.guava:guava-testlib:$guava_version" - // Bring in the MockNode infrastructure for writing protocol unit tests. - testCompile project(":node-driver") - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" testCompile "org.jetbrains.kotlin:kotlin-test:$kotlin_version" @@ -92,17 +53,6 @@ dependencies { // For caches rather than guava compile "com.github.ben-manes.caffeine:caffeine:$caffeine_version" - // Smoke tests do NOT have any Node code on the classpath! - smokeTestImplementation "org.junit.jupiter:junit-jupiter-api:${junit_jupiter_version}" - smokeTestImplementation "junit:junit:$junit_version" - - smokeTestRuntimeOnly "org.junit.vintage:junit-vintage-engine:${junit_vintage_version}" - smokeTestRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:${junit_jupiter_version}" - smokeTestRuntimeOnly "org.junit.platform:junit-platform-launcher:${junit_platform_version}" - - smokeTestCompile project(':smoke-test-utils') - smokeTestCompile "org.assertj:assertj-core:${assertj_version}" - // RxJava: observable streams of events. compile "io.reactivex:rxjava:$rxjava_version" @@ -122,6 +72,11 @@ dependencies { compile "org.hibernate:hibernate-core:$hibernate_version" compile group: "io.github.classgraph", name: "classgraph", version: class_graph_version + + testCompile "com.nhaarman:mockito-kotlin:$mockito_kotlin_version" + testCompile "org.mockito:mockito-core:$mockito_version" + testCompile "org.assertj:assertj-core:$assertj_version" + testCompile "com.natpryce:hamkrest:$hamkrest_version" } // TODO Consider moving it to quasar-utils in the future (introduced with PR-1388) @@ -150,22 +105,6 @@ task testJar(type: Jar) { 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 -} - // quasar exclusions upon agent code instrumentation at run-time quasar { excludePackages.addAll( diff --git a/core/src/main/kotlin/net/corda/core/internal/CordaUtils.kt b/core/src/main/kotlin/net/corda/core/internal/CordaUtils.kt index e802ecdb06..8fa5acdd93 100644 --- a/core/src/main/kotlin/net/corda/core/internal/CordaUtils.kt +++ b/core/src/main/kotlin/net/corda/core/internal/CordaUtils.kt @@ -100,7 +100,7 @@ object RetrieveAnyTransactionPayload : ArrayList() private fun owns(packageName: String, fullClassName: String): Boolean = fullClassName.startsWith("$packageName.", ignoreCase = true) /** Returns the public key of the package owner of the [contractClassName], or null if not owned. */ -internal fun NetworkParameters.getPackageOwnerOf(contractClassName: ContractClassName): PublicKey? { +fun NetworkParameters.getPackageOwnerOf(contractClassName: ContractClassName): PublicKey? { return packageOwnership.entries.singleOrNull { owns(it.key, contractClassName) }?.value } diff --git a/core/src/test/README.md b/core/src/test/README.md new file mode 100644 index 0000000000..7eb94e5eab --- /dev/null +++ b/core/src/test/README.md @@ -0,0 +1,12 @@ +# Adding tests to the Core module + +**TL;DR**: Any tests that do not require further dependencies should be added to this module, anything that +requires additional Corda dependencies needs to go into `core-tests`. + +The Corda core module defines a lot of types and helpers that can only be exercised, and therefore tested, in +the context of a node. However, as everything else depends on the core module, we cannot pull the node into +this module. Therefore, any tests that require further Corda dependencies need to be defined in the module + `core-tests`, which has the full set of dependencies including `node-driver`. + + + \ No newline at end of file diff --git a/core/src/test/kotlin/net/corda/core/concurrent/ConcurrencyUtilsTest.kt b/core/src/test/kotlin/net/corda/core/concurrent/ConcurrencyUtilsTest.kt index 78f1586d8a..d9c3ba33d7 100644 --- a/core/src/test/kotlin/net/corda/core/concurrent/ConcurrencyUtilsTest.kt +++ b/core/src/test/kotlin/net/corda/core/concurrent/ConcurrencyUtilsTest.kt @@ -3,7 +3,6 @@ package net.corda.core.concurrent import com.nhaarman.mockito_kotlin.* import net.corda.core.internal.concurrent.openFuture import net.corda.core.utilities.getOrThrow -import net.corda.testing.internal.rigorousMock import org.assertj.core.api.Assertions.assertThatThrownBy import org.junit.Test import org.slf4j.Logger @@ -17,7 +16,7 @@ class ConcurrencyUtilsTest { private val f1 = openFuture() private val f2 = openFuture() private var invocations = 0 - private val log = rigorousMock().also { + private val log = mock().also { doNothing().whenever(it).error(any(), any()) } diff --git a/core/src/test/kotlin/net/corda/core/internal/concurrent/CordaFutureImplTest.kt b/core/src/test/kotlin/net/corda/core/internal/concurrent/CordaFutureImplTest.kt index d04fae86bb..0ca6be9afb 100644 --- a/core/src/test/kotlin/net/corda/core/internal/concurrent/CordaFutureImplTest.kt +++ b/core/src/test/kotlin/net/corda/core/internal/concurrent/CordaFutureImplTest.kt @@ -4,7 +4,6 @@ import com.nhaarman.mockito_kotlin.* import net.corda.core.concurrent.CordaFuture import net.corda.core.internal.join import net.corda.core.utilities.getOrThrow -import net.corda.testing.internal.rigorousMock import org.assertj.core.api.Assertions import org.junit.Test import org.slf4j.Logger @@ -32,7 +31,7 @@ class CordaFutureTest { fun `if a listener fails its throwable is logged`() { val f = CordaFutureImpl() val x = Exception() - val log = rigorousMock() + val log = mock() val flag = AtomicBoolean() f.thenImpl(log) { throw x } f.thenImpl(log) { flag.set(true) } // Must not be affected by failure of previous listener. @@ -58,7 +57,7 @@ class CordaFutureTest { Assertions.assertThatThrownBy { g.getOrThrow() }.isSameAs(x) } run { - val block = rigorousMock<(Any?) -> Any?>() + val block = mock<(Any?) -> Any?>() val f = CordaFutureImpl() val g = f.map(block) val x = Exception() @@ -91,7 +90,7 @@ class CordaFutureTest { Assertions.assertThatThrownBy { g.getOrThrow() }.isSameAs(x) } run { - val block = rigorousMock<(Any?) -> CordaFuture<*>>() + val block = mock<(Any?) -> CordaFuture<*>>() val f = CordaFutureImpl() val g = f.flatMap(block) val x = Exception() @@ -103,7 +102,7 @@ class CordaFutureTest { @Test fun `andForget works`() { - val log = rigorousMock() + val log = mock() doNothing().whenever(log).error(any(), any()) val throwable = Exception("Boom") val executor = Executors.newSingleThreadExecutor() diff --git a/core/src/test/kotlin/net/corda/core/internal/internalAccessTestHelpers.kt b/core/src/test/kotlin/net/corda/core/internal/internalAccessTestHelpers.kt new file mode 100644 index 0000000000..a0523a22d0 --- /dev/null +++ b/core/src/test/kotlin/net/corda/core/internal/internalAccessTestHelpers.kt @@ -0,0 +1,42 @@ +package net.corda.core.internal + +import net.corda.core.contracts.* +import net.corda.core.crypto.MerkleTree +import net.corda.core.crypto.PartialMerkleTree +import net.corda.core.crypto.SecureHash +import net.corda.core.identity.Party +import net.corda.core.internal.SerializedStateAndRef +import net.corda.core.node.NetworkParameters +import net.corda.core.transactions.ComponentGroup +import net.corda.core.transactions.LedgerTransaction +import net.corda.core.transactions.WireTransaction + +/** + * A set of functions in core:test that allows testing of core internal classes in the core-tests project. + */ + +fun WireTransaction.accessGroupHashes() = this.groupHashes +fun WireTransaction.accessGroupMerkleRoots() = this.groupsMerkleRoots +fun WireTransaction.accessAvailableComponentHashes() = this.availableComponentHashes + +fun createLedgerTransaction( + inputs: List>, + outputs: List>, + commands: List>, + attachments: List, + id: SecureHash, + notary: Party?, + timeWindow: TimeWindow?, + privacySalt: PrivacySalt, + networkParameters: NetworkParameters, + references: List>, + componentGroups: List? = null, + serializedInputs: List? = null, + serializedReferences: List? = null, + isAttachmentTrusted: (Attachment) -> Boolean +): LedgerTransaction = LedgerTransaction.create(inputs, outputs, commands, attachments, id, notary, timeWindow, privacySalt, networkParameters, references, componentGroups, serializedInputs, serializedReferences, isAttachmentTrusted) + +fun createContractCreationError(txId: SecureHash, contractClass: String, cause: Throwable) = TransactionVerificationException.ContractCreationError(txId, contractClass, cause) +fun createContractRejection(txId: SecureHash, contract: Contract, cause: Throwable) = TransactionVerificationException.ContractRejection(txId, contract, cause) + +fun PartialMerkleTree.accessLeafIndex(id: SecureHash) = this.leafIndex(id) \ No newline at end of file diff --git a/finance/contracts/build.gradle b/finance/contracts/build.gradle index 1db0572bbf..8b4e4a9351 100644 --- a/finance/contracts/build.gradle +++ b/finance/contracts/build.gradle @@ -14,6 +14,7 @@ dependencies { testCompile project(':test-utils') testCompile project(path: ':core', configuration: 'testArtifacts') + testCompile project(':node-driver') testImplementation "org.junit.jupiter:junit-jupiter-api:${junit_jupiter_version}" testImplementation "junit:junit:$junit_version" diff --git a/finance/workflows/build.gradle b/finance/workflows/build.gradle index c2126546f7..20e8a388b9 100644 --- a/finance/workflows/build.gradle +++ b/finance/workflows/build.gradle @@ -39,6 +39,7 @@ dependencies { testCompile project(':test-utils') testCompile project(path: ':core', configuration: 'testArtifacts') + testCompile project(':node-driver') testImplementation "org.junit.jupiter:junit-jupiter-api:${junit_jupiter_version}" testImplementation "junit:junit:$junit_version" diff --git a/node/build.gradle b/node/build.gradle index e3af275dce..0865791032 100644 --- a/node/build.gradle +++ b/node/build.gradle @@ -137,6 +137,7 @@ dependencies { // Unit testing helpers. testCompile "org.assertj:assertj-core:${assertj_version}" + testCompile project(':node-driver') testCompile project(':test-utils') testCompile project(':client:jfx') testCompile project(':finance:contracts') diff --git a/node/src/test/kotlin/net/corda/node/services/statemachine/FlowFrameworkPersistenceTests.kt b/node/src/test/kotlin/net/corda/node/services/statemachine/FlowFrameworkPersistenceTests.kt index dc960b59af..10e4c0b7ae 100644 --- a/node/src/test/kotlin/net/corda/node/services/statemachine/FlowFrameworkPersistenceTests.kt +++ b/node/src/test/kotlin/net/corda/node/services/statemachine/FlowFrameworkPersistenceTests.kt @@ -2,7 +2,6 @@ package net.corda.node.services.statemachine import net.corda.core.crypto.random63BitValue import net.corda.core.flows.FlowLogic -import net.corda.core.flows.registerCordappFlowFactory import net.corda.core.identity.Party import net.corda.core.utilities.getOrThrow import net.corda.node.services.persistence.checkpoints @@ -10,6 +9,7 @@ import net.corda.testing.core.ALICE_NAME import net.corda.testing.core.BOB_NAME import net.corda.testing.core.CHARLIE_NAME import net.corda.testing.core.singleIdentity +import net.corda.testing.flows.registerCordappFlowFactory import net.corda.testing.internal.LogHelper import net.corda.testing.node.InMemoryMessagingNetwork import net.corda.testing.node.internal.* diff --git a/node/src/test/kotlin/net/corda/node/services/statemachine/FlowFrameworkTests.kt b/node/src/test/kotlin/net/corda/node/services/statemachine/FlowFrameworkTests.kt index 1ee5f74030..700410cdd2 100644 --- a/node/src/test/kotlin/net/corda/node/services/statemachine/FlowFrameworkTests.kt +++ b/node/src/test/kotlin/net/corda/node/services/statemachine/FlowFrameworkTests.kt @@ -33,6 +33,7 @@ import net.corda.testing.core.ALICE_NAME import net.corda.testing.core.BOB_NAME import net.corda.testing.core.dummyCommand import net.corda.testing.core.singleIdentity +import net.corda.testing.flows.registerCordappFlowFactory import net.corda.testing.internal.LogHelper import net.corda.testing.node.InMemoryMessagingNetwork.MessageTransfer import net.corda.testing.node.InMemoryMessagingNetwork.ServicePeerAllocationStrategy.RoundRobin diff --git a/node/src/test/kotlin/net/corda/node/services/statemachine/FlowFrameworkTripartyTests.kt b/node/src/test/kotlin/net/corda/node/services/statemachine/FlowFrameworkTripartyTests.kt index 4f731c889b..0accb9481d 100644 --- a/node/src/test/kotlin/net/corda/node/services/statemachine/FlowFrameworkTripartyTests.kt +++ b/node/src/test/kotlin/net/corda/node/services/statemachine/FlowFrameworkTripartyTests.kt @@ -1,7 +1,6 @@ package net.corda.node.services.statemachine import net.corda.core.flows.UnexpectedFlowEndException -import net.corda.core.flows.registerCordappFlowFactory import net.corda.core.identity.Party import net.corda.core.internal.concurrent.map import net.corda.core.utilities.getOrThrow @@ -9,6 +8,7 @@ import net.corda.testing.core.ALICE_NAME import net.corda.testing.core.BOB_NAME import net.corda.testing.core.CHARLIE_NAME import net.corda.testing.core.singleIdentity +import net.corda.testing.flows.registerCordappFlowFactory import net.corda.testing.internal.LogHelper import net.corda.testing.node.InMemoryMessagingNetwork import net.corda.testing.node.internal.* diff --git a/node/src/test/kotlin/net/corda/node/services/vault/VaultSoftLockManagerTest.kt b/node/src/test/kotlin/net/corda/node/services/vault/VaultSoftLockManagerTest.kt index 2db01f2c3c..3078c4a3c5 100644 --- a/node/src/test/kotlin/net/corda/node/services/vault/VaultSoftLockManagerTest.kt +++ b/node/src/test/kotlin/net/corda/node/services/vault/VaultSoftLockManagerTest.kt @@ -23,6 +23,7 @@ import net.corda.nodeapi.internal.cordapp.CordappLoader import net.corda.node.services.api.VaultServiceInternal import net.corda.nodeapi.internal.persistence.CordaPersistence import net.corda.testing.core.singleIdentity +import net.corda.testing.flows.registerCoreFlowFactory import net.corda.testing.internal.rigorousMock import net.corda.testing.node.internal.InternalMockNetwork import net.corda.testing.node.internal.enclosedCordapp diff --git a/settings.gradle b/settings.gradle index 1083201428..73c4d3915a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -15,6 +15,7 @@ include 'finance:contracts' include 'finance:workflows' include 'isolated' include 'core' +include 'core-tests' include 'docs' include 'node-api' include 'node' diff --git a/core/src/test/kotlin/net/corda/core/flows/FlowTestsUtils.kt b/testing/node-driver/src/main/kotlin/net/corda/testing/flows/FlowTestsUtils.kt similarity index 83% rename from core/src/test/kotlin/net/corda/core/flows/FlowTestsUtils.kt rename to testing/node-driver/src/main/kotlin/net/corda/testing/flows/FlowTestsUtils.kt index ea3b44a98b..78dd3a7035 100644 --- a/core/src/test/kotlin/net/corda/core/flows/FlowTestsUtils.kt +++ b/testing/node-driver/src/main/kotlin/net/corda/testing/flows/FlowTestsUtils.kt @@ -1,7 +1,9 @@ -package net.corda.core.flows +package net.corda.testing.flows import co.paralleluniverse.fibers.Suspendable import net.corda.core.concurrent.CordaFuture +import net.corda.core.flows.FlowLogic +import net.corda.core.flows.FlowSession import net.corda.core.toFuture import net.corda.core.utilities.UntrustworthyData import net.corda.core.utilities.unwrap @@ -10,33 +12,6 @@ import net.corda.testing.node.internal.TestStartedNode import rx.Observable import kotlin.reflect.KClass -/** - * Allows to simplify writing flows that simply rend a message back to an initiating flow. - */ -class Answer(session: FlowSession, override val answer: R, closure: (result: R) -> Unit = {}) : SimpleAnswer(session, closure) - -/** - * Allows to simplify writing flows that simply rend a message back to an initiating flow. - */ -abstract class SimpleAnswer(private val session: FlowSession, private val closure: (result: R) -> Unit = {}) : FlowLogic() { - @Suspendable - override fun call() { - val tmp = answer - closure(tmp) - session.send(tmp) - } - - protected abstract val answer: R -} - -/** - * A flow that does not do anything when triggered. - */ -class NoAnswer(private val closure: () -> Unit = {}) : FlowLogic() { - @Suspendable - override fun call() = closure() -} - /** * Extracts data from a [Map[FlowSession, UntrustworthyData]] without performing checks and casting to [R]. */ @@ -118,6 +93,6 @@ inline fun > TestStartedNode.registerCordappFlowFactory fun > TestStartedNode.registerCoreFlowFactory(initiatingFlowClass: Class>, initiatedFlowClass: Class, - flowFactory: (FlowSession) -> T , track: Boolean): Observable { + flowFactory: (FlowSession) -> T, track: Boolean): Observable { return this.internals.registerInitiatedFlowFactory(initiatingFlowClass, initiatedFlowClass, InitiatedFlowFactory.Core(flowFactory), track) } \ No newline at end of file