Add LibTest getTestDataDir to fix sled test on android
This commit is contained in:
parent
1249a4c491
commit
f5dd87b02a
@ -35,7 +35,7 @@ afterEvaluate {
|
||||
// You can then customize attributes of the publication as shown below.
|
||||
groupId = 'org.bitcoindevkit'
|
||||
artifactId = 'bdk'
|
||||
version = '0.0.1-dev'
|
||||
version = '0.0.1-SNAPSHOT'
|
||||
}
|
||||
// Creates a Maven publication called “debug”.
|
||||
debug(MavenPublication) {
|
||||
@ -44,14 +44,14 @@ afterEvaluate {
|
||||
|
||||
groupId = 'org.bitcoindevkit'
|
||||
artifactId = 'bdk-debug'
|
||||
version = '0.0.1-dev'
|
||||
version = '0.0.1-SNAPSHOT'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation (project(':jvm')) {
|
||||
implementation(project(':jvm')) {
|
||||
exclude group: 'net.java.dev.jna', module: 'jna'
|
||||
}
|
||||
|
||||
@ -62,7 +62,7 @@ dependencies {
|
||||
api "org.slf4j:slf4j-api:1.7.30"
|
||||
|
||||
androidTestImplementation 'com.github.tony19:logback-android:2.0.0'
|
||||
androidTestImplementation (project(':test-fixtures')) {
|
||||
androidTestImplementation(project(':test-fixtures')) {
|
||||
exclude group: 'net.java.dev.jna', module: 'jna'
|
||||
}
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
|
||||
|
@ -1,11 +1,11 @@
|
||||
package org.bitcoindevkit.bdk
|
||||
|
||||
import android.app.Application
|
||||
import android.content.Context.MODE_PRIVATE
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
import org.junit.Assert.*
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
@ -13,5 +13,9 @@ import org.junit.Assert.*
|
||||
*/
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class AndroidLibTest : LibTest() {
|
||||
override fun getTestDataDir(): String {
|
||||
val context = ApplicationProvider.getApplicationContext<Application>()
|
||||
return context.getDir("bdk-test", MODE_PRIVATE).toString()
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.bitcoindevkit.bdk" >
|
||||
package="org.bitcoindevkit.bdk">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
|
||||
|
@ -25,7 +25,7 @@ publishing {
|
||||
maven(MavenPublication) {
|
||||
groupId = 'org.bitcoindevkit'
|
||||
artifactId = 'bdk'
|
||||
version = '0.0.1-dev'
|
||||
version = '0.0.1-SNAPSHOT'
|
||||
|
||||
from components.java
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -39,6 +39,6 @@ enum class JnaError {
|
||||
Electrum,
|
||||
|
||||
// Esplora
|
||||
// CompactFilters
|
||||
// CompactFilters
|
||||
Sled,
|
||||
}
|
@ -116,7 +116,7 @@ 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
|
||||
@ -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)
|
||||
}
|
||||
|
@ -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")
|
||||
}
|
||||
}
|
@ -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)
|
||||
}
|
||||
}
|
@ -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)
|
||||
}
|
||||
}
|
@ -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")
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
@ -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()
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,3 +1,3 @@
|
||||
rootProject.name = 'bdk-kotlin'
|
||||
|
||||
include ':jvm',':android',':test-fixtures'
|
||||
include ':jvm', ':android', ':test-fixtures'
|
@ -7,7 +7,7 @@ dependencies {
|
||||
implementation platform('org.jetbrains.kotlin:kotlin-bom')
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||
implementation "net.java.dev.jna:jna:5.8.0"
|
||||
implementation (project(':jvm'))
|
||||
implementation(project(':jvm'))
|
||||
implementation "junit:junit:4.13.2"
|
||||
//implementation "org.mockito.kotlin:mockito-kotlin:3.2.0"
|
||||
api "org.slf4j:slf4j-api:1.7.30"
|
||||
|
@ -1,14 +1,13 @@
|
||||
package org.bitcoindevkit.bdk
|
||||
|
||||
import org.junit.*
|
||||
import org.junit.Assert.*
|
||||
import org.junit.Test
|
||||
import org.slf4j.Logger
|
||||
import org.slf4j.LoggerFactory
|
||||
import javax.management.Descriptor
|
||||
import java.io.File
|
||||
|
||||
/**
|
||||
* Library test, which will execute on linux host.
|
||||
*
|
||||
* Library tests which will execute for jvm and android modules.
|
||||
*/
|
||||
abstract class LibTest : LibBase() {
|
||||
|
||||
@ -20,6 +19,12 @@ abstract class LibTest : LibBase() {
|
||||
val change =
|
||||
"wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/1/*)"
|
||||
|
||||
abstract fun getTestDataDir(): String
|
||||
|
||||
fun cleanupTestDataDir() {
|
||||
File(getTestDataDir()).deleteRecursively()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun walletResultError() {
|
||||
val blockchainConfig = ElectrumConfig("ssl://electrum.blockstream.info:60002", null, 5, 30)
|
||||
@ -46,10 +51,13 @@ abstract class LibTest : LibBase() {
|
||||
@Test
|
||||
fun walletSync() {
|
||||
val blockchainConfig = ElectrumConfig("ssl://electrum.blockstream.info:60002", null, 5, 30)
|
||||
val databaseConfig = MemoryConfig()
|
||||
val testDataDir = getTestDataDir()
|
||||
log.debug("testDataDir = $testDataDir")
|
||||
val databaseConfig = SledConfig(testDataDir, "steve-test")
|
||||
val wallet = Wallet(desc, change, blockchainConfig, databaseConfig)
|
||||
assertNotNull(wallet)
|
||||
wallet.sync()
|
||||
cleanupTestDataDir()
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -1,3 +1,5 @@
|
||||
use crate::blockchain::BlockchainConfig;
|
||||
use crate::database::DatabaseConfig;
|
||||
use crate::error::get_name;
|
||||
use ::safer_ffi::prelude::*;
|
||||
use bdk::bitcoin::network::constants::Network::Testnet;
|
||||
@ -10,8 +12,6 @@ use bdk::wallet::AddressIndex::New;
|
||||
use bdk::{Error, Wallet};
|
||||
use safer_ffi::boxed::Box;
|
||||
use safer_ffi::char_p::{char_p_boxed, char_p_ref};
|
||||
use crate::blockchain::BlockchainConfig;
|
||||
use crate::database::DatabaseConfig;
|
||||
|
||||
#[derive_ReprC]
|
||||
#[ReprC::opaque]
|
||||
@ -86,7 +86,6 @@ fn new_wallet_result(
|
||||
blockchain_config: &BlockchainConfig,
|
||||
database_config: &DatabaseConfig,
|
||||
) -> Box<WalletResult> {
|
||||
|
||||
let descriptor = descriptor.to_string();
|
||||
let change_descriptor = change_descriptor.map(|s| s.to_string());
|
||||
let bc_config = &blockchain_config.raw;
|
||||
|
Loading…
x
Reference in New Issue
Block a user