2023-09-06 10:39:54 +02:00
|
|
|
from unittest import mock
|
|
|
|
|
2023-09-01 13:27:55 +02:00
|
|
|
import responses
|
|
|
|
|
2023-09-03 23:38:34 +02:00
|
|
|
from opnsense_exporter.opnsense_api import (
|
|
|
|
OPNSenseAPI,
|
|
|
|
OPNSenseRole,
|
|
|
|
OPNSenseTraffic,
|
|
|
|
OPNSenseTrafficMetric,
|
|
|
|
)
|
2023-09-01 13:27:55 +02:00
|
|
|
|
|
|
|
from .common import (
|
2023-09-03 21:52:19 +02:00
|
|
|
BACKUP_HOST,
|
2023-09-01 13:27:55 +02:00
|
|
|
LOGIN,
|
|
|
|
MAIN_HOST,
|
|
|
|
PASSWORD,
|
|
|
|
generate_diagnostics_traffic_interface_paylaod,
|
|
|
|
generate_get_vip_status_paylaod,
|
|
|
|
)
|
|
|
|
|
|
|
|
|
2023-09-06 10:39:54 +02:00
|
|
|
def test_get_vip_status_timeout_sec():
|
|
|
|
with mock.patch("opnsense_exporter.opnsense_api.OPNSenseAPI.get") as get_mock:
|
|
|
|
OPNSenseAPI(
|
|
|
|
OPNSenseRole.MAIN,
|
|
|
|
MAIN_HOST,
|
|
|
|
LOGIN,
|
|
|
|
PASSWORD,
|
|
|
|
get_vip_status_timeout_sec=11,
|
|
|
|
).get_interface_vip_status()
|
|
|
|
get_mock.assert_called_once_with(
|
|
|
|
"/api/diagnostics/interface/get_vip_status/", timeout=11
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def test_get_traffic_timeout_sec():
|
|
|
|
with mock.patch("opnsense_exporter.opnsense_api.OPNSenseAPI.get") as get_mock:
|
|
|
|
OPNSenseAPI(
|
|
|
|
OPNSenseRole.MAIN,
|
|
|
|
MAIN_HOST,
|
|
|
|
LOGIN,
|
|
|
|
PASSWORD,
|
|
|
|
get_traffic_timeout_sec=11,
|
|
|
|
).get_traffic("wan")
|
|
|
|
get_mock.assert_called_once_with("/api/diagnostics/traffic/top/wan", timeout=11)
|
|
|
|
|
|
|
|
|
2023-09-01 13:27:55 +02:00
|
|
|
@responses.activate
|
|
|
|
def test_get_interface_vip_status_active():
|
|
|
|
responses.add(
|
|
|
|
responses.GET,
|
|
|
|
f"https://{MAIN_HOST}/api/diagnostics/interface/get_vip_status/",
|
|
|
|
body=generate_get_vip_status_paylaod("MASTER", "MASTER", False),
|
|
|
|
)
|
|
|
|
|
|
|
|
assert (
|
2023-09-04 00:06:17 +02:00
|
|
|
OPNSenseAPI(OPNSenseRole.MAIN, MAIN_HOST, LOGIN, PASSWORD)
|
|
|
|
.get_interface_vip_status()
|
|
|
|
.value
|
2023-09-03 21:52:19 +02:00
|
|
|
== "active"
|
2023-09-01 13:27:55 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
@responses.activate
|
|
|
|
def test_get_interface_vip_status_backup():
|
|
|
|
responses.add(
|
|
|
|
responses.GET,
|
|
|
|
f"https://{MAIN_HOST}/api/diagnostics/interface/get_vip_status/",
|
|
|
|
body=generate_get_vip_status_paylaod("BACKUP", "BACKUP", False),
|
|
|
|
)
|
|
|
|
|
|
|
|
assert (
|
2023-09-04 00:06:17 +02:00
|
|
|
OPNSenseAPI(OPNSenseRole.MAIN, MAIN_HOST, LOGIN, PASSWORD)
|
|
|
|
.get_interface_vip_status()
|
|
|
|
.value
|
2023-09-01 13:27:55 +02:00
|
|
|
== "hot_standby"
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
@responses.activate
|
|
|
|
def test_get_interface_vip_status_mainteance_mode():
|
|
|
|
responses.add(
|
|
|
|
responses.GET,
|
|
|
|
f"https://{MAIN_HOST}/api/diagnostics/interface/get_vip_status/",
|
|
|
|
body=generate_get_vip_status_paylaod("MASTER", "MASTER", True),
|
|
|
|
)
|
|
|
|
|
|
|
|
assert (
|
2023-09-04 00:06:17 +02:00
|
|
|
OPNSenseAPI(OPNSenseRole.MAIN, MAIN_HOST, LOGIN, PASSWORD)
|
|
|
|
.get_interface_vip_status()
|
|
|
|
.value
|
2023-09-01 13:27:55 +02:00
|
|
|
== "maintenancemode"
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
@responses.activate
|
|
|
|
def test_get_interface_vip_status_unavailable_weird_case():
|
|
|
|
responses.add(
|
|
|
|
responses.GET,
|
|
|
|
f"https://{MAIN_HOST}/api/diagnostics/interface/get_vip_status/",
|
|
|
|
body=generate_get_vip_status_paylaod("MASTER", "BACKUP", False),
|
|
|
|
)
|
|
|
|
assert (
|
2023-09-04 00:06:17 +02:00
|
|
|
OPNSenseAPI(OPNSenseRole.MAIN, MAIN_HOST, LOGIN, PASSWORD)
|
|
|
|
.get_interface_vip_status()
|
|
|
|
.value
|
2023-09-01 13:27:55 +02:00
|
|
|
== "unavailable"
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
@responses.activate
|
|
|
|
def test_get_interface_vip_status_unavailable_rest_api_error():
|
|
|
|
responses.add(
|
|
|
|
responses.GET,
|
|
|
|
f"https://{MAIN_HOST}/api/diagnostics/interface/get_vip_status/",
|
|
|
|
json={"error": "not found"},
|
|
|
|
status=404,
|
|
|
|
)
|
|
|
|
assert (
|
2023-09-04 00:06:17 +02:00
|
|
|
OPNSenseAPI(OPNSenseRole.MAIN, MAIN_HOST, LOGIN, PASSWORD)
|
|
|
|
.get_interface_vip_status()
|
|
|
|
.value
|
2023-09-01 13:27:55 +02:00
|
|
|
== "unavailable"
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
@responses.activate
|
2023-09-03 23:38:34 +02:00
|
|
|
def test_get_traffic():
|
2023-09-01 13:27:55 +02:00
|
|
|
responses.add(
|
|
|
|
responses.GET,
|
2023-09-03 23:38:34 +02:00
|
|
|
f"https://{MAIN_HOST}/api/diagnostics/traffic/top/wan,lan",
|
2023-09-01 13:27:55 +02:00
|
|
|
body=generate_diagnostics_traffic_interface_paylaod(),
|
|
|
|
)
|
2023-09-03 23:38:34 +02:00
|
|
|
assert OPNSenseAPI(OPNSenseRole.MAIN, MAIN_HOST, LOGIN, PASSWORD).get_traffic(
|
|
|
|
"wan,lan"
|
|
|
|
) == [
|
|
|
|
OPNSenseTraffic("wan", OPNSenseTrafficMetric.IN, value=101026),
|
|
|
|
OPNSenseTraffic("wan", OPNSenseTrafficMetric.OUT, value=86020),
|
|
|
|
OPNSenseTraffic("lan", OPNSenseTrafficMetric.IN, value=188490),
|
|
|
|
OPNSenseTraffic("lan", OPNSenseTrafficMetric.OUT, value=952),
|
|
|
|
]
|
2023-09-01 13:27:55 +02:00
|
|
|
|
|
|
|
|
|
|
|
@responses.activate
|
2023-09-03 23:38:34 +02:00
|
|
|
def test_get_traffic_none():
|
2023-09-01 13:27:55 +02:00
|
|
|
responses.add(
|
|
|
|
responses.GET,
|
2023-09-03 23:38:34 +02:00
|
|
|
f"https://{MAIN_HOST}/api/diagnostics/traffic/top/test-not-found",
|
2023-09-01 13:27:55 +02:00
|
|
|
json={"error": "not found"},
|
|
|
|
status=404,
|
|
|
|
)
|
2023-09-03 23:38:34 +02:00
|
|
|
assert (
|
|
|
|
OPNSenseAPI(OPNSenseRole.MAIN, MAIN_HOST, LOGIN, PASSWORD).get_traffic(
|
|
|
|
"test-not-found"
|
|
|
|
)
|
|
|
|
== []
|
2023-09-01 13:27:55 +02:00
|
|
|
)
|
2023-09-03 21:52:19 +02:00
|
|
|
|
|
|
|
|
2023-09-06 09:09:41 +02:00
|
|
|
@responses.activate
|
|
|
|
def test_get_traffic_empty_string():
|
|
|
|
rsp = responses.add(
|
|
|
|
responses.GET,
|
|
|
|
f"https://{MAIN_HOST}/api/diagnostics/traffic/top/",
|
|
|
|
json={"not": "called"},
|
|
|
|
)
|
|
|
|
assert (
|
|
|
|
OPNSenseAPI(OPNSenseRole.MAIN, MAIN_HOST, LOGIN, PASSWORD).get_traffic("") == []
|
|
|
|
)
|
|
|
|
assert rsp.call_count == 0
|
|
|
|
|
|
|
|
|
2023-09-03 21:52:19 +02:00
|
|
|
def test_labels():
|
|
|
|
assert OPNSenseAPI(OPNSenseRole.MAIN, MAIN_HOST, LOGIN, PASSWORD).labels == {
|
|
|
|
"role": "main",
|
|
|
|
"host": MAIN_HOST,
|
|
|
|
}
|
|
|
|
assert OPNSenseAPI(OPNSenseRole.BACKUP, BACKUP_HOST, LOGIN, PASSWORD).labels == {
|
|
|
|
"role": "backup",
|
|
|
|
"host": BACKUP_HOST,
|
|
|
|
}
|