Skip to content

Commit

Permalink
tests
Browse files Browse the repository at this point in the history
  • Loading branch information
mxsasha committed Jan 4, 2023
1 parent 1271768 commit f62a013
Show file tree
Hide file tree
Showing 2 changed files with 134 additions and 33 deletions.
151 changes: 119 additions & 32 deletions irrd/ropref/tests/test_ropref.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from IPy import IP

from ..ropref import RoutePreferenceValidator, build_validator, enrich_pks
from ..ropref import RoutePreferenceValidator, build_validator, enrich_pks, update_route_preference_status
from ..status import RoutePreferenceStatus
from irrd.storage.queries import RPSLDatabaseQuery
from irrd.utils.test_utils import MockDatabaseHandler
Expand Down Expand Up @@ -81,33 +81,83 @@ def test_route_preference_validator(config_override):
assert validator.validate_single(IP("192.0.0.0/8"), "SRC-LOWEST") == RoutePreferenceStatus.suppressed
assert validator.validate_single(IP("191.0.0.0/8"), "SRC-LOWEST") == RoutePreferenceStatus.visible


def test_enrich_pks():
mock_dh = MockDatabaseHandler()
mock_dh.reset_mock()
mock_dh.query_responses[RPSLDatabaseQuery] = iter([{"pk": "pk1"}, {"pk": "pk2"}])
pks = ["pk1", "pk2"]
result = list(enrich_pks(mock_dh, pks))
assert result == [{"pk": "pk1"}, {"pk": "pk2"}]
assert mock_dh.queries == [
RPSLDatabaseQuery(
[
"pk",
"object_text",
"rpsl_pk",
"source",
"origin",
"object_class",
"object_text",
"scopefilter_status",
"rpki_status",
],
enable_ordering=False,
).pks(pks)
]
#
# def test_enrich_pks():
# mock_dh = MockDatabaseHandler()
# mock_dh.reset_mock()
# mock_dh.query_responses[RPSLDatabaseQuery] = iter([{"pk": "pk1"}, {"pk": "pk2"}])
# pks = ["pk1", "pk2"]
# result = list(enrich_pks(mock_dh, pks))
# assert result == [{"pk": "pk1"}, {"pk": "pk2"}]
# assert mock_dh.queries == [
# RPSLDatabaseQuery(
# [
# "pk",
# "object_text",
# "rpsl_pk",
# "source",
# "origin",
# "object_class",
# "object_text",
# "scopefilter_status",
# "rpki_status",
# ],
# enable_ordering=False,
# ).pks(pks)
# ]
#
#
# def test_build_validator(config_override):
# config_override(
# {
# "sources": {
# "SRC-HIGH": {"route_object_preference": 900},
# "SRC-LOW": {"route_object_preference": 200},
# }
# }
# )
# route_objects = [
# {
# "source": "SRC-HIGH",
# "prefix": "192.0.0.0/23",
# "pk": "route-A",
# "route_preference_status": RoutePreferenceStatus.suppressed,
# },
# {
# "source": "SRC-LOW",
# "prefix": "192.0.0.0/22",
# "pk": "route-D",
# "route_preference_status": RoutePreferenceStatus.visible,
# },
# ]
#
# expected_columns = ["prefix", "source", "pk", "route_preference_status"]
# object_classes = ["route", "route6"]
#
# mock_dh = MockDatabaseHandler()
# mock_dh.reset_mock()
# mock_dh.query_responses[RPSLDatabaseQuery] = iter(route_objects)
# validator = build_validator(mock_dh)
# assert validator.rtree.prefixes() == ["192.0.0.0/22", "192.0.0.0/23"]
# assert mock_dh.queries == [
# RPSLDatabaseQuery(column_names=expected_columns, ordered_by_sources=False).object_classes(object_classes)
# ]
#
# mock_dh.reset_mock()
# mock_dh.query_responses[RPSLDatabaseQuery] = iter(route_objects)
# validator = build_validator(mock_dh, [IP("192.0.0.0/23"), IP("198.51.100.0/24")])
# assert validator.rtree.prefixes() == ["192.0.0.0/22", "192.0.0.0/23"]
# assert mock_dh.queries == [
# RPSLDatabaseQuery(column_names=expected_columns, ordered_by_sources=False)
# .object_classes(object_classes)
# .ip_any(IP("192.0.0.0/23")),
# RPSLDatabaseQuery(column_names=expected_columns, ordered_by_sources=False)
# .object_classes(object_classes)
# .ip_any(IP("198.51.100.0/24")),
# ]


