Add validation for capsule template
The capsule API allows users sending plain text as the capsule's template (because gophercloud is doing that). However, if the template is sent as plain text, the schema validation is unexpected skipped. This commit adds validation for plain text template. Change-Id: I77a18b2ebd7663962ffdfcebadac493fb74d5723
This commit is contained in:
parent
5af5601f83
commit
173173e7b8
|
@ -21,9 +21,11 @@ from zun.api.controllers import base
|
|||
from zun.api.controllers import link
|
||||
from zun.api.controllers.v1 import collection
|
||||
from zun.api.controllers.v1.schemas import capsules as schema
|
||||
from zun.api.controllers.v1.schemas import parameter_types
|
||||
from zun.api.controllers.v1.views import capsules_view as view
|
||||
from zun.api import utils as api_utils
|
||||
from zun.api import validation
|
||||
from zun.api.validation import validators
|
||||
from zun.common import consts
|
||||
from zun.common import exception
|
||||
from zun.common.i18n import _
|
||||
|
@ -62,6 +64,10 @@ def check_capsule_template(tpl):
|
|||
except Exception as e:
|
||||
raise exception.FailedParseStringToJson(e)
|
||||
|
||||
validator = validators.SchemaValidator(
|
||||
parameter_types.capsule_template)
|
||||
validator.validate(tpl_json)
|
||||
|
||||
kind_field = tpl_json.get('kind')
|
||||
if kind_field not in ['capsule', 'Capsule']:
|
||||
raise exception.InvalidCapsuleTemplate("kind fields need to be "
|
||||
|
|
|
@ -27,21 +27,22 @@ class TestCheckCapsuleTemplate(api_base.FunctionalTest):
|
|||
with self.assertRaisesRegex(
|
||||
exception.InvalidCapsuleTemplate, "kind fields need to "
|
||||
"be set as capsule or Capsule"):
|
||||
params = ({"kind": "test", "spec": {"containers": []}})
|
||||
params = ({"kind": "test", "metadata": {},
|
||||
"spec": {"containers": []}})
|
||||
capsules.check_capsule_template(params)
|
||||
|
||||
with self.assertRaisesRegex(
|
||||
exception.InvalidCapsuleTemplate, "No Spec found"):
|
||||
params = ({"kind": "capsule"})
|
||||
params = ({"kind": "capsule", "metadata": {}})
|
||||
capsules.check_capsule_template(params)
|
||||
|
||||
with self.assertRaisesRegex(
|
||||
exception.InvalidCapsuleTemplate,
|
||||
"No valid containers field"):
|
||||
params = ({"kind": "capsule", "spec": {}})
|
||||
params = ({"kind": "capsule", "metadata": {}, "spec": {}})
|
||||
capsules.check_capsule_template(params)
|
||||
|
||||
params = ({"kind": "capsule", "spec": {
|
||||
params = ({"kind": "capsule", "metadata": {}, "spec": {
|
||||
"containers": [{"image": "test1"}], "restartPolicy": "Always",
|
||||
}})
|
||||
spec_content, tpl_json = capsules.check_capsule_template(params)
|
||||
|
@ -49,23 +50,25 @@ class TestCheckCapsuleTemplate(api_base.FunctionalTest):
|
|||
|
||||
def test_check_capsule_template_unicode(self):
|
||||
with self.assertRaisesRegex(
|
||||
exception.InvalidCapsuleTemplate, "kind fields need to "
|
||||
"be set as capsule or Capsule"):
|
||||
params = (u'{"kind": "test", "spec": {"containers": []}}')
|
||||
exception.SchemaValidationError,
|
||||
"Invalid input for field 'kind'"):
|
||||
params = (u'{"kind": "test", "metadata": {}, '
|
||||
'"spec": {"containers": []}}')
|
||||
capsules.check_capsule_template(params)
|
||||
|
||||
with self.assertRaisesRegex(
|
||||
exception.InvalidCapsuleTemplate, "No Spec found"):
|
||||
params = (u'{"kind": "capsule"}')
|
||||
exception.SchemaValidationError,
|
||||
"'spec' is a required property"):
|
||||
params = (u'{"kind": "capsule", "metadata": {}}')
|
||||
capsules.check_capsule_template(params)
|
||||
|
||||
with self.assertRaisesRegex(
|
||||
exception.InvalidCapsuleTemplate,
|
||||
"No valid containers field"):
|
||||
params = (u'{"kind": "capsule", "spec": {}}')
|
||||
exception.SchemaValidationError,
|
||||
"Invalid input for field 'spec'"):
|
||||
params = (u'{"kind": "capsule", "spec": {}, "metadata": {}}')
|
||||
capsules.check_capsule_template(params)
|
||||
|
||||
params = (u'{"kind": "capsule", "spec": {'
|
||||
params = (u'{"kind": "capsule", "metadata": {}, "spec": {'
|
||||
u'"containers": [{"image": "test1"}],'
|
||||
u'"restartPolicy": "Always"}}')
|
||||
spec_content, tpl_json = capsules.check_capsule_template(params)
|
||||
|
|
Loading…
Reference in New Issue