Skip to content

Commit

Permalink
Wrapped most of integration tests with awkward JUnit5 timeouts
Browse files Browse the repository at this point in the history
  • Loading branch information
Mingela committed Nov 29, 2018
1 parent f9de84d commit 64cf7e6
Show file tree
Hide file tree
Showing 20 changed files with 1,965 additions and 1,720 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package integration.btc

import generation.btc.BtcAddressGenerationInitialization
import integration.helper.ConfigHelper
import integration.helper.IntegrationHelperUtil
import kotlinx.coroutines.experimental.launch
import model.IrohaCredential
Expand All @@ -11,8 +12,7 @@ import org.bitcoinj.params.RegTestParams
import org.bitcoinj.script.ScriptBuilder
import org.bitcoinj.wallet.Wallet
import org.junit.jupiter.api.AfterAll
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertNotNull
import org.junit.jupiter.api.Assertions.*
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.junit.jupiter.api.fail
Expand All @@ -28,6 +28,7 @@ import sidechain.iroha.consumer.IrohaConsumerImpl
import sidechain.iroha.util.ModelUtil
import wallet.WalletFile
import java.io.File
import java.time.Duration

private const val WAIT_PREGEN_INIT_MILLIS = 10_000L
private const val WAIT_PREGEN_PROCESS_MILLIS = 15_000L
Expand Down Expand Up @@ -87,6 +88,8 @@ class BtcAddressGenerationIntegrationTest {
integrationHelper.irohaNetwork
)

private val timeoutDuration = Duration.ofMinutes(ConfigHelper.timeoutMinutes)

