diff --git a/src/androidTest/java/cash/z/wallet/sdk/dao/ComplactBlockDaoTest.kt b/src/androidTest/java/cash/z/wallet/sdk/dao/ComplactBlockDaoTest.kt index 15e9d05b..a980b285 100644 --- a/src/androidTest/java/cash/z/wallet/sdk/dao/ComplactBlockDaoTest.kt +++ b/src/androidTest/java/cash/z/wallet/sdk/dao/ComplactBlockDaoTest.kt @@ -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) + } + } + } \ No newline at end of file diff --git a/src/androidTest/java/cash/z/wallet/sdk/db/DbIntegrationTest.kt b/src/androidTest/java/cash/z/wallet/sdk/db/DbIntegrationTest.kt index f61ff345..cdfef85d 100644 --- a/src/androidTest/java/cash/z/wallet/sdk/db/DbIntegrationTest.kt +++ b/src/androidTest/java/cash/z/wallet/sdk/db/DbIntegrationTest.kt @@ -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() + } } } \ No newline at end of file diff --git a/src/androidTest/java/cash/z/wallet/sdk/jni/JniConverterTest.kt b/src/androidTest/java/cash/z/wallet/sdk/jni/JniConverterTest.kt index d5b1e4f1..ee12ab46 100644 --- a/src/androidTest/java/cash/z/wallet/sdk/jni/JniConverterTest.kt +++ b/src/androidTest/java/cash/z/wallet/sdk/jni/JniConverterTest.kt @@ -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) } diff --git a/src/main/java/cash/z/wallet/sdk/dao/CompactBlockDao.kt b/src/main/java/cash/z/wallet/sdk/dao/CompactBlockDao.kt index a9eb9a6c..663e5a5c 100644 --- a/src/main/java/cash/z/wallet/sdk/dao/CompactBlockDao.kt +++ b/src/main/java/cash/z/wallet/sdk/dao/CompactBlockDao.kt @@ -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) } \ No newline at end of file diff --git a/src/main/java/cash/z/wallet/sdk/vo/CompactBlock.kt b/src/main/java/cash/z/wallet/sdk/vo/CompactBlock.kt index 36022cbb..69b3805c 100644 --- a/src/main/java/cash/z/wallet/sdk/vo/CompactBlock.kt +++ b/src/main/java/cash/z/wallet/sdk/vo/CompactBlock.kt @@ -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*/ -) \ No newline at end of file + 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 + } +} \ No newline at end of file