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;
32 import org.junit.AfterClass;
33 import org.junit.BeforeClass;
34 import org.junit.Test;
35 import org.onap.policy.apex.context.parameters.ContextParameterConstants;
36 import org.onap.policy.apex.context.parameters.SchemaParameters;
37 import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
38 import org.onap.policy.apex.model.basicmodel.handling.ApexModelException;
39 import org.onap.policy.apex.model.basicmodel.handling.ApexModelReader;
40 import org.onap.policy.apex.model.basicmodel.service.ModelService;
41 import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
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.onap.policy.common.utils.resources.TextFileUtils;
48 import org.slf4j.ext.XLogger;
49 import org.slf4j.ext.XLoggerFactory;
52 * Test JSON Event Handler.
54 * @author Liam Fallon (liam.fallon@ericsson.com)
56 public class JsonEventHandlerForPojoTest {
57 private static final XLogger logger = XLoggerFactory.getXLogger(JsonEventHandlerForPojoTest.class);
62 * @throws IOException Signals that an I/O exception has occurred.
63 * @throws ApexModelException the apex model exception
66 public static void setupEventModel() throws IOException, ApexModelException {
67 final String policyModelString =
68 TextFileUtils.getTextFileAsString("src/test/resources/policymodels/PojoEventModel.json");
69 final ApexModelReader<AxPolicyModel> modelReader = new ApexModelReader<AxPolicyModel>(AxPolicyModel.class);
70 modelReader.setValidateFlag(false);
71 final AxPolicyModel apexPolicyModel = modelReader.read(new ByteArrayInputStream(policyModelString.getBytes()));
73 // Set up the models in the model service
74 apexPolicyModel.register();
78 * Initialize default schema parameters.
81 public static void initializeDefaultSchemaParameters() {
82 ParameterService.clear();
83 final SchemaParameters schemaParameters = new SchemaParameters();
84 schemaParameters.setName(ContextParameterConstants.SCHEMA_GROUP_NAME);
85 ParameterService.register(schemaParameters);
89 * Teardown default schema parameters.
92 public static void teardownDefaultSchemaParameters() {
93 ParameterService.deregister(ContextParameterConstants.SCHEMA_GROUP_NAME);
98 * Test POJO to apex event and back.
100 * @throws ApexException the apex exception
101 * @throws IOException on IO exceptions
104 public void testJsonPojoToApexEvent() throws ApexException, IOException {
105 final Apex2JsonEventConverter jsonEventConverter = new Apex2JsonEventConverter();
106 assertNotNull(jsonEventConverter);
108 JsonEventProtocolParameters pars = new JsonEventProtocolParameters();
109 pars.setPojoField("POJO_PAR");
110 jsonEventConverter.init(pars);
112 final String apexEventJsonStringIn =
113 TextFileUtils.getTextFileAsString("src/test/resources/events/TestPojoEvent.json");
115 logger.debug("input event\n" + apexEventJsonStringIn);
117 final List<ApexEvent> apexEventList = jsonEventConverter.toApexEvent("PojoEvent", apexEventJsonStringIn);
118 assertEquals(1, apexEventList.size());
119 final ApexEvent apexEvent = apexEventList.get(0);
120 assertNotNull(apexEvent);
122 logger.debug(apexEvent.toString());
124 assertEquals("PojoEvent", apexEvent.getName());
125 assertEquals("0.0.1", apexEvent.getVersion());
126 assertEquals("org.onap.policy.apex.service.engine.event.testpojos", apexEvent.getNameSpace());
127 assertEquals("Outside", apexEvent.getSource());
128 assertEquals("Apex", apexEvent.getTarget());
130 DummyPojo testPojo = (DummyPojo) apexEvent.get("POJO_PAR");
132 assertEquals(1, testPojo.getAnInt());
133 assertEquals(2, testPojo.getAnInteger().intValue());
134 assertEquals("a string", testPojo.getSomeString());
136 assertEquals(10, testPojo.getTestSubPojo().getAnInt());
137 assertEquals(20, testPojo.getTestSubPojo().getAnInteger().intValue());
138 assertEquals("a sub string", testPojo.getTestSubPojo().getSomeString());
140 assertEquals(100, testPojo.getTestSubPojo().getTestSubSubPojo().getAnInt());
141 assertEquals(200, testPojo.getTestSubPojo().getTestSubSubPojo().getAnInteger().intValue());
142 assertEquals("a sub sub string", testPojo.getTestSubPojo().getTestSubSubPojo().getSomeString());
144 String eventBackInJson = (String) jsonEventConverter.fromApexEvent(apexEvent);
145 assertEquals(apexEventJsonStringIn.replaceAll("\\s+", ""), eventBackInJson.replaceAll("\\s+", ""));
149 * Test POJO List to apex event and back.
151 * @throws ApexException the apex exception
152 * @throws IOException on IO exceptions
155 public void testJsonPojoListToApexEvent() throws ApexException, IOException {
156 final Apex2JsonEventConverter jsonEventConverter = new Apex2JsonEventConverter();
157 assertNotNull(jsonEventConverter);
159 JsonEventProtocolParameters pars = new JsonEventProtocolParameters();
160 pars.setPojoField("POJO_LIST_PAR");
161 jsonEventConverter.init(pars);
163 final String apexEventJsonStringIn =
164 TextFileUtils.getTextFileAsString("src/test/resources/events/TestPojoListEvent.json");
166 logger.debug("input event\n" + apexEventJsonStringIn);
168 final List<ApexEvent> apexEventList = jsonEventConverter.toApexEvent("PojoListEvent", apexEventJsonStringIn);
169 assertEquals(1, apexEventList.size());
170 final ApexEvent apexEvent = apexEventList.get(0);
171 assertNotNull(apexEvent);
173 logger.debug(apexEvent.toString());
175 assertEquals("PojoListEvent", apexEvent.getName());
176 assertEquals("0.0.1", apexEvent.getVersion());
177 assertEquals("org.onap.policy.apex.service.engine.event.testpojos", apexEvent.getNameSpace());
178 assertEquals("Outside", apexEvent.getSource());
179 assertEquals("Apex", apexEvent.getTarget());
181 DummyPojoList testPojoList = (DummyPojoList) apexEvent.get("POJO_LIST_PAR");
183 for (DummyPojo testPojo : testPojoList.getTestPojoList()) {
184 assertEquals(1, testPojo.getAnInt());
185 assertEquals(2, testPojo.getAnInteger().intValue());
186 assertEquals("a string", testPojo.getSomeString());
188 assertEquals(10, testPojo.getTestSubPojo().getAnInt());
189 assertEquals(20, testPojo.getTestSubPojo().getAnInteger().intValue());
190 assertEquals("a sub string", testPojo.getTestSubPojo().getSomeString());
192 assertEquals(100, testPojo.getTestSubPojo().getTestSubSubPojo().getAnInt());
193 assertEquals(200, testPojo.getTestSubPojo().getTestSubSubPojo().getAnInteger().intValue());
194 assertEquals("a sub sub string", testPojo.getTestSubPojo().getTestSubSubPojo().getSomeString());
196 String eventBackInJson = (String) jsonEventConverter.fromApexEvent(apexEvent);
197 assertEquals(apexEventJsonStringIn.replaceAll("\\s+", ""), eventBackInJson.replaceAll("\\s+", ""));
201 * Test POJO event with bad configurations.
203 * @throws ApexException the apex exception
204 * @throws IOException on IO exceptions
207 public void testJsonBadPojoApexEvent() throws ApexException, IOException {
208 final Apex2JsonEventConverter jsonEventConverter = new Apex2JsonEventConverter();
209 assertNotNull(jsonEventConverter);
211 JsonEventProtocolParameters pars = new JsonEventProtocolParameters();
212 pars.setPojoField("BAD_POJO_PAR");
213 jsonEventConverter.init(pars);
215 final String apexEventJsonStringIn =
216 TextFileUtils.getTextFileAsString("src/test/resources/events/TestPojoEvent.json");
218 logger.debug("input event\n" + apexEventJsonStringIn);
221 jsonEventConverter.toApexEvent("PojoEvent", apexEventJsonStringIn);
222 fail("test should throw an exception");
223 } catch (Exception tae) {
225 "Failed to unmarshal JSON event: error parsing PojoEvent:0.0.1 event from Json. "
226 + "Field BAD_POJO_PAR not found on POJO event definition.",
227 tae.getMessage().substring(0, 133));
230 pars.setPojoField("POJO_PAR");
232 jsonEventConverter.toApexEvent("PojoNoFieldEvent", apexEventJsonStringIn);
233 fail("test should throw an exception");
234 } catch (Exception tae) {
236 "Failed to unmarshal JSON event: error parsing PojoNoFieldEvent:0.0.1 event from Json, "
237 + "Field POJO_PAR not found, no fields defined on event.",
238 tae.getMessage().substring(0, 139));
242 jsonEventConverter.toApexEvent("PojoTooManyFieldsEvent", apexEventJsonStringIn);
243 fail("test should throw an exception");
244 } catch (Exception tae) {
246 "Failed to unmarshal JSON event: error parsing PojoTooManyFieldsEvent:0.0.1 event from Json, "
247 + "Field POJO_PAR, one and only one field may be defined on a POJO event definition.",
248 tae.getMessage().substring(0, 173));