You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
 
 

104 lines
3.3 KiB

package cash.z.ecc.android.sdk
import android.content.Context
import androidx.test.core.app.ApplicationProvider
import androidx.test.filters.SmallTest
import cash.z.ecc.android.sdk.model.ZcashNetwork
import cash.z.ecc.android.sdk.tool.CheckpointTool
import kotlinx.coroutines.runBlocking
import org.json.JSONObject
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
class AssetTest {
@Test
@SmallTest
fun validate_mainnet_assets() {
val network = ZcashNetwork.Mainnet
val assets = listAssets(network)
assertFilesExist(assets)
assertFilenames(assets)
assertFileContents(network, assets)
}
@Test
@SmallTest
fun validate_testnet_assets() {
val network = ZcashNetwork.Testnet
val assets = listAssets(network)
assertFilesExist(assets)
assertFilenames(assets)
assertFileContents(network, assets)
}
private fun assertFilesExist(files: Array<String>?) {
assertFalse(files.isNullOrEmpty())
}
private fun assertFilenames(files: Array<String>?) {
files?.forEach {
val split = it.split('.')
assertEquals(2, split.size)
val intString = split.first()
val extensionString = split.last()
// Will throw exception if cannot be parsed
intString.toInt()
assertEquals("json", extensionString)
}
}
private fun assertFileContents(network: ZcashNetwork, files: Array<String>?) {
files?.map { filename ->
val filePath = "${CheckpointTool.checkpointDirectory(network)}/$filename"
ApplicationProvider.getApplicationContext<Context>().assets.open(filePath)
.use { inputSteam ->
inputSteam.bufferedReader().use { bufferedReader ->
val slurped = bufferedReader.readText()
JsonFile(JSONObject(slurped), filename)
}
}
}?.forEach {
val jsonObject = it.jsonObject
assertTrue(jsonObject.has("network"))
assertTrue(jsonObject.has("height"))
assertTrue(jsonObject.has("hash"))
assertTrue(jsonObject.has("time"))
assertTrue(jsonObject.has("saplingTree"))
val expectedNetworkName = when (network) {
ZcashNetwork.Mainnet -> "main"
ZcashNetwork.Testnet -> "test"
else -> IllegalArgumentException("Unsupported network $network")
}
assertEquals("File: ${it.filename}", expectedNetworkName, jsonObject.getString("network"))
assertEquals(
"File: ${it.filename}",
CheckpointTool.checkpointHeightFromFilename(network, it.filename),
jsonObject.getInt("height")
)
// In the future, additional validation of the JSON can be added
}
}
private data class JsonFile(val jsonObject: JSONObject, val filename: String)
companion object {
fun listAssets(network: ZcashNetwork) = runBlocking {
CheckpointTool.listCheckpointDirectoryContents(
ApplicationProvider.getApplicationContext<Context>(),
CheckpointTool.checkpointDirectory(network)
)
}
}
}