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