Merge "Add schema for federation protocol"
This commit is contained in:
commit
00af286ef1
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue