Enforce schema for admin endpoints

Prevents misleading 500 status code when schema is not valid.

Change-Id: Ia2c3e34156182c70f4220164725d44270d682072
This commit is contained in:
Isaac Mungai 2016-08-18 13:10:26 -04:00
parent 6fa8a5959a
commit ef61e853ae
3 changed files with 90 additions and 2 deletions

View File

@ -18,12 +18,13 @@ from poppy.transport.validators import schema_base
class BackgroundJobSchema(schema_base.SchemaBase):
"""JSON Schema validation for /admin/provider/akamai/background_jobs"""
"""JSON Schema validation for /admin/provider/akamai/background_job"""
schema = {
'background_jobs': {
'POST': {
'type': [{
'type': 'object',
'additionalProperties': False,
'properties': {
'job_type': {
@ -38,6 +39,7 @@ class BackgroundJobSchema(schema_base.SchemaBase):
}
},
{
'type': 'object',
'additionalProperties': False,
'properties': {
'job_type': {

View File

@ -20,12 +20,13 @@ from poppy.transport.validators import schema_base
class ServiceStatusSchema(schema_base.SchemaBase):
"""JSON Schema validation for /admin/services/{service_id}/status."""
"""JSON Schema validation for /admin/services/status."""
schema = {
'service_status': {
'POST': {
'type': [{
'type': 'object',
'additionalProperties': False,
'properties': {
'status': {

View File

@ -86,3 +86,88 @@ class AdminControllerTest(base.FunctionalTest):
expect_errors=True
)
self.assertEqual(400, response.status_code)
def test_post_background_job_negative(self):
response = self.app.post(
'/v1.0/admin/provider/akamai/background_job',
headers={
'Content-Type': 'application/json',
'X-Project-ID': self.project_id
},
params=json.dumps([]),
expect_errors=True
)
self.assertEqual(400, response.status_code)
def test_post_service_status_negative(self):
response = self.app.post(
'/v1.0/admin/services/status',
headers={
'Content-Type': 'application/json',
'X-Project-ID': self.project_id
},
params=json.dumps([]),
expect_errors=True
)
self.assertEqual(400, response.status_code)
def test_post_migrate_domain_invalid_domain_name(self):
payload = {
"project_id": self.project_id,
"service_id": "abcdef",
"domain_name": "invalid",
"new_cert": "scdn1.secure6.raxcdn.com.edgekey.net",
"cert_status": "create_in_progress"
}
# post with bad data
response = self.app.post(
'/v1.0/admin/provider/akamai/service',
params=json.dumps(payload),
headers={
'Content-Type': 'application/json',
'X-Project-ID': self.project_id
},
expect_errors=True
)
self.assertEqual(400, response.status_code)
def test_post_migrate_domain_non_existant_service(self):
payload = {
"project_id": self.project_id,
"service_id": "does_not_exist",
"domain_name": "www.test.com",
"new_cert": "scdn1.secure6.raxcdn.com",
"cert_status": "create_in_progress"
}
response = self.app.post(
'/v1.0/admin/provider/akamai/service',
params=json.dumps(payload),
headers={
'Content-Type': 'application/json',
'X-Project-ID': self.project_id
},
expect_errors=True
)
self.assertEqual(404, response.status_code)
def test_post_migrate_domain_new_cert_with_edge_key(self):
payload = {
"project_id": self.project_id,
"service_id": "does_not_exist",
"domain_name": "www.test.com",
"new_cert": "scdn1.secure6.raxcdn.com.edgekey.net",
"cert_status": "create_in_progress"
}
response = self.app.post(
'/v1.0/admin/provider/akamai/service',
params=json.dumps(payload),
headers={
'Content-Type': 'application/json',
'X-Project-ID': self.project_id
},
expect_errors=True
)
self.assertEqual(404, response.status_code)