def test_build_validator(config_override):
def test_update_route_preference_status(config_override):
config_override(
{
"sources": {
Expand All @@ -131,27 +181,64 @@ def test_build_validator(config_override):
},
]

expected_columns = ["prefix", "source", "pk", "route_preference_status"]
object_classes = ["route", "route6"]
expected_columns = ["prefix", "source", "pk", "route_preference_status"]
enrich_columns = [
"pk",
"object_text",
"rpsl_pk",
"source",
"origin",
"object_class",
"object_text",
"scopefilter_status",
"rpki_status",
]

mock_dh = MockDatabaseHandler()
mock_dh.reset_mock()
mock_dh.query_responses[RPSLDatabaseQuery] = iter(route_objects)
validator = build_validator(mock_dh)
assert validator.rtree.prefixes() == ["192.0.0.0/22", "192.0.0.0/23"]
update_route_preference_status(mock_dh)
assert mock_dh.queries == [
RPSLDatabaseQuery(column_names=expected_columns, ordered_by_sources=False).object_classes(object_classes)
RPSLDatabaseQuery(column_names=expected_columns, ordered_by_sources=False).object_classes(object_classes),
RPSLDatabaseQuery(
enrich_columns,
enable_ordering=False,
).pks(["route-A"]),
RPSLDatabaseQuery(
enrich_columns,
enable_ordering=False,
).pks(["route-D"]),
]
assert mock_dh.other_calls == [
(
"update_route_preference_status",
{"rpsl_objs_now_visible": [], "rpsl_objs_now_suppressed": []},
)
]

mock_dh.reset_mock()
mock_dh.query_responses[RPSLDatabaseQuery] = iter(route_objects)
validator = build_validator(mock_dh, [IP("192.0.0.0/23"), IP("198.51.100.0/24")])
assert validator.rtree.prefixes() == ["192.0.0.0/22", "192.0.0.0/23"]
update_route_preference_status(mock_dh, [IP("192.0.0.0/23"), IP("198.51.100.0/24")])
assert mock_dh.queries == [
RPSLDatabaseQuery(column_names=expected_columns, ordered_by_sources=False)
.object_classes(object_classes)
.ip_any(IP("192.0.0.0/23")),
RPSLDatabaseQuery(column_names=expected_columns, ordered_by_sources=False)
.object_classes(object_classes)
.ip_any(IP("198.51.100.0/24")),
RPSLDatabaseQuery(
enrich_columns,
enable_ordering=False,
).pks(["route-A"]),
RPSLDatabaseQuery(
enrich_columns,
enable_ordering=False,
).pks(["route-D"]),
]
assert mock_dh.other_calls == [
(
"update_route_preference_status",
{"rpsl_objs_now_visible": [], "rpsl_objs_now_suppressed": []},
)
]
16 changes: 15 additions & 1 deletion irrd/utils/test_utils.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from datetime import datetime
from typing import Any, Dict
from typing import Any, Dict, Iterable

from irrd.storage.database_handler import QueryType, RPSLDatabaseResponse
from irrd.storage.models import DatabaseOperation, JournalEntryOrigin
Expand Down Expand Up @@ -105,6 +105,20 @@ def execute_query(self, query: QueryType, flush_rpsl_buffer=True, refresh_on_err
except KeyError: # pragma: no cover
raise ValueError(f"Unknown query in MockDatabaseHandler: {query}")

def update_route_preference_status(
self,
rpsl_objs_now_visible: Iterable[Dict[str, Any]]=[],
rpsl_objs_now_suppressed: Iterable[Dict[str, Any]]=[]) -> None:
self.other_calls.append(
(
"update_route_preference_status",
{
"rpsl_objs_now_visible": list(rpsl_objs_now_visible),
"rpsl_objs_now_suppressed": list(rpsl_objs_now_suppressed),
},
)
)

def delete_journal_entries_before_date(self, timestamp: datetime, source: str):
self.other_calls.append(
(
Expand Down

0 comments on commit f62a013

Please sign in to comment.