diff --git a/test/test_ix_public_peers.py b/test/test_ix_public_peers.py new file mode 100644 index 0000000000000000000000000000000000000000..5b9866cb008b651b17ddc4dc6b6e4f7e5223d10d --- /dev/null +++ b/test/test_ix_public_peers.py @@ -0,0 +1,58 @@ +import os +import jsonschema +from lxml import etree +import pytest + +import inventory_provider +from inventory_provider import juniper + +TEST_DATA_DIRNAME = os.path.realpath(os.path.join( + inventory_provider.__path__[0], + '..', + 'test', + 'data')) + +ROUTER_NAME = 'mx1.vie.at.geant.net' + + +@pytest.fixture +def netconf(): + netconf_filename = os.path.join( + TEST_DATA_DIRNAME, + ROUTER_NAME + '-netconf.xml') + doc = etree.parse(netconf_filename) + juniper.validate_netconf_config(doc) + return doc + + +def test_ix_public_peers(netconf): + + schema = { + "$schema": "http://json-schema.org/draft-07/schema#", + + "type": "object", + "properties": { + "name": { + "type": "string", + "oneOf": [ + {"pattern": r'^(\d+\.){3}\d+$'}, + {"pattern": r'^([a-f\d]{4}:){7}[a-f\d]{4}$'} + ] + }, + "description": {"type": "string"}, + "as": { + "type": "object", + "properties": { + "local": {"type": "integer"}, + "peer": {"type": "integer"}, + }, + "required": ["local", "peer"], + "additionalProperties": False + } + }, + "required": ["name", "description", "as"], + "additionalProperties": False + } + + for p in juniper.ix_public_peers(netconf): + jsonschema.validate(p, schema)