diff --git a/netjsonconfig/backends/openwrt/openwrt.py b/netjsonconfig/backends/openwrt/openwrt.py index b7d49034c..b288206f1 100644 --- a/netjsonconfig/backends/openwrt/openwrt.py +++ b/netjsonconfig/backends/openwrt/openwrt.py @@ -7,7 +7,7 @@ import six from jinja2 import Environment, PackageLoader -from jsonschema import validate +from jsonschema import FormatChecker, validate from jsonschema.exceptions import ValidationError as JsonSchemaError from . import renderers @@ -130,7 +130,7 @@ def _render_files(self): def validate(self): try: - validate(self.config, self.schema) + validate(self.config, self.schema, format_checker=FormatChecker()) except JsonSchemaError as e: raise ValidationError(e) diff --git a/netjsonconfig/schema.py b/netjsonconfig/schema.py index 9d727175d..5f57a210e 100644 --- a/netjsonconfig/schema.py +++ b/netjsonconfig/schema.py @@ -629,6 +629,7 @@ "type": "string", "maxLength": 63, "minLength": 1, + "format": "hostname", "propertyOrder": 1, }, "ula_prefix": { diff --git a/tests/openwrt/test_formats.py b/tests/openwrt/test_formats.py new file mode 100644 index 000000000..4f21e172d --- /dev/null +++ b/tests/openwrt/test_formats.py @@ -0,0 +1,17 @@ +import unittest + +from netjsonconfig import OpenWrt +from netjsonconfig.exceptions import ValidationError +from netjsonconfig.utils import _TabsMixin + + +class TestFormats(unittest.TestCase, _TabsMixin): + maxDiff = None + + def test_general_hostname(self): + o = OpenWrt({"general": {"hostname": "invalid hostname"}}) + with self.assertRaises(ValidationError): + o.validate() + o.config['general']['hostname'] = 'valid' + o.validate() +