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:
Kevin Gorham 2018-11-28 18:00:21 -05:00 committed by Jack Grigg
parent c9f11c6d2b
commit afc9a57d5d
No known key found for this signature in database
GPG Key ID: 1B8D649257DB0829
5 changed files with 87 additions and 43 deletions

View File

@ -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)
}
}
}

View File

@ -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()
}
}
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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
}
}