2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2016-2018 Ericsson. All rights reserved.
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.apex.service.engine.event;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25 import static org.junit.Assert.fail;
27 import java.io.ByteArrayInputStream;
28 import java.io.IOException;
29 import java.util.List;
31 import org.junit.AfterClass;
32 import org.junit.BeforeClass;
33 import org.junit.Test;
34 import org.onap.policy.apex.context.parameters.ContextParameterConstants;
35 import org.onap.policy.apex.context.parameters.SchemaParameters;
36 import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
37 import org.onap.policy.apex.model.basicmodel.handling.ApexModelException;
38 import org.onap.policy.apex.model.basicmodel.handling.ApexModelReader;
39 import org.onap.policy.apex.model.basicmodel.service.ModelService;
40 import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
41 import org.onap.policy.apex.model.utilities.TextFileUtils;
42 import org.onap.policy.apex.service.engine.event.impl.jsonprotocolplugin.Apex2JsonEventConverter;
43 import org.onap.policy.apex.service.engine.event.impl.jsonprotocolplugin.JsonEventProtocolParameters;
44 import org.onap.policy.apex.service.engine.event.testpojos.DummyPojo;
45 import org.onap.policy.apex.service.engine.event.testpojos.DummyPojoList;
46 import org.onap.policy.common.parameters.ParameterService;
47 import org.slf4j.ext.XLogger;
48 import org.slf4j.ext.XLoggerFactory;
51 * Test JSON Event Handler.
53 * @author Liam Fallon (liam.fallon@ericsson.com)
55 public class JsonEventHandlerForPojoTest {
56 private static final XLogger logger = XLoggerFactory.getXLogger(JsonEventHandlerForPojoTest.class);
61 * @throws IOException Signals that an I/O exception has occurred.
62 * @throws ApexModelException the apex model exception
65 public static void setupEventModel() throws IOException, ApexModelException {
66 final String policyModelString = TextFileUtils
67 .getTextFileAsString("src/test/resources/policymodels/PojoEventModel.json");
68 final ApexModelReader<AxPolicyModel> modelReader = new ApexModelReader<AxPolicyModel>(AxPolicyModel.class);
69 modelReader.setValidateFlag(false);
70 final AxPolicyModel apexPolicyModel = modelReader.read(new ByteArrayInputStream(policyModelString.getBytes()));
72 // Set up the models in the model service
73 apexPolicyModel.register();
77 * Initialize default schema parameters.
80 public static void initializeDefaultSchemaParameters() {
81 ParameterService.clear();
82 final SchemaParameters schemaParameters = new SchemaParameters();
83 schemaParameters.setName(ContextParameterConstants.SCHEMA_GROUP_NAME);
84 ParameterService.register(schemaParameters);
88 * Teardown default schema parameters.
91 public static void teardownDefaultSchemaParameters() {
92 ParameterService.deregister(ContextParameterConstants.SCHEMA_GROUP_NAME);
97 * Test POJO to apex event and back.
99 * @throws ApexException the apex exception
100 * @throws IOException on IO exceptions
103 public void testJsonPojoToApexEvent() throws ApexException, IOException {
104 final Apex2JsonEventConverter jsonEventConverter = new Apex2JsonEventConverter();
105 assertNotNull(jsonEventConverter);
107 JsonEventProtocolParameters pars = new JsonEventProtocolParameters();
108 pars.setPojoField("POJO_PAR");
109 jsonEventConverter.init(pars);
111 final String apexEventJsonStringIn = TextFileUtils
112 .getTextFileAsString("src/test/resources/events/TestPojoEvent.json");
114 logger.debug("input event\n" + apexEventJsonStringIn);
116 final List<ApexEvent> apexEventList = jsonEventConverter.toApexEvent("PojoEvent", apexEventJsonStringIn);
117 assertEquals(1, apexEventList.size());
118 final ApexEvent apexEvent = apexEventList.get(0);
119 assertNotNull(apexEvent);
121 logger.debug(apexEvent.toString());
123 assertEquals("PojoEvent", apexEvent.getName());
124 assertEquals("0.0.1", apexEvent.getVersion());
125 assertEquals("org.onap.policy.apex.service.engine.event.testpojos", apexEvent.getNameSpace());
126 assertEquals("Outside", apexEvent.getSource());
127 assertEquals("Apex", apexEvent.getTarget());
129 DummyPojo testPojo = (DummyPojo) apexEvent.get("POJO_PAR");
131 assertEquals(1, testPojo.getAnInt());
132 assertEquals(2, testPojo.getAnInteger().intValue());
133 assertEquals("a string", testPojo.getSomeString());
135 assertEquals(10, testPojo.getTestSubPojo().getAnInt());
136 assertEquals(20, testPojo.getTestSubPojo().getAnInteger().intValue());
137 assertEquals("a sub string", testPojo.getTestSubPojo().getSomeString());
139 assertEquals(100, testPojo.getTestSubPojo().getTestSubSubPojo().getAnInt());
140 assertEquals(200, testPojo.getTestSubPojo().getTestSubSubPojo().getAnInteger().intValue());
141 assertEquals("a sub sub string", testPojo.getTestSubPojo().getTestSubSubPojo().getSomeString());
143 String eventBackInJson = (String) jsonEventConverter.fromApexEvent(apexEvent);
144 assertEquals(apexEventJsonStringIn.replaceAll("\\s+", ""), eventBackInJson.replaceAll("\\s+", ""));
148 * Test POJO List to apex event and back.
150 * @throws ApexException the apex exception
151 * @throws IOException on IO exceptions
154 public void testJsonPojoListToApexEvent() throws ApexException, IOException {
155 final Apex2JsonEventConverter jsonEventConverter = new Apex2JsonEventConverter();
156 assertNotNull(jsonEventConverter);
158 JsonEventProtocolParameters pars = new JsonEventProtocolParameters();
159 pars.setPojoField("POJO_LIST_PAR");
160 jsonEventConverter.init(pars);
162 final String apexEventJsonStringIn = TextFileUtils
163 .getTextFileAsString("src/test/resources/events/TestPojoListEvent.json");
165 logger.debug("input event\n" + apexEventJsonStringIn);
167 final List<ApexEvent> apexEventList = jsonEventConverter.toApexEvent("PojoListEvent", apexEventJsonStringIn);
168 assertEquals(1, apexEventList.size());
169 final ApexEvent apexEvent = apexEventList.get(0);
170 assertNotNull(apexEvent);
172 logger.debug(apexEvent.toString());
174 assertEquals("PojoListEvent", apexEvent.getName());
175 assertEquals("0.0.1", apexEvent.getVersion());
176 assertEquals("org.onap.policy.apex.service.engine.event.testpojos", apexEvent.getNameSpace());
177 assertEquals("Outside", apexEvent.getSource());
178 assertEquals("Apex", apexEvent.getTarget());
180 DummyPojoList testPojoList = (DummyPojoList) apexEvent.get("POJO_LIST_PAR");
182 for (DummyPojo testPojo : testPojoList.getTestPojoList()) {
183 assertEquals(1, testPojo.getAnInt());
184 assertEquals(2, testPojo.getAnInteger().intValue());
185 assertEquals("a string", testPojo.getSomeString());
187 assertEquals(10, testPojo.getTestSubPojo().getAnInt());
188 assertEquals(20, testPojo.getTestSubPojo().getAnInteger().intValue());
189 assertEquals("a sub string", testPojo.getTestSubPojo().getSomeString());
191 assertEquals(100, testPojo.getTestSubPojo().getTestSubSubPojo().getAnInt());
192 assertEquals(200, testPojo.getTestSubPojo().getTestSubSubPojo().getAnInteger().intValue());
193 assertEquals("a sub sub string", testPojo.getTestSubPojo().getTestSubSubPojo().getSomeString());
195 String eventBackInJson = (String) jsonEventConverter.fromApexEvent(apexEvent);
196 assertEquals(apexEventJsonStringIn.replaceAll("\\s+", ""), eventBackInJson.replaceAll("\\s+", ""));
200 * Test POJO event with bad configurations.
202 * @throws ApexException the apex exception
203 * @throws IOException on IO exceptions
206 public void testJsonBadPojoApexEvent() throws ApexException, IOException {
207 final Apex2JsonEventConverter jsonEventConverter = new Apex2JsonEventConverter();
208 assertNotNull(jsonEventConverter);
210 JsonEventProtocolParameters pars = new JsonEventProtocolParameters();
211 pars.setPojoField("BAD_POJO_PAR");
212 jsonEventConverter.init(pars);
214 final String apexEventJsonStringIn = TextFileUtils
215 .getTextFileAsString("src/test/resources/events/TestPojoEvent.json");
217 logger.debug("input event\n" + apexEventJsonStringIn);
220 jsonEventConverter.toApexEvent("PojoEvent", apexEventJsonStringIn);
221 fail("test should throw an exception");
222 } catch (Exception tae) {
223 assertEquals("Failed to unmarshal JSON event: error parsing PojoEvent:0.0.1 event from Json. "
224 + "Field BAD_POJO_PAR not found on POJO event definition.",
225 tae.getMessage().substring(0, 133));
228 pars.setPojoField("POJO_PAR");
230 jsonEventConverter.toApexEvent("PojoNoFieldEvent", apexEventJsonStringIn);
231 fail("test should throw an exception");
232 } catch (Exception tae) {
233 assertEquals("Failed to unmarshal JSON event: error parsing PojoNoFieldEvent:0.0.1 event from Json, "
234 + "Field POJO_PAR not found, no fields defined on event.",
235 tae.getMessage().substring(0, 139));
239 jsonEventConverter.toApexEvent("PojoTooManyFieldsEvent", apexEventJsonStringIn);
240 fail("test should throw an exception");
241 } catch (Exception tae) {
242 assertEquals("Failed to unmarshal JSON event: error parsing PojoTooManyFieldsEvent:0.0.1 event from Json, "
243 + "Field POJO_PAR, one and only one field may be defined on a POJO event definition.",
244 tae.getMessage().substring(0, 173));