1
0
mirror of https://github.com/checktheroads/hyperglass synced 2024-05-11 05:55:08 +00:00
checktheroads-hyperglass/.tests/validate_examples.py
2020-02-16 19:20:22 -07:00

71 lines
1.7 KiB
Python

"""Validate example files."""
# Standard Library
import sys
from pathlib import Path
# Third Party
import yaml
# Project
from hyperglass.configuration.models.params import Params
from hyperglass.configuration.models.routers import Routers
from hyperglass.configuration.models.commands import Commands
EXAMPLES = Path(__file__).parent.parent / "hyperglass" / "examples"
DEVICES = EXAMPLES / "devices.yaml"
COMMANDS = EXAMPLES / "commands.yaml"
MAIN = EXAMPLES / "hyperglass.yaml"
def _validate_devices():
with DEVICES.open() as raw:
devices_dict = yaml.safe_load(raw.read()) or {}
try:
Routers._import(devices_dict.get("routers", []))
except Exception as e:
raise ValueError(str(e))
return True
def _validate_commands():
with COMMANDS.open() as raw:
commands_dict = yaml.safe_load(raw.read()) or {}
try:
Commands.import_params(commands_dict)
except Exception as e:
raise ValueError(str(e))
return True
def _validate_main():
with MAIN.open() as raw:
main_dict = yaml.safe_load(raw.read()) or {}
try:
Params(**main_dict)
except Exception as e:
raise ValueError(str(e))
return True
def validate_all():
"""Validate all example configs against configuration models."""
for validator in (_validate_main, _validate_commands, _validate_devices):
try:
validator()
except ValueError as e:
raise RuntimeError(str(e))
return True
if __name__ == "__main__":
try:
all_passed = validate_all()
message = "All tests passed"
status = 0
except RuntimeError as e:
message = str(e)
status = 1
print(message)
sys.exit(status)