summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-09-09 21:05:27 +0000
committerGerrit Code Review <review@openstack.org>2013-09-09 21:05:27 +0000
commitc062b26933cb42fd3a1fcb4172e90e56967dfda3 (patch)
tree2eedc2634ab6948cc70e652565a0af41b6667479
parent1a8c62acb9414bbd8efd1ac0de084f63633e99cd (diff)
parent2afe9ee1644ffb4e922fa5e329142866997c1fff (diff)
downloadtrove-c062b26933cb42fd3a1fcb4172e90e56967dfda3.tar.gz
Merge "Made apischema a bit less restrictive."
-rw-r--r--trove/common/apischema.py49
-rw-r--r--trove/tests/api/mgmt/malformed_json.py10
-rw-r--r--trove/tests/unittests/mysql/test_user_controller.py53
3 files changed, 62 insertions, 50 deletions
diff --git a/trove/common/apischema.py b/trove/common/apischema.py
index a1165ebb..d66bde3b 100644
--- a/trove/common/apischema.py
+++ b/trove/common/apischema.py
@@ -93,7 +93,7 @@ databases_ref_list = {
"items": {
"type": "object",
"required": ["name"],
- "additionalProperties": False,
+ "additionalProperties": True,
"properties": {
"name": non_empty_string
}
@@ -102,12 +102,12 @@ databases_ref_list = {
databases_ref_list_required = {
"type": "array",
- "minItems": 1,
+ "minItems": 0,
"uniqueItems": True,
"items": {
"type": "object",
"required": ["name"],
- "additionalProperties": False,
+ "additionalProperties": True,
"properties": {
"name": non_empty_string
}
@@ -117,7 +117,7 @@ databases_ref_list_required = {
databases_ref = {
"type": "object",
"required": ["databases"],
- "additionalProperties": False,
+ "additionalProperties": True,
"properties": {
"databases": databases_ref_list_required
}
@@ -125,11 +125,11 @@ databases_ref = {
databases_def = {
"type": "array",
- "minItems": 1,
+ "minItems": 0,
"items": {
"type": "object",
"required": ["name"],
- "additionalProperties": False,
+ "additionalProperties": True,
"properties": {
"name": non_empty_string,
"character_set": non_empty_string,
@@ -140,7 +140,7 @@ databases_def = {
user_attributes = {
"type": "object",
- "additionalProperties": False,
+ "additionalProperties": True,
"minProperties": 1,
"properties": {
"name": name_string,
@@ -152,11 +152,11 @@ user_attributes = {
users_list = {
"type": "array",
- "minItems": 1,
+ "minItems": 0,
"items": {
"type": "object",
"required": ["name", "password"],
- "additionalProperties": False,
+ "additionalProperties": True,
"properties": {
"name": name_string,
"password": non_empty_string,
@@ -170,23 +170,24 @@ instance = {
"create": {
"type": "object",
"required": ["instance"],
- "additionalProperties": False,
+ "additionalProperties": True,
"properties": {
"instance": {
"type": "object",
"required": ["name", "flavorRef",
"volume" if CONF.trove_volume_support else None],
- "additionalProperties": False,
+ "additionalProperties": True,
"properties": {
"name": non_empty_string,
"flavorRef": flavorref,
"volume": volume,
"databases": databases_def,
"users": users_list,
+ "service_type": non_empty_string,
"restorePoint": {
"type": "object",
"required": ["backupRef"],
- "additionalProperties": False,
+ "additionalProperties": True,
"properties": {
"backupRef": uuid
}
@@ -200,12 +201,12 @@ instance = {
"volume": {
"type": "object",
"required": ["resize"],
- "additionalProperties": False,
+ "additionalProperties": True,
"properties": {
"resize": {
"type": "object",
"required": ["volume"],
- "additionalProperties": False,
+ "additionalProperties": True,
"properties": {
"volume": volume
}
@@ -215,12 +216,12 @@ instance = {
'flavorRef': {
"type": "object",
"required": ["resize"],
- "additionalProperties": False,
+ "additionalProperties": True,
"properties": {
"resize": {
"type": "object",
"required": ["flavorRef"],
- "additionalProperties": False,
+ "additionalProperties": True,
"properties": {
"flavorRef": flavorref
}
@@ -231,7 +232,7 @@ instance = {
"restart": {
"type": "object",
"required": ["restart"],
- "additionalProperties": False,
+ "additionalProperties": True,
"properties": {
"restart": {
"type": "object"
@@ -246,7 +247,7 @@ mgmt_instance = {
'migrate': {
"type": "object",
"required": ["migrate"],
- "additionalProperties": False,
+ "additionalProperties": True,
"properties": {
"migrate": {
"type": "object"
@@ -256,7 +257,7 @@ mgmt_instance = {
"reboot": {
"type": "object",
"required": ["reboot"],
- "additionalProperties": False,
+ "additionalProperties": True,
"properties": {
"reboot": {
"type": "object"
@@ -266,7 +267,7 @@ mgmt_instance = {
"stop": {
"type": "object",
"required": ["stop"],
- "additionalProperties": False,
+ "additionalProperties": True,
"properties": {
"stop": {
"type": "object"
@@ -289,7 +290,7 @@ user = {
"users": {
"type": "object",
"required": ["users"],
- "additionalProperties": False,
+ "additionalProperties": True,
"properties": {
"users": users_list
}
@@ -299,7 +300,7 @@ user = {
"update": {
"type": "object",
"required": ["user"],
- "additionalProperties": False,
+ "additionalProperties": True,
"properties": {
"user": user_attributes
}
@@ -310,7 +311,7 @@ dbschema = {
"create": {
"type": "object",
"required": ["databases"],
- "additionalProperties": False,
+ "additionalProperties": True,
"properties": {
"databases": databases_def
}
@@ -341,7 +342,7 @@ account = {
"type": "object",
"name": "users",
"required": ["users"],
- "additionalProperties": False,
+ "additionalProperties": True,
"properties": {
"users": users_list
}
diff --git a/trove/tests/api/mgmt/malformed_json.py b/trove/tests/api/mgmt/malformed_json.py
index 585e36c7..2d5e8152 100644
--- a/trove/tests/api/mgmt/malformed_json.py
+++ b/trove/tests/api/mgmt/malformed_json.py
@@ -103,12 +103,10 @@ class MalformedJson(object):
% (httpCode, e))
err_1 = format_path(deque(('users', 0)))
assert_equal(e.message,
- "Validation error: %s "
- "Additional properties are not allowed "
- "(u'password12', u'name12' were unexpected); "
- "%s 'name' is a required property; "
- "%s 'password' is a required property" %
- (err_1, err_1, err_1))
+ "Validation error: "
+ "%(err_1)s 'name' is a required property; "
+ "%(err_1)s 'password' is a required property" %
+ {'err_1': err_1})
@test
def test_bad_resize_instance_data(self):
diff --git a/trove/tests/unittests/mysql/test_user_controller.py b/trove/tests/unittests/mysql/test_user_controller.py
index 4f67d731..eb08dba8 100644
--- a/trove/tests/unittests/mysql/test_user_controller.py
+++ b/trove/tests/unittests/mysql/test_user_controller.py
@@ -46,11 +46,12 @@ class TestUserController(TestCase):
body = {"users": []}
schema = self.controller.get_schema('create', body)
validator = jsonschema.Draft4Validator(schema)
- self.assertFalse(validator.is_valid(body))
- errors = sorted(validator.iter_errors(body), key=lambda e: e.path)
- self.assertThat(len(errors), Is(1))
- self.assertThat(errors[0].message, Equals("[] is too short"))
- self.assertThat(errors[0].path.pop(), Equals("users"))
+ self.assertTrue(validator.is_valid(body))
+ #TODO(zed): Restore after API version increment
+ #errors = sorted(validator.iter_errors(body), key=lambda e: e.path)
+ #self.assertThat(len(errors), Is(1))
+ #self.assertThat(errors[0].message, Equals("[] is too short"))
+ #self.assertThat(errors[0].path.pop(), Equals("users"))
def test_validate_create_short_password(self):
body = {"users": [{"name": "joe", "password": ""}]}
@@ -107,6 +108,15 @@ class TestUserController(TestCase):
self.assertThat(errors[0].message,
Equals("'name' is a required property"))
+ def test_validate_create_bogus_attr(self):
+ body = {"users": [{"databases": [{"name": "x"}], "name": "joe",
+ "bogosity": 100,
+ "password": "123"}]}
+ schema = self.controller.get_schema('create', body)
+ validator = jsonschema.Draft4Validator(schema)
+ #TODO(zed): After API increment, this will NOT be valid.
+ self.assertTrue(validator.is_valid(body))
+
def test_validate_create_complete_db(self):
body = {"users": [{"databases": [{"name": "x"}], "name": "joe",
"password": "123"}]}
@@ -118,11 +128,12 @@ class TestUserController(TestCase):
body = {"users": []}
schema = self.controller.get_schema('update_all', body)
validator = jsonschema.Draft4Validator(schema)
- self.assertFalse(validator.is_valid(body))
- errors = sorted(validator.iter_errors(body), key=lambda e: e.path)
- self.assertThat(len(errors), Is(1))
- self.assertThat(errors[0].message, Equals("[] is too short"))
- self.assertThat(errors[0].path.pop(), Equals("users"))
+ self.assertTrue(validator.is_valid(body))
+ #TODO(zed): Restore after API version increment
+ #errors = sorted(validator.iter_errors(body), key=lambda e: e.path)
+ #self.assertThat(len(errors), Is(1))
+ #self.assertThat(errors[0].message, Equals("[] is too short"))
+ #self.assertThat(errors[0].path.pop(), Equals("users"))
def test_validate_update_short_password(self):
body = {"users": [{"name": "joe", "password": ""}]}
@@ -180,10 +191,11 @@ class TestUserController(TestCase):
body = {"databases": []}
schema = self.controller.get_schema('update_all', body)
validator = jsonschema.Draft4Validator(schema)
- self.assertFalse(validator.is_valid(body))
- errors = sorted(validator.iter_errors(body), key=lambda e: e.path)
- self.assertThat(len(errors), Is(1))
- self.assertThat(errors[0].message, Equals('[] is too short'))
+ self.assertTrue(validator.is_valid(body))
+ #TODO(zed): Restore after API version increment
+ #errors = sorted(validator.iter_errors(body), key=lambda e: e.path)
+ #self.assertThat(len(errors), Is(1))
+ #self.assertThat(errors[0].message, Equals('[] is too short'))
def test_validate_update_short_name(self):
body = {"users": [{"name": ""}]}
@@ -222,11 +234,12 @@ class TestUserAccessController(TestCase):
body = {"databases": []}
schema = (UserAccessController()).get_schema('update_all', body)
validator = jsonschema.Draft4Validator(schema)
- self.assertFalse(validator.is_valid(body))
- errors = sorted(validator.iter_errors(body), key=lambda e: e.path)
- self.assertThat(len(errors), Is(1))
- self.assertThat(errors[0].message, Equals("[] is too short"))
- self.assertThat(errors[0].path.pop(), Equals("databases"))
+ self.assertTrue(validator.is_valid(body))
+ #TODO(zed): Restore after API version increment
+ #errors = sorted(validator.iter_errors(body), key=lambda e: e.path)
+ #self.assertThat(len(errors), Is(1))
+ #self.assertThat(errors[0].message, Equals("[] is too short"))
+ #self.assertThat(errors[0].path.pop(), Equals("databases"))
class TestSchemaController(TestCase):
@@ -266,4 +279,4 @@ class TestSchemaController(TestCase):
self.assertIsNotNone(schema)
self.assertTrue('databases' in body)
validator = jsonschema.Draft4Validator(schema)
- self.assertFalse(validator.is_valid(body))
+ self.assertTrue(validator.is_valid(body))