mirror of
https://github.com/corda/corda.git
synced 2024-12-20 21:43:14 +00:00
ENT-5131: Avoid NPE by throwing a catchable exception when openAttachment fails. (#6408)
This commit is contained in:
parent
6aa19723e6
commit
0d5bed5243
@ -302,7 +302,12 @@ interface CordaRPCOps : RPCOps {
|
||||
/** Checks whether an attachment with the given hash is stored on the node. */
|
||||
fun attachmentExists(id: SecureHash): Boolean
|
||||
|
||||
/** Download an attachment JAR by ID. */
|
||||
/**
|
||||
* Download an attachment JAR by ID.
|
||||
* @param id the id of the attachment to open
|
||||
* @return the stream of the JAR
|
||||
* @throws RPCException if the attachment doesn't exist
|
||||
* */
|
||||
fun openAttachment(id: SecureHash): InputStream
|
||||
|
||||
/** Uploads a jar to the node, returns it's hash. */
|
||||
|
@ -1,5 +1,6 @@
|
||||
package net.corda.node.internal
|
||||
|
||||
import net.corda.client.rpc.RPCException
|
||||
import net.corda.client.rpc.notUsed
|
||||
import net.corda.common.logging.CordaVersion
|
||||
import net.corda.core.CordaRuntimeException
|
||||
@ -263,7 +264,8 @@ internal class CordaRPCOpsImpl(
|
||||
}
|
||||
|
||||
override fun openAttachment(id: SecureHash): InputStream {
|
||||
return services.attachments.openAttachment(id)!!.open()
|
||||
return services.attachments.openAttachment(id)?.open() ?:
|
||||
throw RPCException("Unable to open attachment with id: $id")
|
||||
}
|
||||
|
||||
override fun uploadAttachment(jar: InputStream): SecureHash {
|
||||
|
@ -2,11 +2,13 @@ package net.corda.node
|
||||
|
||||
import co.paralleluniverse.fibers.Suspendable
|
||||
import net.corda.client.rpc.PermissionException
|
||||
import net.corda.client.rpc.RPCException
|
||||
import net.corda.core.context.AuthServiceId
|
||||
import net.corda.core.context.InvocationContext
|
||||
import net.corda.core.contracts.Amount
|
||||
import net.corda.core.contracts.ContractState
|
||||
import net.corda.core.contracts.Issued
|
||||
import net.corda.core.crypto.SecureHash
|
||||
import net.corda.core.crypto.isFulfilledBy
|
||||
import net.corda.core.crypto.keys
|
||||
import net.corda.core.flows.FlowLogic
|
||||
@ -353,6 +355,17 @@ class CordaRPCOpsImplTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test(timeout=300_000)
|
||||
fun `trying to open attachment which doesnt exist throws error`() {
|
||||
CURRENT_RPC_CONTEXT.set(RpcAuthContext(InvocationContext.rpc(testActor()), buildSubject("TEST_USER", emptySet())))
|
||||
withPermissions(invokeRpc(CordaRPCOps::openAttachment)) {
|
||||
assertThatThrownBy {
|
||||
rpc.openAttachment(SecureHash.zeroHash)
|
||||
}.isInstanceOf(RPCException::class.java)
|
||||
.withFailMessage("Unable to open attachment with id: ${SecureHash.zeroHash}")
|
||||
}
|
||||
}
|
||||
|
||||
@Test(timeout=300_000)
|
||||
fun `attachment uploaded with metadata has specified uploader`() {
|
||||
CURRENT_RPC_CONTEXT.set(RpcAuthContext(InvocationContext.rpc(testActor()), buildSubject("TEST_USER", emptySet())))
|
||||
|
Loading…
Reference in New Issue
Block a user