Merge "Duplicate trait validation with jsonschema"
This commit is contained in:
commit
425853995d
|
@ -75,7 +75,14 @@ V31_FIELDS = [
|
|||
]
|
||||
|
||||
STANDARD_TRAITS = os_traits.get_traits()
|
||||
CUSTOM_TRAIT_REGEX = re.compile("^%s[A-Z0-9_]+$" % os_traits.CUSTOM_NAMESPACE)
|
||||
CUSTOM_TRAIT_PATTERN = "^%s[A-Z0-9_]+$" % os_traits.CUSTOM_NAMESPACE
|
||||
CUSTOM_TRAIT_REGEX = re.compile(CUSTOM_TRAIT_PATTERN)
|
||||
|
||||
TRAITS_SCHEMA = {'anyOf': [
|
||||
{'type': 'string', 'minLength': 1, 'maxLength': 255,
|
||||
'pattern': CUSTOM_TRAIT_PATTERN},
|
||||
{'type': 'string', 'enum': STANDARD_TRAITS},
|
||||
]}
|
||||
|
||||
|
||||
def validate_limit(limit):
|
||||
|
@ -97,6 +104,7 @@ def validate_sort_dir(sort_dir):
|
|||
|
||||
|
||||
def validate_trait(trait, error_prefix=_('Invalid trait')):
|
||||
# TODO(sbaker) remove when all trait validation is jsonschema based
|
||||
error = exception.ClientSideError(
|
||||
_('%(error_prefix)s. A valid trait must be no longer than 255 '
|
||||
'characters. Standard traits are defined in the os_traits library. '
|
||||
|
|
|
@ -26,6 +26,7 @@ from ironic import api
|
|||
from ironic.api.controllers.v1 import node as api_node
|
||||
from ironic.api.controllers.v1 import utils
|
||||
from ironic.api import types as atypes
|
||||
from ironic.common import args
|
||||
from ironic.common import exception
|
||||
from ironic.common import policy
|
||||
from ironic.common import states
|
||||
|
@ -87,6 +88,30 @@ class TestApiUtils(base.TestCase):
|
|||
"spongebob",
|
||||
utils.validate_trait, "invalid", "spongebob")
|
||||
|
||||
def test_validate_trait_jsonschema(self):
|
||||
|
||||
validate_trait = args.schema(utils.TRAITS_SCHEMA)
|
||||
validate_trait('foo', os_traits.HW_CPU_X86_AVX2)
|
||||
validate_trait('foo', "CUSTOM_1")
|
||||
validate_trait('foo', "CUSTOM_TRAIT_GOLD")
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
validate_trait, 'foo', "A" * 256)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
validate_trait, 'foo', "CuSTOM_1")
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
validate_trait, 'foo', "")
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
validate_trait, 'foo', "CUSTOM_bob")
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
validate_trait, 'foo', "CUSTOM_1-BOB")
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
validate_trait, 'foo', "aCUSTOM_1a")
|
||||
large = "CUSTOM_" + ("1" * 248)
|
||||
self.assertEqual(255, len(large))
|
||||
validate_trait('foo', large)
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
validate_trait, 'foo', large + "1")
|
||||
|
||||
def test_apply_jsonpatch(self):
|
||||
doc = {"foo": {"bar": "baz"}}
|
||||
patch = [{"op": "add", "path": "/foo/answer", "value": 42}]
|
||||
|
|
Loading…
Reference in New Issue