Files
chia-blockchain/chia/_tests/plot_sync/util.py
Matt HauffandGitHub 40db4635a8 [LABS-245] Enable PEP604 Ruff rules (#20269)
* Enable PEP604 Ruff rules

* Fix harcoded signature in test

* Hack CLVMStreamable test with note to fast follow
2025-11-18 12:34:00 -08:00

70 lines
2.7 KiB
Python

from __future__ import annotations
import contextlib
import time
from collections.abc import AsyncIterator
from dataclasses import dataclass
from chia_rs.sized_bytes import bytes32
from chia_rs.sized_ints import uint16, uint64
from chia._tests.util.split_managers import SplitAsyncManager, split_async_manager
from chia._tests.util.time_out_assert import time_out_assert
from chia.farmer.farmer_service import FarmerService
from chia.harvester.harvester import Harvester
from chia.harvester.harvester_service import HarvesterService
from chia.plot_sync.sender import Sender
from chia.protocols.harvester_protocol import PlotSyncIdentifier
from chia.protocols.outbound_message import Message, NodeType
from chia.types.peer_info import PeerInfo, UnresolvedPeerInfo
@dataclass
class WSChiaConnectionDummy:
connection_type: NodeType
peer_node_id: bytes32
peer_info: PeerInfo = PeerInfo("127.0.0.1", uint16(0))
last_sent_message: Message | None = None
async def send_message(self, message: Message) -> None:
self.last_sent_message = message
def get_peer_logging(self) -> PeerInfo:
return self.peer_info
def get_dummy_connection(node_type: NodeType, peer_id: bytes32) -> WSChiaConnectionDummy:
return WSChiaConnectionDummy(node_type, peer_id)
def plot_sync_identifier(current_sync_id: uint64, message_id: uint64) -> PlotSyncIdentifier:
return PlotSyncIdentifier(uint64(time.time()), current_sync_id, message_id)
@contextlib.asynccontextmanager
async def start_harvester_service(
harvester_service: HarvesterService, farmer_service: FarmerService
) -> AsyncIterator[SplitAsyncManager[Harvester]]:
# Set the `last_refresh_time` of the plot manager to avoid initial plot loading
harvester: Harvester = harvester_service._node
harvester.plot_manager.last_refresh_time = time.time()
harvester_service.reconnect_retry_seconds = 1
async with split_async_manager(manager=harvester_service.manage(), object=harvester) as split_manager:
await split_manager.enter()
harvester_service.add_peer(
UnresolvedPeerInfo(str(farmer_service.self_hostname), farmer_service._server.get_port())
)
harvester.plot_manager.stop_refreshing()
assert harvester.plot_sync_sender._sync_id == 0
assert harvester.plot_sync_sender._next_message_id == 0
assert harvester.plot_sync_sender._last_sync_id == 0
assert harvester.plot_sync_sender._messages == []
def wait_for_farmer_connection(plot_sync_sender: Sender) -> bool:
return plot_sync_sender._connection is not None
await time_out_assert(10, wait_for_farmer_connection, True, harvester.plot_sync_sender)
yield split_manager