summaryrefslogtreecommitdiffstats
path: root/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test')
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaAAI.java76
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaArray.java107
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaEnum.java120
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaFixed.java130
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaHelperBadSchemas.java123
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaHelperMarshal.java277
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaHelperUnmarshal.java371
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaMap.java135
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaRecord.java130
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaUnion.java109
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestHealthCheckSchema.java119
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/AAIInventoryResponseItemType.avsc70
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/ArrayExampleAddress.avsc10
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/ArrayExampleLong.avsc3
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/EnumSchema.avsc5
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/FixedSchema.avsc5
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/HealthCheckBodyType.avsc76
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/MapExampleAddress.avsc10
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/MapExampleAddressInvalidFields.avsc10
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/MapExampleLong.avsc3
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/RecordExample.avsc172
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/RecordExampleInvalidFields.avsc172
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/RecordExampleVPN.avsc26
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/RecordExampleVPNReuse.avsc34
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/UnionExample.avsc30
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/AAIResponse4Policy.json20
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/AAIResponse4VNF.json302
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/AAIResponseExample.json209
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/ArrayExampleAddressFull.json13
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/ArrayExampleAddressNull.json1
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/ArrayExampleLongFull.json1
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/ArrayExampleLongNull.json1
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/EnumExampleBad0.json1
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/EnumExampleBad1.json1
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/EnumExampleHearts.json1
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/EnumExampleNull.json1
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/FixedExampleBad0.json1
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/FixedExampleBad1.json1
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/FixedExampleGood.json1
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/FixedExampleNull.json1
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/HealthCheckEvent.json22
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/MapExampleAddressFull.json18
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/MapExampleAddressInvalidFields.json18
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/MapExampleAddressNull.json1
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/MapExampleLongFull.json10
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/MapExampleLongNull.json1
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/RecordExampleFull.json41
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/RecordExampleInvalidFields.json41
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/RecordExampleNull.json15
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/RecordExampleVPNFull.json9
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/UnionExampleAllFields.json6
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/UnionExampleNullField.json6
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/UnionExampleOptionalField.json5
-rw-r--r--plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/logback-test.xml74
54 files changed, 3145 insertions, 0 deletions
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaAAI.java b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaAAI.java
new file mode 100644
index 000000000..65eef39c2
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaAAI.java
@@ -0,0 +1,76 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. 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.avro;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+
+import org.apache.avro.generic.GenericData.Array;
+import org.apache.avro.generic.GenericRecord;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.apex.context.SchemaHelper;
+import org.onap.policy.apex.context.impl.schema.SchemaHelperFactory;
+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.apex.model.utilities.TextFileUtils;
+
+/**
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ * @version
+ */
+public class TestAvroSchemaAAI {
+ private final AxKey testKey = new AxArtifactKey("AvroTest", "0.0.1");
+ private AxContextSchemas schemas;
+ private String aaiInventoryResponseSchema;
+
+ @Before
+ public void initTest() throws IOException {
+ schemas = new AxContextSchemas(new AxArtifactKey("AvroSchemas", "0.0.1"));
+ ModelService.registerModel(AxContextSchemas.class, schemas);
+ new SchemaParameters().getSchemaHelperParameterMap().put("Avro", new AvroSchemaHelperParameters());
+ aaiInventoryResponseSchema =
+ TextFileUtils.getTextFileAsString("src/test/resources/avsc/AAIInventoryResponseItemType.avsc");
+ }
+
+ @Test
+ public void testAAIResponsePolicy() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroRecord", "0.0.1"), "Avro", aaiInventoryResponseSchema);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ final Array<?> newArrayEmpty = (Array<?>) schemaHelper.createNewInstance();
+ assertEquals(0, newArrayEmpty.size());
+
+ final String inString = TextFileUtils.getTextFileAsString("src/test/resources/data/AAIResponse4Policy.json");
+ final Array<?> newArrayFull = (Array<?>) schemaHelper.createNewInstance(inString);
+ final String vnfName = ((GenericRecord) ((GenericRecord) newArrayFull.get(0)).get("generic_DasH_vnf"))
+ .get("vnf_DasH_name").toString();
+ assertEquals("ZRDM2MMEX39", vnfName);
+ }
+}
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaArray.java b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaArray.java
new file mode 100644
index 000000000..21fab66d9
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaArray.java
@@ -0,0 +1,107 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. 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.avro;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+
+import org.apache.avro.generic.GenericData.Array;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.apex.context.SchemaHelper;
+import org.onap.policy.apex.context.impl.schema.SchemaHelperFactory;
+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.apex.model.utilities.TextFileUtils;
+
+/**
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ * @version
+ */
+public class TestAvroSchemaArray {
+ private final AxKey testKey = new AxArtifactKey("AvroTest", "0.0.1");
+ private AxContextSchemas schemas;
+ private String longArraySchema;
+ private String addressArraySchema;
+
+ @Before
+ public void initTest() throws IOException {
+ schemas = new AxContextSchemas(new AxArtifactKey("AvroSchemas", "0.0.1"));
+ ModelService.registerModel(AxContextSchemas.class, schemas);
+ new SchemaParameters().getSchemaHelperParameterMap().put("Avro", new AvroSchemaHelperParameters());
+ longArraySchema = TextFileUtils.getTextFileAsString("src/test/resources/avsc/ArrayExampleLong.avsc");
+ addressArraySchema = TextFileUtils.getTextFileAsString("src/test/resources/avsc/ArrayExampleAddress.avsc");
+ }
+
+ @Test
+ public void testArrayInit() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroRecord", "0.0.1"), "Avro", addressArraySchema);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ final Array<?> newArrayEmpty = (Array<?>) schemaHelper.createNewInstance();
+ assertEquals(0, newArrayEmpty.size());
+
+ final String inString =
+ TextFileUtils.getTextFileAsString("src/test/resources/data/ArrayExampleAddressFull.json");
+ final Array<?> newArrayFull = (Array<?>) schemaHelper.createNewInstance(inString);
+ assertEquals("{\"streetaddress\": \"1600 Pennsylvania Avenue\", \"city\": \"Washington DC\"}",
+ newArrayFull.get(0).toString());
+ }
+
+ @Test
+ public void testLongArrayUnmarshalMarshal() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroArray", "0.0.1"), "Avro", longArraySchema);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/ArrayExampleLongNull.json");
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/ArrayExampleLongFull.json");
+ }
+
+ @Test
+ public void testAddressArrayUnmarshalMarshal() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroArray", "0.0.1"), "Avro", addressArraySchema);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/ArrayExampleAddressNull.json");
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/ArrayExampleAddressFull.json");
+ }
+
+ private void testUnmarshalMarshal(final SchemaHelper schemaHelper, final String fileName) throws IOException {
+ final String inString = TextFileUtils.getTextFileAsString(fileName);
+ final Array<?> schemaObject = (Array<?>) schemaHelper.unmarshal(inString);
+ final String outString = schemaHelper.marshal2String(schemaObject);
+ assertEquals(inString.replaceAll("\\s+", ""), outString.replaceAll("\\s+", ""));
+ }
+}
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaEnum.java b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaEnum.java
new file mode 100644
index 000000000..ae19cd31a
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaEnum.java
@@ -0,0 +1,120 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. 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.avro;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+
+import org.apache.avro.generic.GenericData.EnumSymbol;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.apex.context.SchemaHelper;
+import org.onap.policy.apex.context.impl.schema.SchemaHelperFactory;
+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.apex.model.utilities.TextFileUtils;
+
+/**
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ * @version
+ */
+public class TestAvroSchemaEnum {
+ private final AxKey testKey = new AxArtifactKey("AvroTest", "0.0.1");
+ private AxContextSchemas schemas;
+ private String enumSchema;
+
+ @Before
+ public void initTest() throws IOException {
+ schemas = new AxContextSchemas(new AxArtifactKey("AvroSchemas", "0.0.1"));
+ ModelService.registerModel(AxContextSchemas.class, schemas);
+ new SchemaParameters().getSchemaHelperParameterMap().put("Avro", new AvroSchemaHelperParameters());
+ enumSchema = TextFileUtils.getTextFileAsString("src/test/resources/avsc/EnumSchema.avsc");
+ }
+
+ @Test
+ public void testEnumInit() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroRecord", "0.0.1"), "Avro", enumSchema);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ final EnumSymbol newEnumEmpty = (EnumSymbol) schemaHelper.createNewInstance();
+ assertEquals("SPADES", newEnumEmpty.toString());
+
+ final EnumSymbol newEnumFull = (EnumSymbol) schemaHelper.createNewInstance("\"HEARTS\"");
+ assertEquals("HEARTS", newEnumFull.toString());
+ }
+
+ @Test
+ public void testEnumUnmarshalMarshal() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroArray", "0.0.1"), "Avro", enumSchema);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/EnumExampleHearts.json");
+
+ try {
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/EnumExampleNull.json");
+ fail("This test should throw an exception here");
+ } catch (final Exception e) {
+ assertEquals("AvroTest:0.0.1: object \"null\" Avro unmarshalling failed: Expected fixed. Got VALUE_NULL",
+ e.getMessage());
+ }
+ try {
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/EnumExampleNull.json");
+ fail("This test should throw an exception here");
+ } catch (final Exception e) {
+ assertEquals("AvroTest:0.0.1: object \"null\" Avro unmarshalling failed: Expected fixed. Got VALUE_NULL",
+ e.getMessage());
+ }
+ try {
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/EnumExampleBad0.json");
+ fail("This test should throw an exception here");
+ } catch (final Exception e) {
+ assertEquals("AvroTest:0.0.1: object \"\"TWEED\"\" Avro unmarshalling failed: Unknown symbol in enum TWEED",
+ e.getMessage());
+ }
+ try {
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/EnumExampleBad1.json");
+ fail("This test should throw an exception here");
+ } catch (final Exception e) {
+ assertEquals(
+ "AvroTest:0.0.1: object \"\"Hearts\"\" Avro unmarshalling failed: Unknown symbol in enum Hearts",
+ e.getMessage());
+ }
+ }
+
+ private void testUnmarshalMarshal(final SchemaHelper schemaHelper, final String fileName) throws IOException {
+ final String inString = TextFileUtils.getTextFileAsString(fileName);
+ final EnumSymbol decodedObject = (EnumSymbol) schemaHelper.unmarshal(inString);
+ final String outString = schemaHelper.marshal2String(decodedObject);
+ assertEquals(inString.replaceAll("[\\r?\\n]+", " "), outString.replaceAll("[\\r?\\n]+", " "));
+ }
+}
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaFixed.java b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaFixed.java
new file mode 100644
index 000000000..41f622115
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaFixed.java
@@ -0,0 +1,130 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. 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.avro;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+
+import org.apache.avro.generic.GenericData.Fixed;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.apex.context.SchemaHelper;
+import org.onap.policy.apex.context.impl.schema.SchemaHelperFactory;
+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.apex.model.utilities.TextFileUtils;
+
+/**
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ * @version
+ */
+public class TestAvroSchemaFixed {
+ private final AxKey testKey = new AxArtifactKey("AvroTest", "0.0.1");
+ private AxContextSchemas schemas;
+ private String fixedSchema;
+
+ @Before
+ public void initTest() throws IOException {
+ schemas = new AxContextSchemas(new AxArtifactKey("AvroSchemas", "0.0.1"));
+ ModelService.registerModel(AxContextSchemas.class, schemas);
+ new SchemaParameters().getSchemaHelperParameterMap().put("Avro", new AvroSchemaHelperParameters());
+ fixedSchema = TextFileUtils.getTextFileAsString("src/test/resources/avsc/FixedSchema.avsc");
+ }
+
+ @Test
+ public void testFixedInit() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroRecord", "0.0.1"), "Avro", fixedSchema);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ try {
+ schemaHelper.createNewInstance();
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertEquals(
+ "AvroTest:0.0.1: could not create an instance of class \"org.apache.avro.generic.GenericData.Fixed\" using the default constructor \"Fixed()\"",
+ e.getMessage());
+ }
+
+ final String inString = TextFileUtils.getTextFileAsString("src/test/resources/data/FixedExampleGood.json");
+ final Fixed newFixedFull = (Fixed) schemaHelper.createNewInstance(inString);
+ assertTrue(newFixedFull.toString().startsWith("[48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65"));
+ assertTrue(newFixedFull.toString().endsWith("53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70]"));
+ }
+
+ @Test
+ public void testFixedUnmarshalMarshal() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroArray", "0.0.1"), "Avro", fixedSchema);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/FixedExampleGood.json");
+
+ try {
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/FixedExampleNull.json");
+ fail("This test should throw an exception here");
+ } catch (final Exception e) {
+ assertEquals("AvroTest:0.0.1: object \"null\" Avro unmarshalling failed: Expected fixed. Got VALUE_NULL",
+ e.getMessage());
+ }
+ try {
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/FixedExampleNull.json");
+ fail("This test should throw an exception here");
+ } catch (final Exception e) {
+ assertEquals("AvroTest:0.0.1: object \"null\" Avro unmarshalling failed: Expected fixed. Got VALUE_NULL",
+ e.getMessage());
+ }
+ try {
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/FixedExampleBad0.json");
+ fail("This test should throw an exception here");
+ } catch (final Exception e) {
+ assertEquals(
+ "AvroTest:0.0.1: object \"\"BADBAD\"\" Avro unmarshalling failed: Expected fixed length 64, but got6",
+ e.getMessage());
+ }
+ try {
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/FixedExampleBad1.json");
+ fail("This test should throw an exception here");
+ } catch (final Exception e) {
+ assertEquals(
+ "AvroTest:0.0.1: object \"\"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0\"\" Avro unmarshalling failed: Expected fixed length 64, but got65",
+ e.getMessage());
+ }
+ }
+
+ private void testUnmarshalMarshal(final SchemaHelper schemaHelper, final String fileName) throws IOException {
+ final String inString = TextFileUtils.getTextFileAsString(fileName);
+ final Fixed decodedObject = (Fixed) schemaHelper.unmarshal(inString);
+ final String outString = schemaHelper.marshal2String(decodedObject);
+ assertEquals(inString.replaceAll("[\\r?\\n]+", " "), outString.replaceAll("[\\r?\\n]+", " "));
+ }
+}
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaHelperBadSchemas.java b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaHelperBadSchemas.java
new file mode 100644
index 000000000..1e1a0bee0
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaHelperBadSchemas.java
@@ -0,0 +1,123 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. 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.avro;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.apex.context.impl.schema.SchemaHelperFactory;
+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;
+
+/**
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ * @version
+ */
+public class TestAvroSchemaHelperBadSchemas {
+ private final AxKey testKey = new AxArtifactKey("AvroTest", "0.0.1");
+ private AxContextSchemas schemas;
+
+ @Before
+ public void initTest() {
+ schemas = new AxContextSchemas(new AxArtifactKey("AvroSchemas", "0.0.1"));
+ ModelService.registerModel(AxContextSchemas.class, schemas);
+ new SchemaParameters().getSchemaHelperParameterMap().put("Avro", new AvroSchemaHelperParameters());
+ }
+
+ @Test
+ public void badSchemaTest() {
+ final AxContextSchema avroBadSchema0 = new AxContextSchema(new AxArtifactKey("AvroBad0", "0.0.1"), "Avro", "}");
+ schemas.getSchemasMap().put(avroBadSchema0.getKey(), avroBadSchema0);
+
+ try {
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroBadSchema0.getKey());
+ fail("This test should throw an exception");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage()
+ .startsWith("AvroTest:0.0.1: avro context schema \"AvroBad0:0.0.1\" schema is invalid"));
+ }
+
+ final AxContextSchema avroBadSchema1 = new AxContextSchema(new AxArtifactKey("AvroBad1", "0.0.1"), "Avro", "");
+ schemas.getSchemasMap().put(avroBadSchema1.getKey(), avroBadSchema1);
+
+ try {
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroBadSchema1.getKey());
+ fail("This test should throw an exception");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage()
+ .startsWith("AvroTest:0.0.1: avro context schema \"AvroBad1:0.0.1\" schema is invalid"));
+ }
+
+ final AxContextSchema avroBadSchema2 =
+ new AxContextSchema(new AxArtifactKey("AvroBad2", "0.0.1"), "Avro", "{}");
+ schemas.getSchemasMap().put(avroBadSchema2.getKey(), avroBadSchema2);
+
+ try {
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroBadSchema2.getKey());
+ fail("This test should throw an exception");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage()
+ .startsWith("AvroTest:0.0.1: avro context schema \"AvroBad2:0.0.1\" schema is invalid"));
+ }
+
+ final AxContextSchema avroBadSchema3 =
+ new AxContextSchema(new AxArtifactKey("AvroBad3", "0.0.1"), "Avro", "{zooby}");
+ schemas.getSchemasMap().put(avroBadSchema3.getKey(), avroBadSchema3);
+
+ try {
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroBadSchema3.getKey());
+ fail("This test should throw an exception");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage()
+ .startsWith("AvroTest:0.0.1: avro context schema \"AvroBad3:0.0.1\" schema is invalid"));
+ }
+
+ final AxContextSchema avroBadSchema4 =
+ new AxContextSchema(new AxArtifactKey("AvroBad4", "0.0.1"), "Avro", "{\"zooby\"}");
+ schemas.getSchemasMap().put(avroBadSchema4.getKey(), avroBadSchema4);
+
+ try {
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroBadSchema4.getKey());
+ fail("This test should throw an exception");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage()
+ .startsWith("AvroTest:0.0.1: avro context schema \"AvroBad4:0.0.1\" schema is invalid"));
+ }
+
+ final AxContextSchema avroBadSchema5 =
+ new AxContextSchema(new AxArtifactKey("AvroBad5", "0.0.1"), "Avro", "{\"type\": \"zooby\"}");
+ schemas.getSchemasMap().put(avroBadSchema5.getKey(), avroBadSchema5);
+
+ try {
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroBadSchema5.getKey());
+ fail("This test should throw an exception");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage()
+ .startsWith("AvroTest:0.0.1: avro context schema \"AvroBad5:0.0.1\" schema is invalid"));
+ }
+ }
+}
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaHelperMarshal.java b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaHelperMarshal.java
new file mode 100644
index 000000000..a710a2376
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaHelperMarshal.java
@@ -0,0 +1,277 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. 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.avro;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.apex.context.SchemaHelper;
+import org.onap.policy.apex.context.impl.schema.SchemaHelperFactory;
+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;
+
+/**
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ * @version
+ */
+public class TestAvroSchemaHelperMarshal {
+ private final AxKey testKey = new AxArtifactKey("AvroTest", "0.0.1");
+ private AxContextSchemas schemas;
+
+ @Before
+ public void initTest() {
+ schemas = new AxContextSchemas(new AxArtifactKey("AvroSchemas", "0.0.1"));
+ ModelService.registerModel(AxContextSchemas.class, schemas);
+ new SchemaParameters().getSchemaHelperParameterMap().put("Avro", new AvroSchemaHelperParameters());
+ }
+
+ @Test
+ public void testNullMarshal() {
+ final AxContextSchema avroNullSchema =
+ new AxContextSchema(new AxArtifactKey("AvroNull", "0.0.1"), "Avro", "{\"type\": \"null\"}");
+
+ schemas.getSchemasMap().put(avroNullSchema.getKey(), avroNullSchema);
+ final SchemaHelper schemaHelper0 =
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroNullSchema.getKey());
+
+ assertEquals("null", schemaHelper0.marshal2String(null));
+ assertEquals("null", schemaHelper0.marshal2String(123));
+ assertEquals("null", schemaHelper0.marshal2String("Everything is marshalled to Null, no matter what it is"));
+ }
+
+ @Test
+ public void testBooleanMarshal() {
+ final AxContextSchema avroBooleanSchema =
+ new AxContextSchema(new AxArtifactKey("AvroBoolean", "0.0.1"), "Avro", "{\"type\": \"boolean\"}");
+
+ schemas.getSchemasMap().put(avroBooleanSchema.getKey(), avroBooleanSchema);
+ final SchemaHelper schemaHelper1 =
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroBooleanSchema.getKey());
+
+ assertEquals("true", schemaHelper1.marshal2String(true));
+ assertEquals("false", schemaHelper1.marshal2String(false));
+ try {
+ schemaHelper1.marshal2String(0);
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ e.printStackTrace();
+ assertEquals(
+ "AvroTest:0.0.1: object \"0\" Avro marshalling failed: java.lang.Integer cannot be cast to java.lang.Boolean",
+ e.getMessage());
+ }
+ try {
+ schemaHelper1.marshal2String("0");
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ e.printStackTrace();
+ assertEquals(
+ "AvroTest:0.0.1: object \"0\" Avro marshalling failed: java.lang.String cannot be cast to java.lang.Boolean",
+ e.getMessage());
+ }
+ }
+
+ @Test
+ public void testIntMarshal() {
+ final AxContextSchema avroIntSchema =
+ new AxContextSchema(new AxArtifactKey("AvroInt", "0.0.1"), "Avro", "{\"type\": \"int\"}");
+
+ schemas.getSchemasMap().put(avroIntSchema.getKey(), avroIntSchema);
+ final SchemaHelper schemaHelper2 =
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroIntSchema.getKey());
+
+ assertEquals("0", schemaHelper2.marshal2String(0));
+ assertEquals("1", schemaHelper2.marshal2String(1));
+ assertEquals("-1", schemaHelper2.marshal2String(-1));
+ assertEquals("1", schemaHelper2.marshal2String(1.23));
+ assertEquals("-1", schemaHelper2.marshal2String(-1.23));
+ assertEquals("2147483647", schemaHelper2.marshal2String(2147483647));
+ assertEquals("-2147483648", schemaHelper2.marshal2String(-2147483648));
+ try {
+ schemaHelper2.marshal2String("Hello");
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage().startsWith(
+ "AvroTest:0.0.1: object \"Hello\" Avro marshalling failed: java.lang.String cannot be cast to java.lang.Number"));
+ }
+ try {
+ schemaHelper2.marshal2String(null);
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage()
+ .startsWith("AvroTest:0.0.1: cannot encode a null object of class \"java.lang.Integer\""));
+ }
+ }
+
+ @Test
+ public void testLongMarshal() {
+ final AxContextSchema avroLongSchema =
+ new AxContextSchema(new AxArtifactKey("AvroLong", "0.0.1"), "Avro", "{\"type\": \"long\"}");
+
+ schemas.getSchemasMap().put(avroLongSchema.getKey(), avroLongSchema);
+ final SchemaHelper schemaHelper3 =
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroLongSchema.getKey());
+
+ assertEquals("0", schemaHelper3.marshal2String(0L));
+ assertEquals("1", schemaHelper3.marshal2String(1L));
+ assertEquals("-1", schemaHelper3.marshal2String(-1L));
+ assertEquals("9223372036854775807", schemaHelper3.marshal2String(9223372036854775807L));
+ assertEquals("-9223372036854775808", schemaHelper3.marshal2String(-9223372036854775808L));
+ try {
+ schemaHelper3.marshal2String("Hello");
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage().startsWith(
+ "AvroTest:0.0.1: object \"Hello\" Avro marshalling failed: java.lang.String cannot be cast to java.lang.Long"));
+ }
+ try {
+ schemaHelper3.marshal2String(null);
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage()
+ .startsWith("AvroTest:0.0.1: cannot encode a null object of class \"java.lang.Long\""));
+ }
+ }
+
+ @Test
+ public void testFloatMarshal() {
+ final AxContextSchema avroFloatSchema =
+ new AxContextSchema(new AxArtifactKey("AvroFloat", "0.0.1"), "Avro", "{\"type\": \"float\"}");
+
+ schemas.getSchemasMap().put(avroFloatSchema.getKey(), avroFloatSchema);
+ final SchemaHelper schemaHelper4 =
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroFloatSchema.getKey());
+
+ assertEquals("0.0", schemaHelper4.marshal2String(0F));
+ assertEquals("1.0", schemaHelper4.marshal2String(1F));
+ assertEquals("-1.0", schemaHelper4.marshal2String(-1F));
+ assertEquals("1.23", schemaHelper4.marshal2String(1.23F));
+ assertEquals("-1.23", schemaHelper4.marshal2String(-1.23F));
+ assertEquals("9.223372E18", schemaHelper4.marshal2String(9.223372E18F));
+ assertEquals("-9.223372E18", schemaHelper4.marshal2String(-9.223372E18F));
+ assertEquals("9.223372E18", schemaHelper4.marshal2String(9.223372E18F));
+ assertEquals("-9.223372E18", schemaHelper4.marshal2String(-9.223372E18F));
+ try {
+ schemaHelper4.marshal2String("Hello");
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage().startsWith(
+ "AvroTest:0.0.1: object \"Hello\" Avro marshalling failed: java.lang.String cannot be cast to java.lang.Float"));
+ }
+ try {
+ schemaHelper4.marshal2String(null);
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage()
+ .startsWith("AvroTest:0.0.1: cannot encode a null object of class \"java.lang.Float\""));
+ }
+ }
+
+
+ @Test
+ public void testDoubleMarshal() {
+ final AxContextSchema avroDoubleSchema =
+ new AxContextSchema(new AxArtifactKey("AvroDouble", "0.0.1"), "Avro", "{\"type\": \"double\"}");
+
+ schemas.getSchemasMap().put(avroDoubleSchema.getKey(), avroDoubleSchema);
+ final SchemaHelper schemaHelper5 =
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroDoubleSchema.getKey());
+
+ assertEquals("0.0", schemaHelper5.marshal2String(0D));
+ assertEquals("1.0", schemaHelper5.marshal2String(1D));
+ assertEquals("-1.0", schemaHelper5.marshal2String(-1D));
+ assertEquals("1.23", schemaHelper5.marshal2String(1.23));
+ assertEquals("-1.23", schemaHelper5.marshal2String(-1.23));
+ assertEquals("9.223372036854776E18", schemaHelper5.marshal2String(9.223372036854776E18));
+ assertEquals("-9.223372036854776E18", schemaHelper5.marshal2String(-9.223372036854776E18));
+ assertEquals("9.223372036854776E18", schemaHelper5.marshal2String(9.223372036854776E18));
+ assertEquals("-9.223372036854776E18", schemaHelper5.marshal2String(-9.223372036854776E18));
+ try {
+ schemaHelper5.marshal2String("Hello");
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage().startsWith(
+ "AvroTest:0.0.1: object \"Hello\" Avro marshalling failed: java.lang.String cannot be cast to java.lang.Double"));
+ }
+ try {
+ schemaHelper5.marshal2String(null);
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage()
+ .startsWith("AvroTest:0.0.1: cannot encode a null object of class \"java.lang.Double\""));
+ }
+ }
+
+ @Test
+ public void testStringMarshal() {
+ final AxContextSchema avroStringSchema =
+ new AxContextSchema(new AxArtifactKey("AvroString", "0.0.1"), "Avro", "{\"type\": \"string\"}");
+
+ schemas.getSchemasMap().put(avroStringSchema.getKey(), avroStringSchema);
+ final SchemaHelper schemaHelper7 =
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroStringSchema.getKey());
+
+ assertEquals("\"0\"", schemaHelper7.marshal2String("0"));
+ assertEquals("\"1\"", schemaHelper7.marshal2String("1"));
+ assertEquals("\"-1\"", schemaHelper7.marshal2String("-1"));
+ assertEquals("\"1.23\"", schemaHelper7.marshal2String("1.23"));
+ assertEquals("\"-1.23\"", schemaHelper7.marshal2String("-1.23"));
+ assertEquals("\"9223372036854775807\"", schemaHelper7.marshal2String("9223372036854775807"));
+ assertEquals("\"-9223372036854775808\"", schemaHelper7.marshal2String("-9223372036854775808"));
+ assertEquals("\"9223372036854775808\"", schemaHelper7.marshal2String("9223372036854775808"));
+ assertEquals("\"-9223372036854775809\"", schemaHelper7.marshal2String("-9223372036854775809"));
+ assertEquals("\"Hello\"", schemaHelper7.marshal2String("Hello"));
+ try {
+ schemaHelper7.marshal2String(null);
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage()
+ .startsWith("AvroTest:0.0.1: cannot encode a null object of class \"java.lang.String\""));
+ }
+ }
+
+ @Test
+ public void testBytesMarshal() {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroString", "0.0.1"), "Avro", "{\"type\": \"bytes\"}");
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ final byte[] helloBytes = {104, 101, 108, 108, 111};
+ final String helloOut = schemaHelper.marshal2String(helloBytes);
+ assertEquals("\"hello\"", helloOut);
+
+ try {
+ schemaHelper.marshal2String(null);
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage()
+ .startsWith("AvroTest:0.0.1: cannot encode a null object of class \"java.lang.Byte[]\""));
+ }
+ }
+}
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaHelperUnmarshal.java b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaHelperUnmarshal.java
new file mode 100644
index 000000000..725ebb221
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaHelperUnmarshal.java
@@ -0,0 +1,371 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. 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.avro;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import org.apache.avro.util.Utf8;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.apex.context.SchemaHelper;
+import org.onap.policy.apex.context.impl.schema.SchemaHelperFactory;
+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;
+
+/**
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ * @version
+ */
+public class TestAvroSchemaHelperUnmarshal {
+ private final AxKey testKey = new AxArtifactKey("AvroTest", "0.0.1");
+ private AxContextSchemas schemas;
+
+ @Before
+ public void initTest() {
+ schemas = new AxContextSchemas(new AxArtifactKey("AvroSchemas", "0.0.1"));
+ ModelService.registerModel(AxContextSchemas.class, schemas);
+ new SchemaParameters().getSchemaHelperParameterMap().put("Avro", new AvroSchemaHelperParameters());
+ }
+
+ // @Test
+ public void testNullUnmarshal() {
+ final AxContextSchema avroNullSchema =
+ new AxContextSchema(new AxArtifactKey("AvroNull", "0.0.1"), "Avro", "{\"type\": \"null\"}");
+
+ schemas.getSchemasMap().put(avroNullSchema.getKey(), avroNullSchema);
+ final SchemaHelper schemaHelper0 =
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroNullSchema.getKey());
+
+ try {
+ schemaHelper0.createNewInstance();
+ fail("test should throw an exception here");
+ } catch (final Exception e) {
+ assertEquals("AvroTest:0.0.1: could not create an instance, schema class for the schema is null",
+ e.getMessage());
+ }
+
+ assertEquals(null, schemaHelper0.unmarshal("null"));
+
+ try {
+ schemaHelper0.unmarshal("123");
+ fail("test should throw an exception here");
+ } catch (final Exception e) {
+ assertEquals(
+ "AvroTest:0.0.1: object \"123\" Avro unmarshalling failed: Expected null. Got VALUE_NUMBER_INT",
+ e.getMessage());
+ }
+ }
+
+ // @Test
+ public void testBooleanUnmarshal() {
+ final AxContextSchema avroBooleanSchema =
+ new AxContextSchema(new AxArtifactKey("AvroBoolean", "0.0.1"), "Avro", "{\"type\": \"boolean\"}");
+
+ schemas.getSchemasMap().put(avroBooleanSchema.getKey(), avroBooleanSchema);
+ final SchemaHelper schemaHelper1 =
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroBooleanSchema.getKey());
+
+ try {
+ schemaHelper1.createNewInstance();
+ fail("test should throw an exception here");
+ } catch (final Exception e) {
+ assertEquals(
+ "AvroTest:0.0.1: could not create an instance of class \"java.lang.Boolean\" using the default constructor \"Boolean()\"",
+ e.getMessage());
+ }
+ assertEquals(true, schemaHelper1.createNewInstance("true"));
+
+ assertEquals(true, schemaHelper1.unmarshal("true"));
+ assertEquals(false, schemaHelper1.unmarshal("false"));
+ try {
+ schemaHelper1.unmarshal(0);
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertEquals(
+ "AvroTest:0.0.1: object \"0\" Avro unmarshalling failed: Expected boolean. Got VALUE_NUMBER_INT",
+ e.getMessage());
+ }
+ }
+
+ // @Test
+ public void testIntUnmarshal() {
+ final AxContextSchema avroIntSchema =
+ new AxContextSchema(new AxArtifactKey("AvroInt", "0.0.1"), "Avro", "{\"type\": \"int\"}");
+
+ schemas.getSchemasMap().put(avroIntSchema.getKey(), avroIntSchema);
+ final SchemaHelper schemaHelper2 =
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroIntSchema.getKey());
+
+ try {
+ schemaHelper2.createNewInstance();
+ fail("test should throw an exception here");
+ } catch (final Exception e) {
+ assertEquals(
+ "AvroTest:0.0.1: could not create an instance of class \"java.lang.Integer\" using the default constructor \"Integer()\"",
+ e.getMessage());
+ }
+ assertEquals(123, schemaHelper2.createNewInstance("123"));
+
+ assertEquals(0, schemaHelper2.unmarshal("0"));
+ assertEquals(1, schemaHelper2.unmarshal("1"));
+ assertEquals(-1, schemaHelper2.unmarshal("-1"));
+ assertEquals(1, schemaHelper2.unmarshal("1.23"));
+ assertEquals(-1, schemaHelper2.unmarshal("-1.23"));
+ assertEquals(2147483647, schemaHelper2.unmarshal("2147483647"));
+ assertEquals(-2147483648, schemaHelper2.unmarshal("-2147483648"));
+ try {
+ schemaHelper2.unmarshal("2147483648");
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage().startsWith(
+ "AvroTest:0.0.1: object \"2147483648\" Avro unmarshalling failed: Numeric value (2147483648) out of range of int"));
+ }
+ try {
+ schemaHelper2.unmarshal("-2147483649");
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage().startsWith(
+ "AvroTest:0.0.1: object \"-2147483649\" Avro unmarshalling failed: Numeric value (-2147483649) out of range of int"));
+ }
+ try {
+ schemaHelper2.unmarshal(null);
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage().equals(
+ "AvroTest:0.0.1: object \"null\" Avro unmarshalling failed: String to read from cannot be null!"));
+ }
+ }
+
+ // @Test
+ public void testLongUnmarshal() {
+ final AxContextSchema avroLongSchema =
+ new AxContextSchema(new AxArtifactKey("AvroLong", "0.0.1"), "Avro", "{\"type\": \"long\"}");
+
+ schemas.getSchemasMap().put(avroLongSchema.getKey(), avroLongSchema);
+ final SchemaHelper schemaHelper3 =
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroLongSchema.getKey());
+
+ try {
+ schemaHelper3.createNewInstance();
+ fail("test should throw an exception here");
+ } catch (final Exception e) {
+ assertEquals(
+ "AvroTest:0.0.1: could not create an instance of class \"java.lang.Long\" using the default constructor \"Long()\"",
+ e.getMessage());
+ }
+ assertEquals(123456789L, schemaHelper3.createNewInstance("123456789"));
+
+ assertEquals(0L, schemaHelper3.unmarshal("0"));
+ assertEquals(1L, schemaHelper3.unmarshal("1"));
+ assertEquals(-1L, schemaHelper3.unmarshal("-1"));
+ assertEquals(1L, schemaHelper3.unmarshal("1.23"));
+ assertEquals(-1L, schemaHelper3.unmarshal("-1.23"));
+ assertEquals(9223372036854775807L, schemaHelper3.unmarshal("9223372036854775807"));
+ assertEquals(-9223372036854775808L, schemaHelper3.unmarshal("-9223372036854775808"));
+ try {
+ schemaHelper3.unmarshal("9223372036854775808");
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage().startsWith(
+ "AvroTest:0.0.1: object \"9223372036854775808\" Avro unmarshalling failed: Numeric value (9223372036854775808) out of range of long"));
+ }
+ try {
+ schemaHelper3.unmarshal("-9223372036854775809");
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage().startsWith(
+ "AvroTest:0.0.1: object \"-9223372036854775809\" Avro unmarshalling failed: Numeric value (-9223372036854775809) out of range of long"));
+ }
+ try {
+ schemaHelper3.unmarshal("\"Hello\"");
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage().equals(
+ "AvroTest:0.0.1: object \"\"Hello\"\" Avro unmarshalling failed: Expected long. Got VALUE_STRING"));
+ }
+ try {
+ schemaHelper3.unmarshal(null);
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage().equals(
+ "AvroTest:0.0.1: object \"null\" Avro unmarshalling failed: String to read from cannot be null!"));
+ }
+ }
+
+ // @Test
+ public void testFloatUnmarshal() {
+ final AxContextSchema avroFloatSchema =
+ new AxContextSchema(new AxArtifactKey("AvroFloat", "0.0.1"), "Avro", "{\"type\": \"float\"}");
+
+ schemas.getSchemasMap().put(avroFloatSchema.getKey(), avroFloatSchema);
+ final SchemaHelper schemaHelper4 =
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroFloatSchema.getKey());
+
+ try {
+ schemaHelper4.createNewInstance();
+ fail("test should throw an exception here");
+ } catch (final Exception e) {
+ assertEquals(
+ "AvroTest:0.0.1: could not create an instance of class \"java.lang.Float\" using the default constructor \"Float()\"",
+ e.getMessage());
+ }
+ assertEquals(1.2345F, schemaHelper4.createNewInstance("1.2345"));
+
+ assertEquals(0.0F, schemaHelper4.unmarshal("0"));
+ assertEquals(1.0F, schemaHelper4.unmarshal("1"));
+ assertEquals(-1.0F, schemaHelper4.unmarshal("-1"));
+ assertEquals(1.23F, schemaHelper4.unmarshal("1.23"));
+ assertEquals(-1.23F, schemaHelper4.unmarshal("-1.23"));
+ assertEquals(9.223372E18F, schemaHelper4.unmarshal("9223372036854775807"));
+ assertEquals(-9.223372E18F, schemaHelper4.unmarshal("-9223372036854775808"));
+ assertEquals(9.223372E18F, schemaHelper4.unmarshal("9223372036854775808"));
+ assertEquals(-9.223372E18F, schemaHelper4.unmarshal("-9223372036854775809"));
+ try {
+ schemaHelper4.unmarshal("\"Hello\"");
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage().equals(
+ "AvroTest:0.0.1: object \"\"Hello\"\" Avro unmarshalling failed: Expected float. Got VALUE_STRING"));
+ }
+ try {
+ schemaHelper4.unmarshal(null);
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage().equals(
+ "AvroTest:0.0.1: object \"null\" Avro unmarshalling failed: String to read from cannot be null!"));
+ }
+ }
+
+ // @Test
+ public void testDoubleUnmarshal() {
+ final AxContextSchema avroDoubleSchema =
+ new AxContextSchema(new AxArtifactKey("AvroDouble", "0.0.1"), "Avro", "{\"type\": \"double\"}");
+
+ schemas.getSchemasMap().put(avroDoubleSchema.getKey(), avroDoubleSchema);
+ final SchemaHelper schemaHelper5 =
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroDoubleSchema.getKey());
+
+ try {
+ schemaHelper5.createNewInstance();
+ fail("test should throw an exception here");
+ } catch (final Exception e) {
+ assertEquals(
+ "AvroTest:0.0.1: could not create an instance of class \"java.lang.Double\" using the default constructor \"Double()\"",
+ e.getMessage());
+ }
+ assertEquals(1.2345E06, schemaHelper5.createNewInstance("1.2345E06"));
+
+ assertEquals(0.0, schemaHelper5.unmarshal("0"));
+ assertEquals(1.0, schemaHelper5.unmarshal("1"));
+ assertEquals(-1.0, schemaHelper5.unmarshal("-1"));
+ assertEquals(1.23, schemaHelper5.unmarshal("1.23"));
+ assertEquals(-1.23, schemaHelper5.unmarshal("-1.23"));
+ assertEquals(9.223372036854776E18, schemaHelper5.unmarshal("9223372036854775807"));
+ assertEquals(-9.223372036854776E18, schemaHelper5.unmarshal("-9223372036854775808"));
+ assertEquals(9.223372036854776E18, schemaHelper5.unmarshal("9223372036854775808"));
+ assertEquals(-9.223372036854776E18, schemaHelper5.unmarshal("-9223372036854775809"));
+ try {
+ schemaHelper5.unmarshal("\"Hello\"");
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage().equals(
+ "AvroTest:0.0.1: object \"\"Hello\"\" Avro unmarshalling failed: Expected double. Got VALUE_STRING"));
+ }
+ try {
+ schemaHelper5.unmarshal(null);
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage().equals(
+ "AvroTest:0.0.1: object \"null\" Avro unmarshalling failed: String to read from cannot be null!"));
+ }
+ }
+
+ @Test
+ public void testStringUnmarshal() {
+ final AxContextSchema avroStringSchema =
+ new AxContextSchema(new AxArtifactKey("AvroString", "0.0.1"), "Avro", "{\"type\": \"string\"}");
+
+ schemas.getSchemasMap().put(avroStringSchema.getKey(), avroStringSchema);
+ final SchemaHelper schemaHelper7 =
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroStringSchema.getKey());
+
+ assertEquals("", schemaHelper7.createNewInstance(""));
+ assertEquals("1.2345E06", schemaHelper7.createNewInstance("1.2345E06"));
+
+ assertEquals("0", schemaHelper7.unmarshal("0"));
+ assertEquals("1", schemaHelper7.unmarshal("1"));
+ assertEquals("-1", schemaHelper7.unmarshal("-1"));
+ assertEquals("1.23", schemaHelper7.unmarshal("1.23"));
+ assertEquals("-1.23", schemaHelper7.unmarshal("-1.23"));
+ assertEquals("9223372036854775807", schemaHelper7.unmarshal("9223372036854775807"));
+ assertEquals("-9223372036854775808", schemaHelper7.unmarshal("-9223372036854775808"));
+ assertEquals("9223372036854775808", schemaHelper7.unmarshal("9223372036854775808"));
+ assertEquals("-9223372036854775809", schemaHelper7.unmarshal("-9223372036854775809"));
+ assertEquals("Hello", schemaHelper7.unmarshal("Hello"));
+ assertEquals("Hello", schemaHelper7.unmarshal(new Utf8("Hello")));
+ try {
+ schemaHelper7.unmarshal(null);
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage().equals(
+ "AvroTest:0.0.1: object \"null\" Avro unmarshalling failed: String to read from cannot be null!"));
+ }
+ }
+
+ @Test
+ public void testBytesUnmarshal() {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroString", "0.0.1"), "Avro", "{\"type\": \"bytes\"}");
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ try {
+ schemaHelper.createNewInstance();
+ fail("test should throw an exception here");
+ } catch (final Exception e) {
+ assertEquals(
+ "AvroTest:0.0.1: could not create an instance of class \"java.lang.Byte[]\" using the default constructor \"Byte[]()\"",
+ e.getMessage());
+ }
+ final byte[] newBytes = (byte[]) schemaHelper.createNewInstance("\"hello\"");
+ assertEquals(5, newBytes.length);
+ assertEquals(104, newBytes[0]);
+ assertEquals(101, newBytes[1]);
+ assertEquals(108, newBytes[2]);
+ assertEquals(108, newBytes[3]);
+ assertEquals(111, newBytes[4]);
+
+ try {
+ schemaHelper.unmarshal(null);
+ fail("Test should throw an exception here");
+ } catch (final Exception e) {
+ assertTrue(e.getMessage().equals(
+ "AvroTest:0.0.1: object \"null\" Avro unmarshalling failed: String to read from cannot be null!"));
+ }
+ }
+}
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaMap.java b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaMap.java
new file mode 100644
index 000000000..33ca512b9
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaMap.java
@@ -0,0 +1,135 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. 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.avro;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+
+import org.apache.avro.util.Utf8;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.apex.context.SchemaHelper;
+import org.onap.policy.apex.context.impl.schema.SchemaHelperFactory;
+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.apex.model.utilities.TextFileUtils;
+
+/**
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ * @version
+ */
+public class TestAvroSchemaMap {
+ private final AxKey testKey = new AxArtifactKey("AvroTest", "0.0.1");
+ private AxContextSchemas schemas;
+ private String longMapSchema;
+ private String addressMapSchema;
+ private String addressMapSchemaInvalidFields;
+
+ @Before
+ public void initTest() throws IOException {
+ schemas = new AxContextSchemas(new AxArtifactKey("AvroSchemas", "0.0.1"));
+ ModelService.registerModel(AxContextSchemas.class, schemas);
+ new SchemaParameters().getSchemaHelperParameterMap().put("Avro", new AvroSchemaHelperParameters());
+ longMapSchema = TextFileUtils.getTextFileAsString("src/test/resources/avsc/MapExampleLong.avsc");
+ addressMapSchema = TextFileUtils.getTextFileAsString("src/test/resources/avsc/MapExampleAddress.avsc");
+ addressMapSchemaInvalidFields =
+ TextFileUtils.getTextFileAsString("src/test/resources/avsc/MapExampleAddressInvalidFields.avsc");
+ }
+
+ @Test
+ public void testMapInit() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroRecord", "0.0.1"), "Avro", addressMapSchema);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ final HashMap<?, ?> newMapEmpty = (HashMap<?, ?>) schemaHelper.createNewInstance();
+ assertEquals(0, newMapEmpty.size());
+
+ final String inString = TextFileUtils.getTextFileAsString("src/test/resources/data/MapExampleAddressFull.json");
+ final HashMap<?, ?> newMapFull = (HashMap<?, ?>) schemaHelper.createNewInstance(inString);
+
+ assertEquals("{\"streetaddress\": \"221 B Baker St.\", \"city\": \"London\"}",
+ newMapFull.get(new Utf8("address2")).toString());
+ }
+
+ @Test
+ public void testLongMapUnmarshalMarshal() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroMap", "0.0.1"), "Avro", longMapSchema);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/MapExampleLongNull.json");
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/MapExampleLongFull.json");
+ }
+
+ @Test
+ public void testAddressMapUnmarshalMarshal() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroMap", "0.0.1"), "Avro", addressMapSchema);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/MapExampleAddressNull.json");
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/MapExampleAddressFull.json");
+ }
+
+ @Test
+ public void testAddressMapUnmarshalMarshalInvalidFields() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroMap", "0.0.1"), "Avro", addressMapSchemaInvalidFields);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/MapExampleAddressInvalidFields.json");
+ }
+
+ private void testUnmarshalMarshal(final SchemaHelper schemaHelper, final String fileName) throws IOException {
+ final String originalInString = TextFileUtils.getTextFileAsString(fileName);
+ final HashMap<?, ?> firstDecodedMap = (HashMap<?, ?>) schemaHelper.unmarshal(originalInString);
+
+ final String outString = schemaHelper.marshal2String(firstDecodedMap);
+
+ final File tempOutFile = File.createTempFile("ApexAvro", ".json");
+ TextFileUtils.putStringAsFile(outString, tempOutFile);
+
+ final String decodeEncodeInString = TextFileUtils.getTextFileAsString(fileName);
+ tempOutFile.delete();
+
+ final HashMap<?, ?> secondDecodedMap = (HashMap<?, ?>) schemaHelper.unmarshal(decodeEncodeInString);
+
+ // Now check that our doubly encoded map equals the first decoded map, Java map equals
+ // checks values and keys
+ assertEquals(firstDecodedMap, secondDecodedMap);
+ }
+}
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaRecord.java b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaRecord.java
new file mode 100644
index 000000000..e14236064
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaRecord.java
@@ -0,0 +1,130 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. 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.avro;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+
+import org.apache.avro.generic.GenericRecord;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.apex.context.SchemaHelper;
+import org.onap.policy.apex.context.impl.schema.SchemaHelperFactory;
+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.apex.model.utilities.TextFileUtils;
+
+/**
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ * @version
+ */
+public class TestAvroSchemaRecord {
+ private final AxKey testKey = new AxArtifactKey("AvroTest", "0.0.1");
+ private AxContextSchemas schemas;
+ private String recordSchema;
+ private String recordSchemaVPN;
+ private String recordSchemaVPNReuse;
+ private String recordSchemaInvalidFields;
+
+ @Before
+ public void initTest() throws IOException {
+ schemas = new AxContextSchemas(new AxArtifactKey("AvroSchemas", "0.0.1"));
+ ModelService.registerModel(AxContextSchemas.class, schemas);
+ new SchemaParameters().getSchemaHelperParameterMap().put("Avro", new AvroSchemaHelperParameters());
+ recordSchema = TextFileUtils.getTextFileAsString("src/test/resources/avsc/RecordExample.avsc");
+ recordSchemaVPN = TextFileUtils.getTextFileAsString("src/test/resources/avsc/RecordExampleVPN.avsc");
+ recordSchemaVPNReuse = TextFileUtils.getTextFileAsString("src/test/resources/avsc/RecordExampleVPNReuse.avsc");
+ recordSchemaInvalidFields =
+ TextFileUtils.getTextFileAsString("src/test/resources/avsc/RecordExampleInvalidFields.avsc");
+ }
+
+ @Test
+ public void testRecordInit() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroRecord", "0.0.1"), "Avro", recordSchema);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ final GenericRecord newRecordEmpty = (GenericRecord) schemaHelper.createNewInstance();
+ assertEquals(null, newRecordEmpty.get("passwordHash"));
+
+ final String inString = TextFileUtils.getTextFileAsString("src/test/resources/data/RecordExampleFull.json");
+ final GenericRecord newRecordFull = (GenericRecord) schemaHelper.createNewInstance(inString);
+ assertEquals("gobbledygook", newRecordFull.get("passwordHash").toString());
+ }
+
+ @Test
+ public void testRecordUnmarshalMarshal() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroRecord", "0.0.1"), "Avro", recordSchema);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/RecordExampleNull.json");
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/RecordExampleFull.json");
+ }
+
+ @Test
+ public void testRecordUnmarshalMarshalInvalid() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroRecord", "0.0.1"), "Avro", recordSchemaInvalidFields);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/RecordExampleInvalidFields.json");
+ }
+
+ @Test
+ public void testVPNRecordUnmarshalMarshal() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroRecord", "0.0.1"), "Avro", recordSchemaVPN);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/RecordExampleVPNFull.json");
+ }
+
+ @Test
+ public void testVPNRecordReuse() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroRecord", "0.0.1"), "Avro", recordSchemaVPNReuse);
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+ }
+
+ private void testUnmarshalMarshal(final SchemaHelper schemaHelper, final String fileName) throws IOException {
+ final String inString = TextFileUtils.getTextFileAsString(fileName);
+ final GenericRecord decodedObject = (GenericRecord) schemaHelper.unmarshal(inString);
+ final String outString = schemaHelper.marshal2String(decodedObject);
+ assertEquals(inString.replaceAll("\\s+", ""), outString.replaceAll("\\s+", ""));
+ }
+}
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaUnion.java b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaUnion.java
new file mode 100644
index 000000000..100b51d44
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestAvroSchemaUnion.java
@@ -0,0 +1,109 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. 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.avro;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+
+import org.apache.avro.generic.GenericRecord;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.onap.policy.apex.context.SchemaHelper;
+import org.onap.policy.apex.context.impl.schema.SchemaHelperFactory;
+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.apex.model.utilities.TextFileUtils;
+
+/**
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ * @version
+ */
+public class TestAvroSchemaUnion {
+ private final AxKey testKey = new AxArtifactKey("AvroTest", "0.0.1");
+ private AxContextSchemas schemas;
+ private String uinionSchema;
+
+ @Before
+ public void initTest() throws IOException {
+ schemas = new AxContextSchemas(new AxArtifactKey("AvroSchemas", "0.0.1"));
+ ModelService.registerModel(AxContextSchemas.class, schemas);
+ new SchemaParameters().getSchemaHelperParameterMap().put("Avro", new AvroSchemaHelperParameters());
+ uinionSchema = TextFileUtils.getTextFileAsString("src/test/resources/avsc/UnionExample.avsc");
+ }
+
+ @Ignore
+ @Test
+ public void testUnionAllFields() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroRecord", "0.0.1"), "Avro", uinionSchema);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ final String inString = TextFileUtils.getTextFileAsString("src/test/resources/data/UnionExampleAllFields.json");
+ final GenericRecord user = (GenericRecord) schemaHelper.createNewInstance(inString);
+
+ assertEquals("Ben", user.get("name").toString());
+ assertEquals(7, user.get("favourite_number"));
+ assertEquals("red", user.get("favourite_colour").toString());
+ }
+
+ @Ignore
+ @Test
+ public void testUnionOptionalField() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroRecord", "0.0.1"), "Avro", uinionSchema);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ final String inString =
+ TextFileUtils.getTextFileAsString("src/test/resources/data/UnionExampleOptionalField.json");
+ final GenericRecord user = (GenericRecord) schemaHelper.createNewInstance(inString);
+
+ assertEquals("Ben", user.get("name").toString());
+ assertEquals(7, user.get("favourite_number"));
+ assertEquals("red", user.get("favourite_colour").toString());
+ }
+
+ @Ignore
+ @Test
+ public void testUnionNullField() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroRecord", "0.0.1"), "Avro", uinionSchema);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ final String inString = TextFileUtils.getTextFileAsString("src/test/resources/data/UnionExampleNullField.json");
+ final GenericRecord user = (GenericRecord) schemaHelper.createNewInstance(inString);
+
+ assertEquals("Ben", user.get("name").toString());
+ assertEquals(7, user.get("favourite_number"));
+ assertEquals("red", user.get("favourite_colour").toString());
+ }
+}
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestHealthCheckSchema.java b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestHealthCheckSchema.java
new file mode 100644
index 000000000..026125af9
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap/policy/apex/plugins/context/schema/avro/TestHealthCheckSchema.java
@@ -0,0 +1,119 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. 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.avro;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+
+import org.apache.avro.Schema;
+import org.apache.avro.generic.GenericData;
+import org.apache.avro.generic.GenericData.Record;
+import org.apache.avro.generic.GenericRecord;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.apex.context.SchemaHelper;
+import org.onap.policy.apex.context.impl.schema.SchemaHelperFactory;
+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.apex.model.utilities.TextFileUtils;
+
+/**
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class TestHealthCheckSchema {
+ private final AxKey testKey = new AxArtifactKey("AvroTest", "0.0.1");
+ private AxContextSchemas schemas;
+ private String healthCheckSchema;
+
+ @Before
+ public void initTest() throws IOException {
+ schemas = new AxContextSchemas(new AxArtifactKey("AvroSchemas", "0.0.1"));
+ ModelService.registerModel(AxContextSchemas.class, schemas);
+
+ new SchemaParameters().getSchemaHelperParameterMap().put("Avro", new AvroSchemaHelperParameters());
+ healthCheckSchema = TextFileUtils.getTextFileAsString("src/test/resources/avsc/HealthCheckBodyType.avsc");
+ }
+
+
+ @Test
+ public void testHealthCheck() throws IOException {
+ final AxContextSchema avroSchema =
+ new AxContextSchema(new AxArtifactKey("AvroRecord", "0.0.1"), "Avro", healthCheckSchema);
+
+ schemas.getSchemasMap().put(avroSchema.getKey(), avroSchema);
+ final SchemaHelper schemaHelper = new SchemaHelperFactory().createSchemaHelper(testKey, avroSchema.getKey());
+
+ testUnmarshalMarshal(schemaHelper, "src/test/resources/data/HealthCheckEvent.json");
+
+ final GenericRecord healthCheckRecord = (Record) schemaHelper.createNewInstance();
+ final Schema healthCheckRecordSchema = healthCheckRecord.getSchema();
+
+ final GenericRecord inputRecord = new GenericData.Record(healthCheckRecordSchema.getField("input").schema());
+ final Schema inputRecordRecordSchema = inputRecord.getSchema();
+
+ final GenericRecord actionIndentifiersRecord =
+ new GenericData.Record(inputRecordRecordSchema.getField("action_DasH_identifiers").schema());
+
+ final GenericRecord commonHeaderRecord =
+ new GenericData.Record(inputRecordRecordSchema.getField("common_DasH_header").schema());
+ final Schema commonHeaderRecordSchema = commonHeaderRecord.getSchema();
+
+ final GenericRecord commonHeaderFlagsRecord =
+ new GenericData.Record(commonHeaderRecordSchema.getField("flags").schema());
+
+ healthCheckRecord.put("input", inputRecord);
+ inputRecord.put("action_DasH_identifiers", actionIndentifiersRecord);
+ inputRecord.put("common_DasH_header", commonHeaderRecord);
+ commonHeaderRecord.put("flags", commonHeaderFlagsRecord);
+
+ inputRecord.put("action", "HealthCheck");
+ inputRecord.put("payload",
+ "{\"host-ip-address\":\"131.160.203.125\",\"input.url\":\"131.160.203.125/afr\",\"request-action-type\":\"GET\",\"request-action\":\"AFR\"}");
+
+ actionIndentifiersRecord.put("vnf_DasH_id", "49414df5-3482-4fd8-9952-c463dff2770b");
+
+ commonHeaderRecord.put("request_DasH_id", "afr-request3");
+ commonHeaderRecord.put("originator_DasH_id", "AFR");
+ commonHeaderRecord.put("api_DasH_ver", "2.15");
+ commonHeaderRecord.put("sub_DasH_request_DasH_id", "AFR-subrequest");
+ commonHeaderRecord.put("timestamp", "2017-11-06T15:15:18.97Z");
+
+ commonHeaderFlagsRecord.put("ttl", "10000");
+ commonHeaderFlagsRecord.put("force", "TRUE");
+ commonHeaderFlagsRecord.put("mode", "EXCLUSIVE");
+
+ final String eventString = TextFileUtils.getTextFileAsString("src/test/resources/data/HealthCheckEvent.json");
+ final String outString = schemaHelper.marshal2String(healthCheckRecord);
+ assertEquals(eventString.toString().replaceAll("\\s+", ""), outString.replaceAll("\\s+", ""));
+ }
+
+ private void testUnmarshalMarshal(final SchemaHelper schemaHelper, final String fileName) throws IOException {
+ final String inString = TextFileUtils.getTextFileAsString(fileName);
+ final GenericRecord decodedObject = (GenericRecord) schemaHelper.unmarshal(inString);
+ final String outString = schemaHelper.marshal2String(decodedObject);
+ assertEquals(inString.replaceAll("\\s+", ""), outString.replaceAll("\\s+", ""));
+ }
+}
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/AAIInventoryResponseItemType.avsc b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/AAIInventoryResponseItemType.avsc
new file mode 100644
index 000000000..d4ae592a1
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/AAIInventoryResponseItemType.avsc
@@ -0,0 +1,70 @@
+{
+ "type": "array",
+ "items": {
+ "type": "record",
+ "name": "AAIInventoryResponseItem_Type",
+ "fields": [
+ {
+ "name": "model_DasH_name",
+ "type": "string"
+ },
+ {
+ "name": "extra_DasH_properties",
+ "type": {
+ "type": "record",
+ "name": "AAIInventoryResponseItemExtraProperties_Type",
+ "fields": []
+ }
+ },
+ {
+ "name": "generic_DasH_vnf",
+ "type": {
+ "type": "record",
+ "name": "AAIInventoryResponseItemGenericVNF_Type",
+ "fields": [
+ {
+ "name": "vnf_DasH_id",
+ "type": "string"
+ },
+ {
+ "name": "vnf_DasH_name",
+ "type": "string"
+ },
+ {
+ "name": "vnf_DasH_type",
+ "type": "string"
+ },
+ {
+ "name": "service_DasH_id",
+ "type": "string"
+ },
+ {
+ "name": "orchestration_DasH_status",
+ "type": "string"
+ },
+ {
+ "name": "in_DasH_maint",
+ "type": "boolean"
+ },
+ {
+ "name": "is_DasH_closed_DasH_loop_DasH_disabled",
+ "type": "boolean"
+ },
+ {
+ "name": "resource_DasH_version",
+ "type": "string"
+ },
+ {
+ "name": "model_DasH_invariant_DasH_id",
+ "type": "string"
+ },
+ {
+ "name": "model_DasH_version_DasH_id",
+ "type": "string"
+ }
+ ]
+ }
+ }
+ ]
+ }
+}
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/ArrayExampleAddress.avsc b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/ArrayExampleAddress.avsc
new file mode 100644
index 000000000..0967d6210
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/ArrayExampleAddress.avsc
@@ -0,0 +1,10 @@
+{
+ "type": "array", "items": {
+ "type" : "record",
+ "name" : "AddressUSRecord",
+ "fields" : [
+ {"name": "streetaddress", "type": "string"},
+ {"name": "city", "type": "string"}
+ ]
+ }
+} \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/ArrayExampleLong.avsc b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/ArrayExampleLong.avsc
new file mode 100644
index 000000000..91f391a89
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/ArrayExampleLong.avsc
@@ -0,0 +1,3 @@
+{
+ "type": "array", "items": "long"
+} \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/EnumSchema.avsc b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/EnumSchema.avsc
new file mode 100644
index 000000000..ea5c5b7b1
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/EnumSchema.avsc
@@ -0,0 +1,5 @@
+{
+ "type": "enum",
+ "name": "Suit",
+ "symbols" : ["SPADES", "HEARTS", "DIAMONDS", "CLUBS"]
+} \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/FixedSchema.avsc b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/FixedSchema.avsc
new file mode 100644
index 000000000..4642ef577
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/FixedSchema.avsc
@@ -0,0 +1,5 @@
+{
+ "type" : "fixed",
+ "name" : "binaryData",
+ "size" : 64
+} \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/HealthCheckBodyType.avsc b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/HealthCheckBodyType.avsc
new file mode 100644
index 000000000..2db1d696d
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/HealthCheckBodyType.avsc
@@ -0,0 +1,76 @@
+{
+ "type" : "record",
+ "name" : "HealthCheckBody_Type",
+ "namespace" : "com.ericsson.apex.onap.tlgoal2017",
+ "fields" : [
+ {
+ "name": "input",
+ "type": {
+ "type" : "record",
+ "name" : "InputRecord",
+ "fields" : [
+ {
+ "name": "action", "type": "string"
+ },
+ {
+ "name": "action_DasH_identifiers",
+ "type": {
+ "type" : "record",
+ "name" : "ActionIdentifiersRecord",
+ "fields" : [
+ {
+ "name": "vnf_DasH_id", "type": "string"
+ }
+ ]
+ }
+ },
+ {
+ "name": "common_DasH_header",
+ "type": {
+ "type" : "record",
+ "name" : "CommonHeaderRecord",
+ "fields" : [
+ {
+ "name": "request_DasH_id", "type": "string"
+ },
+ {
+ "name": "originator_DasH_id", "type": "string"
+ },
+ {
+ "name": "api_DasH_ver", "type": "string"
+ },
+ {
+ "name": "sub_DasH_request_DasH_id", "type": "string"
+ },
+ {
+ "name": "timestamp", "type": "string"
+ },
+ {
+ "name": "flags",
+ "type": {
+ "type" : "record",
+ "name" : "FlagsRecord",
+ "fields" : [
+ {
+ "name": "ttl", "type": "string"
+ },
+ {
+ "name": "force", "type": "string"
+ },
+ {
+ "name": "mode", "type": "string"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "name": "payload", "type": "string"
+ }
+ ]
+ }
+ }
+ ]
+}
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/MapExampleAddress.avsc b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/MapExampleAddress.avsc
new file mode 100644
index 000000000..f8457c690
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/MapExampleAddress.avsc
@@ -0,0 +1,10 @@
+{
+ "type": "map", "values": {
+ "type" : "record",
+ "name" : "AddressUSRecord",
+ "fields" : [
+ {"name": "streetaddress", "type": "string"},
+ {"name": "city", "type": "string"}
+ ]
+ }
+} \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/MapExampleAddressInvalidFields.avsc b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/MapExampleAddressInvalidFields.avsc
new file mode 100644
index 000000000..48c476065
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/MapExampleAddressInvalidFields.avsc
@@ -0,0 +1,10 @@
+{
+ "type": "map", "values": {
+ "type" : "record",
+ "name" : "AddressUSRecord",
+ "fields" : [
+ {"name": "street_DasH_address", "type": "string"},
+ {"name": "the_DoT_city", "type": "string"}
+ ]
+ }
+} \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/MapExampleLong.avsc b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/MapExampleLong.avsc
new file mode 100644
index 000000000..0bb3729ed
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/MapExampleLong.avsc
@@ -0,0 +1,3 @@
+{
+ "type": "map", "values": "long"
+} \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/RecordExample.avsc b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/RecordExample.avsc
new file mode 100644
index 000000000..274735532
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/RecordExample.avsc
@@ -0,0 +1,172 @@
+{
+ "type": "record",
+ "name": "User",
+ "namespace": "com.example.avro",
+ "doc": "This is a user record in a fictitious to-do-list management app. It supports arbitrary grouping and nesting of items, and allows you to add items by email or by tweeting.\n\nNote this app doesn't actually exist. The schema is just a demo for [Avrodoc](https://github.com/ept/avrodoc)!",
+ "fields": [
+ {"name": "firstname", "type": "string"},
+ {"name": "lastname", "type": "string"},
+ {
+ "name": "address",
+ "type": {
+ "type" : "record",
+ "name" : "AddressUSRecord",
+ "fields" : [
+ {"name": "streetaddress", "type": "string"},
+ {"name": "city", "type": "string"}
+ ]
+ }
+ },
+ {
+ "name": "id",
+ "doc": "System-assigned numeric user ID. Cannot be changed by the user.",
+ "type": "int"
+ },
+ {
+ "name": "username",
+ "doc": "The username chosen by the user. Can be changed by the user.",
+ "type": "string"
+ },
+ {
+ "name": "passwordHash",
+ "doc": "The user's password, hashed using [scrypt](http://www.tarsnap.com/scrypt.html).",
+ "type": "string"
+ },
+ {
+ "name": "signupDate",
+ "doc": "Timestamp (milliseconds since epoch) when the user signed up",
+ "type": "long"
+ },
+ {
+ "name": "emailAddresses",
+ "doc": "All email addresses on the user's account",
+ "type": {
+ "type": "array",
+ "items": {
+ "type": "record",
+ "name": "EmailAddress",
+ "doc": "Stores details about an email address that a user has associated with their account.",
+ "fields": [
+ {
+ "name": "address",
+ "doc": "The email address, e.g. `foo@example.com`",
+ "type": "string"
+ },
+ {
+ "name": "verified",
+ "doc": "true if the user has clicked the link in a confirmation email to this address.",
+ "type": "boolean",
+ "default": false
+ },
+ {
+ "name": "dateAdded",
+ "doc": "Timestamp (milliseconds since epoch) when the email address was added to the account.",
+ "type": "long"
+ },
+ {
+ "name": "dateBounced",
+ "doc": "Timestamp (milliseconds since epoch) when an email sent to this address last bounced. Reset to null when the address no longer bounces.",
+ "type": ["null", "long"]
+ }
+ ]
+ }
+ }
+ },
+ {
+ "name": "twitterAccounts",
+ "doc": "All Twitter accounts that the user has OAuthed",
+ "type": {
+ "type": "array",
+ "items": {
+ "type": "record",
+ "name": "TwitterAccount",
+ "doc": "Stores access credentials for one Twitter account, as granted to us by the user by OAuth.",
+ "fields": [
+ {
+ "name": "status",
+ "doc": "Indicator of whether this authorization is currently active, or has been revoked",
+ "type": {
+ "type": "enum",
+ "name": "OAuthStatus",
+ "doc": "* `PENDING`: the user has started authorizing, but not yet finished\n* `ACTIVE`: the token should work\n* `DENIED`: the user declined the authorization\n* `EXPIRED`: the token used to work, but now it doesn't\n* `REVOKED`: the user has explicitly revoked the token",
+ "symbols": ["PENDING", "ACTIVE", "DENIED", "EXPIRED", "REVOKED"]
+ }
+ },
+ {
+ "name": "userId",
+ "doc": "Twitter's numeric ID for this user",
+ "type": "long"
+ },
+ {
+ "name": "screenName",
+ "doc": "The twitter username for this account (can be changed by the user)",
+ "type": "string"
+ },
+ {
+ "name": "oauthToken",
+ "doc": "The OAuth token for this Twitter account",
+ "type": "string"
+ },
+ {
+ "name": "oauthTokenSecret",
+ "doc": "The OAuth secret, used for signing requests on behalf of this Twitter account. `null` whilst the OAuth flow is not yet complete.",
+ "type": ["null", "string"]
+ },
+ {
+ "name": "dateAuthorized",
+ "doc": "Timestamp (milliseconds since epoch) when the user last authorized this Twitter account",
+ "type": "long"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "name": "toDoItems",
+ "doc": "The top-level items in the user's to-do list",
+ "type": {
+ "type": "array",
+ "items": {
+ "type": "record",
+ "name": "ToDoItem",
+ "doc": "A record is one node in a To-Do item tree (every record can contain nested sub-records).",
+ "fields": [
+ {
+ "name": "status",
+ "doc": "User-selected state for this item (e.g. whether or not it is marked as done)",
+ "type": {
+ "type": "enum",
+ "name": "ToDoStatus",
+ "doc": "* `HIDDEN`: not currently visible, e.g. because it becomes actionable in future\n* `ACTIONABLE`: appears in the current to-do list\n* `DONE`: marked as done, but still appears in the list\n* `ARCHIVED`: marked as done and no longer visible\n* `DELETED`: not done and removed from list (preserved for undo purposes)",
+ "symbols": ["HIDDEN", "ACTIONABLE", "DONE", "ARCHIVED", "DELETED"]
+ }
+ },
+ {
+ "name": "title",
+ "doc": "One-line summary of the item",
+ "type": "string"
+ },
+ {
+ "name": "description",
+ "doc": "Detailed description (may contain HTML markup)",
+ "type": ["null", "string"]
+ },
+ {
+ "name": "snoozeDate",
+ "doc": "Timestamp (milliseconds since epoch) at which the item should go from `HIDDEN` to `ACTIONABLE` status",
+ "type": ["null", "long"]
+ },
+ {
+ "name": "subItems",
+ "doc": "List of children of this to-do tree node",
+ "type": {
+ "type": "array",
+ "items": "ToDoItem"
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+}
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/RecordExampleInvalidFields.avsc b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/RecordExampleInvalidFields.avsc
new file mode 100644
index 000000000..102641b44
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/RecordExampleInvalidFields.avsc
@@ -0,0 +1,172 @@
+{
+ "type": "record",
+ "name": "User",
+ "namespace": "com.example.avro",
+ "doc": "This is a user record in a fictitious to-do-list management app. It supports arbitrary grouping and nesting of items, and allows you to add items by email or by tweeting.\n\nNote this app doesn't actually exist. The schema is just a demo for [Avrodoc](https://github.com/ept/avrodoc)!",
+ "fields": [
+ {"name": "firstname", "type": "string"},
+ {"name": "lastname", "type": "string"},
+ {
+ "name": "address",
+ "type": {
+ "type" : "record",
+ "name" : "AddressUSRecord",
+ "fields" : [
+ {"name": "streetaddress_DasH_1", "type": "string"},
+ {"name": "city", "type": "string"}
+ ]
+ }
+ },
+ {
+ "name": "id",
+ "doc": "System-assigned numeric user ID. Cannot be changed by the user.",
+ "type": "int"
+ },
+ {
+ "name": "username",
+ "doc": "The username chosen by the user. Can be changed by the user.",
+ "type": "string"
+ },
+ {
+ "name": "passwordHash",
+ "doc": "The user's password, hashed using [scrypt](http://www.tarsnap.com/scrypt.html).",
+ "type": "string"
+ },
+ {
+ "name": "signupDate",
+ "doc": "Timestamp (milliseconds since epoch) when the user signed up",
+ "type": "long"
+ },
+ {
+ "name": "email_DoT_Addresses",
+ "doc": "All email addresses on the user's account",
+ "type": {
+ "type": "array",
+ "items": {
+ "type": "record",
+ "name": "EmailAddress",
+ "doc": "Stores details about an email address that a user has associated with their account.",
+ "fields": [
+ {
+ "name": "address",
+ "doc": "The email address, e.g. `foo@example.com`",
+ "type": "string"
+ },
+ {
+ "name": "verified",
+ "doc": "true if the user has clicked the link in a confirmation email to this address.",
+ "type": "boolean",
+ "default": false
+ },
+ {
+ "name": "dateAdded",
+ "doc": "Timestamp (milliseconds since epoch) when the email address was added to the account.",
+ "type": "long"
+ },
+ {
+ "name": "dateBounced",
+ "doc": "Timestamp (milliseconds since epoch) when an email sent to this address last bounced. Reset to null when the address no longer bounces.",
+ "type": ["null", "long"]
+ }
+ ]
+ }
+ }
+ },
+ {
+ "name": "twitterAccounts",
+ "doc": "All Twitter accounts that the user has OAuthed",
+ "type": {
+ "type": "array",
+ "items": {
+ "type": "record",
+ "name": "TwitterAccount",
+ "doc": "Stores access credentials for one Twitter account, as granted to us by the user by OAuth.",
+ "fields": [
+ {
+ "name": "status",
+ "doc": "Indicator of whether this authorization is currently active, or has been revoked",
+ "type": {
+ "type": "enum",
+ "name": "OAuthStatus",
+ "doc": "* `PENDING`: the user has started authorizing, but not yet finished\n* `ACTIVE`: the token should work\n* `DENIED`: the user declined the authorization\n* `EXPIRED`: the token used to work, but now it doesn't\n* `REVOKED`: the user has explicitly revoked the token",
+ "symbols": ["PENDING", "ACTIVE", "DENIED", "EXPIRED", "REVOKED"]
+ }
+ },
+ {
+ "name": "userId",
+ "doc": "Twitter's numeric ID for this user",
+ "type": "long"
+ },
+ {
+ "name": "screenName",
+ "doc": "The twitter username for this account (can be changed by the user)",
+ "type": "string"
+ },
+ {
+ "name": "oauthToken",
+ "doc": "The OAuth token for this Twitter account",
+ "type": "string"
+ },
+ {
+ "name": "oauthTokenSecret",
+ "doc": "The OAuth secret, used for signing requests on behalf of this Twitter account. `null` whilst the OAuth flow is not yet complete.",
+ "type": ["null", "string"]
+ },
+ {
+ "name": "dateAuthorized",
+ "doc": "Timestamp (milliseconds since epoch) when the user last authorized this Twitter account",
+ "type": "long"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "name": "toDoItems",
+ "doc": "The top-level items in the user's to-do list",
+ "type": {
+ "type": "array",
+ "items": {
+ "type": "record",
+ "name": "ToDoItem",
+ "doc": "A record is one node in a To-Do item tree (every record can contain nested sub-records).",
+ "fields": [
+ {
+ "name": "status",
+ "doc": "User-selected state for this item (e.g. whether or not it is marked as done)",
+ "type": {
+ "type": "enum",
+ "name": "ToDoStatus",
+ "doc": "* `HIDDEN`: not currently visible, e.g. because it becomes actionable in future\n* `ACTIONABLE`: appears in the current to-do list\n* `DONE`: marked as done, but still appears in the list\n* `ARCHIVED`: marked as done and no longer visible\n* `DELETED`: not done and removed from list (preserved for undo purposes)",
+ "symbols": ["HIDDEN", "ACTIONABLE", "DONE", "ARCHIVED", "DELETED"]
+ }
+ },
+ {
+ "name": "title_DasH_long",
+ "doc": "One-line summary of the item",
+ "type": "string"
+ },
+ {
+ "name": "description",
+ "doc": "Detailed description (may contain HTML markup)",
+ "type": ["null", "string"]
+ },
+ {
+ "name": "snoozeDate",
+ "doc": "Timestamp (milliseconds since epoch) at which the item should go from `HIDDEN` to `ACTIONABLE` status",
+ "type": ["null", "long"]
+ },
+ {
+ "name": "subItems",
+ "doc": "List of children of this to-do tree node",
+ "type": {
+ "type": "array",
+ "items": "ToDoItem"
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+}
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/RecordExampleVPN.avsc b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/RecordExampleVPN.avsc
new file mode 100644
index 000000000..b9aac36f9
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/RecordExampleVPN.avsc
@@ -0,0 +1,26 @@
+{
+ "type" : "record",
+ "name" : "VPNActEvent",
+ "namespace" : "com.ericsson.apex.domains.vpn.events",
+ "fields" : [
+ {"name": "nameSpace", "type": "string"},
+ {"name": "name", "type": "string"},
+ {"name": "version", "type": "string"},
+ {"name": "source", "type": "string"},
+ {"name": "target", "type": "string"},
+ {"name": "LinkMap", "type": {
+ "type" : "record",
+ "name" : "LinkMap",
+ "namespace" : "com.ericsson.apex.domains.vpn",
+ "fields" : [ ]
+ }
+ },
+ {"name": "CustomerMap", "type": {
+ "type" : "record",
+ "name" : "CustomerMap",
+ "namespace" : "com.ericsson.apex.domains.vpn",
+ "fields" : [ ]
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/RecordExampleVPNReuse.avsc b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/RecordExampleVPNReuse.avsc
new file mode 100644
index 000000000..5936bb21f
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/RecordExampleVPNReuse.avsc
@@ -0,0 +1,34 @@
+{
+ "type" : "record",
+ "name" : "VPNActEvent",
+ "namespace" : "com.ericsson.apex.domains.vpn.events",
+ "fields" : [
+ {"name": "nameSpace", "type": "string"},
+ {"name": "name", "type": "string"},
+ {"name": "version", "type": "string"},
+ {"name": "source", "type": "string"},
+ {"name": "target", "type": "string"},
+ {"name": "LinkMap", "type": {
+ "type" : "record",
+ "name" : "LinkMap",
+ "namespace" : "com.ericsson.apex.domains.vpn",
+ "fields" : [ ]
+ }
+ },
+ {"name": "CustomerMap", "type": {
+ "type" : "record",
+ "name" : "CustomerMap",
+ "namespace" : "com.ericsson.apex.domains.vpn",
+ "fields" : [ ]
+ }
+ },
+ {"name": "CustomerMap1", "type": "com.ericsson.apex.domains.vpn.CustomerMap"},
+ {
+ "name" : "CustomerMapArray",
+ "type": {
+ "type": "array",
+ "items": "com.ericsson.apex.domains.vpn.CustomerMap"
+ }
+ }
+ ]
+}
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/UnionExample.avsc b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/UnionExample.avsc
new file mode 100644
index 000000000..96b6050fb
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/avsc/UnionExample.avsc
@@ -0,0 +1,30 @@
+{
+ "namespace": "example.avro",
+ "type": "record",
+ "name": "User",
+ "fields": [
+ {
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "name": "favourite_number",
+ "type": [
+ "null",
+ "int"
+ ]
+ },
+ {
+ "name": "favourite_colour",
+ "type": [
+ "null",
+ "string"
+ ]
+ },
+ {
+ "name": "favourite_group",
+ "type": ["null", "string"],
+ "default": "null"
+ }
+ ]
+} \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/AAIResponse4Policy.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/AAIResponse4Policy.json
new file mode 100644
index 000000000..25ca3af8a
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/AAIResponse4Policy.json
@@ -0,0 +1,20 @@
+[
+ {
+ "model-name": "service-instance",
+ "generic-vnf": {
+ "vnf-id": "de7cc3ab-0212-47df-9e64-da1c79234deb",
+ "vnf-name": "ZRDM2MMEX39",
+ "vnf-type": "vMME Svc Jul 14/vMME VF Jul 14 1",
+ "service-id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+ "orchestration-status": "active",
+ "in-maint": false,
+ "is-closed-loop-disabled": false,
+ "resource-version": "1503082370097",
+ "model-invariant-id": "82194af1-3c2c-485a-8f44-420e22a9eaa4",
+ "model-version-id": "46b92144-923a-4d20-b85a-3cbd847668a9"
+ },
+ "extra-properties": {
+
+ }
+ }
+]
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/AAIResponse4VNF.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/AAIResponse4VNF.json
new file mode 100644
index 000000000..41cfc5c17
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/AAIResponse4VNF.json
@@ -0,0 +1,302 @@
+[
+ {
+ "model-name": "vFW",
+ "generic-vnf": {
+ "vnf-id": "vFirewall_demo_app",
+ "vnf-name": "vFirewall_demo_app",
+ "vnf-type": "vFW",
+ "service-id": "vFirewall_demo_app",
+ "orchestration-status": "running",
+ "in-maint": false,
+ "is-closed-loop-disabled": false,
+ "resource-version": "1509456799110",
+ "model-invariant-id": "vFirewall",
+ "model-version-id": "vFW"
+ },
+ "extra-properties": {
+
+ },
+ "inventory-response-items": {
+ "inventory-response-item": [
+ {
+ "vserver": {
+ "vserver-id": "5b06cf36-40a0-4bcb-bde9-849aa4702d67",
+ "vserver-name": "vFW",
+ "vserver-name2": "vFW",
+ "prov-status": "Running",
+ "vserver-selflink": "http://10.12.25.2:8774/v2.1/466979b815b5415ba14ada713e6e1846/servers/5b06cf36-40a0-4bcb-bde9-849aa4702d67",
+ "in-maint": false,
+ "is-closed-loop-disabled": false,
+ "resource-version": "1509047869791"
+ },
+ "extra-properties": {
+
+ },
+ "inventory-response-items": {
+ "inventory-response-item": [
+ {
+ "vnfc": {
+ "vnfc-name": "VNFC_vGMUX_demo_app2",
+ "nfc-naming-code": "vGMUXCODE2",
+ "nfc-function": "vGMUX",
+ "prov-status": "Running",
+ "orchestration-status": "Error",
+ "in-maint": false,
+ "is-closed-loop-disabled": false,
+ "resource-version": "1509407048855"
+ },
+ "extra-properties": {
+
+ }
+ },
+ {
+ "tenant": {
+ "tenant-id": "466979b815b5415ba14ada713e6e1846",
+ "tenant-name": "Integration",
+ "resource-version": "1508920100541"
+ },
+ "extra-properties": {
+
+ },
+ "inventory-response-items": {
+ "inventory-response-item": [
+ {
+ "cloud-region": {
+ "cloud-owner": "pod25",
+ "cloud-region-id": "RegionOne",
+ "identity-url": "http://10.12.25.2:5000/v3",
+ "sriov-automation": false,
+ "resource-version": "1509048416263"
+ },
+ "extra-properties": {
+
+ },
+ "inventory-response-items": {
+ "inventory-response-item": [
+ {
+ "esr-system-info": {
+ "esr-system-info-id": "432ac032-e996-41f2-84ed-9c7a1766eb29",
+ "system-name": "example-system-name-val-29070",
+ "type": "example-type-val-85254",
+ "vendor": "example-vendor-val-94515",
+ "version": "example-version-val-71880",
+ "service-url": "http://10.12.25.2:5000/v3",
+ "user-name": "demo",
+ "password": "onapdemo",
+ "system-type": "VIM",
+ "ssl-cacert": "example-ssl-cacert-val-75021",
+ "ssl-insecure": true,
+ "ip-address": "example-ip-address-val-44431",
+ "port": "example-port-val-93234",
+ "cloud-domain": "Default",
+ "default-tenant": "Integration",
+ "resource-version": "1508920101033"
+ },
+ "extra-properties": {
+
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "vserver": {
+ "vserver-id": "0c52905c-f682-42cf-bd52-e7f8953e80e3",
+ "vserver-name": "vFW",
+ "vserver-name2": "vFW",
+ "prov-status": "Running",
+ "vserver-selflink": "http://10.12.25.2:8774/v2.1/466979b815b5415ba14ada713e6e1846/servers/0c52905c-f682-42cf-bd52-e7f8953e80e3",
+ "in-maint": false,
+ "is-closed-loop-disabled": false,
+ "resource-version": "1509047548567"
+ },
+ "extra-properties": {
+
+ },
+ "inventory-response-items": {
+ "inventory-response-item": [
+ {
+ "vnfc": {
+ "vnfc-name": "VNFC_vGMUX_demo_app3",
+ "nfc-naming-code": "vGMUXCODE3",
+ "nfc-function": "vGMUX",
+ "prov-status": "Running",
+ "orchestration-status": "Running",
+ "in-maint": false,
+ "is-closed-loop-disabled": false,
+ "resource-version": "1509041912808"
+ },
+ "extra-properties": {
+
+ }
+ },
+ {
+ "tenant": {
+ "tenant-id": "466979b815b5415ba14ada713e6e1846",
+ "tenant-name": "Integration",
+ "resource-version": "1508920100541"
+ },
+ "extra-properties": {
+
+ },
+ "inventory-response-items": {
+ "inventory-response-item": [
+ {
+ "cloud-region": {
+ "cloud-owner": "pod25",
+ "cloud-region-id": "RegionOne",
+ "identity-url": "http://10.12.25.2:5000/v3",
+ "sriov-automation": false,
+ "resource-version": "1509048416263"
+ },
+ "extra-properties": {
+
+ },
+ "inventory-response-items": {
+ "inventory-response-item": [
+ {
+ "esr-system-info": {
+ "esr-system-info-id": "432ac032-e996-41f2-84ed-9c7a1766eb29",
+ "system-name": "example-system-name-val-29070",
+ "type": "example-type-val-85254",
+ "vendor": "example-vendor-val-94515",
+ "version": "example-version-val-71880",
+ "service-url": "http://10.12.25.2:5000/v3",
+ "user-name": "demo",
+ "password": "onapdemo",
+ "system-type": "VIM",
+ "ssl-cacert": "example-ssl-cacert-val-75021",
+ "ssl-insecure": true,
+ "ip-address": "example-ip-address-val-44431",
+ "port": "example-port-val-93234",
+ "cloud-domain": "Default",
+ "default-tenant": "Integration",
+ "resource-version": "1508920101033"
+ },
+ "extra-properties": {
+
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "vserver": {
+ "vserver-id": "33e16e02-098a-4f4e-a37f-b4e0307596c0",
+ "vserver-name": "vFW",
+ "vserver-name2": "vFW",
+ "prov-status": "Running",
+ "vserver-selflink": "http://10.12.25.2:8774/v2.1/466979b815b5415ba14ada713e6e1846/servers/33e16e02-098a-4f4e-a37f-b4e0307596c0",
+ "in-maint": false,
+ "is-closed-loop-disabled": false,
+ "resource-version": "1509047285114"
+ },
+ "extra-properties": {
+
+ },
+ "inventory-response-items": {
+ "inventory-response-item": [
+ {
+ "vnfc": {
+ "vnfc-name": "vnfc-related-to-vserver-example",
+ "nfc-naming-code": "example-nfc-naming-code-val-78172",
+ "nfc-function": "example-nfc-function-val-56352",
+ "prov-status": "example-prov-status-val-10699",
+ "orchestration-status": "example-orchestration-status-val-68896",
+ "ipaddress-v4-oam-vip": "example-ipaddress-v4-oam-vip-val-71483",
+ "in-maint": true,
+ "is-closed-loop-disabled": true,
+ "group-notation": "example-group-notation-val-31912",
+ "resource-version": "1508800709772"
+ },
+ "extra-properties": {
+
+ }
+ },
+ {
+ "vnfc": {
+ "vnfc-name": "VNFC_vGMUX_demo_app",
+ "nfc-naming-code": "vGMUXCODE",
+ "nfc-function": "vGMUX",
+ "prov-status": "Running",
+ "orchestration-status": "Running",
+ "in-maint": false,
+ "is-closed-loop-disabled": false,
+ "resource-version": "1509041573965"
+ },
+ "extra-properties": {
+
+ }
+ },
+ {
+ "tenant": {
+ "tenant-id": "466979b815b5415ba14ada713e6e1846",
+ "tenant-name": "Integration",
+ "resource-version": "1508920100541"
+ },
+ "extra-properties": {
+
+ },
+ "inventory-response-items": {
+ "inventory-response-item": [
+ {
+ "cloud-region": {
+ "cloud-owner": "pod25",
+ "cloud-region-id": "RegionOne",
+ "identity-url": "http://10.12.25.2:5000/v3",
+ "sriov-automation": false,
+ "resource-version": "1509048416263"
+ },
+ "extra-properties": {
+
+ },
+ "inventory-response-items": {
+ "inventory-response-item": [
+ {
+ "esr-system-info": {
+ "esr-system-info-id": "432ac032-e996-41f2-84ed-9c7a1766eb29",
+ "system-name": "example-system-name-val-29070",
+ "type": "example-type-val-85254",
+ "vendor": "example-vendor-val-94515",
+ "version": "example-version-val-71880",
+ "service-url": "http://10.12.25.2:5000/v3",
+ "user-name": "demo",
+ "password": "onapdemo",
+ "system-type": "VIM",
+ "ssl-cacert": "example-ssl-cacert-val-75021",
+ "ssl-insecure": true,
+ "ip-address": "example-ip-address-val-44431",
+ "port": "example-port-val-93234",
+ "cloud-domain": "Default",
+ "default-tenant": "Integration",
+ "resource-version": "1508920101033"
+ },
+ "extra-properties": {
+
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+]
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/AAIResponseExample.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/AAIResponseExample.json
new file mode 100644
index 000000000..a1a1e19bc
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/AAIResponseExample.json
@@ -0,0 +1,209 @@
+{
+ "inventory-response-item": [
+ {
+ "vserver": {
+ "vserver-id": "6ed3642c-f7a1-4a7c-9290-3d51fe1531eb",
+ "vserver-name": "zdfw1lb01lb02",
+ "vserver-name2": "zdfw1lb01lb02",
+ "prov-status": "ACTIVE",
+ "vserver-selflink": "http://10.12.25.2:8774/v2.1/41d6d38489bd40b09ea8a6b6b852dcbd/servers/6ed3642c-f7a1-4a7c-9290-3d51fe1531eb",
+ "in-maint": false,
+ "is-closed-loop-disabled": false,
+ "resource-version": "1510606403522"
+ },
+ "extra-properties": {
+
+ },
+ "inventory-response-items": {
+ "inventory-response-item": [
+ {
+ "model-name": "vLoadBalancer",
+ "generic-vnf": {
+ "vnf-id": "db373a8d-f7be-4d02-8ac8-6ca4c305d144",
+ "vnf-name": "Vfmodule_vLB1113",
+ "vnf-type": "vLoadBalancer-1106/vLoadBalancer 0",
+ "service-id": "66f157fc-4148-4880-95f5-e120677e98d1",
+ "prov-status": "PREPROV",
+ "orchestration-status": "Created",
+ "in-maint": false,
+ "is-closed-loop-disabled": false,
+ "resource-version": "1510604011851",
+ "model-invariant-id": "cee050ed-92a5-494f-ab04-234307a846dc",
+ "model-version-id": "fd65becc-6b2c-4fe8-ace9-cc29db9a3da2",
+ "model-customization-id": "1983c783-444f-4e79-af3a-85e5d49628f3",
+ "nf-type": "",
+ "nf-function": "",
+ "nf-role": "",
+ "nf-naming-code": ""
+ },
+ "extra-properties": {
+ "extra-property": [
+ {
+ "property-name": "model-ver.model-version-id",
+ "property-value": "fd65becc-6b2c-4fe8-ace9-cc29db9a3da2"
+ },
+ {
+ "property-name": "model-ver.model-name",
+ "property-value": "vLoadBalancer"
+ },
+ {
+ "property-name": "model.model-type",
+ "property-value": "resource"
+ },
+ {
+ "property-name": "model.model-invariant-id",
+ "property-value": "cee050ed-92a5-494f-ab04-234307a846dc"
+ },
+ {
+ "property-name": "model-ver.model-version",
+ "property-value": "1.0"
+ }
+ ]
+ },
+ "inventory-response-items": {
+ "inventory-response-item": [
+ {
+ "model-name": "vLoadBalancer-1106",
+ "service-instance": {
+ "service-instance-id": "3b12f31f-8f2d-4f5c-b875-61ff1194b941",
+ "service-instance-name": "vLoadBalancer-1113",
+ "model-invariant-id": "1321d60d-f7ff-4300-96c2-6bf0b3268b7a",
+ "model-version-id": "732d4692-4b97-46f9-a996-0b3339e88c50",
+ "resource-version": "1510603936425"
+ },
+ "extra-properties": {
+ "extra-property": [
+ {
+ "property-name": "model-ver.model-version-id",
+ "property-value": "732d4692-4b97-46f9-a996-0b3339e88c50"
+ },
+ {
+ "property-name": "model-ver.model-name",
+ "property-value": "vLoadBalancer-1106"
+ },
+ {
+ "property-name": "model.model-type",
+ "property-value": "service"
+ },
+ {
+ "property-name": "model.model-invariant-id",
+ "property-value": "1321d60d-f7ff-4300-96c2-6bf0b3268b7a"
+ },
+ {
+ "property-name": "model-ver.model-version",
+ "property-value": "1.0"
+ }
+ ]
+ }
+ },
+ {
+ "model-name": "Vloadbalancer..base_vlb..module-0",
+ "vf-module": {
+ "vf-module-id": "e6b3e3eb-34e1-4c00-b8c1-2a4fbe479b12",
+ "vf-module-name": "Vfmodule_vLB1113-1",
+ "heat-stack-id": "Vfmodule_vLB1113-1/3dd6d900-772f-4fcc-a0cb-e250ab2bb4db",
+ "orchestration-status": "active",
+ "is-base-vf-module": true,
+ "resource-version": "1510604612557",
+ "model-invariant-id": "6d760188-9a24-451a-b05b-e08b86cb94f2",
+ "model-version-id": "93facad9-55f2-4fe0-9574-814c2bc2d071",
+ "model-customization-id": "93fd5bd4-8051-4074-8530-c0c504604df5",
+ "module-index": 0
+ },
+ "extra-properties": {
+ "extra-property": [
+ {
+ "property-name": "model-ver.model-version-id",
+ "property-value": "93facad9-55f2-4fe0-9574-814c2bc2d071"
+ },
+ {
+ "property-name": "model-ver.model-name",
+ "property-value": "Vloadbalancer..base_vlb..module-0"
+ },
+ {
+ "property-name": "model.model-type",
+ "property-value": "resource"
+ },
+ {
+ "property-name": "model.model-invariant-id",
+ "property-value": "6d760188-9a24-451a-b05b-e08b86cb94f2"
+ },
+ {
+ "property-name": "model-ver.model-version",
+ "property-value": "1"
+ }
+ ]
+ }
+ },
+ {
+ "model-name": "Vloadbalancer..dnsscaling..module-1",
+ "vf-module": {
+ "vf-module-id": "dummy_db373a8d-f7be-4d02-8ac8-6ca4c305d144",
+ "vf-module-name": "dummy_db373a8d-f7be-4d02-8ac8-6ca4c305d144",
+ "is-base-vf-module": false,
+ "resource-version": "1510610079687",
+ "model-invariant-id": "356a1cff-71f2-4086-9980-a2927ce11c1c",
+ "model-version-id": "6b93d804-cfc8-4be3-92cc-9336d135859a"
+ },
+ "extra-properties": {
+ "extra-property": [
+ {
+ "property-name": "model-ver.model-version-id",
+ "property-value": "6b93d804-cfc8-4be3-92cc-9336d135859a"
+ },
+ {
+ "property-name": "model-ver.model-name",
+ "property-value": "Vloadbalancer..dnsscaling..module-1"
+ },
+ {
+ "property-name": "model.model-type",
+ "property-value": "resource"
+ },
+ {
+ "property-name": "model.model-invariant-id",
+ "property-value": "356a1cff-71f2-4086-9980-a2927ce11c1c"
+ },
+ {
+ "property-name": "model-ver.model-version",
+ "property-value": "1"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "tenant": {
+ "tenant-id": "41d6d38489bd40b09ea8a6b6b852dcbd",
+ "tenant-name": "Integration-SB-00",
+ "resource-version": "1509587770200"
+ },
+ "extra-properties": {
+
+ },
+ "inventory-response-items": {
+ "inventory-response-item": [
+ {
+ "cloud-region": {
+ "cloud-owner": "CloudOwner",
+ "cloud-region-id": "RegionOne",
+ "cloud-type": "SharedNode",
+ "owner-defined-type": "OwnerType",
+ "cloud-region-version": "v1",
+ "cloud-zone": "CloudZone",
+ "sriov-automation": false,
+ "resource-version": "1509587770092"
+ },
+ "extra-properties": {
+
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+}
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/ArrayExampleAddressFull.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/ArrayExampleAddressFull.json
new file mode 100644
index 000000000..9ad632a8f
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/ArrayExampleAddressFull.json
@@ -0,0 +1,13 @@
+[ {
+ "streetaddress" : "1600 Pennsylvania Avenue",
+ "city" : "Washington DC"
+}, {
+ "streetaddress" : "Somewhere",
+ "city" : "Over the rainbow"
+}, {
+ "streetaddress" : "221 B Baker St.",
+ "city" : "London"
+}, {
+ "streetaddress" : "Wayne Manor",
+ "city" : "Gotham City"
+} ] \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/ArrayExampleAddressNull.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/ArrayExampleAddressNull.json
new file mode 100644
index 000000000..8878e547a
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/ArrayExampleAddressNull.json
@@ -0,0 +1 @@
+[ ] \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/ArrayExampleLongFull.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/ArrayExampleLongFull.json
new file mode 100644
index 000000000..ca12244ee
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/ArrayExampleLongFull.json
@@ -0,0 +1 @@
+[ 9223372036854775807, -3, -2, 1, -9223372036854775808, -67890, 5, 0 ] \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/ArrayExampleLongNull.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/ArrayExampleLongNull.json
new file mode 100644
index 000000000..8878e547a
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/ArrayExampleLongNull.json
@@ -0,0 +1 @@
+[ ] \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/EnumExampleBad0.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/EnumExampleBad0.json
new file mode 100644
index 000000000..d1218ca59
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/EnumExampleBad0.json
@@ -0,0 +1 @@
+"TWEED" \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/EnumExampleBad1.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/EnumExampleBad1.json
new file mode 100644
index 000000000..67b3fe5c7
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/EnumExampleBad1.json
@@ -0,0 +1 @@
+"Hearts" \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/EnumExampleHearts.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/EnumExampleHearts.json
new file mode 100644
index 000000000..92bd68a7e
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/EnumExampleHearts.json
@@ -0,0 +1 @@
+"HEARTS" \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/EnumExampleNull.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/EnumExampleNull.json
new file mode 100644
index 000000000..ec747fa47
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/EnumExampleNull.json
@@ -0,0 +1 @@
+null \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/FixedExampleBad0.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/FixedExampleBad0.json
new file mode 100644
index 000000000..f0251f122
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/FixedExampleBad0.json
@@ -0,0 +1 @@
+"BADBAD" \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/FixedExampleBad1.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/FixedExampleBad1.json
new file mode 100644
index 000000000..687d14210
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/FixedExampleBad1.json
@@ -0,0 +1 @@
+"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0" \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/FixedExampleGood.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/FixedExampleGood.json
new file mode 100644
index 000000000..846002e51
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/FixedExampleGood.json
@@ -0,0 +1 @@
+"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF" \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/FixedExampleNull.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/FixedExampleNull.json
new file mode 100644
index 000000000..ec747fa47
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/FixedExampleNull.json
@@ -0,0 +1 @@
+null \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/HealthCheckEvent.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/HealthCheckEvent.json
new file mode 100644
index 000000000..4233f3b57
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/HealthCheckEvent.json
@@ -0,0 +1,22 @@
+{
+ "input": {
+ "action": "HealthCheck",
+ "action-identifiers": {
+ "vnf-id": "49414df5-3482-4fd8-9952-c463dff2770b"
+ },
+ "common-header": {
+ "request-id": "afr-request3",
+ "originator-id": "AFR",
+ "api-ver": "2.15",
+ "sub-request-id": "AFR-subrequest",
+ "timestamp": "2017-11-06T15:15:18.97Z",
+ "flags": {
+ "ttl": "10000",
+ "force": "TRUE",
+ "mode": "EXCLUSIVE"
+ }
+ },
+ "payload": "{\"host-ip-address\":\"131.160.203.125\",\"input.url\":\"131.160.203.125/afr\",\"request-action-type\":\"GET\",\"request-action\":\"AFR\"}"
+ }
+}
+
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/MapExampleAddressFull.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/MapExampleAddressFull.json
new file mode 100644
index 000000000..2a1911445
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/MapExampleAddressFull.json
@@ -0,0 +1,18 @@
+{
+ "address0" : {
+ "streetaddress" : "1600 Pennsylvania Avenue",
+ "city" : "Washington DC"
+ },
+ "address1" : {
+ "streetaddress" : "Somewhere",
+ "city" : "Over the rainbow"
+ },
+ "address2" : {
+ "streetaddress" : "221 B Baker St.",
+ "city" : "London"
+ },
+ "address3" : {
+ "streetaddress" : "Wayne Manor",
+ "city" : "Gotham City"
+ }
+} \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/MapExampleAddressInvalidFields.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/MapExampleAddressInvalidFields.json
new file mode 100644
index 000000000..fa23c8328
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/MapExampleAddressInvalidFields.json
@@ -0,0 +1,18 @@
+{
+ "address.0" : {
+ "street-address" : "1600 Pennsylvania Avenue",
+ "the.city" : "Washington DC"
+ },
+ "address.1" : {
+ "street-address" : "Somewhere",
+ "the.city" : "Over the rainbow"
+ },
+ "address.2" : {
+ "street-address" : "221 B Baker St.",
+ "the.city" : "London"
+ },
+ "address.3" : {
+ "street-address" : "Wayne Manor",
+ "the.city" : "Gotham City"
+ }
+} \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/MapExampleAddressNull.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/MapExampleAddressNull.json
new file mode 100644
index 000000000..9e26dfeeb
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/MapExampleAddressNull.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/MapExampleLongFull.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/MapExampleLongFull.json
new file mode 100644
index 000000000..f94a4f600
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/MapExampleLongFull.json
@@ -0,0 +1,10 @@
+{
+ "key04" : 9223372036854775807,
+ "key03" : -3,
+ "key02" : -2,
+ "key01" : 1,
+ "key07" : -9223372036854775808,
+ "key06" : -67890,
+ "key05" : 5,
+ "key00" : 0
+}
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/MapExampleLongNull.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/MapExampleLongNull.json
new file mode 100644
index 000000000..9e26dfeeb
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/MapExampleLongNull.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/RecordExampleFull.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/RecordExampleFull.json
new file mode 100644
index 000000000..d4fbf106a
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/RecordExampleFull.json
@@ -0,0 +1,41 @@
+{
+ "firstname" : "Liam",
+ "lastname" : "Fallon",
+ "address" : {
+ "streetaddress" : "Somewhere",
+ "city" : "Over the rainbow"
+ },
+ "id" : 1497,
+ "username" : "eeilfn",
+ "passwordHash" : "gobbledygook",
+ "signupDate" : 894614400,
+ "emailAddresses" : [ {
+ "address" : "sean@citizen.ie",
+ "verified" : true,
+ "dateAdded" : 1495805460,
+ "dateBounced" : {
+ "long" : 1495805460
+ }
+ } ],
+ "twitterAccounts" : [ {
+ "status" : "ACTIVE",
+ "userId" : 12345,
+ "screenName" : "Zooby",
+ "oauthToken" : "ZoobyOToken",
+ "oauthTokenSecret" : {
+ "string" : "ZoobyOTokenSecret"
+ },
+ "dateAuthorized" : 149580546
+ } ],
+ "toDoItems" : [ {
+ "status" : "DONE",
+ "title" : "fierce important thing",
+ "description" : {
+ "string" : "Description of fierce important thing"
+ },
+ "snoozeDate" : {
+ "long" : 149580567
+ },
+ "subItems" : [ ]
+ } ]
+} \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/RecordExampleInvalidFields.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/RecordExampleInvalidFields.json
new file mode 100644
index 000000000..f40075e27
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/RecordExampleInvalidFields.json
@@ -0,0 +1,41 @@
+{
+ "firstname" : "Liam",
+ "lastname" : "Fallon",
+ "address" : {
+ "streetaddress-1" : "Somewhere",
+ "city" : "Over the rainbow"
+ },
+ "id" : 1497,
+ "username" : "eeilfn",
+ "passwordHash" : "gobbledygook",
+ "signupDate" : 894614400,
+ "email.Addresses" : [ {
+ "address" : "sean@citizenie",
+ "verified" : true,
+ "dateAdded" : 1495805460,
+ "dateBounced" : {
+ "long" : 1495805460
+ }
+ } ],
+ "twitterAccounts" : [ {
+ "status" : "ACTIVE",
+ "userId" : 12345,
+ "screenName" : "Zooby",
+ "oauthToken" : "ZoobyOToken",
+ "oauthTokenSecret" : {
+ "string" : "ZoobyOTokenSecret"
+ },
+ "dateAuthorized" : 149580546
+ } ],
+ "toDoItems" : [ {
+ "status" : "DONE",
+ "title-long" : "fierce important thing",
+ "description" : {
+ "string" : "Description of fierce important thing"
+ },
+ "snoozeDate" : {
+ "long" : 149580567
+ },
+ "subItems" : [ ]
+ } ]
+} \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/RecordExampleNull.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/RecordExampleNull.json
new file mode 100644
index 000000000..03eef6c05
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/RecordExampleNull.json
@@ -0,0 +1,15 @@
+{
+ "firstname" : "",
+ "lastname" : "",
+ "address" : {
+ "streetaddress" : "",
+ "city" : ""
+ },
+ "id" : 0,
+ "username" : "",
+ "passwordHash" : "",
+ "signupDate" : 0,
+ "emailAddresses" : [ ],
+ "twitterAccounts" : [ ],
+ "toDoItems" : [ ]
+} \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/RecordExampleVPNFull.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/RecordExampleVPNFull.json
new file mode 100644
index 000000000..7e4da3391
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/RecordExampleVPNFull.json
@@ -0,0 +1,9 @@
+{
+ "nameSpace" : "com.ericsson.apex.domains.vpn.events",
+ "name" : "VPNTriggerEvent",
+ "version" : "0.0.1",
+ "source" : "VPNSLA",
+ "target" : "Apex",
+ "LinkMap" : { },
+ "CustomerMap" : { }
+} \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/UnionExampleAllFields.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/UnionExampleAllFields.json
new file mode 100644
index 000000000..88299e3a4
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/UnionExampleAllFields.json
@@ -0,0 +1,6 @@
+{
+ "name" : "Ben",
+ "favourite_number" : 7,
+ "favourite_colour" : "red",
+ "favourite_group" : "Zooby"
+} \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/UnionExampleNullField.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/UnionExampleNullField.json
new file mode 100644
index 000000000..4fd33a6eb
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/UnionExampleNullField.json
@@ -0,0 +1,6 @@
+{
+ "name": "Alyssa",
+ "favourite_number": 256,
+ "favourite_colour": null,
+ "favourite_group": "U2"
+} \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/UnionExampleOptionalField.json b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/UnionExampleOptionalField.json
new file mode 100644
index 000000000..f62d25b31
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/data/UnionExampleOptionalField.json
@@ -0,0 +1,5 @@
+{
+ "name": "Claire",
+ "favourite_number": 123,
+ "favourite_colour": null
+} \ No newline at end of file
diff --git a/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/logback-test.xml b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/logback-test.xml
new file mode 100644
index 000000000..3dd11e9cb
--- /dev/null
+++ b/plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/resources/logback-test.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ============LICENSE_START=======================================================
+ Copyright (C) 2016-2018 Ericsson. 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=========================================================
+-->
+
+<configuration>
+
+ <contextName>Apex</contextName>
+ <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
+ <property name="LOG_DIR" value="${java.io.tmpdir}/apex_logging/" />
+
+ <!-- USE FOR STD OUT ONLY -->
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder>
+ <Pattern>%d %contextName [%t] %level %logger{36} - %msg%n</Pattern>
+ </encoder>
+ </appender>
+
+ <root level="INFO">
+ <appender-ref ref="STDOUT" />
+ </root>
+
+ <logger name="org.infinispan" level="INFO" additivity="false">
+ <appender-ref ref="STDOUT" />
+ </logger>
+
+ <logger name="org.apache.zookeeper.ClientCnxn" level="OFF" additivity="false">
+ <appender-ref ref="STDOUT" />
+ </logger>
+
+ <appender name="FILE" class="ch.qos.logback.core.FileAppender">
+ <file>${LOG_DIR}/apex.log</file>
+ <encoder>
+ <pattern>%d %-5relative [procId=${processId}] [%thread] %-5level
+ %logger{26} - %msg %n %ex{full}</pattern>
+ </encoder>
+ </appender>
+
+ <appender name="CTXT_FILE" class="ch.qos.logback.core.FileAppender">
+ <file>${LOG_DIR}/apex_ctxt.log</file>
+ <encoder>
+ <pattern>%d %-5relative [procId=${processId}] [%thread] %-5level
+ %logger{26} - %msg %n %ex{full}</pattern>
+ </encoder>
+ </appender>
+
+ <logger name="org.onap.policy.apex.core.context.impl.monitoring" level="TRACE" additivity="false">
+ <appender-ref ref="CTXT_FILE" />
+ </logger>
+
+ <logger name="org.onap.policy.apex.executionlogging.TaskExecutionLogging" level="TRACE" additivity="false">
+ <appender-ref ref="STDOUT" />
+ </logger>
+
+ <logger name="org.onap.policy.apex" level="TRACE" additivity="false">
+ <appender-ref ref="STDOUT" />
+ </logger>
+</configuration>