diff --git a/core/src/main/kotlin/net/corda/core/internal/ServiceHubCoreInternal.kt b/core/src/main/kotlin/net/corda/core/internal/ServiceHubCoreInternal.kt index 2e59429fb5..4b7d856699 100644 --- a/core/src/main/kotlin/net/corda/core/internal/ServiceHubCoreInternal.kt +++ b/core/src/main/kotlin/net/corda/core/internal/ServiceHubCoreInternal.kt @@ -30,5 +30,6 @@ interface TransactionsResolver { @Suspendable fun downloadDependencies(batchMode: Boolean) + @Suspendable fun recordDependencies(usedStatesToRecord: StatesToRecord) } \ No newline at end of file diff --git a/docs/build.gradle b/docs/build.gradle index 321bd5d2b7..aa50560300 100644 --- a/docs/build.gradle +++ b/docs/build.gradle @@ -43,7 +43,7 @@ task dokkaJavadoc(type: org.jetbrains.dokka.gradle.DokkaTask) { includes = ['packages.md'] jdkVersion = 8 externalDocumentationLink { - url = new URL("http://fasterxml.github.io/jackson-core/javadoc/2.9/") + url = new URL("https://fasterxml.github.io/jackson-core/javadoc/2.9/") } externalDocumentationLink { url = new URL("https://docs.oracle.com/javafx/2/api/") diff --git a/node/src/integration-test/kotlin/net/corda/node/flows/FlowWithClientIdTest.kt b/node/src/integration-test/kotlin/net/corda/node/flows/FlowWithClientIdTest.kt index 7e80b7d9a5..129b54310c 100644 --- a/node/src/integration-test/kotlin/net/corda/node/flows/FlowWithClientIdTest.kt +++ b/node/src/integration-test/kotlin/net/corda/node/flows/FlowWithClientIdTest.kt @@ -62,7 +62,7 @@ class FlowWithClientIdTest { } @Test(timeout = 300_000) - fun `start flow with client id permissions`() { + fun `start flow with client id permissions - StartFlow`() { val user = User("TonyStark", "I AM IRONMAN", setOf("StartFlow.net.corda.node.flows.FlowWithClientIdTest\$ResultFlow")) driver(DriverParameters(startNodesInProcess = true, cordappsForAllNodes = emptySet())) { val nodeA = startNode(rpcUsers = listOf(user)).getOrThrow() @@ -75,9 +75,37 @@ class FlowWithClientIdTest { } } + @Test(timeout = 300_000) + fun `start flow with client id permissions - InvokeRpc-startFlowWithClientId`() { + val user = User("TonyStark", "I AM IRONMAN", setOf("InvokeRpc.startFlowWithClientId")) + driver(DriverParameters(startNodesInProcess = true, cordappsForAllNodes = emptySet())) { + val nodeA = startNode(rpcUsers = listOf(user)).getOrThrow() + nodeA.rpc.startFlowWithClientId(UUID.randomUUID().toString(), ::ResultFlow, 5).returnValue.getOrThrow(20.seconds) + nodeA.rpc.startFlowDynamicWithClientId( + UUID.randomUUID().toString(), + ResultFlow::class.java, + 5 + ).returnValue.getOrThrow(20.seconds) + } + } + + @Test(timeout = 300_000) + fun `start flow with client id permissions - InvokeRpc-startFlowDynamicWithClientId`() { + val user = User("TonyStark", "I AM IRONMAN", setOf("InvokeRpc.startFlowDynamicWithClientId")) + driver(DriverParameters(startNodesInProcess = true, cordappsForAllNodes = emptySet())) { + val nodeA = startNode(rpcUsers = listOf(user)).getOrThrow() + nodeA.rpc.startFlowWithClientId(UUID.randomUUID().toString(), ::ResultFlow, 5).returnValue.getOrThrow(20.seconds) + nodeA.rpc.startFlowDynamicWithClientId( + UUID.randomUUID().toString(), + ResultFlow::class.java, + 5 + ).returnValue.getOrThrow(20.seconds) + } + } + @Test(timeout = 300_000) fun `start flow with client id without permissions`() { - val user = User("TonyStark", "I AM IRONMAN", setOf()) + val user = User("TonyStark", "I AM IRONMAN", setOf("InvokeRpc.startFlow")) driver(DriverParameters(startNodesInProcess = true, cordappsForAllNodes = emptySet())) { val nodeA = startNode(rpcUsers = listOf(user)).getOrThrow() assertFailsWith { diff --git a/node/src/main/kotlin/net/corda/node/services/DbTransactionsResolver.kt b/node/src/main/kotlin/net/corda/node/services/DbTransactionsResolver.kt index 28ec4ed962..bc6cf3d2af 100644 --- a/node/src/main/kotlin/net/corda/node/services/DbTransactionsResolver.kt +++ b/node/src/main/kotlin/net/corda/node/services/DbTransactionsResolver.kt @@ -94,6 +94,7 @@ class DbTransactionsResolver(private val flow: ResolveTransactionsFlow) : Transa logger.debug { "Downloaded ${sortedDependencies?.size} dependencies from remote peer for transactions ${flow.txHashes}" } } + @Suspendable override fun recordDependencies(usedStatesToRecord: StatesToRecord) { val sortedDependencies = checkNotNull(this.sortedDependencies) logger.trace { "Recording ${sortedDependencies.size} dependencies for ${flow.txHashes.size} transactions" }