Files
Nexus/tests/test_btpanel_client.py
T
r 82426b1941 feat(btpanel): 独立宝塔模块与 SSH 自动获取 API
新增侧栏「宝塔面板」菜单、代理 API 与连接配置页;通过 SSH 读写子机
api.json 自动写入凭据,5 分钟后台重试,含审计修复、检测缓存与并发锁。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-21 09:13:14 +08:00

56 lines
1.7 KiB
Python

"""Tests for Baota panel client signing and credentials."""
import hashlib
import time
import pytest
from server.infrastructure.btpanel.client import BtPanelClient
from server.infrastructure.btpanel.credentials import (
BT_PANEL_ATTR,
BtPanelCredentials,
merge_bt_panel_extra,
public_bt_panel_status,
)
from server.domain.models import Server
def test_sign_algorithm_matches_official_demo():
api_key = "test-api-key"
now = 1700000000
key_md5 = hashlib.md5(api_key.encode()).hexdigest()
expected = hashlib.md5(f"{now}{key_md5}".encode()).hexdigest()
creds = BtPanelCredentials(base_url="http://127.0.0.1:8888", api_key=api_key)
client = BtPanelClient(creds, server_id=1)
# patch time
orig = time.time
try:
time.time = lambda: now # type: ignore[method-assign]
signed = client._sign()
finally:
time.time = orig # type: ignore[method-assign]
assert signed["request_time"] == now
assert signed["request_token"] == expected
def test_merge_bt_panel_extra_encrypts_key(monkeypatch):
monkeypatch.setattr(
"server.infrastructure.btpanel.credentials.encrypt_value",
lambda s: f"enc:{s}",
)
extra = merge_bt_panel_extra({}, base_url="https://1.2.3.4:8888/abc", api_key="secret")
block = extra[BT_PANEL_ATTR]
assert block["base_url"] == "https://1.2.3.4:8888/abc"
assert block["api_key_enc"] == "enc:secret"
def test_public_bt_panel_status():
server = Server(id=1, name="s", domain="1.2.3.4", extra_attrs={
BT_PANEL_ATTR: {"base_url": "https://x:8888", "api_key_enc": "x"},
})
st = public_bt_panel_status(server)
assert st["configured"] is True
assert st["api_key_set"] is True