checkpoint. DB works
Updated tests and found the root problem was with the SQL export, meaning everything is actually working as expected.
This commit is contained in:
parent
c9f11c6d2b
commit
afc9a57d5d
|
@ -4,18 +4,17 @@ import androidx.arch.core.executor.testing.InstantTaskExecutorRule
|
|||
import androidx.room.Room
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import cash.z.wallet.sdk.db.CompactBlockDb
|
||||
import org.junit.Assert.assertNotNull
|
||||
import org.junit.Before
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import cash.z.wallet.sdk.vo.CompactBlock
|
||||
import org.junit.*
|
||||
import org.junit.Assert.*
|
||||
|
||||
class ComplactBlockDaoTest {
|
||||
|
||||
@get:Rule
|
||||
var instantTaskExecutorRule = InstantTaskExecutorRule()
|
||||
|
||||
private var dao: CompactBlockDao? = null
|
||||
private var db: CompactBlockDb? = null
|
||||
private lateinit var dao: CompactBlockDao
|
||||
private lateinit var db: CompactBlockDb
|
||||
|
||||
@Before
|
||||
fun initDb() {
|
||||
|
@ -27,6 +26,11 @@ class ComplactBlockDaoTest {
|
|||
.apply { dao = complactBlockDao() }
|
||||
}
|
||||
|
||||
@After
|
||||
fun close() {
|
||||
db.close()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testDbExists() {
|
||||
assertNotNull(db)
|
||||
|
@ -36,4 +40,16 @@ class ComplactBlockDaoTest {
|
|||
fun testDaoExists() {
|
||||
assertNotNull(dao)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testDaoInsert() {
|
||||
CompactBlock(343899, "sample".toByteArray()).let { block ->
|
||||
dao.insert(block)
|
||||
val result = dao.findById(block.height)
|
||||
assertEquals(block.height, result?.height)
|
||||
assertTrue(block.data.contentEquals(result!!.data))
|
||||
dao.delete(block)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -2,32 +2,17 @@ package cash.z.wallet.sdk.db
|
|||
|
||||
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
|
||||
import androidx.room.Room
|
||||
import androidx.room.RoomDatabase
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import cash.z.wallet.sdk.dao.CompactBlockDao
|
||||
import cash.z.wallet.sdk.vo.CompactBlock
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertNotNull
|
||||
import org.junit.Before
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.*
|
||||
import org.junit.Assert.*
|
||||
|
||||
class DbIntegrationTest {
|
||||
@get:Rule
|
||||
var instantTaskExecutorRule = InstantTaskExecutorRule()
|
||||
|
||||
private var dao: CompactBlockDao? = null
|
||||
private var db: CompactBlockDb? = null
|
||||
|
||||
@Before
|
||||
fun initDb() {
|
||||
// create real DB to inspect
|
||||
db = Room
|
||||
.databaseBuilder(ApplicationProvider.getApplicationContext(), CompactBlockDb::class.java, "compact-block.db")
|
||||
.fallbackToDestructiveMigration()
|
||||
.build()
|
||||
.apply { dao = complactBlockDao() }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testDbExists() {
|
||||
assertNotNull(db)
|
||||
|
@ -36,11 +21,35 @@ class DbIntegrationTest {
|
|||
@Test
|
||||
fun testDaoExists() {
|
||||
assertNotNull(dao)
|
||||
dao?.insert(CompactBlock(21))
|
||||
dao?.insert(CompactBlock(18))
|
||||
}
|
||||
|
||||
val block = dao?.findById(18)
|
||||
assertNotNull(block)
|
||||
assertEquals(18, block?.height)
|
||||
@Test
|
||||
fun testDaoPrepopulated() {
|
||||
dao.findById(343900).apply {
|
||||
assertEquals(343900, this?.height)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private lateinit var dao: CompactBlockDao
|
||||
private lateinit var db: CompactBlockDb
|
||||
|
||||
@BeforeClass
|
||||
@JvmStatic
|
||||
fun setup() {
|
||||
// TODO: put this database in the assets directory and open it from there via .openHelperFactory(new AssetSQLiteOpenHelperFactory()) seen here https://github.com/albertogiunta/sqliteAsset
|
||||
db = Room
|
||||
.databaseBuilder(ApplicationProvider.getApplicationContext(), CompactBlockDb::class.java, "compact-blocks.db")
|
||||
.setJournalMode(RoomDatabase.JournalMode.TRUNCATE)
|
||||
.fallbackToDestructiveMigration()
|
||||
.build()
|
||||
.apply { dao = complactBlockDao() }
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
@JvmStatic
|
||||
fun close() {
|
||||
db.close()
|
||||
}
|
||||
}
|
||||
}
|
|
@ -23,12 +23,11 @@ class JniConverterTest {
|
|||
fun testScanBlocks() {
|
||||
// note: for this to work, the db file below must be uploaded to the device. Eventually, this test will be self-contained and remove that requirement.
|
||||
val result = converter.scanBlocks(
|
||||
"/data/user/0/cash.z.wallet.sdk.test/databases/dummy-cache.db",
|
||||
"/data/user/0/cash.z.wallet.sdk.test/databases/compact-block.db",
|
||||
343900,
|
||||
354446,
|
||||
344855,
|
||||
"dummyseed".toByteArray()
|
||||
)
|
||||
val expectedAddress = "ztestsapling1snmqdnfqnc407pvqw7sld8w5zxx6nd0523kvlj4jf39uvxvh7vn0hs3q38n07806dwwecqwke3t"
|
||||
assertEquals("Invalid number of results", 2, result.size)
|
||||
}
|
||||
|
||||
|
|
|
@ -1,10 +1,6 @@
|
|||
package cash.z.wallet.sdk.dao
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy
|
||||
import androidx.room.Query
|
||||
import androidx.room.*
|
||||
import cash.z.wallet.sdk.vo.CompactBlock
|
||||
|
||||
@Dao
|
||||
|
@ -12,6 +8,12 @@ interface CompactBlockDao {
|
|||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
fun insert(block: CompactBlock)
|
||||
|
||||
@Query("SELECT * FROM CompactBlock WHERE height = :height")
|
||||
fun findById(height: Int): CompactBlock
|
||||
@Query("SELECT * FROM compactblocks WHERE height = :height")
|
||||
fun findById(height: Int): CompactBlock?
|
||||
|
||||
@Query("DELETE FROM compactblocks WHERE height = :height")
|
||||
fun deleteById(height: Int)
|
||||
|
||||
@Delete
|
||||
fun delete(block: CompactBlock)
|
||||
}
|
|
@ -1,9 +1,27 @@
|
|||
package cash.z.wallet.sdk.vo
|
||||
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
|
||||
@Entity(primaryKeys = ["height"])
|
||||
@Entity(primaryKeys = ["height"], tableName = "compactblocks")
|
||||
data class CompactBlock(
|
||||
val height: Int/*,
|
||||
val data: Any*/
|
||||
)
|
||||
val height: Int,
|
||||
@ColumnInfo(typeAffinity = ColumnInfo.BLOB)
|
||||
val data: ByteArray
|
||||
) {
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (other !is CompactBlock) return false
|
||||
|
||||
if (height != other.height) return false
|
||||
if (!data.contentEquals(other.data)) return false
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
var result = height
|
||||
result = 31 * result + data.contentHashCode()
|
||||
return result
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue