calling lables metric and unitest chain

This commit is contained in:
Pierre Verkest 2023-09-01 18:18:09 +02:00
parent 422232ce64
commit 145e2dc2e3
4 changed files with 163 additions and 61 deletions

2
.gitignore vendored
View file

@ -1,3 +1,5 @@
dist/*
.env
coverage.xml
junit.xml

View file

@ -88,6 +88,10 @@ You can setup env through `.env` file or environment variables with defined as d
## Changelog
### Version 0.2.0
Setup automatic release from gitlab while pushing new tag
### Version 0.1.0
Initial version

View file

@ -51,10 +51,10 @@ def process_requests(main, backup, exporter_instance: str = ""):
"""A dummy function that takes some time."""
main_state = main.get_interface_vip_status()
backup_sate = backup.get_interface_vip_status()
main_ha_state.labels(instance=exporter_instance, host=main.host)
main_ha_state.state(main_state)
backup_ha_state.labels(instance=exporter_instance, host=backup.host)
backup_ha_state.state(backup_sate)
main_ha_state.labels(instance=exporter_instance, host=main.host).state(main_state)
backup_ha_state.labels(instance=exporter_instance, host=backup.host).state(
backup_sate
)
active_opnsense = None
if main_state == "active":
active_opnsense = main
@ -65,13 +65,11 @@ def process_requests(main, backup, exporter_instance: str = ""):
if bytes_received or bytes_received == 0:
active_server_bytes_received.labels(
instance=exporter_instance, host=active_opnsense.host
)
active_server_bytes_received.set(bytes_received)
).set(bytes_received)
if bytes_transmitted or bytes_transmitted == 0:
active_server_bytes_transmitted.labels(
instance=exporter_instance, host=active_opnsense.host
)
active_server_bytes_transmitted.set(bytes_transmitted)
).set(bytes_transmitted)
def start_server(

View file

@ -15,6 +15,32 @@ from .common import (
)
class FakePromMetric:
_labels = {}
def labels(self, *args, **kwargs):
self._labels = kwargs
return self
class FakePromEnum(FakePromMetric):
_state = None
count_state_calls = 0
def state(self, state):
self.count_state_calls += 1
self._state = state
class FakePromGauge(FakePromMetric):
value = None
count_set_calls = 0
def set(self, value):
self.count_set_calls += 1
self.value = value
@mock.patch("opnsense_exporter.server.start_server")
def test_parser(server_mock):
with mock.patch(
@ -64,30 +90,54 @@ def test_process_requests():
f"https://{MAIN_HOST}/api/diagnostics/traffic/interface",
body=generate_diagnostics_traffic_interface_paylaod(),
)
with mock.patch(
"opnsense_exporter.server.main_ha_state.state"
) as main_ha_state_mock:
main_ha_state_mock = FakePromEnum()
backup_ha_state_mock = FakePromEnum()
active_server_bytes_received_mock = FakePromGauge()
active_server_bytes_transmitted_mock = FakePromGauge()
with mock.patch("opnsense_exporter.server.main_ha_state", new=main_ha_state_mock):
with mock.patch(
"opnsense_exporter.server.backup_ha_state.state"
) as backup_ha_state_mock:
"opnsense_exporter.server.backup_ha_state", new=backup_ha_state_mock
):
with mock.patch(
"opnsense_exporter.server.active_server_bytes_received.set"
) as active_server_bytes_received_mock:
"opnsense_exporter.server.active_server_bytes_received",
new=active_server_bytes_received_mock,
):
with mock.patch(
"opnsense_exporter.server.active_server_bytes_transmitted.set"
) as active_server_bytes_transmitted_mock:
"opnsense_exporter.server.active_server_bytes_transmitted",
new=active_server_bytes_transmitted_mock,
):
process_requests(
OPNSenseAPI(MAIN_HOST, LOGIN, PASSWORD),
OPNSenseAPI(BACKUP_HOST, LOGIN, PASSWORD),
)
main_ha_state_mock.assert_called_once_with("active")
backup_ha_state_mock.assert_called_once_with("hot_standby")
active_server_bytes_received_mock.assert_called_once_with(11725192686820)
active_server_bytes_transmitted_mock.assert_called_once_with(2489262014203)
assert main_ha_state_mock._state == "active"
assert main_ha_state_mock.count_state_calls == 1
assert main_ha_state_mock._labels == {"instance": "", "host": MAIN_HOST}
assert backup_ha_state_mock._state == "hot_standby"
assert backup_ha_state_mock.count_state_calls == 1
assert backup_ha_state_mock._labels == {"instance": "", "host": BACKUP_HOST}
assert active_server_bytes_received_mock.value == 11725192686820
assert active_server_bytes_received_mock.count_set_calls == 1
assert active_server_bytes_received_mock._labels == {
"instance": "",
"host": MAIN_HOST,
}
assert active_server_bytes_transmitted_mock.value == 2489262014203
assert active_server_bytes_transmitted_mock.count_set_calls == 1
assert active_server_bytes_transmitted_mock._labels == {
"instance": "",
"host": MAIN_HOST,
}
@responses.activate
def test_process_requests_backend_active():
def test_process_requests_backup_active():
responses.add(
responses.GET,
f"https://{MAIN_HOST}/api/diagnostics/interface/get_vip_status/",
@ -103,26 +153,49 @@ def test_process_requests_backend_active():
f"https://{BACKUP_HOST}/api/diagnostics/traffic/interface",
body=generate_diagnostics_traffic_interface_paylaod(),
)
with mock.patch(
"opnsense_exporter.server.main_ha_state.state"
) as main_ha_state_mock:
main_ha_state_mock = FakePromEnum()
backup_ha_state_mock = FakePromEnum()
active_server_bytes_received_mock = FakePromGauge()
active_server_bytes_transmitted_mock = FakePromGauge()
with mock.patch("opnsense_exporter.server.main_ha_state", new=main_ha_state_mock):
with mock.patch(
"opnsense_exporter.server.backup_ha_state.state"
) as backup_ha_state_mock:
"opnsense_exporter.server.backup_ha_state", new=backup_ha_state_mock
):
with mock.patch(
"opnsense_exporter.server.active_server_bytes_received.set"
) as active_server_bytes_received_mock:
"opnsense_exporter.server.active_server_bytes_received",
new=active_server_bytes_received_mock,
):
with mock.patch(
"opnsense_exporter.server.active_server_bytes_transmitted.set"
) as active_server_bytes_transmitted_mock:
"opnsense_exporter.server.active_server_bytes_transmitted",
new=active_server_bytes_transmitted_mock,
):
process_requests(
OPNSenseAPI(MAIN_HOST, LOGIN, PASSWORD),
OPNSenseAPI(BACKUP_HOST, LOGIN, PASSWORD),
)
main_ha_state_mock.assert_called_once_with("maintenancemode")
backup_ha_state_mock.assert_called_once_with("active")
active_server_bytes_received_mock.assert_called_once_with(11725192686820)
active_server_bytes_transmitted_mock.assert_called_once_with(2489262014203)
assert main_ha_state_mock._state == "maintenancemode"
assert main_ha_state_mock.count_state_calls == 1
assert main_ha_state_mock._labels == {"instance": "", "host": MAIN_HOST}
assert backup_ha_state_mock._state == "active"
assert backup_ha_state_mock.count_state_calls == 1
assert backup_ha_state_mock._labels == {"instance": "", "host": BACKUP_HOST}
assert active_server_bytes_received_mock.value == 11725192686820
assert active_server_bytes_received_mock.count_set_calls == 1
assert active_server_bytes_received_mock._labels == {
"instance": "",
"host": BACKUP_HOST,
}
assert active_server_bytes_transmitted_mock.value == 2489262014203
assert active_server_bytes_transmitted_mock.count_set_calls == 1
assert active_server_bytes_transmitted_mock._labels == {
"instance": "",
"host": BACKUP_HOST,
}
@responses.activate
@ -143,26 +216,39 @@ def test_process_no_active():
f"https://{BACKUP_HOST}/api/diagnostics/traffic/interface",
body=generate_diagnostics_traffic_interface_paylaod(),
)
with mock.patch(
"opnsense_exporter.server.main_ha_state.state"
) as main_ha_state_mock:
main_ha_state_mock = FakePromEnum()
backup_ha_state_mock = FakePromEnum()
active_server_bytes_received_mock = FakePromGauge()
active_server_bytes_transmitted_mock = FakePromGauge()
with mock.patch("opnsense_exporter.server.main_ha_state", new=main_ha_state_mock):
with mock.patch(
"opnsense_exporter.server.backup_ha_state.state"
) as backup_ha_state_mock:
"opnsense_exporter.server.backup_ha_state", new=backup_ha_state_mock
):
with mock.patch(
"opnsense_exporter.server.active_server_bytes_received.set"
) as active_server_bytes_received_mock:
"opnsense_exporter.server.active_server_bytes_received",
new=active_server_bytes_received_mock,
):
with mock.patch(
"opnsense_exporter.server.active_server_bytes_transmitted.set"
) as active_server_bytes_transmitted_mock:
"opnsense_exporter.server.active_server_bytes_transmitted",
new=active_server_bytes_transmitted_mock,
):
process_requests(
OPNSenseAPI(MAIN_HOST, LOGIN, PASSWORD),
OPNSenseAPI(BACKUP_HOST, LOGIN, PASSWORD),
)
main_ha_state_mock.assert_called_once_with("maintenancemode")
backup_ha_state_mock.assert_called_once_with("unavailable")
active_server_bytes_received_mock.assert_not_called()
active_server_bytes_transmitted_mock.assert_not_called()
assert main_ha_state_mock._state == "maintenancemode"
assert main_ha_state_mock.count_state_calls == 1
assert main_ha_state_mock._labels == {"instance": "", "host": MAIN_HOST}
assert backup_ha_state_mock._state == "unavailable"
assert backup_ha_state_mock.count_state_calls == 1
assert backup_ha_state_mock._labels == {"instance": "", "host": BACKUP_HOST}
assert active_server_bytes_received_mock.count_set_calls == 0
assert active_server_bytes_transmitted_mock.count_set_calls == 0
@responses.activate
@ -183,23 +269,35 @@ def test_process_with_falsy_value():
body=generate_diagnostics_traffic_interface_paylaod(),
status=404,
)
with mock.patch(
"opnsense_exporter.server.main_ha_state.state"
) as main_ha_state_mock:
main_ha_state_mock = FakePromEnum()
backup_ha_state_mock = FakePromEnum()
active_server_bytes_received_mock = FakePromGauge()
active_server_bytes_transmitted_mock = FakePromGauge()
with mock.patch("opnsense_exporter.server.main_ha_state", new=main_ha_state_mock):
with mock.patch(
"opnsense_exporter.server.backup_ha_state.state"
) as backup_ha_state_mock:
"opnsense_exporter.server.backup_ha_state", new=backup_ha_state_mock
):
with mock.patch(
"opnsense_exporter.server.active_server_bytes_received.set"
) as active_server_bytes_received_mock:
"opnsense_exporter.server.active_server_bytes_received",
new=active_server_bytes_received_mock,
):
with mock.patch(
"opnsense_exporter.server.active_server_bytes_transmitted.set"
) as active_server_bytes_transmitted_mock:
"opnsense_exporter.server.active_server_bytes_transmitted",
new=active_server_bytes_transmitted_mock,
):
process_requests(
OPNSenseAPI(MAIN_HOST, LOGIN, PASSWORD),
OPNSenseAPI(BACKUP_HOST, LOGIN, PASSWORD),
)
main_ha_state_mock.assert_called_once_with("active")
backup_ha_state_mock.assert_called_once_with("hot_standby")
active_server_bytes_received_mock.assert_not_called()
active_server_bytes_transmitted_mock.assert_not_called()
assert main_ha_state_mock._state == "active"
assert main_ha_state_mock.count_state_calls == 1
assert main_ha_state_mock._labels == {"instance": "", "host": MAIN_HOST}
assert backup_ha_state_mock.count_state_calls == 1
assert backup_ha_state_mock._state == "hot_standby"
assert backup_ha_state_mock._labels == {"instance": "", "host": BACKUP_HOST}
assert active_server_bytes_received_mock.count_set_calls == 0
assert active_server_bytes_transmitted_mock.count_set_calls == 0