客户端心跳时打印显卡温度功耗和算力日志,并带回今日预估积分。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import contextlib
|
||||
import io
|
||||
import os
|
||||
import tempfile
|
||||
import unittest
|
||||
@@ -346,12 +348,71 @@ class CoreFlowTest(unittest.TestCase):
|
||||
beat = self.client.post("/api/v1/node/heartbeat", json={"sn": sn, "token": node["node_token"]})
|
||||
self.assertEqual(beat.status_code, 200, beat.text)
|
||||
self.assertEqual(beat.json()["status"], "online")
|
||||
self.assertEqual(beat.json()["estimated_daily_points"], "50.00000000")
|
||||
|
||||
client = self.client.get(f"/api/v1/me/nodes/{sn}/client", headers=headers)
|
||||
self.assertEqual(client.status_code, 200, client.text)
|
||||
self.assertIn(node["node_token"], client.text)
|
||||
self.assertIn("nvidia-smi", client.text)
|
||||
self.assertIn("pynvml", client.text)
|
||||
self.assertIn("nvmlDeviceGetTemperature", client.text)
|
||||
self.assertIn("fan.speed", client.text)
|
||||
self.assertIn("48.5", client.text)
|
||||
self.assertIn("pow_mining", client.text)
|
||||
namespace = {"__name__": "hypernode_client"}
|
||||
exec(compile(client.text, "hypernode-client.py", "exec"), namespace)
|
||||
card = {
|
||||
"name": "NVIDIA GeForce RTX 3060 Ti",
|
||||
"vram_gb": 8.0,
|
||||
"vram_used_mb": 6200,
|
||||
"vram_total_mb": 8192,
|
||||
"gpu_temp": 67,
|
||||
"fan_speed": 54,
|
||||
"power_usage": 168.4,
|
||||
"utilization": 99,
|
||||
}
|
||||
reply = {
|
||||
"status": "online",
|
||||
"display_node_id": 1001,
|
||||
"hardware_weight": 1.0,
|
||||
"recovery_days": 30,
|
||||
"purchase_amount": "1500.00000000",
|
||||
"recoverable_stake_amount": "1450.00000000",
|
||||
"estimated_daily_points": "50.00000000",
|
||||
}
|
||||
buffer = io.StringIO()
|
||||
with contextlib.redirect_stdout(buffer):
|
||||
namespace["_report"](card, reply, 7)
|
||||
rendered = buffer.getvalue()
|
||||
self.assertIn("[INFO]", rendered)
|
||||
self.assertIn("RTX 3060 Ti", rendered)
|
||||
self.assertIn("8.00 GB", rendered)
|
||||
self.assertIn("[HARDWARE]", rendered)
|
||||
self.assertIn("67°C", rendered)
|
||||
self.assertIn("Fan 54%", rendered)
|
||||
self.assertIn("168.4 W", rendered)
|
||||
self.assertIn("6200 / 8192 MB", rendered)
|
||||
self.assertIn("[HASHRATE]", rendered)
|
||||
self.assertIn("48.5 MH/s", rendered)
|
||||
self.assertIn("Accepted 7", rendered)
|
||||
self.assertIn("[HEARTBEAT]", rendered)
|
||||
self.assertIn("Node #1001", rendered)
|
||||
self.assertIn("Weight 1.0", rendered)
|
||||
self.assertIn("[RECOVERY]", rendered)
|
||||
self.assertIn("30-day fast recovery", rendered)
|
||||
self.assertIn("3.3% returned", rendered)
|
||||
self.assertIn("Est. Points 50.00000000", rendered)
|
||||
os.environ["HYPERNODE_MODE"] = "gpu_rental"
|
||||
try:
|
||||
rental = io.StringIO()
|
||||
with contextlib.redirect_stdout(rental):
|
||||
namespace["_report"](card, reply, 7)
|
||||
finally:
|
||||
os.environ.pop("HYPERNODE_MODE", None)
|
||||
rental_text = rental.getvalue()
|
||||
self.assertIn("[AI Task Executing]", rental_text)
|
||||
self.assertIn("99% Load", rental_text)
|
||||
self.assertNotIn("[HASHRATE]", rental_text)
|
||||
|
||||
duplicated = self.client.post("/api/v1/me/orders", headers=headers, json={"tx_id": "paytx1500usdt01"})
|
||||
self.assertEqual(duplicated.status_code, 409, duplicated.text)
|
||||
|
||||
Reference in New Issue
Block a user