2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2016-2018 Ericsson. All rights reserved.
4 * Modifications Copyright (C) 2020 Nordix Foundation.
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
22 package org.onap.policy.apex.service.engine.event;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.fail;
28 import java.io.ByteArrayInputStream;
29 import java.io.IOException;
30 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.service.engine.event.impl.jsonprotocolplugin.Apex2JsonEventConverter;
42 import org.onap.policy.apex.service.engine.event.impl.jsonprotocolplugin.JsonEventProtocolParameters;
43 import org.onap.policy.apex.service.engine.event.testpojos.DummyPojo;
44 import org.onap.policy.apex.service.engine.event.testpojos.DummyPojoList;
45 import org.onap.policy.common.parameters.ParameterService;
46 import org.onap.policy.common.utils.resources.TextFileUtils;
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 =
67 TextFileUtils.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 =
112 TextFileUtils.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 =
163 TextFileUtils.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 =
215 TextFileUtils.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) {
224 "Failed to unmarshal JSON event: error parsing PojoEvent:0.0.1 event from Json. "
225 + "Field BAD_POJO_PAR not found on POJO event definition.",
226 tae.getMessage().substring(0, 133));
229 pars.setPojoField("POJO_PAR");
231 jsonEventConverter.toApexEvent("PojoNoFieldEvent", apexEventJsonStringIn);
232 fail("test should throw an exception");
233 } catch (Exception tae) {
235 "Failed to unmarshal JSON event: error parsing PojoNoFieldEvent:0.0.1 event from Json, "
236 + "Field POJO_PAR not found, no fields defined on event.",
237 tae.getMessage().substring(0, 139));
241 jsonEventConverter.toApexEvent("PojoTooManyFieldsEvent", apexEventJsonStringIn);
242 fail("test should throw an exception");
243 } catch (Exception tae) {
245 "Failed to unmarshal JSON event: error parsing PojoTooManyFieldsEvent:0.0.1 event from Json, "
246 + "Field POJO_PAR, one and only one field may be defined on a POJO event definition.",
247 tae.getMessage().substring(0, 173));