Mechanical: ruff format, and ruff check --fix with the rule set every NAPALM driver uses (E, F, I, UP, B at line length 100, Python 3.10). What ruff cannot fix comes in the next commit.
44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
"""`get_service_packages`: which installed packages each systemd unit of the node is.
|
|
|
|
The node's own services -- pveproxy, corosync, ceph -- are where a decision
|
|
about a service lands on a hypervisor (NetOrk/netork#1236). The command and its
|
|
parse are napalm-device-types'; the driver only carries the command over its
|
|
exec path.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
from napalm_device_types import ServicePackagesMixin
|
|
from napalm_device_types.service_packages import SERVICE_PACKAGES_COMMAND
|
|
|
|
from napalm_proxmox.driver import ProxmoxDriver
|
|
|
|
WIRE = (
|
|
"SVCPKG_BEGIN\n[units]\nId=pveproxy.service\n"
|
|
"FragmentPath=/lib/systemd/system/pveproxy.service\n"
|
|
"ExecStart={ path=/usr/bin/pveproxy ; argv[]=/usr/bin/pveproxy start }\n\n"
|
|
"[dpkg]\npve-manager: /lib/systemd/system/pveproxy.service\n"
|
|
"pve-manager: /usr/bin/pveproxy\nSVCPKG_END"
|
|
)
|
|
|
|
|
|
def test_the_driver_declares_the_contract():
|
|
assert issubclass(ProxmoxDriver, ServicePackagesMixin)
|
|
|
|
|
|
def test_it_runs_the_shared_command(driver):
|
|
with patch.object(driver, "_exec_ssh_command", return_value=WIRE) as exec_:
|
|
found = driver.get_service_packages()
|
|
|
|
exec_.assert_called_once_with(SERVICE_PACKAGES_COMMAND)
|
|
assert found == {"pveproxy": ["pve-manager"]}
|
|
|
|
|
|
def test_output_without_a_report_raises(driver):
|
|
with patch.object(driver, "_exec_ssh_command", return_value=""):
|
|
with pytest.raises(ValueError):
|
|
driver.get_service_packages()
|