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
pyparsing==2.4.7
pytest==6.2.5
pytest-asyncio==0.16.0
pytest-asyncio==0.19.0
requests==2.26.0
rfc3986==1.5.0
six==1.16.0

View File

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

View File

@ -13,9 +13,10 @@ from stake_pool.state import StakePool, ValidatorList
@pytest.mark.asyncio
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
resp = await async_client.get_minimum_balance_for_rent_exemption(STAKE_LEN)
stake_rent_exemption = resp['result']
increase_amount = MINIMUM_ACTIVE_STAKE * 2
increase_amount = MINIMUM_ACTIVE_STAKE * 4
decrease_amount = increase_amount // 2
deposit_amount = (increase_amount + stake_rent_exemption) * len(validators)