mirror of
https://github.com/bitcoin-s/bitcoin-s.git
synced 2025-02-23 14:50:42 +01:00
Add ProcessTransactionTest
This commit is contained in:
parent
5a04260461
commit
06b8375c81
1 changed files with 94 additions and 0 deletions
|
@ -0,0 +1,94 @@
|
|||
package org.bitcoins.wallet
|
||||
|
||||
import org.bitcoins.testkit.wallet.BitcoinSWalletTest
|
||||
import org.scalatest.FutureOutcome
|
||||
import org.bitcoins.core.currency._
|
||||
import scala.concurrent.Future
|
||||
import org.scalatest.compatible.Assertion
|
||||
import org.bitcoins.wallet.api.UnlockedWalletApi
|
||||
import org.bitcoins.rpc.client.common.BitcoindRpcClient
|
||||
|
||||
class ProcessTransactionTest extends BitcoinSWalletTest {
|
||||
override type FixtureParam = WalletWithBitcoind
|
||||
|
||||
def withFixture(test: OneArgAsyncTest): FutureOutcome = {
|
||||
withNewWalletAndBitcoind(test)
|
||||
}
|
||||
|
||||
behavior of "Wallet.processTransaction"
|
||||
|
||||
/** Verifies that executing the given action doesn't change wallet state */
|
||||
private def checkUtxosAndBalance(
|
||||
wallet: UnlockedWalletApi,
|
||||
bitcoind: BitcoindRpcClient)(action: => Future[_]): Future[Assertion] =
|
||||
for {
|
||||
oldUtxos <- wallet.listUtxos()
|
||||
oldUnconfirmed <- wallet.getUnconfirmedBalance()
|
||||
oldConfirmed <- wallet.getBalance()
|
||||
_ <- action // by name
|
||||
newUtxos <- wallet.listUtxos()
|
||||
newUnconfirmed <- wallet.getUnconfirmedBalance()
|
||||
newConfirmed <- wallet.getBalance()
|
||||
|
||||
} yield {
|
||||
assert(oldConfirmed == newConfirmed)
|
||||
assert(oldUnconfirmed == oldUnconfirmed)
|
||||
assert(oldUtxos == newUtxos)
|
||||
}
|
||||
|
||||
it must "not change state when processing the same transaction twice" in {
|
||||
walletAndBitcoind =>
|
||||
val WalletWithBitcoind(wallet, bitcoind) = walletAndBitcoind
|
||||
|
||||
for {
|
||||
address <- wallet.getNewAddress()
|
||||
tx <- bitcoind
|
||||
.sendToAddress(address, 1.bitcoin)
|
||||
.flatMap(bitcoind.getRawTransactionRaw(_))
|
||||
|
||||
_ <- wallet.processTransaction(tx, confirmations = 0)
|
||||
oldBalance <- wallet.getBalance()
|
||||
oldUnconfirmed <- wallet.getUnconfirmedBalance()
|
||||
|
||||
// repeating the action should not make a difference
|
||||
_ <- checkUtxosAndBalance(wallet, bitcoind) {
|
||||
wallet.processTransaction(tx, confirmations = 0)
|
||||
}
|
||||
|
||||
_ <- wallet.processTransaction(tx, confirmations = 3)
|
||||
newBalance <- wallet.getBalance()
|
||||
newUnconfirmed <- wallet.getUnconfirmedBalance()
|
||||
|
||||
// repeating the action should not make a difference
|
||||
_ <- checkUtxosAndBalance(wallet, bitcoind) {
|
||||
wallet.processTransaction(tx, confirmations = 3)
|
||||
}
|
||||
} yield {
|
||||
assert(newBalance != oldBalance)
|
||||
assert(newUnconfirmed != oldUnconfirmed)
|
||||
}
|
||||
}
|
||||
|
||||
it must "not change state when processing an unrelated transaction" in {
|
||||
walletAndBitcoind =>
|
||||
val WalletWithBitcoind(wallet, bitcoind) = walletAndBitcoind
|
||||
|
||||
for {
|
||||
unrelated <- bitcoind.getNewAddress
|
||||
.flatMap(bitcoind.sendToAddress(_, 1.bitcoin))
|
||||
.flatMap(bitcoind.getRawTransactionRaw(_))
|
||||
|
||||
_ <- checkUtxosAndBalance(wallet, bitcoind) {
|
||||
wallet.processTransaction(unrelated, confirmations = 4)
|
||||
}
|
||||
|
||||
balance <- wallet.getBalance()
|
||||
unconfirmed <- wallet.getUnconfirmedBalance()
|
||||
|
||||
} yield {
|
||||
assert(balance == 0.sats)
|
||||
assert(unconfirmed == 0.sats)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue