mirror of
https://github.com/Chia-Network/chia-blockchain.git
synced 2026-08-29 10:06:27 -05:00
* Enable PEP604 Ruff rules * Fix harcoded signature in test * Hack CLVMStreamable test with note to fast follow
70 lines
2.7 KiB
Python
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
|