Merge "Separate protocol schema"

This commit is contained in:
Jenkins 2016-05-17 01:42:28 +00:00 committed by Gerrit Code Review
commit e12604cae5
3 changed files with 57 additions and 16 deletions

View File

@ -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,

View File

@ -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
}

View File

@ -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."""