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.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertNotNull;
27 import static org.junit.Assert.assertNull;
28 import static org.junit.Assert.assertTrue;
30 import java.io.ByteArrayInputStream;
31 import java.io.IOException;
32 import java.util.HashMap;
33 import java.util.List;
35 import org.junit.AfterClass;
36 import org.junit.BeforeClass;
37 import org.junit.Test;
38 import org.onap.policy.apex.context.parameters.ContextParameterConstants;
39 import org.onap.policy.apex.context.parameters.SchemaParameters;
40 import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
41 import org.onap.policy.apex.model.basicmodel.handling.ApexModelException;
42 import org.onap.policy.apex.model.basicmodel.handling.ApexModelReader;
43 import org.onap.policy.apex.model.basicmodel.service.ModelService;
44 import org.onap.policy.apex.model.eventmodel.concepts.AxEvent;
45 import org.onap.policy.apex.model.eventmodel.concepts.AxEvents;
46 import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
47 import org.onap.policy.apex.service.engine.event.impl.jsonprotocolplugin.Apex2JsonEventConverter;
48 import org.onap.policy.apex.service.engine.event.impl.jsonprotocolplugin.JsonEventProtocolParameters;
49 import org.onap.policy.common.parameters.ParameterService;
50 import org.onap.policy.common.utils.resources.TextFileUtils;
51 import org.slf4j.ext.XLogger;
52 import org.slf4j.ext.XLoggerFactory;
55 * Test JSON Event Handler.
57 * @author Liam Fallon (liam.fallon@ericsson.com)
59 public class JsonEventHandlerTest {
60 private static final XLogger logger = XLoggerFactory.getXLogger(JsonEventHandlerTest.class);
65 * @throws IOException Signals that an I/O exception has occurred.
66 * @throws ApexModelException the apex model exception
69 public static void setupEventModel() throws IOException, ApexModelException {
70 final String policyModelString =
71 TextFileUtils.getTextFileAsString("src/test/resources/policymodels/SmallModel.json");
72 final ApexModelReader<AxPolicyModel> modelReader = new ApexModelReader<AxPolicyModel>(AxPolicyModel.class);
73 final AxPolicyModel apexPolicyModel = modelReader.read(new ByteArrayInputStream(policyModelString.getBytes()));
75 // Set up the models in the model service
76 apexPolicyModel.register();
80 * Initialize default schema parameters.
83 public static void initializeDefaultSchemaParameters() {
84 ParameterService.clear();
85 final SchemaParameters schemaParameters = new SchemaParameters();
86 schemaParameters.setName(ContextParameterConstants.SCHEMA_GROUP_NAME);
87 ParameterService.register(schemaParameters);
91 * Teardown default schema parameters.
94 public static void teardownDefaultSchemaParameters() {
95 ParameterService.deregister(ContextParameterConstants.SCHEMA_GROUP_NAME);
100 * Test JSON to apex event.
102 * @throws ApexException the apex exception
105 public void testJsontoApexEvent() throws ApexException {
106 final Apex2JsonEventConverter jsonEventConverter = new Apex2JsonEventConverter();
107 assertNotNull(jsonEventConverter);
108 jsonEventConverter.init(new JsonEventProtocolParameters());
110 final String apexEventJsonStringIn = SupportJsonEventGenerator.jsonEvent();
112 logger.debug("input event\n" + apexEventJsonStringIn);
114 final List<ApexEvent> apexEventList = jsonEventConverter.toApexEvent(null, apexEventJsonStringIn);
115 for (final ApexEvent apexEvent : apexEventList) {
116 assertNotNull(apexEvent);
118 logger.debug(apexEvent.toString());
120 assertEquals("BasicEvent", apexEvent.getName());
121 assertEquals("0.0.1", apexEvent.getVersion());
122 assertEquals("org.onap.policy.apex.events", apexEvent.getNameSpace());
123 assertEquals("test", apexEvent.getSource());
124 assertEquals("apex", apexEvent.getTarget());
125 assertEquals(12345, apexEvent.get("intPar"));
126 final Object testMatchCaseSelected = apexEvent.get("TestMatchCaseSelected");
127 assertNull(testMatchCaseSelected);
133 * Test JSON to apex bad event.
135 * @throws ApexException the apex exception
138 public void testJsontoApexBadEvent() throws ApexException {
139 final Apex2JsonEventConverter jsonEventConverter = new Apex2JsonEventConverter();
140 assertNotNull(jsonEventConverter);
141 jsonEventConverter.init(new JsonEventProtocolParameters());
143 assertThatThrownBy(() -> {
144 String apexEventJsonStringIn = null;
145 apexEventJsonStringIn = SupportJsonEventGenerator.jsonEventNoName();
146 jsonEventConverter.toApexEvent(null, apexEventJsonStringIn);
147 }).hasMessageContaining("Failed to unmarshal JSON event: event received without "
148 + "mandatory parameter \"name\" ");
149 assertThatThrownBy(() -> {
150 String apexEventJsonStringIn = null;
151 apexEventJsonStringIn = SupportJsonEventGenerator.jsonEventBadName();
152 jsonEventConverter.toApexEvent(null, apexEventJsonStringIn);
153 }).hasMessageContaining("Failed to unmarshal JSON event: field \"name\" with value \"%%%%\" is invalid");
154 assertThatThrownBy(() -> {
155 String apexEventJsonStringIn = null;
156 apexEventJsonStringIn = SupportJsonEventGenerator.jsonEventNoExName();
157 jsonEventConverter.toApexEvent(null, apexEventJsonStringIn);
158 }).hasMessageContaining("Failed to unmarshal JSON event: an event definition for an event named \"I_DONT_EXI");
159 String apexEventJsonStringIn1 = null;
160 apexEventJsonStringIn1 = SupportJsonEventGenerator.jsonEventNoVersion();
161 ApexEvent event = jsonEventConverter.toApexEvent(null, apexEventJsonStringIn1).get(0);
162 assertEquals("0.0.1", event.getVersion());
163 assertThatThrownBy(() -> {
164 String apexEventJsonStringIn = null;
165 apexEventJsonStringIn = SupportJsonEventGenerator.jsonEventBadVersion();
166 jsonEventConverter.toApexEvent(null, apexEventJsonStringIn);
167 }).hasMessageContaining("Failed to unmarshal JSON event: field \"version\" with value \"#####\" is invalid");
168 assertThatThrownBy(() -> {
169 String apexEventJsonStringIn = null;
170 apexEventJsonStringIn = SupportJsonEventGenerator.jsonEventNoExVersion();
171 jsonEventConverter.toApexEvent(null, apexEventJsonStringIn);
172 }).hasMessageContaining("Failed to unmarshal JSON event: an event definition for an event named "
173 + "\"BasicEvent\" with version \"1.2.3\" not found in Apex model");
174 apexEventJsonStringIn1 = SupportJsonEventGenerator.jsonEventNoNamespace();
175 event = jsonEventConverter.toApexEvent(null, apexEventJsonStringIn1).get(0);
176 assertEquals("org.onap.policy.apex.events", event.getNameSpace());
178 assertThatThrownBy(() -> {
179 String apexEventJsonStringIn = null;
180 apexEventJsonStringIn = SupportJsonEventGenerator.jsonEventBadNamespace();
181 jsonEventConverter.toApexEvent(null, apexEventJsonStringIn);
182 }).hasMessageContaining("Failed to unmarshal JSON event: " + "field \"nameSpace\" with value \"hello.&&&&\" "
184 assertThatThrownBy(() -> {
185 String apexEventJsonStringIn = null;
186 apexEventJsonStringIn = SupportJsonEventGenerator.jsonEventNoExNamespace();
187 jsonEventConverter.toApexEvent(null, apexEventJsonStringIn);
188 }).hasMessageContaining("Failed to unmarshal JSON event: namespace \"pie.in.the.sky\" "
189 + "on event \"BasicEvent\" does not" + " match namespace \"org.onap.policy.apex.events\" "
190 + "for that event in the Apex model");
191 apexEventJsonStringIn1 = SupportJsonEventGenerator.jsonEventNoSource();
192 event = jsonEventConverter.toApexEvent(null, apexEventJsonStringIn1).get(0);
193 assertEquals("source", event.getSource());
195 assertThatThrownBy(() -> {
196 String apexEventJsonStringIn = null;
197 apexEventJsonStringIn = SupportJsonEventGenerator.jsonEventBadSource();
198 jsonEventConverter.toApexEvent(null, apexEventJsonStringIn);
199 }).hasMessageContaining("Failed to unmarshal JSON event: field \"source\" with value \"%!@**@!\" is invalid");
200 apexEventJsonStringIn1 = SupportJsonEventGenerator.jsonEventNoTarget();
201 event = jsonEventConverter.toApexEvent(null, apexEventJsonStringIn1).get(0);
202 assertEquals("target", event.getTarget());
204 assertThatThrownBy(() -> {
205 String apexEventJsonStringIn = null;
206 apexEventJsonStringIn = SupportJsonEventGenerator.jsonEventBadTarget();
207 jsonEventConverter.toApexEvent(null, apexEventJsonStringIn);
208 }).hasMessageContaining("Failed to unmarshal JSON event: field \"target\" with value \"KNIO(*S)A(S)D\" "
210 assertThatThrownBy(() -> {
211 String apexEventJsonStringIn = null;
212 apexEventJsonStringIn = SupportJsonEventGenerator.jsonEventMissingFields();
213 jsonEventConverter.toApexEvent(null, apexEventJsonStringIn);
214 }).hasMessageContaining("Failed to unmarshal JSON event: error parsing BasicEvent:0.0.1 "
215 + "event from Json. Field \"intPar\" is missing, but is mandatory.");
216 apexEventJsonStringIn1 = SupportJsonEventGenerator.jsonEventNullFields();
217 event = jsonEventConverter.toApexEvent(null, apexEventJsonStringIn1).get(0);
218 assertEquals(null, event.get("TestSlogan"));
219 assertEquals(-1, event.get("intPar"));
221 // Set the missing fields as optional in the model
222 final AxEvent eventDefinition = ModelService.getModel(AxEvents.class).get("BasicEvent");
223 eventDefinition.getParameterMap().get("intPar").setOptional(true);
225 apexEventJsonStringIn1 = SupportJsonEventGenerator.jsonEventMissingFields();
226 event = jsonEventConverter.toApexEvent(null, apexEventJsonStringIn1).get(0);
227 assertEquals(null, event.get("TestSlogan"));
228 assertEquals(null, event.get("intPar"));
232 * Test apex event to JSON.
234 * @throws ApexException the apex exception
237 public void testApexEventToJson() throws ApexException {
238 final Apex2JsonEventConverter jsonEventConverter = new Apex2JsonEventConverter();
239 jsonEventConverter.init(new JsonEventProtocolParameters());
240 assertNotNull(jsonEventConverter);
242 final Map<String, Object> basicEventMap = new HashMap<String, Object>();
243 basicEventMap.put("intPar", 12345);
245 final ApexEvent basicEvent =
246 new ApexEvent("BasicEvent", "0.0.1", "org.onap.policy.apex.events", "test", "apex");
247 basicEvent.putAll(basicEventMap);
249 final String apexEvent0000JsonString = (String) jsonEventConverter.fromApexEvent(basicEvent);
251 logger.debug(apexEvent0000JsonString);
253 assertTrue(apexEvent0000JsonString.contains("\"name\": \"BasicEvent\""));
254 assertTrue(apexEvent0000JsonString.contains("\"version\": \"0.0.1\""));
255 assertTrue(apexEvent0000JsonString.contains("\"nameSpace\": \"org.onap.policy.apex.events\""));
256 assertTrue(apexEvent0000JsonString.contains("\"source\": \"test\""));
257 assertTrue(apexEvent0000JsonString.contains("\"target\": \"apex\""));
258 assertTrue(apexEvent0000JsonString.contains("\"intPar\": 12345"));