Skip to content

Commit

Permalink
Add Coverage For Save Method in WhitelistSupportImplTest
Browse files Browse the repository at this point in the history
- A new save method was added to WhitelistSupport, so we must add coverage.

Removing Magic Number

- Removing Magic Number and replacing it with a meaningful constant.

Apply ActivationConfigForTest

- Rather than activating specific RSKIPs, apply ActivationConfigsForTest class, use all() so we ensure the test keeps passing with future RSKIPs.
  • Loading branch information
wilmerrootstock authored and marcos-iov committed Jul 12, 2024
1 parent c2b56a7 commit 5dc3a30
Showing 1 changed file with 67 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.mock;

import co.rsk.bitcoinj.core.Address;
import co.rsk.bitcoinj.core.Coin;
import co.rsk.bitcoinj.core.NetworkParameters;
Expand All @@ -22,6 +20,7 @@
import java.util.List;
import org.apache.commons.lang3.tuple.Pair;
import org.ethereum.config.blockchain.upgrades.ActivationConfig;
import org.ethereum.config.blockchain.upgrades.ActivationConfigsForTest;
import org.ethereum.core.BlockTxSignatureCache;
import org.ethereum.core.ReceivedTxSignatureCache;
import org.ethereum.core.SignatureCache;
Expand All @@ -36,15 +35,17 @@ class WhitelistSupportImplTest {
private SignatureCache signatureCache;
private StorageAccessor inMemoryStorage;
private Address btcAddress;
private Address secondBtcAddress;

@BeforeEach
void setUp() {
inMemoryStorage = new InMemoryStorage();
WhitelistStorageProvider whitelistStorageProvider = new WhitelistStorageProviderImpl(inMemoryStorage);
ActivationConfig.ForBlock activationConfig = mock(ActivationConfig.ForBlock.class);
ActivationConfig.ForBlock activationConfig = ActivationConfigsForTest.all().forBlock(0);
signatureCache = new BlockTxSignatureCache(new ReceivedTxSignatureCache());
whitelistSupport = new WhitelistSupportImpl(whitelistConstants, whitelistStorageProvider, activationConfig, signatureCache);
btcAddress = BitcoinTestUtils.createP2PKHAddress(networkParameters, "btcAddress");
secondBtcAddress = BitcoinTestUtils.createP2PKHAddress(networkParameters, "secondBtcAddress");
}

@Test
Expand Down Expand Up @@ -104,6 +105,20 @@ void getLockWhitelistEntryByAddress_whenLockWhitelistHasEntries_shouldReturnOneO
assertEquals(btcAddress, actualLockWhitelistEntry.address());
}

private void saveInMemoryStorageOneOffWhiteListEntry() {
Coin maxTransferValue = Coin.COIN;
final int disableBlockHeight = 100;
OneOffWhiteListEntry oneOffWhiteListEntry = new OneOffWhiteListEntry(btcAddress, maxTransferValue);
List<OneOffWhiteListEntry> oneOffWhiteListEntries = Collections.singletonList(oneOffWhiteListEntry);
Pair<List<OneOffWhiteListEntry>, Integer> pairValue = Pair.of(oneOffWhiteListEntries, disableBlockHeight);

inMemoryStorage.safeSaveToRepository(
LOCK_ONE_OFF.getKey(),
pairValue,
BridgeSerializationUtils::serializeOneOffLockWhitelist
);
}

@Test
void getLockWhitelistEntryByAddress_whenAddressIsInvalid_shouldReturnNull() {
LockWhitelistEntry actualLockWhitelistEntry = whitelistSupport.getLockWhitelistEntryByAddress("invalidAddress");
Expand Down Expand Up @@ -293,16 +308,55 @@ void verifyLockSenderIsWhitelisted_whenAddressIsNotWhitelisted_shouldReturnFalse
assertFalse(actualResult);
}

private void saveInMemoryStorageOneOffWhiteListEntry() {
Coin maxTransferValue = Coin.COIN;
OneOffWhiteListEntry oneOffWhiteListEntry = new OneOffWhiteListEntry(btcAddress, maxTransferValue);
List<OneOffWhiteListEntry> oneOffWhiteListEntries = Collections.singletonList(oneOffWhiteListEntry);
Pair<List<OneOffWhiteListEntry>, Integer> pairValue = Pair.of(oneOffWhiteListEntries, 100);
@Test
void save_whenLockWhitelistIsNull_shouldReturnZeroEntries() {
whitelistSupport.save();

inMemoryStorage.safeSaveToRepository(
LOCK_ONE_OFF.getKey(),
pairValue,
BridgeSerializationUtils::serializeOneOffLockWhitelist
);
int actualSize = whitelistSupport.getLockWhitelistSize();
assertEquals(0, actualSize);
assertNull(whitelistSupport.getLockWhitelistEntryByIndex(0));
assertNull(whitelistSupport.getLockWhitelistEntryByIndex(1));
}

@Test
void save_whenOneOffLockWhitelistAddressIsWhitelisted_shouldSaveOneOffLockWhitelistAddress() {
Transaction tx = TransactionUtils.getTransactionFromCaller(signatureCache, WhitelistCaller.AUTHORIZED.getRskAddress());
whitelistSupport.addOneOffLockWhitelistAddress(tx, btcAddress.toString(), BigInteger.TEN);

whitelistSupport.save();

int actualSize = whitelistSupport.getLockWhitelistSize();
Address actualBtcAddress = whitelistSupport.getLockWhitelistEntryByAddress(btcAddress.toString()).address();
assertEquals(1, actualSize);
assertEquals(btcAddress, actualBtcAddress);
}

@Test
void save_whenUnlimitedLockWhitelistAddressIsWhitelisted_shouldSaveUnlimitedLockWhitelistAddress() {
Transaction tx = TransactionUtils.getTransactionFromCaller(signatureCache, WhitelistCaller.AUTHORIZED.getRskAddress());
whitelistSupport.addUnlimitedLockWhitelistAddress(tx, btcAddress.toString());

whitelistSupport.save();

int actualSize = whitelistSupport.getLockWhitelistSize();
Address actualBtcAddress = whitelistSupport.getLockWhitelistEntryByAddress(btcAddress.toString()).address();
assertEquals(1, actualSize);
assertEquals(btcAddress, actualBtcAddress);
}

@Test
void save_whenOneOffAndUnlimitedLockWhitelistAddressesAreWhitelisted_shouldSaveBothAddresses() {
Transaction tx = TransactionUtils.getTransactionFromCaller(signatureCache, WhitelistCaller.AUTHORIZED.getRskAddress());
whitelistSupport.addOneOffLockWhitelistAddress(tx, btcAddress.toString(), BigInteger.TEN);
whitelistSupport.addUnlimitedLockWhitelistAddress(tx, secondBtcAddress.toString());

whitelistSupport.save();

int actualSize = whitelistSupport.getLockWhitelistSize();
Address actualBtcAddress = whitelistSupport.getLockWhitelistEntryByAddress(btcAddress.toString()).address();
Address actualSecondBtcAddress = whitelistSupport.getLockWhitelistEntryByAddress(secondBtcAddress.toString()).address();
assertEquals(2, actualSize);
assertEquals(btcAddress, actualBtcAddress);
assertEquals(secondBtcAddress, actualSecondBtcAddress);
}
}

0 comments on commit 5dc3a30

Please sign in to comment.