12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import time
- from functools import partial
- import pytest
- import hivemind
- async def ping_to_client(dht, node, peer_id: str):
- return await node.protocol.call_ping(hivemind.PeerID.from_base58(str(peer_id)))
- @pytest.mark.forked
- @pytest.mark.parametrize(
- "use_auto_relay,use_relay",
- [
- (True, True),
- (False, False),
- ],
- )
- def test_autorelay(use_auto_relay: bool, use_relay: bool):
- dht_first_peer = hivemind.DHT(
- start=True,
- use_auto_relay=use_auto_relay,
- use_relay=use_relay,
- force_reachability="public",
- )
- dht_first_peer_id = dht_first_peer.peer_id
- initial_peers = dht_first_peer.get_visible_maddrs()
- assert dht_first_peer_id is not None
- dht_third_peer = hivemind.DHT(
- initial_peers=initial_peers,
- host_maddrs=[],
- start=True,
- no_listen=True,
- use_relay=use_relay,
- client_mode=False,
- use_auto_relay=use_auto_relay,
- )
- time.sleep(5)
- dht_second_peer = hivemind.DHT(
- initial_peers=initial_peers,
- start=True,
- client_mode=False,
- no_listen=False,
- use_relay=use_relay,
- use_auto_relay=use_auto_relay,
- )
- assert dht_first_peer.is_alive() and dht_second_peer.is_alive() and dht_third_peer.is_alive()
- time_start = time.perf_counter()
- while time.perf_counter() - time_start < 30:
- reached_ip = dht_second_peer.run_coroutine(partial(ping_to_client, peer_id=dht_third_peer.peer_id))
- if reached_ip:
- assert use_relay
- break
- time.sleep(2)
- else:
- assert not use_relay
- for peer in dht_first_peer, dht_second_peer, dht_third_peer:
- peer.shutdown()
|