diff options
Diffstat (limited to 'services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/JsonEventHandlerForPojoTest.java')
-rw-r--r-- | services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/JsonEventHandlerForPojoTest.java | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/JsonEventHandlerForPojoTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/JsonEventHandlerForPojoTest.java new file mode 100644 index 000000000..ee15d2745 --- /dev/null +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/JsonEventHandlerForPojoTest.java @@ -0,0 +1,247 @@ +/*- + * ============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.service.engine.event; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.util.List; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.onap.policy.apex.context.parameters.ContextParameterConstants; +import org.onap.policy.apex.context.parameters.SchemaParameters; +import org.onap.policy.apex.model.basicmodel.concepts.ApexException; +import org.onap.policy.apex.model.basicmodel.handling.ApexModelException; +import org.onap.policy.apex.model.basicmodel.handling.ApexModelReader; +import org.onap.policy.apex.model.basicmodel.service.ModelService; +import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel; +import org.onap.policy.apex.model.utilities.TextFileUtils; +import org.onap.policy.apex.service.engine.event.impl.jsonprotocolplugin.Apex2JsonEventConverter; +import org.onap.policy.apex.service.engine.event.impl.jsonprotocolplugin.JsonEventProtocolParameters; +import org.onap.policy.apex.service.engine.event.testpojos.DummyPojo; +import org.onap.policy.apex.service.engine.event.testpojos.DummyPojoList; +import org.onap.policy.common.parameters.ParameterService; +import org.slf4j.ext.XLogger; +import org.slf4j.ext.XLoggerFactory; + +/** + * Test JSON Event Handler. + * + * @author Liam Fallon (liam.fallon@ericsson.com) + */ +public class JsonEventHandlerForPojoTest { + private static final XLogger logger = XLoggerFactory.getXLogger(JsonEventHandlerForPojoTest.class); + + /** + * Setup event model. + * + * @throws IOException Signals that an I/O exception has occurred. + * @throws ApexModelException the apex model exception + */ + @BeforeClass + public static void setupEventModel() throws IOException, ApexModelException { + final String policyModelString = TextFileUtils + .getTextFileAsString("src/test/resources/policymodels/PojoEventModel.json"); + final ApexModelReader<AxPolicyModel> modelReader = new ApexModelReader<AxPolicyModel>(AxPolicyModel.class); + modelReader.setValidateFlag(false); + final AxPolicyModel apexPolicyModel = modelReader.read(new ByteArrayInputStream(policyModelString.getBytes())); + + // Set up the models in the model service + apexPolicyModel.register(); + } + + /** + * Initialize default schema parameters. + */ + @BeforeClass + public static void initializeDefaultSchemaParameters() { + ParameterService.clear(); + final SchemaParameters schemaParameters = new SchemaParameters(); + schemaParameters.setName(ContextParameterConstants.SCHEMA_GROUP_NAME); + ParameterService.register(schemaParameters); + } + + /** + * Teardown default schema parameters. + */ + @AfterClass + public static void teardownDefaultSchemaParameters() { + ParameterService.deregister(ContextParameterConstants.SCHEMA_GROUP_NAME); + ModelService.clear(); + } + + /** + * Test POJO to apex event and back. + * + * @throws ApexException the apex exception + * @throws IOException on IO exceptions + */ + @Test + public void testJsonPojoToApexEvent() throws ApexException, IOException { + final Apex2JsonEventConverter jsonEventConverter = new Apex2JsonEventConverter(); + assertNotNull(jsonEventConverter); + + JsonEventProtocolParameters pars = new JsonEventProtocolParameters(); + pars.setPojoField("POJO_PAR"); + jsonEventConverter.init(pars); + + final String apexEventJsonStringIn = TextFileUtils + .getTextFileAsString("src/test/resources/events/TestPojoEvent.json"); + + logger.debug("input event\n" + apexEventJsonStringIn); + + final List<ApexEvent> apexEventList = jsonEventConverter.toApexEvent("PojoEvent", apexEventJsonStringIn); + assertEquals(1, apexEventList.size()); + final ApexEvent apexEvent = apexEventList.get(0); + assertNotNull(apexEvent); + + logger.debug(apexEvent.toString()); + + assertEquals("PojoEvent", apexEvent.getName()); + assertEquals("0.0.1", apexEvent.getVersion()); + assertEquals("org.onap.policy.apex.service.engine.event.testpojos", apexEvent.getNameSpace()); + assertEquals("Outside", apexEvent.getSource()); + assertEquals("Apex", apexEvent.getTarget()); + + DummyPojo testPojo = (DummyPojo) apexEvent.get("POJO_PAR"); + + assertEquals(1, testPojo.getAnInt()); + assertEquals(2, testPojo.getAnInteger().intValue()); + assertEquals("a string", testPojo.getSomeString()); + + assertEquals(10, testPojo.getTestSubPojo().getAnInt()); + assertEquals(20, testPojo.getTestSubPojo().getAnInteger().intValue()); + assertEquals("a sub string", testPojo.getTestSubPojo().getSomeString()); + + assertEquals(100, testPojo.getTestSubPojo().getTestSubSubPojo().getAnInt()); + assertEquals(200, testPojo.getTestSubPojo().getTestSubSubPojo().getAnInteger().intValue()); + assertEquals("a sub sub string", testPojo.getTestSubPojo().getTestSubSubPojo().getSomeString()); + + String eventBackInJson = (String) jsonEventConverter.fromApexEvent(apexEvent); + assertEquals(apexEventJsonStringIn.replaceAll("\\s+", ""), eventBackInJson.replaceAll("\\s+", "")); + } + + /** + * Test POJO List to apex event and back. + * + * @throws ApexException the apex exception + * @throws IOException on IO exceptions + */ + @Test + public void testJsonPojoListToApexEvent() throws ApexException, IOException { + final Apex2JsonEventConverter jsonEventConverter = new Apex2JsonEventConverter(); + assertNotNull(jsonEventConverter); + + JsonEventProtocolParameters pars = new JsonEventProtocolParameters(); + pars.setPojoField("POJO_LIST_PAR"); + jsonEventConverter.init(pars); + + final String apexEventJsonStringIn = TextFileUtils + .getTextFileAsString("src/test/resources/events/TestPojoListEvent.json"); + + logger.debug("input event\n" + apexEventJsonStringIn); + + final List<ApexEvent> apexEventList = jsonEventConverter.toApexEvent("PojoListEvent", apexEventJsonStringIn); + assertEquals(1, apexEventList.size()); + final ApexEvent apexEvent = apexEventList.get(0); + assertNotNull(apexEvent); + + logger.debug(apexEvent.toString()); + + assertEquals("PojoListEvent", apexEvent.getName()); + assertEquals("0.0.1", apexEvent.getVersion()); + assertEquals("org.onap.policy.apex.service.engine.event.testpojos", apexEvent.getNameSpace()); + assertEquals("Outside", apexEvent.getSource()); + assertEquals("Apex", apexEvent.getTarget()); + + DummyPojoList testPojoList = (DummyPojoList) apexEvent.get("POJO_LIST_PAR"); + + for (DummyPojo testPojo : testPojoList.getTestPojoList()) { + assertEquals(1, testPojo.getAnInt()); + assertEquals(2, testPojo.getAnInteger().intValue()); + assertEquals("a string", testPojo.getSomeString()); + + assertEquals(10, testPojo.getTestSubPojo().getAnInt()); + assertEquals(20, testPojo.getTestSubPojo().getAnInteger().intValue()); + assertEquals("a sub string", testPojo.getTestSubPojo().getSomeString()); + + assertEquals(100, testPojo.getTestSubPojo().getTestSubSubPojo().getAnInt()); + assertEquals(200, testPojo.getTestSubPojo().getTestSubSubPojo().getAnInteger().intValue()); + assertEquals("a sub sub string", testPojo.getTestSubPojo().getTestSubSubPojo().getSomeString()); + } + String eventBackInJson = (String) jsonEventConverter.fromApexEvent(apexEvent); + assertEquals(apexEventJsonStringIn.replaceAll("\\s+", ""), eventBackInJson.replaceAll("\\s+", "")); + } + + /** + * Test POJO event with bad configurations. + * + * @throws ApexException the apex exception + * @throws IOException on IO exceptions + */ + @Test + public void testJsonBadPojoApexEvent() throws ApexException, IOException { + final Apex2JsonEventConverter jsonEventConverter = new Apex2JsonEventConverter(); + assertNotNull(jsonEventConverter); + + JsonEventProtocolParameters pars = new JsonEventProtocolParameters(); + pars.setPojoField("BAD_POJO_PAR"); + jsonEventConverter.init(pars); + + final String apexEventJsonStringIn = TextFileUtils + .getTextFileAsString("src/test/resources/events/TestPojoEvent.json"); + + logger.debug("input event\n" + apexEventJsonStringIn); + + try { + jsonEventConverter.toApexEvent("PojoEvent", apexEventJsonStringIn); + fail("test should throw an exception"); + } catch (Exception tae) { + assertEquals("Failed to unmarshal JSON event: error parsing PojoEvent:0.0.1 event from Json. " + + "Field BAD_POJO_PAR not found on POJO event definition.", + tae.getMessage().substring(0, 133)); + } + + pars.setPojoField("POJO_PAR"); + try { + jsonEventConverter.toApexEvent("PojoNoFieldEvent", apexEventJsonStringIn); + fail("test should throw an exception"); + } catch (Exception tae) { + assertEquals("Failed to unmarshal JSON event: error parsing PojoNoFieldEvent:0.0.1 event from Json, " + + "Field POJO_PAR not found, no fields defined on event.", + tae.getMessage().substring(0, 139)); + } + + try { + jsonEventConverter.toApexEvent("PojoTooManyFieldsEvent", apexEventJsonStringIn); + fail("test should throw an exception"); + } catch (Exception tae) { + assertEquals("Failed to unmarshal JSON event: error parsing PojoTooManyFieldsEvent:0.0.1 event from Json, " + + "Field POJO_PAR, one and only one field may be defined on a POJO event definition.", + tae.getMessage().substring(0, 173)); + } + } +} |