diff options
author | Jenkins <jenkins@review.openstack.org> | 2013-09-09 21:05:27 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2013-09-09 21:05:27 +0000 |
commit | c062b26933cb42fd3a1fcb4172e90e56967dfda3 (patch) | |
tree | 2eedc2634ab6948cc70e652565a0af41b6667479 | |
parent | 1a8c62acb9414bbd8efd1ac0de084f63633e99cd (diff) | |
parent | 2afe9ee1644ffb4e922fa5e329142866997c1fff (diff) | |
download | trove-c062b26933cb42fd3a1fcb4172e90e56967dfda3.tar.gz |
Merge "Made apischema a bit less restrictive."
-rw-r--r-- | trove/common/apischema.py | 49 | ||||
-rw-r--r-- | trove/tests/api/mgmt/malformed_json.py | 10 | ||||
-rw-r--r-- | trove/tests/unittests/mysql/test_user_controller.py | 53 |
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)) |