CORDA-1664: Blob inspector able to display SignedTransaction blobs dumped from a node's db. (#3559)

This commit is contained in:
Shams Asari
2018-07-11 14:50:51 +01:00
committed by GitHub
parent 6ea4f9c1d6
commit ac179aa9ab
7 changed files with 98 additions and 19 deletions

View File

@ -0,0 +1,67 @@
package net.corda.blobinspector
import net.corda.core.identity.CordaX500Name
import net.corda.core.internal.SignedDataWithCert
import net.corda.core.node.NetworkParameters
import net.corda.core.transactions.SignedTransaction
import net.corda.core.transactions.WireTransaction
import net.corda.testing.common.internal.checkNotOnClasspath
import org.apache.commons.io.output.WriterOutputStream
import org.assertj.core.api.Assertions.assertThat
import org.junit.Test
import java.io.PrintStream
import java.io.StringWriter
import java.nio.charset.StandardCharsets.UTF_8
class BlobInspectorTest {
private val blobInspector = BlobInspector()
@Test
fun `network-parameters file`() {
val output = run("network-parameters")
assertThat(output)
.startsWith(SignedDataWithCert::class.java.name)
.contains(NetworkParameters::class.java.name)
.contains(CordaX500Name("Notary Service", "Zurich", "CH").toString()) // Name of the notary in the network parameters
}
@Test
fun `node-info file`() {
checkNotOnClassPath("net.corda.nodeapi.internal.SignedNodeInfo")
val output = run("node-info")
assertThat(output)
.startsWith("net.corda.nodeapi.internal.SignedNodeInfo")
.contains(CordaX500Name("BankOfCorda", "New York", "US").toString())
}
@Test
fun `WireTransaction with Cash state`() {
checkNotOnClassPath("net.corda.finance.contracts.asset.Cash\$State")
val output = run("cash-wtx.blob")
assertThat(output)
.startsWith(WireTransaction::class.java.name)
.contains("net.corda.finance.contracts.asset.Cash\$State")
}
@Test
fun `SignedTransaction with Cash state taken from node db`() {
checkNotOnClassPath("net.corda.finance.contracts.asset.Cash\$State")
val output = run("cash-stx-db.blob")
assertThat(output)
.startsWith(SignedTransaction::class.java.name)
.contains("net.corda.finance.contracts.asset.Cash\$State")
}
private fun run(resourceName: String): String {
blobInspector.source = javaClass.getResource(resourceName)
val writer = StringWriter()
blobInspector.run(PrintStream(WriterOutputStream(writer, UTF_8)))
val output = writer.toString()
println(output)
return output
}
private fun checkNotOnClassPath(className: String) {
checkNotOnClasspath(className) { "The Blob Inspector does not have this as a dependency." }
}
}