Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
strategy:
fail-fast: false
matrix:
netbox_version: &nb_versions [v4.4.10, v4.5.8, v4.6.0]
netbox_version: &nb_versions [v4.4.10, v4.5.8, v4.6.3]
steps:
- name: Checkout
uses: actions/checkout@v3
Expand Down
2 changes: 1 addition & 1 deletion validity/models/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ def dynamic_pair(self) -> Optional["VDevice"]:
filter_ = self.selector.dynamic_pair_filter(self)
if filter_ is None:
return
pair = type(self).objects.filter(filter_).first()
pair = type(self).objects.filter(filter_).prefetch_serializer().first()
if pair:
pair.data_source = self.data_source
pair.poller = self.poller
Expand Down
39 changes: 38 additions & 1 deletion validity/tests/test_scripts/runtests/test_apply.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,16 @@
from unittest.mock import Mock

import pytest
from factories import CompTestDBFactory, CompTestResultFactory, DeviceFactory, NameSetDBFactory, SelectorFactory
from factories import (
CompTestDBFactory,
CompTestResultFactory,
DataFileFactory,
DataSourceFactory,
DeviceFactory,
NameSetDBFactory,
SelectorFactory,
SerializerDBFactory,
)

from validity.compliance.eval.eval_defaults import DEFAULT_NAMESET
from validity.compliance.exceptions import EvalError
Expand Down Expand Up @@ -111,6 +120,34 @@ def test_run_tests_for_device():
assert executor.results_count == 3


@pytest.mark.django_db
def test_run_tests_for_device_with_dynamic_pair_config(create_custom_fields):
data_source = DataSourceFactory(
custom_field_data={"default": True, "device_config_path": "configs/{{ device.name }}.yaml"}
)
serializer = SerializerDBFactory(extraction_method="YAML", template="")
device = DeviceFactory(name="leaf01-a", custom_field_data={"serializer": serializer.pk})
dynamic_pair = DeviceFactory(name="leaf01-b", custom_field_data={"serializer": serializer.pk})
DataFileFactory(source=data_source, path="configs/leaf01-a.yaml", data=b"interfaces: {}\n")
DataFileFactory(
source=data_source,
path="configs/leaf01-b.yaml",
data=b"interfaces:\n ae10:\n description: peer-link\n",
)
selector = SelectorFactory(name_filter=r"leaf01-([ab])", dynamic_pairs="NAME")
test = CompTestDBFactory(expression="device.dynamic_pair.config['interfaces']['ae10']")
test.selectors.set([selector])
device_qs, test_qs = next(DeviceTestIterator({selector.pk: [device.pk]}, [], None))
executor = TExecutor(Logger(), explanation_verbosity=2, report_id=30)

[result] = list(executor(device_qs, test_qs))

assert result.passed is True
assert result.dynamic_pair == dynamic_pair
assert executor.results_passed == 1
assert executor.results_count == 1


@pytest.mark.django_db
def test_devicetest_iterator():
devices = [DeviceFactory() for _ in range(3)]
Expand Down
Loading