aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/plugins-context/plugins-context-schema/plugins-context-schema-json/src/test/java/org/onap/policy/apex
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/plugins-context/plugins-context-schema/plugins-context-schema-json/src/test/java/org/onap/policy/apex')
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-json/src/test/java/org/onap/policy/apex/plugins/context/schema/json/CommonTestData.java115
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-json/src/test/java/org/onap/policy/apex/plugins/context/schema/json/JsonSchemaHelperMarshalTest.java133
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-json/src/test/java/org/onap/policy/apex/plugins/context/schema/json/JsonSchemaHelperUnmarshalTest.java166
3 files changed, 414 insertions, 0 deletions
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-json/src/test/java/org/onap/policy/apex/plugins/context/schema/json/CommonTestData.java b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-json/src/test/java/org/onap/policy/apex/plugins/context/schema/json/CommonTestData.java
new file mode 100644
index 000000000..ce03678c9
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-json/src/test/java/org/onap/policy/apex/plugins/context/schema/json/CommonTestData.java
@@ -0,0 +1,115 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2022 Bell Canada. 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.apex.plugins.context.schema.json;
+
+import java.io.IOException;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.onap.policy.apex.context.SchemaHelper;
+import org.onap.policy.apex.context.impl.schema.SchemaHelperFactory;
+import org.onap.policy.apex.context.parameters.ContextParameterConstants;
+import org.onap.policy.apex.context.parameters.SchemaParameters;
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxKey;
+import org.onap.policy.apex.model.basicmodel.service.ModelService;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchema;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas;
+import org.onap.policy.common.parameters.ParameterService;
+import org.onap.policy.common.utils.coder.StandardCoder;
+import org.onap.policy.common.utils.resources.TextFileUtils;
+
+public class CommonTestData {
+
+ protected static final String VERSION = "0.0.1";
+ protected static final String JSON = "JSON";
+ protected static final String TEST_ID = "testId";
+ protected final AxKey testKey = new AxArtifactKey("JsonTest", VERSION);
+ protected AxContextSchemas schemas;
+ protected final StandardCoder coder = new StandardCoder();
+
+ protected static final String BOOLEAN_SCHEMA =
+ "{\"$schema\": \"http://json-schema.org/draft-07/schema#\",\"type\": \"boolean\"}";
+ protected static final String BOOLEAN_DATA = "true";
+ protected static final String NULL_SCHEMA =
+ "{\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"type\":\"null\"}";
+ protected static final String NULL_DATA = "null";
+ protected static String COMMONHEADERTYPE_DRAFT04;
+ protected static String COMMONHEADERTYPE_DRAFT07;
+ protected static String COMMONHEADERTYPE_WITH_OPTIONAL;
+ protected static String COMMONHEADER;
+ protected static String MEASUREMENTGROUPS_TYPE;
+ protected static String MEASUREMENTGROUPS;
+
+ /**
+ * Setup before all tests.
+ */
+ @BeforeClass
+ public static void setUpBeforeClass() throws IOException {
+ COMMONHEADERTYPE_DRAFT04 =
+ TextFileUtils.getTextFileAsString("src/test/resources/schema/commonHeaderType_draft04.json");
+ COMMONHEADERTYPE_DRAFT07 =
+ TextFileUtils.getTextFileAsString("src/test/resources/schema/commonHeaderType_draft07.json");
+ COMMONHEADERTYPE_WITH_OPTIONAL =
+ TextFileUtils.getTextFileAsString("src/test/resources/schema/commonHeaderTypeWithOptional.json");
+ COMMONHEADER =
+ TextFileUtils.getTextFileAsString("src/test/resources/data/commonHeader.json").replaceAll("\r", "").trim();
+ MEASUREMENTGROUPS_TYPE =
+ TextFileUtils.getTextFileAsString("src/test/resources/schema/measurementGroupsType.json");
+ MEASUREMENTGROUPS = TextFileUtils.getTextFileAsString("src/test/resources/data/measurementGroups.json")
+ .replaceAll("\r", "").trim();
+ }
+
+ /**
+ * Setup before test.
+ */
+ @Before
+ public void setUp() {
+ schemas = new AxContextSchemas(new AxArtifactKey("JsonSchema", VERSION));
+ ModelService.registerModel(AxContextSchemas.class, schemas);
+
+ SchemaParameters schemaParameters = new SchemaParameters();
+ schemaParameters.setName(ContextParameterConstants.SCHEMA_GROUP_NAME);
+ schemaParameters.getSchemaHelperParameterMap().put(JSON, new JsonSchemaHelperParameters());
+ ParameterService.register(schemaParameters);
+ }
+
+ /**
+ * Teardown after test.
+ */
+ @After
+ public void tearDown() {
+ ParameterService.deregister(ContextParameterConstants.SCHEMA_GROUP_NAME);
+ ModelService.clear();
+ }
+
+ /**
+ * Method to create JsonSchemaHelper instance from schema content.
+ *
+ * @param schema the schema content as string
+ * @return schemaHelper instance
+ */
+ protected SchemaHelper createSchema(String schema) {
+ final AxContextSchema jsonSchema = new AxContextSchema(new AxArtifactKey("SchemaTest", VERSION), JSON, schema);
+ schemas.getSchemasMap().put(jsonSchema.getKey(), jsonSchema);
+ return new SchemaHelperFactory().createSchemaHelper(testKey, jsonSchema.getKey());
+ }
+}
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-json/src/test/java/org/onap/policy/apex/plugins/context/schema/json/JsonSchemaHelperMarshalTest.java b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-json/src/test/java/org/onap/policy/apex/plugins/context/schema/json/JsonSchemaHelperMarshalTest.java
new file mode 100644
index 000000000..15458199a
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-json/src/test/java/org/onap/policy/apex/plugins/context/schema/json/JsonSchemaHelperMarshalTest.java
@@ -0,0 +1,133 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2022 Bell Canada. 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.apex.plugins.context.schema.json;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.worldturner.medeia.api.ValidationFailedException;
+import java.util.ArrayList;
+import java.util.Map;
+import org.junit.Test;
+import org.onap.policy.common.utils.coder.CoderException;
+
+public class JsonSchemaHelperMarshalTest extends CommonTestData {
+
+ /**
+ * Test Boolean.
+ */
+ @Test
+ public void testBooleanMarshal() {
+ var schemaHelper = createSchema(BOOLEAN_SCHEMA);
+ assertThat(schemaHelper.marshal2String(Boolean.TRUE)).isEqualTo("true");
+ }
+
+ /**
+ * Test null.
+ */
+ @Test
+ public void testNullMarshal() {
+ var schemaHelper = createSchema(NULL_SCHEMA);
+ assertThat(schemaHelper.marshal2String(null)).isEqualTo("null");
+ }
+
+ /**
+ * Test Array.
+ *
+ * @throws CoderException the coder exception
+ */
+ @Test
+ public void testArrayMarshal() throws CoderException {
+ var schemaHelper = createSchema(MEASUREMENTGROUPS_TYPE);
+ var object = coder.decode(MEASUREMENTGROUPS, Object.class);
+ assertThat(object).isInstanceOf(ArrayList.class);
+ var marshalledString = schemaHelper.marshal2String(object);
+ assertThat(marshalledString).isEqualTo(MEASUREMENTGROUPS);
+ var marshalledObject = schemaHelper.marshal2Object(object);
+ assertThat(marshalledObject).isInstanceOf(JsonArray.class);
+ }
+
+ /**
+ * Test Object marshal valid scenario using JSON Schema draft 04.
+ *
+ * @throws CoderException the coderException
+ */
+ @Test
+ public void testObjectSchemaDraft04_valid() throws CoderException {
+ var dataAsObject = coder.decode(COMMONHEADER, Map.class);
+ var dataReturned = validateAndMarshal(COMMONHEADERTYPE_DRAFT04, dataAsObject, true);
+ assertThat(dataReturned).isEqualTo(COMMONHEADER);
+ }
+
+ /**
+ * Test Object marshal valid scenario using JSON Schema draft 07.
+ *
+ * @throws CoderException the coderException
+ */
+ @Test
+ public void testObjectSchemaDraft07_valid() throws CoderException {
+ var dataAsObject = coder.decode(COMMONHEADER, Map.class);
+ var dataReturned = validateAndMarshal(COMMONHEADERTYPE_DRAFT07, dataAsObject, true);
+ assertThat(dataReturned).isEqualTo(COMMONHEADER);
+ assertThat(validateAndMarshal(COMMONHEADERTYPE_DRAFT07, dataAsObject, false)).isInstanceOf(JsonObject.class);
+ }
+
+ /**
+ * Test Object marshal invalid - required field missing scenario.
+ *
+ * @throws CoderException the coderException
+ */
+ @Test
+ public void testObjectSchema_fieldMissing() throws CoderException {
+ var dataAsObject = coder.decode(COMMONHEADER, Map.class);
+ dataAsObject.remove(TEST_ID);
+ assertThatThrownBy(() -> validateAndMarshal(COMMONHEADERTYPE_DRAFT07, dataAsObject, true))
+ .isInstanceOf(ValidationFailedException.class)
+ .hasMessageContaining("Required property testId is missing from object");
+ }
+
+ /**
+ * Test Object marshal with optional field.
+ *
+ * @throws CoderException the coderException
+ */
+ @Test
+ public void testObjectSchema_OptionalField() throws CoderException {
+ var dataAsObject = coder.decode(COMMONHEADER, Map.class);
+ var dataAsjsonObject = coder.decode(COMMONHEADER, JsonObject.class);
+ dataAsObject.remove(TEST_ID);
+ dataAsjsonObject.remove(TEST_ID);
+ var dataReturned = validateAndMarshal(COMMONHEADERTYPE_WITH_OPTIONAL, dataAsObject, false);
+ assertThat(dataReturned).isEqualTo(dataAsjsonObject);
+ }
+
+ private Object validateAndMarshal(String schemaDef, Object obj, boolean marshalAsString) {
+ var schemaHelper = createSchema(schemaDef);
+ if (marshalAsString) {
+ return schemaHelper.marshal2String(obj);
+ } else {
+ return schemaHelper.marshal2Object(obj);
+ }
+ }
+
+}
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-json/src/test/java/org/onap/policy/apex/plugins/context/schema/json/JsonSchemaHelperUnmarshalTest.java b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-json/src/test/java/org/onap/policy/apex/plugins/context/schema/json/JsonSchemaHelperUnmarshalTest.java
new file mode 100644
index 000000000..11c8638de
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-json/src/test/java/org/onap/policy/apex/plugins/context/schema/json/JsonSchemaHelperUnmarshalTest.java
@@ -0,0 +1,166 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2022 Bell Canada. 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.apex.plugins.context.schema.json;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import com.google.gson.JsonObject;
+import com.worldturner.medeia.api.ValidationFailedException;
+import java.util.ArrayList;
+import java.util.Map;
+import org.junit.Test;
+import org.onap.policy.apex.context.ContextRuntimeException;
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchema;
+import org.onap.policy.common.utils.coder.CoderException;
+
+public class JsonSchemaHelperUnmarshalTest extends CommonTestData {
+
+ /**
+ * Test Boolean.
+ */
+ @Test
+ public void testBooleanUnmarshal() {
+ var schemaHelper = createSchema(BOOLEAN_SCHEMA);
+ assertThat(schemaHelper.createNewInstance(BOOLEAN_DATA)).isInstanceOf(Boolean.class).isEqualTo(Boolean.TRUE);
+ }
+
+ /**
+ * Test null.
+ */
+ @Test
+ public void testNullUnmarshal() {
+ var schemaHelper = createSchema(NULL_SCHEMA);
+ assertThat(schemaHelper.createNewInstance(NULL_DATA)).isEqualTo(null);
+ }
+
+ /**
+ * Test Array.
+ */
+ @Test
+ public void testArrayUnmarshal() {
+ var schemaHelper = createSchema(MEASUREMENTGROUPS_TYPE);
+ var obj = schemaHelper.createNewInstance(MEASUREMENTGROUPS);
+ assertThat(obj).isInstanceOf(ArrayList.class);
+ }
+
+ /**
+ * Test invlaid schema.
+ */
+ @Test
+ public void testSchemaInvalid() {
+ String schemaDef = "{\"type\": \"object\"}";
+ final AxContextSchema jsonSchema =
+ new AxContextSchema(new AxArtifactKey("JsonObject", VERSION), JSON, schemaDef);
+ assertThatThrownBy(() -> new JsonSchemaHelper().init(testKey, jsonSchema))
+ .isInstanceOf(ContextRuntimeException.class).hasMessageContaining("schema is invalid");
+ }
+
+ /**
+ * Test Object unmarshal valid scenario using JSON Schema draft 04.
+ *
+ * @throws CoderException the coderException
+ */
+ @Test
+ public void testObjectSchemaDraft04_valid() throws CoderException {
+ var dataAsObject = coder.decode(COMMONHEADER, Map.class);
+ var dataReturned = validateAndUnmarshal(COMMONHEADERTYPE_DRAFT04, COMMONHEADER);
+ assertThat(dataReturned).isEqualTo(dataAsObject);
+ }
+
+ /**
+ * Test Object unmarshal valid scenario using JSON Schema draft 07.
+ *
+ * @throws CoderException the coderException
+ */
+ @Test
+ public void testObjectSchemaDraft07_valid() throws CoderException {
+ var dataAsObject = coder.decode(COMMONHEADER, Map.class);
+ var dataReturned = validateAndUnmarshal(COMMONHEADERTYPE_DRAFT07, COMMONHEADER);
+ assertThat(dataReturned).isEqualTo(dataAsObject);
+ }
+
+ /**
+ * Test Object unmarshal invalid scenario using JSON Schema draft 07.
+ *
+ * @throws CoderException the coderException
+ */
+ @Test
+ public void testObjectSchemaDraft07_invalid() throws CoderException {
+ var dataAsObject = coder.decode(COMMONHEADER, JsonObject.class);
+ dataAsObject.addProperty("requestId", "abcd");
+ assertThatThrownBy(() -> validateAndUnmarshal(COMMONHEADERTYPE_DRAFT07, dataAsObject))
+ .isInstanceOf(ValidationFailedException.class)
+ .hasMessageContaining("Pattern ^[0-9]*-[0-9]*$ is not contained in text");
+ }
+
+ /**
+ * Test createInstance using invalid format data.
+ *
+ * @throws CoderException the coderException
+ */
+ @Test
+ public void testCreateNewInstanceInvalid() throws CoderException {
+ var dataAsObject = coder.decode(COMMONHEADER, Map.class);
+ assertThatThrownBy(() -> validateAndUnmarshal(COMMONHEADERTYPE_DRAFT07, dataAsObject))
+ .isInstanceOf(ContextRuntimeException.class).hasMessageContaining("not an instance of JsonObject");
+ }
+
+ /**
+ * Test Object unmarshal invalid - required field missing scenario.
+ *
+ * @throws CoderException the coderException
+ */
+ @Test
+ public void testObjectSchema_fieldMissing() throws CoderException {
+ var dataAsObject = coder.decode(COMMONHEADER, JsonObject.class);
+ dataAsObject.remove(TEST_ID);
+ assertThatThrownBy(() -> validateAndUnmarshal(COMMONHEADERTYPE_DRAFT07, dataAsObject))
+ .isInstanceOf(ValidationFailedException.class)
+ .hasMessageContaining("Required property testId is missing from object");
+ }
+
+ /**
+ * Test Object unmarshal with optional field.
+ *
+ * @throws CoderException the coderException
+ */
+ @Test
+ public void testObjectSchema_OptionalField() throws CoderException {
+ var dataAsObject = coder.decode(COMMONHEADER, Map.class);
+ var dataAsjsonObject = coder.decode(COMMONHEADER, JsonObject.class);
+ dataAsObject.remove(TEST_ID);
+ dataAsjsonObject.remove(TEST_ID);
+ var dataReturned = validateAndUnmarshal(COMMONHEADERTYPE_WITH_OPTIONAL, dataAsjsonObject);
+ assertThat(dataReturned).isEqualTo(dataAsObject);
+ }
+
+ private Object validateAndUnmarshal(String schemaDef, Object data) {
+ var schemaHelper = createSchema(schemaDef);
+ if (data instanceof String) {
+ return schemaHelper.createNewInstance((String) data);
+ } else {
+ return schemaHelper.createNewInstance(data);
+ }
+ }
+
+}