bf883d761d432e98068f3fa085036da3f20acd8a
[policy/apex-pdp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
4  *  Modifications Copyright (C) 2019-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.testsuites.integration.executor.event;
23
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;
29
30 import java.io.IOException;
31 import java.util.Date;
32 import java.util.HashMap;
33 import java.util.Map;
34 import org.junit.After;
35 import org.junit.Before;
36 import org.junit.Test;
37 import org.onap.policy.apex.context.impl.schema.java.JavaSchemaHelperParameters;
38 import org.onap.policy.apex.context.parameters.ContextParameterConstants;
39 import org.onap.policy.apex.context.parameters.ContextParameters;
40 import org.onap.policy.apex.context.parameters.SchemaParameters;
41 import org.onap.policy.apex.core.engine.EngineParameters;
42 import org.onap.policy.apex.core.engine.engine.ApexEngine;
43 import org.onap.policy.apex.core.engine.engine.impl.ApexEngineFactory;
44 import org.onap.policy.apex.core.engine.event.EnEvent;
45 import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
46 import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
47 import org.onap.policy.apex.model.basicmodel.handling.ApexModelException;
48 import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
49 import org.onap.policy.apex.plugins.executor.mvel.MvelExecutorParameters;
50 import org.onap.policy.apex.testsuites.integration.common.model.SampleDomainModelFactory;
51 import org.onap.policy.common.parameters.ParameterService;
52 import org.slf4j.ext.XLogger;
53 import org.slf4j.ext.XLoggerFactory;
54
55 /**
56  * The Class TestEventInstantiation.
57  *
58  * @author Liam Fallon (liam.fallon@ericsson.com)
59  */
60 public class TestEventInstantiation {
61     // Logger for this class
62     private static final XLogger logger = XLoggerFactory.getXLogger(TestEventInstantiation.class);
63
64     private SchemaParameters schemaParameters;
65     private ContextParameters contextParameters;
66     private EngineParameters engineParameters;
67
68     /**
69      * Before test.
70      */
71     @Before
72     public void beforeTest() {
73         schemaParameters = new SchemaParameters();
74
75         schemaParameters.setName(ContextParameterConstants.SCHEMA_GROUP_NAME);
76         schemaParameters.getSchemaHelperParameterMap().put("JAVA", new JavaSchemaHelperParameters());
77
78         ParameterService.register(schemaParameters);
79
80         contextParameters = new ContextParameters();
81
82         contextParameters.setName(ContextParameterConstants.MAIN_GROUP_NAME);
83         contextParameters.getDistributorParameters().setName(ContextParameterConstants.DISTRIBUTOR_GROUP_NAME);
84         contextParameters.getLockManagerParameters().setName(ContextParameterConstants.LOCKING_GROUP_NAME);
85         contextParameters.getPersistorParameters().setName(ContextParameterConstants.PERSISTENCE_GROUP_NAME);
86
87         ParameterService.register(contextParameters);
88         ParameterService.register(contextParameters.getDistributorParameters());
89         ParameterService.register(contextParameters.getLockManagerParameters());
90         ParameterService.register(contextParameters.getPersistorParameters());
91
92         engineParameters = new EngineParameters();
93         engineParameters.getExecutorParameterMap().put("MVEL", new MvelExecutorParameters());
94         ParameterService.register(engineParameters);
95     }
96
97     /**
98      * After test.
99      */
100     @After
101     public void afterTest() {
102         ParameterService.deregister(engineParameters);
103
104         ParameterService.deregister(contextParameters.getDistributorParameters());
105         ParameterService.deregister(contextParameters.getLockManagerParameters());
106         ParameterService.deregister(contextParameters.getPersistorParameters());
107         ParameterService.deregister(contextParameters);
108
109         ParameterService.deregister(schemaParameters);
110     }
111
112     /**
113      * Test event instantiation.
114      *
115      * @throws ApexModelException on errors in handling Apex models
116      * @throws IOException Signals that an I/O exception has occurred.
117      * @throws ApexException the apex exception
118      */
119     @Test
120     public void testEventInstantiation() throws ApexModelException, IOException, ApexException {
121         final String xmlFileName = "xml/ApexModel_MVEL.xml";
122
123         logger.debug("Running TestEventInstantiation test  on file {} . . .", xmlFileName);
124
125         final AxPolicyModel apexPolicyModel = new SampleDomainModelFactory().getSamplePolicyModel("MVEL");
126         assertNotNull(apexPolicyModel);
127
128         final ApexEngine apexEngine = new ApexEngineFactory().createApexEngine(apexPolicyModel.getKey());
129         apexEngine.updateModel(apexPolicyModel, false);
130         apexEngine.start();
131
132         final EnEvent event = apexEngine.createEvent(new AxArtifactKey("Event0000", "0.0.1"));
133
134         Object slogan1 = event.put("TestSlogan", "This is a slogan");
135         assertNull(slogan1);
136         slogan1 = event.get("TestSlogan");
137         assertNotNull(slogan1);
138         assertEquals("This is a slogan", slogan1);
139
140         Object mc1 = event.put("TestMatchCase", Byte.valueOf("4"));
141         assertNull(mc1);
142         mc1 = event.get("TestMatchCase");
143         assertNotNull(mc1);
144         assertEquals((byte) 4, mc1);
145
146         Object mc2 = event.put("TestMatchCase", Byte.valueOf("16"));
147         assertNotNull(mc2);
148         assertEquals((byte) 4, mc2);
149         mc2 = event.get("TestMatchCase");
150         assertNotNull(mc2);
151         assertEquals((byte) 16, mc2);
152
153         final Date timeNow = new Date();
154         Object timestamp1 = event.put("TestTimestamp", timeNow.getTime());
155         assertNull(timestamp1);
156         timestamp1 = event.get("TestTimestamp");
157         assertNotNull(timestamp1);
158         assertEquals(timeNow.getTime(), timestamp1);
159
160         final double temperature = 123.456789;
161         Object temp1 = event.put("TestTemperature", temperature);
162         assertNull(temp1);
163         temp1 = event.get("TestTemperature");
164         assertNotNull(temp1);
165         assertEquals(temperature, temp1);
166
167         Object value = event.put("TestMatchCase", null);
168         assertEquals(16, ((Byte) value).intValue());
169         value = event.get("TestMatchCase");
170         assertNull(value);
171
172         assertThatThrownBy(() -> event.put("TestMatchCase", "Hello"))
173             .hasMessage("Event0000:0.0.1:NULL:TestMatchCase: object \"Hello\" of class \"java.lang.String\" "
174                     + "not compatible with class \"java.lang.Byte\"");
175         event.put("TestMatchCase", 123.45);
176
177         event.put("TestMatchCase", Byte.valueOf("16"));
178
179         final String slogan2 = (String) event.get("TestSlogan");
180         assertNotNull(slogan2);
181         assertEquals("This is a slogan", slogan2);
182
183         final byte mc21 = (byte) event.get("TestMatchCase");
184         assertNotNull(mc21);
185         assertEquals(16, mc21);
186
187         final byte mc22 = (byte) event.get("TestMatchCase");
188         assertNotNull(mc22);
189         assertEquals((byte) 16, mc22);
190
191         final long timestamp2 = (Long) event.get("TestTimestamp");
192         assertNotNull(timestamp2);
193         assertEquals(timestamp2, timestamp1);
194
195         final double temp2 = (double) event.get("TestTemperature");
196         assertNotNull(temp2);
197         assertTrue(temp2 == 123.456789);
198
199         final Double temp3 = (Double) event.get("TestTemperature");
200         assertNotNull(temp3);
201         assertTrue(temp3 == 123.456789);
202
203         final Date aDate = new Date(1433453067123L);
204         final Map<String, Object> eventDataList = new HashMap<String, Object>();
205         eventDataList.put("TestSlogan", "This is a test slogan");
206         eventDataList.put("TestMatchCase", Byte.valueOf("123"));
207         eventDataList.put("TestTimestamp", aDate.getTime());
208         eventDataList.put("TestTemperature", 34.5445667);
209
210         event.putAll(eventDataList);
211
212         final String slogan3 = (String) event.get("TestSlogan");
213         assertNotNull(slogan3);
214         assertEquals("This is a test slogan", slogan3);
215
216         final byte mc31 = (byte) event.get("TestMatchCase");
217         assertNotNull(mc31);
218         assertEquals((byte) 123, mc31);
219
220         final long timestamp3 = (Long) event.get("TestTimestamp");
221         assertNotNull(timestamp3);
222         assertEquals(timestamp3, aDate.getTime());
223
224         final double temp4 = (double) event.get("TestTemperature");
225         assertNotNull(temp4);
226         assertTrue(temp4 == 34.5445667);
227
228         logger.debug(event.toString());
229     }
230 }