netx/tests/test_cli_resolve.py
2026-06-26 17:13:49 +08:00

54 lines
2 KiB
Python

from __future__ import annotations
import unittest
from unittest.mock import MagicMock
from netx_api.cli_resolve import infer_device_type_vendor
from netx_api.models import CliConnectProfile, UmeInventoryNE
class CliResolveTests(unittest.TestCase):
def test_infer_zte_ne_type(self) -> None:
profile = CliConnectProfile(device_type_default="zte_zxros", vendor_default="ZTE")
dt, vendor = infer_device_type_vendor("ZXCTN 6180H", profile)
self.assertEqual(dt, "zte_zxros")
self.assertEqual(vendor, "ZTE")
def test_resolve_ume_target(self) -> None:
from netx_api.cli_resolve import resolve_cli_target
db = MagicMock()
inv = UmeInventoryNE(ne_id="ume-1", ip_address="10.0.0.1", ne_type="ZXCTN", user_label="NE-A")
profile = CliConnectProfile(
id="p1",
name="default",
is_default=True,
username="ca-oper",
password_enc="",
device_type_default="zte_zxros",
vendor_default="ZTE",
hop_enabled=True,
hop_vendor="bastion",
hop_host="10.34.145.27",
hop_username="ZTE-FIVIE",
hop_password_enc="enc",
hop_command_template="{hop_user}@{target_user}@{target_ip}",
)
db.get.side_effect = lambda model, key: {
(UmeInventoryNE, "ume-1"): inv,
(type(None), "ume-1"): None,
}.get((model, key))
db.query.return_value.filter.return_value.order_by.return_value.first.return_value = profile
with unittest.mock.patch("netx_api.cli_resolve.decrypt_secret", return_value="vault-pass"):
creds, device = resolve_cli_target(db, ume_ne_id="ume-1")
self.assertEqual(creds["ip_address"], "10.0.0.1")
self.assertEqual(creds["username"], "ca-oper")
self.assertEqual(creds["hop_host"], "10.34.145.27")
self.assertEqual(device["source"], "ume")
self.assertEqual(device["ume_ne_id"], "ume-1")
if __name__ == "__main__":
unittest.main()