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.policymodel.concepts.AxPolicyModel;
40 import org.onap.policy.apex.model.utilities.TextFileUtils;
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.TestPojo;
44 import org.onap.policy.apex.service.engine.event.testpojos.TestPojoList;
45 import org.onap.policy.common.parameters.ParameterService;
46 import org.slf4j.ext.XLogger;
47 import org.slf4j.ext.XLoggerFactory;
50 * Test JSON Event Handler.
52 * @author Liam Fallon (liam.fallon@ericsson.com)
54 public class TestJsonEventHandlerForPojo {
55 private static final XLogger logger = XLoggerFactory.getXLogger(TestJsonEventHandlerForPojo.class);
60 * @throws IOException Signals that an I/O exception has occurred.
61 * @throws ApexModelException the apex model exception
64 public static void setupEventModel() throws IOException, ApexModelException {
65 final String policyModelString = TextFileUtils
66 .getTextFileAsString("src/test/resources/policymodels/PojoEventModel.json");
67 final ApexModelReader<AxPolicyModel> modelReader = new ApexModelReader<AxPolicyModel>(AxPolicyModel.class);
68 modelReader.setValidateFlag(false);
69 final AxPolicyModel apexPolicyModel = modelReader.read(new ByteArrayInputStream(policyModelString.getBytes()));
71 // Set up the models in the model service
72 apexPolicyModel.register();
76 * Initialize default schema parameters.
79 public static void initializeDefaultSchemaParameters() {
80 ParameterService.clear();
81 final SchemaParameters schemaParameters = new SchemaParameters();
82 schemaParameters.setName(ContextParameterConstants.SCHEMA_GROUP_NAME);
83 ParameterService.register(schemaParameters);
87 * Teardown default schema parameters.
90 public static void teardownDefaultSchemaParameters() {
91 ParameterService.deregister(ContextParameterConstants.SCHEMA_GROUP_NAME);
95 * Test POJO to apex event and back.
97 * @throws ApexException the apex exception
98 * @throws IOException on IO exceptions
101 public void testJsonPojoToApexEvent() throws ApexException, IOException {
102 final Apex2JsonEventConverter jsonEventConverter = new Apex2JsonEventConverter();
103 assertNotNull(jsonEventConverter);
105 JsonEventProtocolParameters pars = new JsonEventProtocolParameters();
106 pars.setPojoField("POJO_PAR");
107 jsonEventConverter.init(pars);
109 final String apexEventJsonStringIn = TextFileUtils
110 .getTextFileAsString("src/test/resources/events/TestPojoEvent.json");
112 logger.debug("input event\n" + apexEventJsonStringIn);
114 final List<ApexEvent> apexEventList = jsonEventConverter.toApexEvent("PojoEvent", apexEventJsonStringIn);
115 assertEquals(1, apexEventList.size());
116 final ApexEvent apexEvent = apexEventList.get(0);
117 assertNotNull(apexEvent);
119 logger.debug(apexEvent.toString());
121 assertEquals("PojoEvent", apexEvent.getName());
122 assertEquals("0.0.1", apexEvent.getVersion());
123 assertEquals("org.onap.policy.apex.service.engine.event.testpojos", apexEvent.getNameSpace());
124 assertEquals("Outside", apexEvent.getSource());
125 assertEquals("Apex", apexEvent.getTarget());
127 TestPojo testPojo = (TestPojo) apexEvent.get("POJO_PAR");
129 assertEquals(1, testPojo.getAnInt());
130 assertEquals(2, testPojo.getAnInteger().intValue());
131 assertEquals("a string", testPojo.getSomeString());
133 assertEquals(10, testPojo.getTestSubPojo().getAnInt());
134 assertEquals(20, testPojo.getTestSubPojo().getAnInteger().intValue());
135 assertEquals("a sub string", testPojo.getTestSubPojo().getSomeString());
137 assertEquals(100, testPojo.getTestSubPojo().getTestSubSubPojo().getAnInt());
138 assertEquals(200, testPojo.getTestSubPojo().getTestSubSubPojo().getAnInteger().intValue());
139 assertEquals("a sub sub string", testPojo.getTestSubPojo().getTestSubSubPojo().getSomeString());
141 String eventBackInJson = (String) jsonEventConverter.fromApexEvent(apexEvent);
142 assertEquals(apexEventJsonStringIn.replaceAll("\\s+", ""), eventBackInJson.replaceAll("\\s+", ""));
146 * Test POJO List to apex event and back.
148 * @throws ApexException the apex exception
149 * @throws IOException on IO exceptions
152 public void testJsonPojoListToApexEvent() throws ApexException, IOException {
153 final Apex2JsonEventConverter jsonEventConverter = new Apex2JsonEventConverter();
154 assertNotNull(jsonEventConverter);
156 JsonEventProtocolParameters pars = new JsonEventProtocolParameters();
157 pars.setPojoField("POJO_LIST_PAR");
158 jsonEventConverter.init(pars);
160 final String apexEventJsonStringIn = TextFileUtils
161 .getTextFileAsString("src/test/resources/events/TestPojoListEvent.json");
163 logger.debug("input event\n" + apexEventJsonStringIn);
165 final List<ApexEvent> apexEventList = jsonEventConverter.toApexEvent("PojoListEvent", apexEventJsonStringIn);
166 assertEquals(1, apexEventList.size());
167 final ApexEvent apexEvent = apexEventList.get(0);
168 assertNotNull(apexEvent);
170 logger.debug(apexEvent.toString());
172 assertEquals("PojoListEvent", apexEvent.getName());
173 assertEquals("0.0.1", apexEvent.getVersion());
174 assertEquals("org.onap.policy.apex.service.engine.event.testpojos", apexEvent.getNameSpace());
175 assertEquals("Outside", apexEvent.getSource());
176 assertEquals("Apex", apexEvent.getTarget());
178 TestPojoList testPojoList = (TestPojoList) apexEvent.get("POJO_LIST_PAR");
180 for (TestPojo testPojo : testPojoList.getTestPojoList()) {
181 assertEquals(1, testPojo.getAnInt());
182 assertEquals(2, testPojo.getAnInteger().intValue());
183 assertEquals("a string", testPojo.getSomeString());
185 assertEquals(10, testPojo.getTestSubPojo().getAnInt());
186 assertEquals(20, testPojo.getTestSubPojo().getAnInteger().intValue());
187 assertEquals("a sub string", testPojo.getTestSubPojo().getSomeString());
189 assertEquals(100, testPojo.getTestSubPojo().getTestSubSubPojo().getAnInt());
190 assertEquals(200, testPojo.getTestSubPojo().getTestSubSubPojo().getAnInteger().intValue());
191 assertEquals("a sub sub string", testPojo.getTestSubPojo().getTestSubSubPojo().getSomeString());
193 String eventBackInJson = (String) jsonEventConverter.fromApexEvent(apexEvent);
194 assertEquals(apexEventJsonStringIn.replaceAll("\\s+", ""), eventBackInJson.replaceAll("\\s+", ""));
198 * Test POJO event with bad configurations.
200 * @throws ApexException the apex exception
201 * @throws IOException on IO exceptions
204 public void testJsonBadPojoApexEvent() throws ApexException, IOException {
205 final Apex2JsonEventConverter jsonEventConverter = new Apex2JsonEventConverter();
206 assertNotNull(jsonEventConverter);
208 JsonEventProtocolParameters pars = new JsonEventProtocolParameters();
209 pars.setPojoField("BAD_POJO_PAR");
210 jsonEventConverter.init(pars);
212 final String apexEventJsonStringIn = TextFileUtils
213 .getTextFileAsString("src/test/resources/events/TestPojoEvent.json");
215 logger.debug("input event\n" + apexEventJsonStringIn);
218 jsonEventConverter.toApexEvent("PojoEvent", apexEventJsonStringIn);
219 fail("test should throw an exception");
220 } catch (Exception tae) {
221 assertEquals("Failed to unmarshal JSON event: error parsing PojoEvent:0.0.1 event from Json. "
222 + "Field BAD_POJO_PAR not found on POJO event definition.",
223 tae.getMessage().substring(0, 133));
226 pars.setPojoField("POJO_PAR");
228 jsonEventConverter.toApexEvent("PojoNoFieldEvent", apexEventJsonStringIn);
229 fail("test should throw an exception");
230 } catch (Exception tae) {
231 assertEquals("Failed to unmarshal JSON event: error parsing PojoNoFieldEvent:0.0.1 event from Json, "
232 + "Field POJO_PAR not found, no fields defined on event.",
233 tae.getMessage().substring(0, 139));
237 jsonEventConverter.toApexEvent("PojoTooManyFieldsEvent", apexEventJsonStringIn);
238 fail("test should throw an exception");
239 } catch (Exception tae) {
240 assertEquals("Failed to unmarshal JSON event: error parsing PojoTooManyFieldsEvent:0.0.1 event from Json, "
241 + "Field POJO_PAR, one and only one field may be defined on a POJO event definition.",
242 tae.getMessage().substring(0, 173));