refactor BitcoindRpcTestUtil test methods to take ZmqConfig rather than zmqPort (#3002)

This commit is contained in:
Chris Stewart 2021-04-30 10:59:16 -05:00 committed by GitHub
parent f792fb3480
commit 38baea5e24
4 changed files with 85 additions and 103 deletions

View file

@ -1,8 +1,10 @@
package org.bitcoins.rpc.util
import org.bitcoins.asyncutil.AsyncUtil
import java.net.ServerSocket
import java.net.{InetSocketAddress, ServerSocket}
import org.bitcoins.rpc.client.common.BitcoindRpcClient
import org.bitcoins.rpc.config.ZmqConfig
import scala.annotation.tailrec
import scala.concurrent.{ExecutionContext, Future}
@ -37,6 +39,16 @@ abstract class RpcUtil extends AsyncUtil {
case Failure(_) => randomPort
}
}
/** Genreates a zmq config with unused ports */
def zmqConfig: ZmqConfig = {
ZmqConfig(
hashBlock = Some(new InetSocketAddress(randomPort)),
hashTx = Some(new InetSocketAddress(randomPort)),
rawTx = Some(new InetSocketAddress(randomPort)),
rawBlock = Some(new InetSocketAddress(randomPort))
)
}
}
object RpcUtil extends RpcUtil

View file

@ -23,7 +23,11 @@ import org.bitcoins.eclair.rpc.api._
import org.bitcoins.eclair.rpc.client.EclairRpcClient
import org.bitcoins.eclair.rpc.config.EclairInstance
import org.bitcoins.rpc.client.common.{BitcoindRpcClient, BitcoindVersion}
import org.bitcoins.rpc.config.{BitcoindAuthCredentials, BitcoindInstance}
import org.bitcoins.rpc.config.{
BitcoindAuthCredentials,
BitcoindInstance,
ZmqConfig
}
import org.bitcoins.rpc.util.RpcUtil
import org.bitcoins.testkit.async.TestAsyncUtil
import org.bitcoins.testkit.rpc.BitcoindRpcTestUtil
@ -65,41 +69,13 @@ trait EclairRpcTestUtil extends Logging {
def bitcoindInstance(
port: Int = RpcUtil.randomPort,
rpcPort: Int = RpcUtil.randomPort,
zmqPort: Int = RpcUtil.randomPort,
zmqConfig: ZmqConfig = RpcUtil.zmqConfig,
bitcoindV: BitcoindVersion =
EclairRpcClient.bitcoindV): BitcoindInstance = {
bitcoindV match {
case BitcoindVersion.V21 =>
BitcoindRpcTestUtil.v21Instance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort)
case BitcoindVersion.V20 =>
BitcoindRpcTestUtil.v20Instance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort)
case BitcoindVersion.V19 =>
BitcoindRpcTestUtil.v19Instance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort)
case BitcoindVersion.V18 =>
BitcoindRpcTestUtil.v18Instance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort)
case BitcoindVersion.V17 =>
BitcoindRpcTestUtil.v17Instance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort)
case BitcoindVersion.V16 =>
BitcoindRpcTestUtil.v16Instance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort)
case BitcoindVersion.Experimental =>
BitcoindRpcTestUtil.vExperimentalInstance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort)
case BitcoindVersion.Unknown =>
sys.error(s"Cannot start eclair with an unknown instance of bitcoind")
}
BitcoindRpcTestUtil.getInstance(bitcoindVersion = bitcoindV,
port = port,
rpcPort = rpcPort,
zmqConfig = zmqConfig)
}
//cribbed from https://github.com/Christewart/eclair/blob/bad02e2c0e8bd039336998d318a861736edfa0ad/eclair-core/src/test/scala/fr/acinq/eclair/integration/IntegrationSpec.scala#L140-L153

View file

