stake-pool-py: Fix tests for Solana 1.10.33 (#3395)

This commit is contained in:
Jon Cinque 2022-07-29 22:59:50 +02:00 committed by GitHub
parent d1e842ca3f
commit 3a7914ceba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 31 deletions

View File

@ -24,7 +24,7 @@ pyflakes==2.4.0
PyNaCl==1.4.0 PyNaCl==1.4.0
pyparsing==2.4.7 pyparsing==2.4.7
pytest==6.2.5 pytest==6.2.5
pytest-asyncio==0.16.0 pytest-asyncio==0.19.0
requests==2.26.0 requests==2.26.0
rfc3986==1.5.0 rfc3986==1.5.0
six==1.16.0 six==1.16.0

View File

@ -1,10 +1,11 @@
import asyncio import asyncio
import pytest import pytest
import pytest_asyncio
import os import os
import shutil import shutil
import tempfile import tempfile
import time import time
from typing import Iterator, List, Tuple from typing import AsyncIterator, List, Tuple
from subprocess import Popen from subprocess import Popen
from solana.keypair import Keypair from solana.keypair import Keypair
@ -38,62 +39,50 @@ def solana_test_validator():
shutil.rmtree(newpath) shutil.rmtree(newpath)
@pytest.fixture @pytest_asyncio.fixture
def validators(event_loop, async_client, payer) -> List[PublicKey]: async def validators(async_client, payer) -> List[PublicKey]:
num_validators = 3 num_validators = 3
validators = [] validators = []
for i in range(num_validators): for i in range(num_validators):
vote = Keypair() vote = Keypair()
node = Keypair() node = Keypair()
event_loop.run_until_complete( await create_vote(async_client, payer, vote, node, payer.public_key, payer.public_key, 10)
create_vote(async_client, payer, vote, node, payer.public_key, payer.public_key, 10)
)
validators.append(vote.public_key) validators.append(vote.public_key)
return validators return validators
@pytest.fixture @pytest_asyncio.fixture
def stake_pool_addresses(event_loop, async_client, payer, validators, waiter) -> Tuple[PublicKey, PublicKey]: async def stake_pool_addresses(async_client, payer, validators, waiter) -> Tuple[PublicKey, PublicKey]:
fee = Fee(numerator=1, denominator=1000) fee = Fee(numerator=1, denominator=1000)
referral_fee = 20 referral_fee = 20
event_loop.run_until_complete(waiter.wait_for_next_epoch_if_soon(async_client)) # Change back to `wait_for_next_epoch_if_soon` once https://github.com/solana-labs/solana/pull/26851 is available
stake_pool_addresses = event_loop.run_until_complete( await waiter.wait_for_next_epoch(async_client)
create_all(async_client, payer, fee, referral_fee) stake_pool_addresses = await create_all(async_client, payer, fee, referral_fee)
)
for validator in validators: for validator in validators:
event_loop.run_until_complete( await add_validator_to_pool(async_client, payer, stake_pool_addresses[0], validator)
add_validator_to_pool(async_client, payer, stake_pool_addresses[0], validator)
)
return stake_pool_addresses return stake_pool_addresses
@pytest.fixture @pytest_asyncio.fixture
def event_loop(): async def async_client(solana_test_validator) -> AsyncIterator[AsyncClient]:
loop = asyncio.get_event_loop()
yield loop
loop.close()
@pytest.fixture
def async_client(event_loop, solana_test_validator) -> Iterator[AsyncClient]:
async_client = AsyncClient(commitment=Confirmed) async_client = AsyncClient(commitment=Confirmed)
total_attempts = 10 total_attempts = 10
current_attempt = 0 current_attempt = 0
while not event_loop.run_until_complete(async_client.is_connected()): while not await async_client.is_connected():
if current_attempt == total_attempts: if current_attempt == total_attempts:
raise Exception("Could not connect to test validator") raise Exception("Could not connect to test validator")
else: else:
current_attempt += 1 current_attempt += 1
time.sleep(1) time.sleep(1)
yield async_client yield async_client
event_loop.run_until_complete(async_client.close()) await async_client.close()
@pytest.fixture @pytest_asyncio.fixture
def payer(event_loop, async_client) -> Keypair: async def payer(async_client) -> Keypair:
payer = Keypair() payer = Keypair()
airdrop_lamports = 20_000_000_000 airdrop_lamports = 20_000_000_000
event_loop.run_until_complete(airdrop(async_client, payer.public_key, airdrop_lamports)) await airdrop(async_client, payer.public_key, airdrop_lamports)
return payer return payer

View File

@ -13,9 +13,10 @@ from stake_pool.state import StakePool, ValidatorList
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_increase_decrease_this_is_very_slow(async_client, validators, payer, stake_pool_addresses, waiter): async def test_increase_decrease_this_is_very_slow(async_client, validators, payer, stake_pool_addresses, waiter):
(stake_pool_address, validator_list_address) = stake_pool_addresses (stake_pool_address, validator_list_address) = stake_pool_addresses
resp = await async_client.get_minimum_balance_for_rent_exemption(STAKE_LEN) resp = await async_client.get_minimum_balance_for_rent_exemption(STAKE_LEN)
stake_rent_exemption = resp['result'] stake_rent_exemption = resp['result']
increase_amount = MINIMUM_ACTIVE_STAKE * 2 increase_amount = MINIMUM_ACTIVE_STAKE * 4
decrease_amount = increase_amount // 2 decrease_amount = increase_amount // 2
deposit_amount = (increase_amount + stake_rent_exemption) * len(validators) deposit_amount = (increase_amount + stake_rent_exemption) * len(validators)