Changes for checkstyle 8.32
[policy/apex-pdp.git] / core / core-engine / src / test / java / org / onap / policy / apex / core / engine / event / EnEventTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 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
8  * 
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  * 
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.
16  * 
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.apex.core.engine.event;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertFalse;
25 import static org.junit.Assert.assertNull;
26 import static org.junit.Assert.assertTrue;
27 import static org.junit.Assert.fail;
28
29 import java.util.HashMap;
30 import java.util.LinkedHashMap;
31 import java.util.Map;
32 import org.junit.After;
33 import org.junit.Before;
34 import org.junit.Test;
35 import org.onap.policy.apex.context.ContextRuntimeException;
36 import org.onap.policy.apex.context.parameters.ContextParameterConstants;
37 import org.onap.policy.apex.context.parameters.SchemaParameters;
38 import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
39 import org.onap.policy.apex.model.basicmodel.concepts.AxConcept;
40 import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey;
41 import org.onap.policy.apex.model.basicmodel.service.ModelService;
42 import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchema;
43 import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas;
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.eventmodel.concepts.AxField;
47 import org.onap.policy.common.parameters.ParameterService;
48
49 /**
50  * Test the engine event class.
51  */
52 public class EnEventTest {
53     /**
54      * Set up the services.
55      */
56     @Before
57     public void setupServices() {
58         ModelService.registerModel(AxContextSchemas.class, new AxContextSchemas());
59         ModelService.registerModel(AxEvents.class, new AxEvents());
60         ParameterService.register(new SchemaParameters());
61     }
62
63     /**
64      * Tear down the services.
65      */
66     @After
67     public void teardownServices() {
68         ModelService.deregisterModel(AxContextSchema.class);
69         ModelService.deregisterModel(AxEvents.class);
70         ParameterService.deregister(ContextParameterConstants.SCHEMA_GROUP_NAME);
71     }
72
73     @Test
74     public void testEnEvent() {
75         AxArtifactKey eventKey = new AxArtifactKey("Event:0.0.1");
76         try {
77             new EnEvent(eventKey);
78             fail("test should throw an exception here");
79         } catch (EnException ee) {
80             assertEquals("event definition is null or was not found in model service", ee.getMessage());
81         }
82
83         try {
84             new EnEvent((AxEvent) null);
85             fail("test should throw an exception here");
86         } catch (EnException ee) {
87             assertEquals("event definition is null or was not found in model service", ee.getMessage());
88         }
89
90         AxEvent axEvent = new AxEvent(eventKey, "a.name.space", "some source", "some target");
91         ModelService.getModel(AxEvents.class).getEventMap().put(eventKey, axEvent);
92
93         EnEvent event = new EnEvent(eventKey);
94         assertEquals(eventKey, event.getKey());
95         assertEquals("Event:0.0.1", event.getId());
96         assertEquals("Event", event.getName());
97         assertEquals(axEvent, event.getAxEvent());
98         event.setExecutionId(123454321L);
99         assertEquals(123454321L, event.getExecutionId());
100         event.setExceptionMessage("Something happened");
101         assertEquals("Something happened", event.getExceptionMessage());
102         AxConcept[] usedArtifactStackArray =
103             { eventKey };
104         event.setUserArtifactStack(usedArtifactStackArray);
105         assertEquals(usedArtifactStackArray.length, event.getUserArtifactStack().length);
106         assertEquals("EnEvent [axEvent=AxEvent:(key=AxArtifactKey:(name=Event,version=0.0.1),nameSpace=a.name.space,"
107                         + "source=some source,target=some target,parameter={}), "
108                         + "userArtifactStack=[AxArtifactKey:(name=Event,version=0.0.1)], map={}]", event.toString());
109         try {
110             event.put(null, null);
111             fail("test should throw an exception here");
112         } catch (EnException ee) {
113             assertEquals("null keys are illegal on method parameter \"key\"", ee.getMessage());
114         }
115
116         try {
117             event.put("NonField", null);
118             fail("test should throw an exception here");
119         } catch (EnException ee) {
120             assertEquals("parameter with key \"NonField\" not defined on event \"Event\"", ee.getMessage());
121         }
122
123         AxReferenceKey fieldKey = new AxReferenceKey("Parent", "0.0.1", "MyParent", "MyField");
124         AxArtifactKey fieldSchemaKey = new AxArtifactKey("FieldSchema:0.0.1");
125         AxField axField = new AxField(fieldKey, fieldSchemaKey);
126
127         AxConcept[] usedArtifactStackArrayMultiple =
128             { eventKey, fieldKey, new DummyAxKey() };
129         event.setUserArtifactStack(usedArtifactStackArrayMultiple);
130
131         AxContextSchema schema = new AxContextSchema(fieldSchemaKey, "Java", "java.lang.Integer");
132         ModelService.getModel(AxContextSchemas.class).getSchemasMap().put(fieldSchemaKey, schema);
133
134         Map<String, AxField> parameterMap = new LinkedHashMap<>();
135         parameterMap.put("MyField", axField);
136         ModelService.getModel(AxEvents.class).get(eventKey).setParameterMap(parameterMap);
137
138         try {
139             event.put("MyField", null);
140         } catch (ContextRuntimeException cre) {
141             fail("test should throw an exception here");
142         }
143         assertNull(event.get("MyField"));
144
145         try {
146             event.put("MyField", "Hello");
147             fail("test should throw an exception here");
148         } catch (ContextRuntimeException cre) {
149             assertEquals("Parent:0.0.1:MyParent:MyField: object \"Hello\" of class \"java.lang.String\" "
150                             + "not compatible with class \"java.lang.Integer\"", cre.getMessage());
151         }
152
153         event.put("MyField", 123);
154         assertEquals(123, event.get("MyField"));
155
156         assertTrue(event.keySet().contains("MyField"));
157         assertTrue(event.values().contains(123));
158         assertEquals("MyField", event.entrySet().iterator().next().getKey());
159
160         event.putAll(event);
161
162         try {
163             event.get(null);
164             fail("test should throw an exception here");
165         } catch (EnException ee) {
166             assertEquals("null values are illegal on method parameter \"key\"", ee.getMessage());
167         }
168
169         try {
170             event.get("NonField");
171             fail("test should throw an exception here");
172         } catch (EnException ee) {
173             assertEquals("parameter with key NonField not defined on this event", ee.getMessage());
174         }
175
176         try {
177             event.remove(null);
178             fail("test should throw an exception here");
179         } catch (EnException ee) {
180             assertEquals("null keys are illegal on method parameter \"key\"", ee.getMessage());
181         }
182
183         try {
184             event.remove("NonField");
185             fail("test should throw an exception here");
186         } catch (EnException ee) {
187             assertEquals("parameter with key NonField not defined on this event", ee.getMessage());
188         }
189
190         event.remove("MyField");
191         assertNull(event.get("MyField"));
192
193         event.put("MyField", 123);
194         assertEquals(123, event.get("MyField"));
195         event.clear();
196         assertNull(event.get("MyField"));
197
198         assertTrue(event.hashCode() != 0);
199
200         assertTrue(event.equals(event));
201         assertFalse(event.equals(null));
202         Map<String, Object> hashMap = new HashMap<>();
203         assertFalse(event.equals(hashMap));
204
205         EnEvent otherEvent = new EnEvent(eventKey);
206         assertTrue(event.equals(otherEvent));
207     }
208 }