mirror of
https://github.com/open-jarvis/OpenJarvis.git
synced 2026-07-28 05:12:26 +00:00
Consolidates NVIDIA vLLM, Apple Silicon, CPU Pearl mining support, CLI/docs, and live H100 validation.
74 lines
2.3 KiB
Python
74 lines
2.3 KiB
Python
"""Tests for MiningTelemetryCollector, shipped in v1 but unwired."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import asyncio
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_collector_collect_once_returns_stats(written_sidecar):
|
|
from openjarvis.mining._collector import MiningTelemetryCollector
|
|
|
|
sample = (
|
|
"pearl_gateway_shares_submitted_total 50\n"
|
|
"pearl_gateway_shares_accepted_total 49\n"
|
|
)
|
|
with patch("openjarvis.mining._collector.httpx.get") as get:
|
|
get.return_value.status_code = 200
|
|
get.return_value.text = sample
|
|
store = MagicMock()
|
|
collector = MiningTelemetryCollector(
|
|
sidecar_path=written_sidecar,
|
|
telemetry_store=store,
|
|
interval_s=0.05,
|
|
)
|
|
|
|
stats = await collector.collect_once()
|
|
|
|
assert stats.shares_submitted == 50
|
|
assert stats.shares_accepted == 49
|
|
get.assert_called_once_with("http://127.0.0.1:8339/metrics", timeout=5.0)
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_collector_run_loop_writes_to_store_then_stops(written_sidecar):
|
|
from openjarvis.mining._collector import MiningTelemetryCollector
|
|
|
|
sample = "pearl_gateway_shares_submitted_total 1\n"
|
|
with patch("openjarvis.mining._collector.httpx.get") as get:
|
|
get.return_value.status_code = 200
|
|
get.return_value.text = sample
|
|
store = MagicMock()
|
|
collector = MiningTelemetryCollector(
|
|
sidecar_path=written_sidecar,
|
|
telemetry_store=store,
|
|
interval_s=0.01,
|
|
)
|
|
|
|
task = asyncio.create_task(collector.run())
|
|
await asyncio.sleep(0.05)
|
|
collector.stop()
|
|
await asyncio.wait_for(task, timeout=1.0)
|
|
|
|
assert store.record_mining_stats.call_count >= 1
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_collector_handles_gateway_errors_gracefully(written_sidecar):
|
|
from openjarvis.mining._collector import MiningTelemetryCollector
|
|
|
|
with patch("openjarvis.mining._collector.httpx.get") as get:
|
|
get.side_effect = ConnectionError("nope")
|
|
store = MagicMock()
|
|
collector = MiningTelemetryCollector(
|
|
sidecar_path=written_sidecar,
|
|
telemetry_store=store,
|
|
)
|
|
|
|
stats = await collector.collect_once()
|
|
|
|
assert stats.last_error == "nope"
|