Add LibTest getTestDataDir to fix sled test on android

This commit is contained in:
Steve Myers
2021-06-26 18:50:58 -07:00
parent 1249a4c491
commit f5dd87b02a
17 changed files with 80 additions and 54 deletions

View File

@@ -19,7 +19,7 @@ class MemoryConfig() : DatabaseConfig() {
override val databaseConfigT = libJna.new_memory_config()
}
class SledConfig(path: String, treeName:String) : DatabaseConfig() {
class SledConfig(path: String, treeName: String) : DatabaseConfig() {
private val log: Logger = LoggerFactory.getLogger(SledConfig::class.java)
override val databaseConfigT = libJna.new_sled_config(path, treeName)

View File

@@ -39,6 +39,6 @@ enum class JnaError {
Electrum,
// Esplora
// CompactFilters
// CompactFilters
Sled,
}

View File

@@ -116,11 +116,11 @@ interface LibJna : Library {
// void free_blockchain_config (
// BlockchainConfig_t * blockchain_config);
fun free_blockchain_config( blockchain_config: BlockchainConfig_t)
fun free_blockchain_config(blockchain_config: BlockchainConfig_t)
// DatabaseConfig_t * new_memory_config (void);
fun new_memory_config(): DatabaseConfig_t
// DatabaseConfig_t * new_sled_config (
// char const * path,
// char const * tree_name);
@@ -128,5 +128,5 @@ interface LibJna : Library {
// void free_database_config (
// DatabaseConfig_t * database_config);
fun free_database_config( database_config: DatabaseConfig_t)
fun free_database_config(database_config: DatabaseConfig_t)
}

View File

@@ -5,33 +5,34 @@ import com.sun.jna.PointerType
import org.slf4j.Logger
import org.slf4j.LoggerFactory
abstract class ResultBase<PT : PointerType, RT : Any> internal constructor(protected val resultT: PT) :
abstract class ResultBase<PT : PointerType, RT : Any> internal constructor(private val pointerT: PT) :
LibBase() {
protected open val log: Logger = LoggerFactory.getLogger(ResultBase::class.java)
protected abstract fun err(): Pointer?
protected abstract fun err(pointerT: PT): Pointer?
protected abstract fun ok(): RT
protected abstract fun ok(pointerT: PT): RT
protected abstract fun free(pointer: PT)
protected abstract fun free(pointerT: PT)
private fun checkErr() {
val errPointer = err()
private fun checkErr(pointerT: PT) {
val errPointer = err(pointerT)
val err = errPointer?.getString(0)
libJna.free_string(errPointer)
if (err != null) {
log.error("JnaError: $err")
throw JnaException(JnaError.valueOf(err))
}
}
fun value(): RT {
checkErr()
return ok()
checkErr(pointerT)
return ok(pointerT)
}
protected fun finalize() {
free(resultT)
log.debug("$resultT freed")
free(pointerT)
log.debug("$pointerT freed")
}
}

View File

@@ -9,18 +9,18 @@ class StringResult internal constructor(stringResultT: LibJna.StringResult_t) :
override val log: Logger = LoggerFactory.getLogger(StringResult::class.java)
override fun err(): Pointer? {
return libJna.get_string_err(resultT)
override fun err(pointerT: LibJna.StringResult_t): Pointer? {
return libJna.get_string_err(pointerT)
}
override fun ok(): String {
val okPointer = libJna.get_string_ok(resultT)
override fun ok(pointerT: LibJna.StringResult_t): String {
val okPointer = libJna.get_string_ok(pointerT)
val ok = okPointer!!.getString(0)
libJna.free_string(okPointer)
return ok
}
override fun free(pointer: LibJna.StringResult_t) {
libJna.free_string_result(resultT)
override fun free(pointerT: LibJna.StringResult_t) {
libJna.free_string_result(pointerT)
}
}

View File

@@ -9,15 +9,15 @@ class VoidResult internal constructor(voidResultT: LibJna.VoidResult_t) :
override val log: Logger = LoggerFactory.getLogger(VoidResult::class.java)
override fun err(): Pointer? {
return libJna.get_void_err(resultT)
override fun err(pointerT: LibJna.VoidResult_t): Pointer? {
return libJna.get_void_err(pointerT)
}
override fun ok() {
override fun ok(pointerT: LibJna.VoidResult_t) {
// Void
}
override fun free(pointer: LibJna.VoidResult_t) {
libJna.free_void_result(resultT)
override fun free(pointerT: LibJna.VoidResult_t) {
libJna.free_void_result(pointerT)
}
}

View File

@@ -13,7 +13,14 @@ class Wallet constructor(
val log: Logger = LoggerFactory.getLogger(Wallet::class.java)
private val walletResult =
WalletResult(libJna.new_wallet_result(descriptor, changeDescriptor, blockchainConfig.blockchainConfigT, databaseConfig.databaseConfigT))
WalletResult(
libJna.new_wallet_result(
descriptor,
changeDescriptor,
blockchainConfig.blockchainConfigT,
databaseConfig.databaseConfigT
)
)
private val walletRefT = walletResult.value()
fun sync() {
@@ -26,7 +33,7 @@ class Wallet constructor(
return stringResult.value()
}
protected fun finalize(pointer: LibJna.WalletResult_t) {
protected fun finalize(walletRefT: LibJna.WalletRef_t) {
libJna.free_wallet_ref(walletRefT)
log.debug("$walletRefT freed")
}

View File

@@ -9,15 +9,15 @@ class WalletResult internal constructor(walletResultT: LibJna.WalletResult_t) :
override val log: Logger = LoggerFactory.getLogger(WalletResult::class.java)
override fun err(): Pointer? {
return libJna.get_wallet_err(resultT)
override fun err(pointerT: LibJna.WalletResult_t): Pointer? {
return libJna.get_wallet_err(pointerT)
}
override fun ok(): LibJna.WalletRef_t {
return libJna.get_wallet_ok(resultT)!!
override fun ok(pointerT: LibJna.WalletResult_t): LibJna.WalletRef_t {
return libJna.get_wallet_ok(pointerT)!!
}
override fun free(pointer: LibJna.WalletResult_t) {
libJna.free_wallet_result(resultT)
override fun free(pointerT: LibJna.WalletResult_t) {
libJna.free_wallet_result(pointerT)
}
}

View File

@@ -1,9 +1,16 @@
package org.bitcoindevkit.bdk
import java.nio.file.Paths
/**
* Library test, which will execute on linux host.
*
*/
class JvmLibTest : LibTest() {
override fun getTestDataDir(): String {
//return Files.createTempDirectory("bdk-test").toString()
return Paths.get(System.getProperty("java.io.tmpdir"), "bdk-test").toString()
}
}