diff options
author | jhh <jorge.hernandez-herrero@att.com> | 2020-01-27 06:45:07 -0600 |
---|---|---|
committer | jhh <jorge.hernandez-herrero@att.com> | 2020-01-27 09:07:01 -0600 |
commit | 2ce955e7c3c53b16596a18b0f5f68f2b491d1de6 (patch) | |
tree | 543b5d95cd1c1cf42029cda2dbfd283559952f9f /utils/src/test | |
parent | ddf0410c7ad3721c2169dfb6c06234b680766c8a (diff) |
Schema validation extension to StandardCoder
Issue-ID: POLICY-2331
Signed-off-by: jhh <jorge.hernandez-herrero@att.com>
Change-Id: Ic3e8d21715d17a61ea5d07740dd9f4dd0dbb8641
Signed-off-by: jhh <jorge.hernandez-herrero@att.com>
Diffstat (limited to 'utils/src/test')
5 files changed, 237 insertions, 0 deletions
diff --git a/utils/src/test/java/org/onap/policy/common/utils/coder/StandardValCoderTest.java b/utils/src/test/java/org/onap/policy/common/utils/coder/StandardValCoderTest.java new file mode 100644 index 00000000..38106f57 --- /dev/null +++ b/utils/src/test/java/org/onap/policy/common/utils/coder/StandardValCoderTest.java @@ -0,0 +1,143 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.utils.coder; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import com.worldturner.medeia.api.ValidationFailedException; +import java.io.IOException; +import java.io.StringReader; +import java.io.StringWriter; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.junit.Before; +import org.junit.Test; + +public class StandardValCoderTest { + private String jsonSchema; + private String validJson; + private String missingReqJson; + private String badRegexJson; + + @Data + @NoArgsConstructor + public static class ValOuter { + @Data + @NoArgsConstructor + public static class ValInner { + public String subItemString; + public Integer subItemInteger; + } + + public String aaString; + public int anInteger; + public boolean aaBoolean; + public List<ValInner> aaCollection; + } + + @Before + public void testSetUp() throws Exception { + jsonSchema = getJson("src/test/resources/org/onap/policy/common/utils/coder/test.schema.json"); + validJson = getJson("src/test/resources/org/onap/policy/common/utils/coder/valid.json"); + missingReqJson = getJson("src/test/resources/org/onap/policy/common/utils/coder/missing-required.json"); + badRegexJson = getJson("src/test/resources/org/onap/policy/common/utils/coder/bad-regex.json"); + } + + @Test + public void testDecode() throws CoderException { + StandardValCoder valCoder = new StandardValCoder(jsonSchema, "test-schema"); + + ValOuter valOuter = valCoder.decode(validJson, ValOuter.class); + assertValidJson(valOuter); + + StringReader reader = new StringReader(validJson); + valOuter = valCoder.decode(reader, ValOuter.class); + assertValidJson(valOuter); + + try { + valCoder.decode(missingReqJson, ValOuter.class); + fail("missing required field should have been flagged by the schema validation"); + } catch (CoderException e) { + assertEquals("required", ((ValidationFailedException) e.getCause()).getFailures().get(0).getRule()); + assertEquals("aaCollection", + ((ValidationFailedException) e.getCause()).getFailures().get(0).getProperty()); + assertEquals("Required property aaCollection is missing from object", + ((ValidationFailedException) e.getCause()).getFailures().get(0).getMessage()); + } + + try { + valCoder.decode(badRegexJson, ValOuter.class); + fail("bad regex should have been flagged by the schema validation"); + } catch (CoderException e) { + assertEquals("properties", ((ValidationFailedException) e.getCause()).getFailures().get(0).getRule()); + assertEquals("aaString", + ((ValidationFailedException) e.getCause()).getFailures().get(0).getProperty()); + assertEquals("Property validation failed", + ((ValidationFailedException) e.getCause()).getFailures().get(0).getMessage()); + assertEquals("pattern", + ((ValidationFailedException) e.getCause()).getFailures() + .get(0).getDetails().iterator().next().getRule()); + assertEquals("Pattern ^([a-z]*)$ is not contained in text", + ((ValidationFailedException) e.getCause()).getFailures() + .get(0).getDetails().iterator().next().getMessage()); + } + } + + @Test + public void testEncode() throws CoderException { + StandardValCoder valCoder = new StandardValCoder(jsonSchema, "test-schema"); + ValOuter valOuter = valCoder.decode(validJson, ValOuter.class); + + String valOuterJson = valCoder.encode(valOuter); + assertEquals(valOuter, valCoder.decode(valOuterJson, ValOuter.class)); + assertValidJson(valOuter); + + StringWriter writer = new StringWriter(); + valCoder.encode(writer, valOuter); + assertEquals(valOuterJson, writer.toString()); + } + + @Test + public void testConformance() { + StandardValCoder valCoder = new StandardValCoder(jsonSchema, "test-schema"); + assertTrue(valCoder.isConformant(validJson)); + assertFalse(valCoder.isConformant(missingReqJson)); + assertFalse(valCoder.isConformant(badRegexJson)); + } + + private void assertValidJson(ValOuter valOuter) { + assertEquals("abcd", valOuter.getAaString()); + assertEquals(90, valOuter.getAnInteger()); + assertTrue(valOuter.isAaBoolean()); + assertEquals("defg", valOuter.getAaCollection().get(0).getSubItemString()); + assertEquals(Integer.valueOf(1200), valOuter.getAaCollection().get(0).getSubItemInteger()); + } + + private String getJson(String filePath) throws IOException { + return new String(Files.readAllBytes(Paths.get(filePath))); + } +}
\ No newline at end of file diff --git a/utils/src/test/resources/org/onap/policy/common/utils/coder/bad-regex.json b/utils/src/test/resources/org/onap/policy/common/utils/coder/bad-regex.json new file mode 100644 index 00000000..049de2cf --- /dev/null +++ b/utils/src/test/resources/org/onap/policy/common/utils/coder/bad-regex.json @@ -0,0 +1,9 @@ +{ + "aaString": "abc123", + "anInteger": 90, + "aaBoolean": true, + "aaCollection": [ { + "subItemString": "defg", + "subItemInteger": 1200 + }] +}
\ No newline at end of file diff --git a/utils/src/test/resources/org/onap/policy/common/utils/coder/missing-required.json b/utils/src/test/resources/org/onap/policy/common/utils/coder/missing-required.json new file mode 100644 index 00000000..e19db9db --- /dev/null +++ b/utils/src/test/resources/org/onap/policy/common/utils/coder/missing-required.json @@ -0,0 +1,5 @@ +{ + "aaString": "abcd", + "anInteger": 90, + "aaBoolean": true +}
\ No newline at end of file diff --git a/utils/src/test/resources/org/onap/policy/common/utils/coder/test.schema.json b/utils/src/test/resources/org/onap/policy/common/utils/coder/test.schema.json new file mode 100644 index 00000000..e79475eb --- /dev/null +++ b/utils/src/test/resources/org/onap/policy/common/utils/coder/test.schema.json @@ -0,0 +1,71 @@ +{ + "definitions": {}, + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "http://onap.org/policy/common/coders/root.json", + "type": "object", + "title": "Test Schema", + "required": [ + "aaString", + "anInteger", + "aaBoolean", + "aaCollection" + ], + "properties": { + "aaString": { + "$id": "#/properties/aaString", + "type": "string", + "title": "an alphabetical string", + "default": "", + "examples": [ + "abcdef" + ], + "pattern": "^([a-z]*)$" + }, + "anInteger": { + "$id": "#/properties/anInteger", + "type": "integer", + "title": "a bounded integer", + "default": 5, + "examples": [ + 98 + ], + "minimum": 10, + "maximum": 100 + }, + "aaBoolean": { + "$id": "#/properties/aaBoolean", + "type": "boolean", + "title": "a boolean", + "default": false, + "examples": [ + true + ] + }, + "aaCollection": { + "$id": "#/properties/aaCollection", + "type": "array", + "title": "a collection", + "items": { + "$id": "#/properties/aaCollection/items", + "type": "object", + "title": "the collection items", + "required": [ + "subItemString" + ], + "properties": { + "subItemString": { + "$id": "#/properties/aaCollection/items/properties/subItemString", + "type": "string", + "title": "the subitem string", + "default": "blah", + "pattern": "^(.*)$" + }, + "subItemInteger": { + "$id": "#/properties/aaCollection/items/properties/subItemInteger", + "type": "integer" + } + } + } + } + } +}
\ No newline at end of file diff --git a/utils/src/test/resources/org/onap/policy/common/utils/coder/valid.json b/utils/src/test/resources/org/onap/policy/common/utils/coder/valid.json new file mode 100644 index 00000000..c1738176 --- /dev/null +++ b/utils/src/test/resources/org/onap/policy/common/utils/coder/valid.json @@ -0,0 +1,9 @@ +{ + "aaString": "abcd", + "anInteger": 90, + "aaBoolean": true, + "aaCollection": [ { + "subItemString": "defg", + "subItemInteger": 1200 + }] +}
\ No newline at end of file |