|
1 | 1 | import asyncio
|
2 | 2 | import pytest
|
| 3 | +import pytest_asyncio |
3 | 4 | import os
|
4 | 5 | import shutil
|
5 | 6 | import tempfile
|
6 | 7 | import time
|
7 |
| -from typing import Iterator, List, Tuple |
| 8 | +from typing import AsyncIterator, List, Tuple |
8 | 9 | from subprocess import Popen
|
9 | 10 |
|
10 | 11 | from solana.keypair import Keypair
|
@@ -38,62 +39,50 @@ def solana_test_validator():
|
38 | 39 | shutil.rmtree(newpath)
|
39 | 40 |
|
40 | 41 |
|
41 |
| -@pytest.fixture |
42 |
| -def validators(event_loop, async_client, payer) -> List[PublicKey]: |
| 42 | +@pytest_asyncio.fixture |
| 43 | +async def validators(async_client, payer) -> List[PublicKey]: |
43 | 44 | num_validators = 3
|
44 | 45 | validators = []
|
45 | 46 | for i in range(num_validators):
|
46 | 47 | vote = Keypair()
|
47 | 48 | node = Keypair()
|
48 |
| - event_loop.run_until_complete( |
49 |
| - create_vote(async_client, payer, vote, node, payer.public_key, payer.public_key, 10) |
50 |
| - ) |
| 49 | + await create_vote(async_client, payer, vote, node, payer.public_key, payer.public_key, 10) |
51 | 50 | validators.append(vote.public_key)
|
52 | 51 | return validators
|
53 | 52 |
|
54 | 53 |
|
55 |
| -@pytest.fixture |
56 |
| -def stake_pool_addresses(event_loop, async_client, payer, validators, waiter) -> Tuple[PublicKey, PublicKey]: |
| 54 | +@pytest_asyncio.fixture |
| 55 | +async def stake_pool_addresses(async_client, payer, validators, waiter) -> Tuple[PublicKey, PublicKey]: |
57 | 56 | fee = Fee(numerator=1, denominator=1000)
|
58 | 57 | referral_fee = 20
|
59 |
| - event_loop.run_until_complete(waiter.wait_for_next_epoch_if_soon(async_client)) |
60 |
| - stake_pool_addresses = event_loop.run_until_complete( |
61 |
| - create_all(async_client, payer, fee, referral_fee) |
62 |
| - ) |
| 58 | + # Change back to `wait_for_next_epoch_if_soon` once https://github.com/solana-labs/solana/pull/26851 is available |
| 59 | + await waiter.wait_for_next_epoch(async_client) |
| 60 | + stake_pool_addresses = await create_all(async_client, payer, fee, referral_fee) |
63 | 61 | for validator in validators:
|
64 |
| - event_loop.run_until_complete( |
65 |
| - add_validator_to_pool(async_client, payer, stake_pool_addresses[0], validator) |
66 |
| - ) |
| 62 | + await add_validator_to_pool(async_client, payer, stake_pool_addresses[0], validator) |
67 | 63 | return stake_pool_addresses
|
68 | 64 |
|
69 | 65 |
|
70 |
| -@pytest.fixture |
71 |
| -def event_loop(): |
72 |
| - loop = asyncio.get_event_loop() |
73 |
| - yield loop |
74 |
| - loop.close() |
75 |
| - |
76 |
| - |
77 |
| -@pytest.fixture |
78 |
| -def async_client(event_loop, solana_test_validator) -> Iterator[AsyncClient]: |
| 66 | +@pytest_asyncio.fixture |
| 67 | +async def async_client(solana_test_validator) -> AsyncIterator[AsyncClient]: |
79 | 68 | async_client = AsyncClient(commitment=Confirmed)
|
80 | 69 | total_attempts = 10
|
81 | 70 | current_attempt = 0
|
82 |
| - while not event_loop.run_until_complete(async_client.is_connected()): |
| 71 | + while not await async_client.is_connected(): |
83 | 72 | if current_attempt == total_attempts:
|
84 | 73 | raise Exception("Could not connect to test validator")
|
85 | 74 | else:
|
86 | 75 | current_attempt += 1
|
87 | 76 | time.sleep(1)
|
88 | 77 | yield async_client
|
89 |
| - event_loop.run_until_complete(async_client.close()) |
| 78 | + await async_client.close() |
90 | 79 |
|
91 | 80 |
|
92 |
| -@pytest.fixture |
93 |
| -def payer(event_loop, async_client) -> Keypair: |
| 81 | +@pytest_asyncio.fixture |
| 82 | +async def payer(async_client) -> Keypair: |
94 | 83 | payer = Keypair()
|
95 | 84 | airdrop_lamports = 20_000_000_000
|
96 |
| - event_loop.run_until_complete(airdrop(async_client, payer.public_key, airdrop_lamports)) |
| 85 | + await airdrop(async_client, payer.public_key, airdrop_lamports) |
97 | 86 | return payer
|
98 | 87 |
|
99 | 88 |
|
|
0 commit comments