@ -10,7 +10,11 @@ import org.bitcoins.core.wallet.fee.SatoshisPerByte
import org.bitcoins.lnd.rpc.LndRpcClient
import org.bitcoins.lnd.rpc.config.LndInstance
import org.bitcoins.rpc.client.common.{BitcoindRpcClient, BitcoindVersion}
import org.bitcoins.rpc.config.{BitcoindAuthCredentials, BitcoindInstance}
import org.bitcoins.rpc.config.{
BitcoindAuthCredentials,
BitcoindInstance,
ZmqConfig
}
import org.bitcoins.rpc.util.RpcUtil
import org.bitcoins.testkit.async.TestAsyncUtil
import org.bitcoins.testkit.rpc.BitcoindRpcTestUtil
@ -45,40 +49,12 @@ trait LndRpcTestUtil extends Logging {
def bitcoindInstance(
port: Int = RpcUtil.randomPort,
rpcPort: Int = RpcUtil.randomPort,
zmqPort: Int = RpcUtil.randomPort,
zmqConfig: ZmqConfig = RpcUtil.zmqConfig,
bitcoindV: BitcoindVersion = BitcoindVersion.V21): BitcoindInstance = {
bitcoindV match {
case BitcoindVersion.V21 =>
BitcoindRpcTestUtil.v21Instance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort)
case BitcoindVersion.V20 =>
BitcoindRpcTestUtil.v20Instance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort)
case BitcoindVersion.V19 =>
BitcoindRpcTestUtil.v19Instance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort)
case BitcoindVersion.V18 =>
BitcoindRpcTestUtil.v18Instance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort)
case BitcoindVersion.V17 =>
BitcoindRpcTestUtil.v17Instance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort)
case BitcoindVersion.V16 =>
BitcoindRpcTestUtil.v16Instance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort)
case BitcoindVersion.Experimental =>
BitcoindRpcTestUtil.vExperimentalInstance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort)
case BitcoindVersion.Unknown =>
sys.error(s"Cannot start lnd with an unknown instance of bitcoind")
}
BitcoindRpcTestUtil.getInstance(bitcoindVersion = bitcoindV,
port = port,
rpcPort = rpcPort,
zmqConfig = zmqConfig)
}
def commonConfig(

View file

@ -42,7 +42,7 @@ import org.bitcoins.testkit.util.{BitcoindRpcTestClient, FileUtil}
import org.bitcoins.util.ListUtil
import java.io.File
import java.net.URI
import java.net.{InetSocketAddress, URI}
import java.nio.file.{Files, Path}
import scala.collection.immutable.Map
import scala.collection.mutable
@ -59,20 +59,34 @@ trait BitcoindRpcTestUtil extends Logging {
type RpcClientAccum =
mutable.Builder[BitcoindRpcClient, Vector[BitcoindRpcClient]]
private def newUri: URI = new URI(s"http://localhost:${RpcUtil.randomPort}")
private def newInetSocketAddres: InetSocketAddress = {
new InetSocketAddress(RpcUtil.randomPort)
}
/** Standard config used for testing purposes
*/
def standardConfig: BitcoindConfig = {
def newUri: URI = new URI(s"http://localhost:${RpcUtil.randomPort}")
val hashBlock = newInetSocketAddres
val hashTx = newInetSocketAddres
val rawBlock = newInetSocketAddres
val rawTx = newInetSocketAddres
val zmqConfig = ZmqConfig(hashBlock = Some(hashBlock),
rawBlock = Some(rawBlock),
hashTx = Some(hashTx),
rawTx = Some(rawTx))
config(uri = newUri,
rpcUri = newUri,
zmqPort = RpcUtil.randomPort,
zmqConfig = zmqConfig,
pruneMode = false)
}
def config(
uri: URI,
rpcUri: URI,
zmqPort: Int,
zmqConfig: ZmqConfig,
pruneMode: Boolean,
blockFilterIndex: Boolean = false): BitcoindConfig = {
val pass = FileUtil.randomDirName
@ -91,10 +105,10 @@ trait BitcoindRpcTestUtil extends Logging {
|fallbackfee=0.0002
|txindex=${if (pruneMode) 0
else 1 /* pruning and txindex are not compatible */}
|zmqpubhashtx=tcp://127.0.0.1:$zmqPort
|zmqpubhashblock=tcp://127.0.0.1:${zmqPort + 1}
|zmqpubrawtx=tcp://127.0.0.1:${zmqPort + 2}
|zmqpubrawblock=tcp://127.0.0.1:${zmqPort + 3}
|zmqpubhashtx=tcp://${zmqConfig.hashTx.get.getHostString}:${zmqConfig.hashTx.get.getPort}
|zmqpubhashblock=tcp://${zmqConfig.hashBlock.get.getHostString}:${zmqConfig.hashBlock.get.getPort}
|zmqpubrawtx=tcp://${zmqConfig.rawTx.get.getHostString}:${zmqConfig.rawTx.get.getPort}
|zmqpubrawblock=tcp://${zmqConfig.rawBlock.get.getHostString}:${zmqConfig.rawBlock.get.getPort}
|prune=${if (pruneMode) 1 else 0}
""".stripMargin
val config =
@ -115,11 +129,15 @@ trait BitcoindRpcTestUtil extends Logging {
def writtenConfig(
uri: URI,
rpcUri: URI,
zmqPort: Int,
zmqConfig: ZmqConfig,
pruneMode: Boolean,
blockFilterIndex: Boolean = false
): Path = {
val conf = config(uri, rpcUri, zmqPort, pruneMode, blockFilterIndex)
val conf = config(uri = uri,
rpcUri = rpcUri,
zmqConfig = zmqConfig,
pruneMode = pruneMode,
blockFilterIndex = blockFilterIndex)
val datadir = conf.datadir
val written = BitcoindConfig.writeConfigToFile(conf, datadir)
@ -174,7 +192,7 @@ trait BitcoindRpcTestUtil extends Logging {
def instance(
port: Int = RpcUtil.randomPort,
rpcPort: Int = RpcUtil.randomPort,
zmqPort: Int = RpcUtil.randomPort,
zmqConfig: ZmqConfig = RpcUtil.zmqConfig,
pruneMode: Boolean = false,
versionOpt: Option[BitcoindVersion] = None,
binaryDirectory: Path =
@ -191,7 +209,7 @@ trait BitcoindRpcTestUtil extends Logging {
val configFile =
writtenConfig(uri,
rpcUri,
zmqPort,
zmqConfig,
pruneMode,
blockFilterIndex = hasNeutrinoSupport)
val conf = BitcoindConfig(configFile)
@ -214,13 +232,13 @@ trait BitcoindRpcTestUtil extends Logging {
def v16Instance(
port: Int = RpcUtil.randomPort,
rpcPort: Int = RpcUtil.randomPort,
zmqPort: Int = RpcUtil.randomPort,
zmqConfig: ZmqConfig = RpcUtil.zmqConfig,
pruneMode: Boolean = false,
binaryDirectory: Path = BitcoindRpcTestClient.sbtBinaryDirectory
): BitcoindInstance =
instance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort,
zmqConfig = zmqConfig,
pruneMode = pruneMode,
versionOpt = Some(BitcoindVersion.V16),
binaryDirectory = binaryDirectory)
@ -228,13 +246,13 @@ trait BitcoindRpcTestUtil extends Logging {
def v17Instance(
port: Int = RpcUtil.randomPort,
rpcPort: Int = RpcUtil.randomPort,
zmqPort: Int = RpcUtil.randomPort,
zmqConfig: ZmqConfig = RpcUtil.zmqConfig,
pruneMode: Boolean = false,
binaryDirectory: Path = BitcoindRpcTestClient.sbtBinaryDirectory
): BitcoindInstance =
instance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort,
zmqConfig = zmqConfig,
pruneMode = pruneMode,
versionOpt = Some(BitcoindVersion.V17),
binaryDirectory = binaryDirectory)
@ -242,13 +260,13 @@ trait BitcoindRpcTestUtil extends Logging {
def v18Instance(
port: Int = RpcUtil.randomPort,
rpcPort: Int = RpcUtil.randomPort,
zmqPort: Int = RpcUtil.randomPort,
zmqConfig: ZmqConfig = RpcUtil.zmqConfig,
pruneMode: Boolean = false,
binaryDirectory: Path = BitcoindRpcTestClient.sbtBinaryDirectory
): BitcoindInstance =
instance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort,
zmqConfig = zmqConfig,
pruneMode = pruneMode,
versionOpt = Some(BitcoindVersion.V18),
binaryDirectory = binaryDirectory)
@ -256,13 +274,13 @@ trait BitcoindRpcTestUtil extends Logging {
def v19Instance(
port: Int = RpcUtil.randomPort,
rpcPort: Int = RpcUtil.randomPort,
zmqPort: Int = RpcUtil.randomPort,
zmqConfig: ZmqConfig = RpcUtil.zmqConfig,
pruneMode: Boolean = false,
binaryDirectory: Path = BitcoindRpcTestClient.sbtBinaryDirectory
): BitcoindInstance =
instance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort,
zmqConfig = zmqConfig,
pruneMode = pruneMode,
versionOpt = Some(BitcoindVersion.V19),
binaryDirectory = binaryDirectory)
@ -270,13 +288,13 @@ trait BitcoindRpcTestUtil extends Logging {
def v20Instance(
port: Int = RpcUtil.randomPort,
rpcPort: Int = RpcUtil.randomPort,
zmqPort: Int = RpcUtil.randomPort,
zmqConfig: ZmqConfig = RpcUtil.zmqConfig,
pruneMode: Boolean = false,
binaryDirectory: Path = BitcoindRpcTestClient.sbtBinaryDirectory
): BitcoindInstance =
instance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort,
zmqConfig = zmqConfig,
pruneMode = pruneMode,
versionOpt = Some(BitcoindVersion.V20),
binaryDirectory = binaryDirectory)
@ -284,13 +302,13 @@ trait BitcoindRpcTestUtil extends Logging {
def v21Instance(
port: Int = RpcUtil.randomPort,
rpcPort: Int = RpcUtil.randomPort,
zmqPort: Int = RpcUtil.randomPort,
zmqConfig: ZmqConfig = RpcUtil.zmqConfig,
pruneMode: Boolean = false,
binaryDirectory: Path = BitcoindRpcTestClient.sbtBinaryDirectory
): BitcoindInstance =
instance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort,
zmqConfig = zmqConfig,
pruneMode = pruneMode,
versionOpt = Some(BitcoindVersion.V21),
binaryDirectory = binaryDirectory)
@ -298,13 +316,13 @@ trait BitcoindRpcTestUtil extends Logging {
def vExperimentalInstance(
port: Int = RpcUtil.randomPort,
rpcPort: Int = RpcUtil.randomPort,
zmqPort: Int = RpcUtil.randomPort,
zmqConfig: ZmqConfig = RpcUtil.zmqConfig,
pruneMode: Boolean = false,
binaryDirectory: Path = BitcoindRpcTestClient.sbtBinaryDirectory
): BitcoindInstance =
instance(port = port,
rpcPort = rpcPort,
zmqPort = zmqPort,
zmqConfig = zmqConfig,
pruneMode = pruneMode,
versionOpt = Some(BitcoindVersion.Experimental),
binaryDirectory = binaryDirectory)
@ -314,7 +332,7 @@ trait BitcoindRpcTestUtil extends Logging {
bitcoindVersion: BitcoindVersion,
port: Int = RpcUtil.randomPort,
rpcPort: Int = RpcUtil.randomPort,
zmqPort: Int = RpcUtil.randomPort,
zmqConfig: ZmqConfig = RpcUtil.zmqConfig,
pruneMode: Boolean = false,
binaryDirectory: Path =
BitcoindRpcTestClient.sbtBinaryDirectory): BitcoindInstance = {
@ -322,43 +340,43 @@ trait BitcoindRpcTestUtil extends Logging {
case BitcoindVersion.V16 =>
BitcoindRpcTestUtil.v16Instance(port,
rpcPort,
zmqPort,
zmqConfig,
pruneMode,
binaryDirectory = binaryDirectory)
case BitcoindVersion.V17 =>
BitcoindRpcTestUtil.v17Instance(port,
rpcPort,
zmqPort,
zmqConfig,
pruneMode,
binaryDirectory = binaryDirectory)
case BitcoindVersion.V18 =>
BitcoindRpcTestUtil.v18Instance(port,
rpcPort,
zmqPort,
zmqConfig,
pruneMode,
binaryDirectory = binaryDirectory)
case BitcoindVersion.V19 =>
BitcoindRpcTestUtil.v19Instance(port,
rpcPort,
zmqPort,
zmqConfig,
pruneMode,
binaryDirectory = binaryDirectory)
case BitcoindVersion.V20 =>
BitcoindRpcTestUtil.v20Instance(port,
rpcPort,
zmqPort,
zmqConfig,
pruneMode,
binaryDirectory = binaryDirectory)
case BitcoindVersion.V21 =>
BitcoindRpcTestUtil.v21Instance(port,
rpcPort,
zmqPort,
zmqConfig,
pruneMode,
binaryDirectory = binaryDirectory)
case BitcoindVersion.Experimental =>
BitcoindRpcTestUtil.vExperimentalInstance(port,
rpcPort,
zmqPort,
zmqConfig,
pruneMode,
binaryDirectory =
binaryDirectory)