Rename Lib to LibJna, add LibBase abstract class

This commit is contained in:
Steve Myers 2021-06-21 14:55:56 -07:00
parent adb54e3b87
commit e6fabc81b3
3 changed files with 26 additions and 19 deletions

View File

@ -0,0 +1,9 @@
package org.bitcoindevkit.bdk
import com.sun.jna.Native
abstract class LibBase {
protected val libJna: LibJna
get() = Native.load("bdk_ffi", LibJna::class.java)
}

View File

@ -2,7 +2,7 @@ package org.bitcoindevkit.bdk
import com.sun.jna.* import com.sun.jna.*
interface Lib : Library { interface LibJna : Library {
// typedef struct VoidResult VoidResult_t; // typedef struct VoidResult VoidResult_t;
class VoidResult_t : PointerType { class VoidResult_t : PointerType {

View File

@ -1,6 +1,5 @@
package org.bitcoindevkit.bdk package org.bitcoindevkit.bdk
import com.sun.jna.Native
import org.junit.* import org.junit.*
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.slf4j.Logger import org.slf4j.Logger
@ -14,11 +13,10 @@ import kotlin.test.assertNull
*/ */
abstract class LibTest { abstract class LibTest {
companion object { companion object : LibBase() {
private val log: Logger = LoggerFactory.getLogger(LibTest::class.java) private val log: Logger = LoggerFactory.getLogger(LibTest::class.java)
private val bdkFfi: Lib = Native.load("bdk_ffi", Lib::class.java) private lateinit var wallet_result: LibJna.WalletResult_t
private lateinit var wallet_result: Lib.WalletResult_t
@BeforeClass @BeforeClass
@JvmStatic @JvmStatic
@ -29,45 +27,45 @@ abstract class LibTest {
val change = val change =
"wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/1/*)" "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/1/*)"
wallet_result = bdkFfi.new_wallet_result(name, desc, change) wallet_result = libJna.new_wallet_result(name, desc, change)
log.debug("wallet created") log.debug("wallet created")
} }
@AfterClass @AfterClass
@JvmStatic @JvmStatic
fun free_wallet() { fun free_wallet() {
bdkFfi.free_wallet_result(wallet_result) libJna.free_wallet_result(wallet_result)
log.debug("wallet freed") log.debug("wallet freed")
} }
} }
@Test @Test
fun wallet_sync_error() { fun wallet_sync_error() {
val bad_wallet_result = bdkFfi.new_wallet_result("test", "bad", null) val bad_wallet_result = libJna.new_wallet_result("test", "bad", null)
log.debug("wallet result created") log.debug("wallet result created")
val sync_result = bdkFfi.sync_wallet(bad_wallet_result) val sync_result = libJna.sync_wallet(bad_wallet_result)
val sync_err_pointer = bdkFfi.get_void_err(sync_result) val sync_err_pointer = libJna.get_void_err(sync_result)
assertNotNull(sync_err_pointer) assertNotNull(sync_err_pointer)
val sync_err = sync_err_pointer!!.getString(0) val sync_err = sync_err_pointer.getString(0)
log.debug("wallet sync error $sync_err") log.debug("wallet sync error $sync_err")
} }
@Test @Test
fun sync() { fun sync() {
val sync_result = bdkFfi.sync_wallet(wallet_result) val sync_result = libJna.sync_wallet(wallet_result)
assertNull(bdkFfi.get_void_err(sync_result)) assertNull(libJna.get_void_err(sync_result))
bdkFfi.free_void_result(sync_result) libJna.free_void_result(sync_result)
} }
@Test @Test
fun new_newaddress_wallet() { fun new_newaddress_wallet() {
val address_result = bdkFfi.new_address(wallet_result) val address_result = libJna.new_address(wallet_result)
assertNull(bdkFfi.get_string_err(address_result)) assertNull(libJna.get_string_err(address_result))
val address_pointer = bdkFfi.get_string_ok(address_result); val address_pointer = libJna.get_string_ok(address_result);
val address = address_pointer!!.getString(0) val address = address_pointer!!.getString(0)
bdkFfi.free_string_result(address_result) libJna.free_string_result(address_result)
bdkFfi.free_string(address_pointer) libJna.free_string(address_pointer)
log.debug("address created from kotlin: $address") log.debug("address created from kotlin: $address")
assertEquals(address, "tb1qzg4mckdh50nwdm9hkzq06528rsu73hjxxzem3e") assertEquals(address, "tb1qzg4mckdh50nwdm9hkzq06528rsu73hjxxzem3e")
} }