Merge "Add schema for federation protocol"

This commit is contained in:
Jenkins 2016-01-05 13:55:44 +00:00 committed by Gerrit Code Review
commit 00af286ef1
3 changed files with 51 additions and 0 deletions

View File

@ -181,6 +181,7 @@ class FederationProtocol(_ControllerBase):
return {cls.member_name: ref}
@controller.protected()
@validation.validated(schema.federation_protocol_schema, 'protocol')
def create_protocol(self, context, idp_id, protocol_id, protocol):
ref = self._normalize_dict(protocol)
FederationProtocol.check_immutable_params(ref)
@ -189,6 +190,7 @@ class FederationProtocol(_ControllerBase):
return wsgi.render_response(body=response, status=('201', 'Created'))
@controller.protected()
@validation.validated(schema.federation_protocol_schema, 'protocol')
def update_protocol(self, context, idp_id, protocol_id, protocol):
ref = self._normalize_dict(protocol)
FederationProtocol.check_immutable_params(ref)

View File

@ -103,3 +103,13 @@ identity_provider_update = {
'minProperties': 1,
'additionalProperties': False
}
federation_protocol_schema = {
'type': 'object',
'properties': {
'mapping_id': parameter_types.id_string
},
# `mapping_id` is the property that cannot be ignored
'minProperties': 1,
'additionalProperties': False
}

View File

@ -1980,3 +1980,42 @@ class IdentityProviderValidationTestCase(unit.BaseTestCase):
request_to_validate = {'remote_ids': None}
self.create_idp_validator.validate(request_to_validate)
self.update_idp_validator.validate(request_to_validate)
class FederationProtocolValidationTestCase(unit.BaseTestCase):
"""Test for V3 Federation Protocol API validation."""
def setUp(self):
super(FederationProtocolValidationTestCase, self).setUp()
schema = federation_schema.federation_protocol_schema
# create protocol and update protocol have the same shema definition,
# combine them together, no need to validate separately.
self.protocol_validator = validators.SchemaValidator(schema)
def test_validate_protocol_request_succeeds(self):
"""Test that we validate a protocol request successfully."""
request_to_validate = {'mapping_id': uuid.uuid4().hex}
self.protocol_validator.validate(request_to_validate)
def test_validate_protocol_request_fails_with_invalid_params(self):
"""Exception raised when unknown parameter is found."""
request_to_validate = {'bogus': uuid.uuid4().hex}
self.assertRaises(exception.SchemaValidationError,
self.protocol_validator.validate,
request_to_validate)
def test_validate_protocol_request_no_parameters(self):
"""Test that schema validation with empty request body."""
request_to_validate = {}
# 'mapping_id' is required.
self.assertRaises(exception.SchemaValidationError,
self.protocol_validator.validate,
request_to_validate)
def test_validate_protocol_request_fails_with_invalid_mapping_id(self):
"""Exception raised when mapping_id is not string."""
request_to_validate = {'mapping_id': 12334}
self.assertRaises(exception.SchemaValidationError,
self.protocol_validator.validate,
request_to_validate)