Merge "Separate protocol schema"
This commit is contained in:
commit
e12604cae5
|
@ -178,7 +178,7 @@ class FederationProtocol(_ControllerBase):
|
|||
return {cls.member_name: ref}
|
||||
|
||||
@controller.protected()
|
||||
@validation.validated(schema.federation_protocol_schema, 'protocol')
|
||||
@validation.validated(schema.protocol_create, 'protocol')
|
||||
def create_protocol(self, context, idp_id, protocol_id, protocol):
|
||||
ref = self._normalize_dict(protocol)
|
||||
ref = self.federation_api.create_protocol(idp_id, protocol_id, ref)
|
||||
|
@ -186,7 +186,7 @@ class FederationProtocol(_ControllerBase):
|
|||
return wsgi.render_response(body=response, status=('201', 'Created'))
|
||||
|
||||
@controller.protected()
|
||||
@validation.validated(schema.federation_protocol_schema, 'protocol')
|
||||
@validation.validated(schema.protocol_update, 'protocol')
|
||||
def update_protocol(self, context, idp_id, protocol_id, protocol):
|
||||
ref = self._normalize_dict(protocol)
|
||||
ref = self.federation_api.update_protocol(idp_id, protocol_id,
|
||||
|
|
|
@ -104,12 +104,20 @@ identity_provider_update = {
|
|||
'additionalProperties': False
|
||||
}
|
||||
|
||||
federation_protocol_schema = {
|
||||
_protocol_properties = {
|
||||
'mapping_id': parameter_types.mapping_id_string
|
||||
}
|
||||
|
||||
protocol_create = {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'mapping_id': parameter_types.mapping_id_string
|
||||
},
|
||||
# `mapping_id` is the property that cannot be ignored
|
||||
'properties': _protocol_properties,
|
||||
'required': ['mapping_id'],
|
||||
'additionalProperties': False
|
||||
}
|
||||
|
||||
protocol_update = {
|
||||
'type': 'object',
|
||||
'properties': _protocol_properties,
|
||||
'minProperties': 1,
|
||||
'additionalProperties': False
|
||||
}
|
||||
|
|
|
@ -2050,26 +2050,26 @@ class FederationProtocolValidationTestCase(unit.BaseTestCase):
|
|||
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)
|
||||
create = federation_schema.protocol_create
|
||||
update = federation_schema.protocol_update
|
||||
self.create_protocol_validator = validators.SchemaValidator(create)
|
||||
self.update_protocol_validator = validators.SchemaValidator(update)
|
||||
|
||||
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)
|
||||
self.create_protocol_validator.validate(request_to_validate)
|
||||
|
||||
def test_validate_protocol_request_succeeds_with_nonuuid_mapping_id(self):
|
||||
"""Test that we allow underscore in mapping_id value."""
|
||||
request_to_validate = {'mapping_id': 'my_mapping_id'}
|
||||
self.protocol_validator.validate(request_to_validate)
|
||||
self.create_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,
|
||||
self.create_protocol_validator.validate,
|
||||
request_to_validate)
|
||||
|
||||
def test_validate_protocol_request_no_parameters(self):
|
||||
|
@ -2077,16 +2077,49 @@ class FederationProtocolValidationTestCase(unit.BaseTestCase):
|
|||
request_to_validate = {}
|
||||
# 'mapping_id' is required.
|
||||
self.assertRaises(exception.SchemaValidationError,
|
||||
self.protocol_validator.validate,
|
||||
self.create_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,
|
||||
self.create_protocol_validator.validate,
|
||||
request_to_validate)
|
||||
|
||||
def test_validate_protocol_request_succeeds_on_update(self):
|
||||
"""Test that we validate a protocol update request successfully."""
|
||||
request_to_validate = {'mapping_id': uuid.uuid4().hex}
|
||||
self.update_protocol_validator.validate(request_to_validate)
|
||||
|
||||
def test_validate_update_protocol_request_succeeds_with_nonuuid_id(self):
|
||||
"""Test that we allow underscore in mapping_id value when updating."""
|
||||
request_to_validate = {'mapping_id': 'my_mapping_id'}
|
||||
self.update_protocol_validator.validate(request_to_validate)
|
||||
|
||||
def test_validate_update_protocol_request_fails_with_invalid_params(self):
|
||||
"""Exception raised when unknown parameter in protocol update."""
|
||||
request_to_validate = {'bogus': uuid.uuid4().hex}
|
||||
self.assertRaises(exception.SchemaValidationError,
|
||||
self.update_protocol_validator.validate,
|
||||
request_to_validate)
|
||||
|
||||
def test_validate_update_protocol_with_no_parameters_fails(self):
|
||||
"""Test that updating a protocol requires at least one attribute."""
|
||||
request_to_validate = {}
|
||||
# 'mapping_id' is required.
|
||||
self.assertRaises(exception.SchemaValidationError,
|
||||
self.update_protocol_validator.validate,
|
||||
request_to_validate)
|
||||
|
||||
def test_validate_update_protocol_request_fails_with_invalid_id(self):
|
||||
"""Test that updating a protocol with a non-string mapping_id fail."""
|
||||
for bad_mapping_id in [12345, True]:
|
||||
request_to_validate = {'mapping_id': bad_mapping_id}
|
||||
self.assertRaises(exception.SchemaValidationError,
|
||||
self.update_protocol_validator.validate,
|
||||
request_to_validate)
|
||||
|
||||
|
||||
class OAuth1ValidationTestCase(unit.BaseTestCase):
|
||||
"""Test for V3 Identity OAuth1 API validation."""
|
||||
|
|
Loading…
Reference in New Issue