solana-program-library/stake-pool/py/tests/test_add_remove.py

36 lines
1.7 KiB
Python

import asyncio
import pytest
from solana.rpc.commitment import Confirmed
from stake.constants import STAKE_LEN
from stake_pool.actions import remove_validator_from_pool
from stake_pool.constants import MINIMUM_ACTIVE_STAKE
from stake_pool.state import ValidatorList, StakeStatus
@pytest.mark.asyncio
async def test_add_remove_validators(async_client, validators, payer, stake_pool_addresses):
(stake_pool_address, validator_list_address, _) = stake_pool_addresses
resp = await async_client.get_account_info(validator_list_address, commitment=Confirmed)
data = resp['result']['value']['data']
validator_list = ValidatorList.decode(data[0], data[1])
assert len(validator_list.validators) == len(validators)
resp = await async_client.get_minimum_balance_for_rent_exemption(STAKE_LEN)
stake_rent_exemption = resp['result']
futures = []
for validator_info in validator_list.validators:
assert validator_info.vote_account_address in validators
assert validator_info.active_stake_lamports == stake_rent_exemption + MINIMUM_ACTIVE_STAKE
assert validator_info.transient_stake_lamports == 0
assert validator_info.status == StakeStatus.ACTIVE
futures.append(
remove_validator_from_pool(async_client, payer, stake_pool_address, validator_info.vote_account_address)
)
await asyncio.gather(*futures)
resp = await async_client.get_account_info(validator_list_address, commitment=Confirmed)
data = resp['result']['value']['data']
validator_list = ValidatorList.decode(data[0], data[1])
for validator_info in validator_list.validators:
assert validator_info.status == StakeStatus.DEACTIVATING_VALIDATOR