Create fromConfig functions for AppConfigs (#2170)

* Create fromConfig functions for AppConfigs

* Add fromClassPathConfig function
This commit is contained in:
Ben Carman 2020-10-12 14:07:45 -05:00 committed by GitHub
parent 3bd8764fa8
commit 128ff7de54
4 changed files with 62 additions and 6 deletions

View file

@ -1,6 +1,6 @@
package org.bitcoins.server package org.bitcoins.server
import java.nio.file.Path import java.nio.file.{Path, Paths}
import com.typesafe.config.{Config, ConfigFactory} import com.typesafe.config.{Config, ConfigFactory}
import org.bitcoins.chain.config.ChainAppConfig import org.bitcoins.chain.config.ChainAppConfig
@ -81,6 +81,17 @@ case class BitcoinSAppConfig(
*/ */
object BitcoinSAppConfig { object BitcoinSAppConfig {
def fromConfig(config: Config)(implicit
ec: ExecutionContext): BitcoinSAppConfig = {
val configDataDir: Path = Paths.get(config.getString("bitcoin-s.datadir"))
BitcoinSAppConfig(configDataDir, config)
}
def fromClassPathConfig()(implicit
ec: ExecutionContext): BitcoinSAppConfig = {
fromConfig(ConfigFactory.load())
}
/** Constructs an app configuration from the default Bitcoin-S /** Constructs an app configuration from the default Bitcoin-S
* data directory and given list of configuration overrides. * data directory and given list of configuration overrides.
*/ */

View file

@ -1,7 +1,9 @@
package org.bitcoins.db package org.bitcoins.db
import com.typesafe.config.ConfigFactory import com.typesafe.config.ConfigFactory
import org.bitcoins.core.config.TestNet3 import org.bitcoins.core.config._
import org.bitcoins.dlc.oracle.DLCOracleAppConfig
import org.bitcoins.server.BitcoinSAppConfig
import org.bitcoins.testkit.BitcoinSTestAppConfig import org.bitcoins.testkit.BitcoinSTestAppConfig
import org.bitcoins.testkit.util.BitcoinSAsyncTest import org.bitcoins.testkit.util.BitcoinSAsyncTest
import org.bitcoins.wallet.config.WalletAppConfig import org.bitcoins.wallet.config.WalletAppConfig
@ -46,6 +48,33 @@ class AppConfigTest extends BitcoinSAsyncTest {
assert(walletConf.dbName != nodeConf.dbName) assert(walletConf.dbName != nodeConf.dbName)
} }
it must "create from config" in {
val dir = BitcoinSTestAppConfig.tmpDir().toAbsolutePath
val conf = ConfigFactory.parseString {
s"""
|bitcoin-s {
| datadir = $dir
|}
""".stripMargin
}
val appConfig = BitcoinSAppConfig.fromConfig(conf)
assert(appConfig.walletConf.baseDatadir == dir)
assert(appConfig.nodeConf.baseDatadir == dir)
assert(appConfig.chainConf.baseDatadir == dir)
assert(appConfig.bitcoindRpcConf.baseDatadir == dir)
val dlcOracleAppConfig = DLCOracleAppConfig.fromConfig(conf)
assert(dlcOracleAppConfig.baseDatadir == dir)
}
it must "create from class path config" in {
val appConfig = BitcoinSAppConfig.fromClassPathConfig()
assert(appConfig.nodeConf.network == RegTest)
assert(appConfig.walletConf.requiredConfirmations == 6)
assert(!appConfig.chainConf.forceRecalcChainWork)
}
it must "fill in typesafe config variables correctly" in { it must "fill in typesafe config variables correctly" in {
val datadir = BitcoinSTestAppConfig.tmpDir() val datadir = BitcoinSTestAppConfig.tmpDir()
val walletAppConfig = WalletAppConfig(datadir) val walletAppConfig = WalletAppConfig(datadir)

View file

@ -1,13 +1,22 @@
package org.bitcoins.db package org.bitcoins.db
import java.nio.file.Path import java.nio.file.{Path, Paths}
import com.typesafe.config.Config import com.typesafe.config.{Config, ConfigFactory}
import scala.concurrent.ExecutionContext import scala.concurrent.ExecutionContext
trait AppConfigFactory[C <: AppConfig] { trait AppConfigFactory[C <: AppConfig] {
def fromConfig(config: Config)(implicit ec: ExecutionContext): C = {
val configDataDir: Path = Paths.get(config.getString("bitcoin-s.datadir"))
fromDatadir(configDataDir, Vector(config))
}
def fromClassPathConfig()(implicit ec: ExecutionContext): C = {
fromConfig(ConfigFactory.load())
}
def fromDefaultDatadir(confs: Vector[Config] = Vector.empty)(implicit def fromDefaultDatadir(confs: Vector[Config] = Vector.empty)(implicit
ec: ExecutionContext): C = { ec: ExecutionContext): C = {
fromDatadir(AppConfig.DEFAULT_BITCOIN_S_DATADIR, confs) fromDatadir(AppConfig.DEFAULT_BITCOIN_S_DATADIR, confs)

View file

@ -6,10 +6,10 @@ import com.typesafe.config.Config
import org.bitcoins.core.config.NetworkParameters import org.bitcoins.core.config.NetworkParameters
import org.bitcoins.core.crypto.ExtKeyVersion.SegWitMainNetPriv import org.bitcoins.core.crypto.ExtKeyVersion.SegWitMainNetPriv
import org.bitcoins.core.crypto.MnemonicCode import org.bitcoins.core.crypto.MnemonicCode
import org.bitcoins.core.util.{TimeUtil} import org.bitcoins.core.util.TimeUtil
import org.bitcoins.crypto.AesPassword import org.bitcoins.crypto.AesPassword
import org.bitcoins.db.DatabaseDriver._ import org.bitcoins.db.DatabaseDriver._
import org.bitcoins.db.{AppConfig, DbManagement, JdbcProfileComponent} import org.bitcoins.db._
import org.bitcoins.dlc.oracle.storage._ import org.bitcoins.dlc.oracle.storage._
import org.bitcoins.keymanager.{DecryptedMnemonic, WalletStorage} import org.bitcoins.keymanager.{DecryptedMnemonic, WalletStorage}
@ -123,3 +123,10 @@ case class DLCOracleAppConfig(
override def allTables: List[TableQuery[Table[_]]] = override def allTables: List[TableQuery[Table[_]]] =
List(rValueTable, eventTable, eventOutcomeTable) List(rValueTable, eventTable, eventOutcomeTable)
} }
object DLCOracleAppConfig extends AppConfigFactory[DLCOracleAppConfig] {
override def fromDatadir(datadir: Path, confs: Vector[Config])(implicit
ec: ExecutionContext): DLCOracleAppConfig =
DLCOracleAppConfig(datadir, confs: _*)
}