@AfterAll
fun dropDown() {
integrationHelper.close()
Expand Down Expand Up @@ -121,30 +124,32 @@ class BtcAddressGenerationIntegrationTest {
*/
@Test
fun testGenerateFreeAddress() {
val sessionAccountName = BtcAddressType.FREE.createSessionAccountName()
btcKeyGenSessionProvider.createPubKeyCreationSession(sessionAccountName)
.fold({ logger.info { "session $sessionAccountName was created" } },
{ ex -> fail("cannot create session", ex) })
triggerProvider.trigger(sessionAccountName)
Thread.sleep(WAIT_PREGEN_PROCESS_MILLIS)
val sessionDetails =
integrationHelper.getAccountDetails(
"$sessionAccountName@btcSession",
btcGenerationConfig.registrationAccount.accountId
)
val pubKey = sessionDetails.values.iterator().next()
assertNotNull(pubKey)
val wallet = Wallet.loadFromFile(File(btcGenerationConfig.btcWalletFilePath))
assertNotNull(wallet.issuedReceiveKeys.find { ecKey -> ecKey.publicKeyAsHex == pubKey })
val notaryAccountDetails =
integrationHelper.getAccountDetails(
btcGenerationConfig.notaryAccount,
btcGenerationConfig.mstRegistrationAccount.accountId
)
val expectedMsAddress = createMsAddress(sessionDetails.values)
val generatedAddress = AddressInfo.fromJson(notaryAccountDetails[expectedMsAddress]!!)!!
assertEquals(BtcAddressType.FREE.title, generatedAddress.irohaClient)
assertEquals(sessionDetails.values.toList(), generatedAddress.notaryKeys.toList())
assertTimeoutPreemptively(timeoutDuration) {
val sessionAccountName = BtcAddressType.FREE.createSessionAccountName()
btcKeyGenSessionProvider.createPubKeyCreationSession(sessionAccountName)
.fold({ logger.info { "session $sessionAccountName was created" } },
{ ex -> fail("cannot create session", ex) })
triggerProvider.trigger(sessionAccountName)
Thread.sleep(WAIT_PREGEN_PROCESS_MILLIS)
val sessionDetails =
integrationHelper.getAccountDetails(
"$sessionAccountName@btcSession",
btcGenerationConfig.registrationAccount.accountId
)
val pubKey = sessionDetails.values.iterator().next()
assertNotNull(pubKey)
val wallet = Wallet.loadFromFile(File(btcGenerationConfig.btcWalletFilePath))
assertNotNull(wallet.issuedReceiveKeys.find { ecKey -> ecKey.publicKeyAsHex == pubKey })
val notaryAccountDetails =
integrationHelper.getAccountDetails(
btcGenerationConfig.notaryAccount,
btcGenerationConfig.mstRegistrationAccount.accountId
)
val expectedMsAddress = createMsAddress(sessionDetails.values)
val generatedAddress = AddressInfo.fromJson(notaryAccountDetails[expectedMsAddress]!!)!!
assertEquals(BtcAddressType.FREE.title, generatedAddress.irohaClient)
assertEquals(sessionDetails.values.toList(), generatedAddress.notaryKeys.toList())
}
}

/**
Expand All @@ -155,30 +160,32 @@ class BtcAddressGenerationIntegrationTest {
*/
@Test
fun testGenerateChangeAddress() {
val sessionAccountName = BtcAddressType.CHANGE.createSessionAccountName()
btcKeyGenSessionProvider.createPubKeyCreationSession(sessionAccountName)
.fold({ logger.info { "session $sessionAccountName was created" } },
{ ex -> fail("cannot create session", ex) })
triggerProvider.trigger(sessionAccountName)
Thread.sleep(WAIT_PREGEN_PROCESS_MILLIS)
val sessionDetails =
integrationHelper.getAccountDetails(
"$sessionAccountName@btcSession",
btcGenerationConfig.registrationAccount.accountId
)
val pubKey = sessionDetails.values.iterator().next()
assertNotNull(pubKey)
val wallet = Wallet.loadFromFile(File(btcGenerationConfig.btcWalletFilePath))
assertNotNull(wallet.issuedReceiveKeys.find { ecKey -> ecKey.publicKeyAsHex == pubKey })
val changeAddressStorageAccountDetails =
integrationHelper.getAccountDetails(
btcGenerationConfig.changeAddressesStorageAccount,
btcGenerationConfig.mstRegistrationAccount.accountId
)
val expectedMsAddress = createMsAddress(sessionDetails.values)
val generatedAddress = AddressInfo.fromJson(changeAddressStorageAccountDetails[expectedMsAddress]!!)!!
assertEquals(BtcAddressType.CHANGE.title, generatedAddress.irohaClient)
assertEquals(sessionDetails.values.toList(), generatedAddress.notaryKeys.toList())
assertTimeoutPreemptively(timeoutDuration) {
val sessionAccountName = BtcAddressType.CHANGE.createSessionAccountName()
btcKeyGenSessionProvider.createPubKeyCreationSession(sessionAccountName)
.fold({ logger.info { "session $sessionAccountName was created" } },
{ ex -> fail("cannot create session", ex) })
triggerProvider.trigger(sessionAccountName)
Thread.sleep(WAIT_PREGEN_PROCESS_MILLIS)
val sessionDetails =
integrationHelper.getAccountDetails(
"$sessionAccountName@btcSession",
btcGenerationConfig.registrationAccount.accountId
)
val pubKey = sessionDetails.values.iterator().next()
assertNotNull(pubKey)
val wallet = Wallet.loadFromFile(File(btcGenerationConfig.btcWalletFilePath))
assertNotNull(wallet.issuedReceiveKeys.find { ecKey -> ecKey.publicKeyAsHex == pubKey })
val changeAddressStorageAccountDetails =
integrationHelper.getAccountDetails(
btcGenerationConfig.changeAddressesStorageAccount,
btcGenerationConfig.mstRegistrationAccount.accountId
)
val expectedMsAddress = createMsAddress(sessionDetails.values)
val generatedAddress = AddressInfo.fromJson(changeAddressStorageAccountDetails[expectedMsAddress]!!)!!
assertEquals(BtcAddressType.CHANGE.title, generatedAddress.irohaClient)
assertEquals(sessionDetails.values.toList(), generatedAddress.notaryKeys.toList())
}
}

private fun btcPublicKeyProvider(): BtcPublicKeyProvider {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@ package integration.btc

import com.github.kittinunf.result.failure
import handler.btc.NewBtcClientRegistrationHandler
import integration.helper.ConfigHelper
import integration.helper.IntegrationHelperUtil
import integration.helper.btcAsset
import listener.btc.NewBtcClientRegistrationListener
import model.IrohaCredential
import notary.btc.BtcNotaryInitialization
import org.bitcoinj.core.Address
import org.junit.jupiter.api.AfterAll
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.Assertions.*
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.junit.jupiter.api.fail
Expand All @@ -22,6 +22,7 @@ import sidechain.iroha.util.ModelUtil
import util.getRandomString
import java.io.File
import java.math.BigDecimal
import java.time.Duration

private val integrationHelper = IntegrationHelperUtil()

Expand Down Expand Up @@ -63,6 +64,8 @@ class BtcNotaryIntegrationTest {
btcNetworkConfigProvider
)

private val timeoutDuration = Duration.ofMinutes(ConfigHelper.timeoutMinutes)

@AfterAll
fun dropDown() {
integrationHelper.close()
Expand Down Expand Up @@ -91,22 +94,24 @@ class BtcNotaryIntegrationTest {
*/
@Test
fun testDeposit() {
val randomName = String.getRandomString(9)
val testClient = "$randomName@$CLIENT_DOMAIN"
val btcAddress = integrationHelper.registerBtcAddress(notaryConfig.bitcoin.walletPath, randomName)
val initialBalance = integrationHelper.getIrohaAccountBalance(
testClient,
btcAsset
)
val btcAmount = 1
integrationHelper.sendBtc(btcAddress, btcAmount)
Thread.sleep(20_000)
val newBalance = integrationHelper.getIrohaAccountBalance(testClient, btcAsset)
assertEquals(
BigDecimal(initialBalance).add(integrationHelper.btcToSat(btcAmount).toBigDecimal()).toString(),
newBalance
)
assertTrue(btcNotaryInitialization.isWatchedAddress(btcAddress))
assertTimeoutPreemptively(timeoutDuration) {
val randomName = String.getRandomString(9)
val testClient = "$randomName@$CLIENT_DOMAIN"
val btcAddress = integrationHelper.registerBtcAddress(notaryConfig.bitcoin.walletPath, randomName)
val initialBalance = integrationHelper.getIrohaAccountBalance(
testClient,
btcAsset
)
val btcAmount = 1
integrationHelper.sendBtc(btcAddress, btcAmount)
Thread.sleep(20_000)
val newBalance = integrationHelper.getIrohaAccountBalance(testClient, btcAsset)
assertEquals(
BigDecimal(initialBalance).add(integrationHelper.btcToSat(btcAmount).toBigDecimal()).toString(),
newBalance
)
assertTrue(btcNotaryInitialization.isWatchedAddress(btcAddress))
}
}

/**
Expand All @@ -118,27 +123,29 @@ class BtcNotaryIntegrationTest {
*/
@Test
fun testMultipleDeposit() {
val totalDeposits = 3
val randomName = String.getRandomString(9)
val testClient = "$randomName@$CLIENT_DOMAIN"
val btcAddress = integrationHelper.registerBtcAddress(notaryConfig.bitcoin.walletPath, randomName)
val initialBalance = integrationHelper.getIrohaAccountBalance(
testClient,
btcAsset
)
val btcAmount = 1
for (deposit in 1..totalDeposits) {
integrationHelper.sendBtc(btcAddress, btcAmount)
Thread.sleep(20_000)
assertTimeoutPreemptively(timeoutDuration) {
val totalDeposits = 3
val randomName = String.getRandomString(9)
val testClient = "$randomName@$CLIENT_DOMAIN"
val btcAddress = integrationHelper.registerBtcAddress(notaryConfig.bitcoin.walletPath, randomName)
val initialBalance = integrationHelper.getIrohaAccountBalance(
testClient,
btcAsset
)
val btcAmount = 1
for (deposit in 1..totalDeposits) {
integrationHelper.sendBtc(btcAddress, btcAmount)
Thread.sleep(20_000)
}
val newBalance = integrationHelper.getIrohaAccountBalance(testClient, btcAsset)
assertEquals(
BigDecimal(initialBalance).add(integrationHelper.btcToSat(btcAmount).toBigDecimal()).multiply(
totalDeposits.toBigDecimal()
).toString(),
newBalance
)
assertTrue(btcNotaryInitialization.isWatchedAddress(btcAddress))
}
val newBalance = integrationHelper.getIrohaAccountBalance(testClient, btcAsset)
assertEquals(
BigDecimal(initialBalance).add(integrationHelper.btcToSat(btcAmount).toBigDecimal()).multiply(
totalDeposits.toBigDecimal()
).toString(),
newBalance
)
assertTrue(btcNotaryInitialization.isWatchedAddress(btcAddress))
}

/**
Expand All @@ -150,19 +157,21 @@ class BtcNotaryIntegrationTest {
*/
@Test
fun testDepositNotConfirmed() {
val randomName = String.getRandomString(9)
val testClient = "$randomName@$CLIENT_DOMAIN"
val btcAddress = integrationHelper.registerBtcAddress(notaryConfig.bitcoin.walletPath, randomName)
val initialBalance = integrationHelper.getIrohaAccountBalance(
testClient,
btcAsset
)
val btcAmount = 1
integrationHelper.sendBtc(btcAddress, btcAmount, notaryConfig.bitcoin.confidenceLevel - 1)
Thread.sleep(20_000)
val newBalance = integrationHelper.getIrohaAccountBalance(testClient, btcAsset)
assertEquals(initialBalance, newBalance)
assertTrue(btcNotaryInitialization.isWatchedAddress(btcAddress))
assertTimeoutPreemptively(timeoutDuration) {
val randomName = String.getRandomString(9)
val testClient = "$randomName@$CLIENT_DOMAIN"
val btcAddress = integrationHelper.registerBtcAddress(notaryConfig.bitcoin.walletPath, randomName)
val initialBalance = integrationHelper.getIrohaAccountBalance(
testClient,
btcAsset
)
val btcAmount = 1
integrationHelper.sendBtc(btcAddress, btcAmount, notaryConfig.bitcoin.confidenceLevel - 1)
Thread.sleep(20_000)
val newBalance = integrationHelper.getIrohaAccountBalance(testClient, btcAsset)
assertEquals(initialBalance, newBalance)
assertTrue(btcNotaryInitialization.isWatchedAddress(btcAddress))
}
}

/**
Expand All @@ -174,27 +183,29 @@ class BtcNotaryIntegrationTest {
*/
@Test
fun testDepositConfirmation() {
val randomName = String.getRandomString(9)
val testClient = "$randomName@$CLIENT_DOMAIN"
val btcAddress = integrationHelper.registerBtcAddress(notaryConfig.bitcoin.walletPath, randomName)
val initialBalance = integrationHelper.getIrohaAccountBalance(
testClient,
btcAsset
)
val btcAmount = 1
integrationHelper.sendBtc(btcAddress, btcAmount, 0)
Thread.sleep(20_000)
for (confirmation in 1..notaryConfig.bitcoin.confidenceLevel) {
Thread.sleep(150)
integrationHelper.generateBtcBlocks(1)
assertTimeoutPreemptively(timeoutDuration) {
val randomName = String.getRandomString(9)
val testClient = "$randomName@$CLIENT_DOMAIN"
val btcAddress = integrationHelper.registerBtcAddress(notaryConfig.bitcoin.walletPath, randomName)
val initialBalance = integrationHelper.getIrohaAccountBalance(
testClient,
btcAsset
)
val btcAmount = 1
integrationHelper.sendBtc(btcAddress, btcAmount, 0)
Thread.sleep(20_000)
for (confirmation in 1..notaryConfig.bitcoin.confidenceLevel) {
Thread.sleep(150)
integrationHelper.generateBtcBlocks(1)
}
Thread.sleep(20_000)
val newBalance = integrationHelper.getIrohaAccountBalance(testClient, btcAsset)
assertEquals(
BigDecimal(initialBalance).add(integrationHelper.btcToSat(btcAmount).toBigDecimal()).toString(),
newBalance
)
assertTrue(btcNotaryInitialization.isWatchedAddress(btcAddress))
}
Thread.sleep(20_000)
val newBalance = integrationHelper.getIrohaAccountBalance(testClient, btcAsset)
assertEquals(
BigDecimal(initialBalance).add(integrationHelper.btcToSat(btcAmount).toBigDecimal()).toString(),
newBalance
)
assertTrue(btcNotaryInitialization.isWatchedAddress(btcAddress))
}

//Checks if address is in set of watched address
Expand Down
Loading

0 comments on commit 64cf7e6

Please sign in to comment.