diff options
Diffstat (limited to 'plugins/plugins-context/plugins-context-schema/plugins-context-schema-avro/src/test/java/org/onap')
11 files changed, 1697 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+", "")); + } +} |