Changes for checkstyle 8.32
[policy/apex-pdp.git] / services / services-engine / src / test / java / org / onap / policy / apex / service / engine / event / JsonEventHandlerForPojoTest.java
1 /*-
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
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
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.
17  *
18  * SPDX-License-Identifier: Apache-2.0
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.apex.service.engine.event;
23
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.fail;
27
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;
49
50 /**
51  * Test JSON Event Handler.
52  *
53  * @author Liam Fallon (liam.fallon@ericsson.com)
54  */
55 public class JsonEventHandlerForPojoTest {
56     private static final XLogger logger = XLoggerFactory.getXLogger(JsonEventHandlerForPojoTest.class);
57
58     /**
59      * Setup event model.
60      *
61      * @throws IOException Signals that an I/O exception has occurred.
62      * @throws ApexModelException the apex model exception
63      */
64     @BeforeClass
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()));
71
72         // Set up the models in the model service
73         apexPolicyModel.register();
74     }
75
76     /**
77      * Initialize default schema parameters.
78      */
79     @BeforeClass
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);
85     }
86
87     /**
88      * Teardown default schema parameters.
89      */
90     @AfterClass
91     public static void teardownDefaultSchemaParameters() {
92         ParameterService.deregister(ContextParameterConstants.SCHEMA_GROUP_NAME);
93         ModelService.clear();
94     }
95
96     /**
97      * Test POJO to apex event and back.
98      *
99      * @throws ApexException the apex exception
100      * @throws IOException on IO exceptions
101      */
102     @Test
103     public void testJsonPojoToApexEvent() throws ApexException, IOException {
104         final Apex2JsonEventConverter jsonEventConverter = new Apex2JsonEventConverter();
105         assertNotNull(jsonEventConverter);
106
107         JsonEventProtocolParameters pars = new JsonEventProtocolParameters();
108         pars.setPojoField("POJO_PAR");
109         jsonEventConverter.init(pars);
110
111         final String apexEventJsonStringIn =
112                 TextFileUtils.getTextFileAsString("src/test/resources/events/TestPojoEvent.json");
113
114         logger.debug("input event\n" + apexEventJsonStringIn);
115
116         final List<ApexEvent> apexEventList = jsonEventConverter.toApexEvent("PojoEvent", apexEventJsonStringIn);
117         assertEquals(1, apexEventList.size());
118         final ApexEvent apexEvent = apexEventList.get(0);
119         assertNotNull(apexEvent);
120
121         logger.debug(apexEvent.toString());
122
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());
128
129         DummyPojo testPojo = (DummyPojo) apexEvent.get("POJO_PAR");
130
131         assertEquals(1, testPojo.getAnInt());
132         assertEquals(2, testPojo.getAnInteger().intValue());
133         assertEquals("a string", testPojo.getSomeString());
134
135         assertEquals(10, testPojo.getTestSubPojo().getAnInt());
136         assertEquals(20, testPojo.getTestSubPojo().getAnInteger().intValue());
137         assertEquals("a sub string", testPojo.getTestSubPojo().getSomeString());
138
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());
142
143         String eventBackInJson = (String) jsonEventConverter.fromApexEvent(apexEvent);
144         assertEquals(apexEventJsonStringIn.replaceAll("\\s+", ""), eventBackInJson.replaceAll("\\s+", ""));
145     }
146
147     /**
148      * Test POJO List to apex event and back.
149      *
150      * @throws ApexException the apex exception
151      * @throws IOException on IO exceptions
152      */
153     @Test
154     public void testJsonPojoListToApexEvent() throws ApexException, IOException {
155         final Apex2JsonEventConverter jsonEventConverter = new Apex2JsonEventConverter();
156         assertNotNull(jsonEventConverter);
157
158         JsonEventProtocolParameters pars = new JsonEventProtocolParameters();
159         pars.setPojoField("POJO_LIST_PAR");
160         jsonEventConverter.init(pars);
161
162         final String apexEventJsonStringIn =
163                 TextFileUtils.getTextFileAsString("src/test/resources/events/TestPojoListEvent.json");
164
165         logger.debug("input event\n" + apexEventJsonStringIn);
166
167         final List<ApexEvent> apexEventList = jsonEventConverter.toApexEvent("PojoListEvent", apexEventJsonStringIn);
168         assertEquals(1, apexEventList.size());
169         final ApexEvent apexEvent = apexEventList.get(0);
170         assertNotNull(apexEvent);
171
172         logger.debug(apexEvent.toString());
173
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());
179
180         DummyPojoList testPojoList = (DummyPojoList) apexEvent.get("POJO_LIST_PAR");
181
182         for (DummyPojo testPojo : testPojoList.getTestPojoList()) {
183             assertEquals(1, testPojo.getAnInt());
184             assertEquals(2, testPojo.getAnInteger().intValue());
185             assertEquals("a string", testPojo.getSomeString());
186
187             assertEquals(10, testPojo.getTestSubPojo().getAnInt());
188             assertEquals(20, testPojo.getTestSubPojo().getAnInteger().intValue());
189             assertEquals("a sub string", testPojo.getTestSubPojo().getSomeString());
190
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());
194         }
195         String eventBackInJson = (String) jsonEventConverter.fromApexEvent(apexEvent);
196         assertEquals(apexEventJsonStringIn.replaceAll("\\s+", ""), eventBackInJson.replaceAll("\\s+", ""));
197     }
198
199     /**
200      * Test POJO event with bad configurations.
201      *
202      * @throws ApexException the apex exception
203      * @throws IOException on IO exceptions
204      */
205     @Test
206     public void testJsonBadPojoApexEvent() throws ApexException, IOException {
207         final Apex2JsonEventConverter jsonEventConverter = new Apex2JsonEventConverter();
208         assertNotNull(jsonEventConverter);
209
210         JsonEventProtocolParameters pars = new JsonEventProtocolParameters();
211         pars.setPojoField("BAD_POJO_PAR");
212         jsonEventConverter.init(pars);
213
214         final String apexEventJsonStringIn =
215                 TextFileUtils.getTextFileAsString("src/test/resources/events/TestPojoEvent.json");
216
217         logger.debug("input event\n" + apexEventJsonStringIn);
218
219         try {
220             jsonEventConverter.toApexEvent("PojoEvent", apexEventJsonStringIn);
221             fail("test should throw an exception");
222         } catch (Exception tae) {
223             assertEquals(
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));
227         }
228
229         pars.setPojoField("POJO_PAR");
230         try {
231             jsonEventConverter.toApexEvent("PojoNoFieldEvent", apexEventJsonStringIn);
232             fail("test should throw an exception");
233         } catch (Exception tae) {
234             assertEquals(
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));
238         }
239
240         try {
241             jsonEventConverter.toApexEvent("PojoTooManyFieldsEvent", apexEventJsonStringIn);
242             fail("test should throw an exception");
243         } catch (Exception tae) {
244             assertEquals(
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));
248         }
249     }
250 }