Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 1 commit into from Jul 29, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion stake-pool/py/requirements.txt
Expand Up @@ -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
Expand Down
47 changes: 18 additions & 29 deletions stake-pool/py/tests/conftest.py
@@ -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
Expand Down Expand Up @@ -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


Expand Down
3 changes: 2 additions & 1 deletion stake-pool/py/tests/test_a_time_sensitive.py
Expand Up @@ -13,9 +13,10 @@
@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)

Expand Down