3e5cb87211f8f65e038f23c06f1b18ccedc40ad4
[policy/apex-pdp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2016-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.testsuites.integration.uservice.engdep;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25 import static org.junit.Assert.fail;
26
27 import java.io.IOException;
28 import java.net.URISyntaxException;
29 import java.util.Date;
30 import java.util.HashMap;
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.impl.schema.java.JavaSchemaHelperParameters;
37 import org.onap.policy.apex.context.parameters.ContextParameterConstants;
38 import org.onap.policy.apex.context.parameters.ContextParameters;
39 import org.onap.policy.apex.context.parameters.SchemaParameters;
40 import org.onap.policy.apex.core.deployment.BatchDeployer;
41 import org.onap.policy.apex.core.infrastructure.threading.ThreadUtilities;
42 import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
43 import org.onap.policy.apex.model.basicmodel.service.ModelService;
44 import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel;
45 import org.onap.policy.apex.plugins.executor.mvel.MvelExecutorParameters;
46 import org.onap.policy.apex.service.engine.event.ApexEvent;
47 import org.onap.policy.apex.service.parameters.engineservice.EngineServiceParameters;
48 import org.onap.policy.apex.testsuites.integration.common.model.SampleDomainModelFactory;
49 import org.onap.policy.common.parameters.ParameterService;
50 import org.slf4j.ext.XLogger;
51 import org.slf4j.ext.XLoggerFactory;
52
53 // CHECKSTYLE:OFF: checkstyle:magicNumber
54
55 /**
56  * The Class EngDepMessagingTest.
57  *
58  * @author Liam Fallon (liam.fallon@ericsson.com)
59  */
60 public class EngDepMessagingTest {
61     // Logger for this class
62     private static final XLogger LOGGER = XLoggerFactory.getXLogger(EngDepMessagingTest.class);
63
64     private static final long MAX_START_WAIT = 10000; // 10 sec
65
66     private SchemaParameters schemaParameters;
67     private ContextParameters contextParameters;
68     private EngineServiceParameters engineServiceParameters;
69
70     /**
71      * Before test.
72      */
73     @Before
74     public void beforeTest() {
75         schemaParameters = new SchemaParameters();
76
77         schemaParameters.setName(ContextParameterConstants.SCHEMA_GROUP_NAME);
78         schemaParameters.getSchemaHelperParameterMap().put("JAVA", new JavaSchemaHelperParameters());
79
80         ParameterService.register(schemaParameters, true);
81
82         contextParameters = new ContextParameters();
83
84         contextParameters.setName(ContextParameterConstants.MAIN_GROUP_NAME);
85         contextParameters.getDistributorParameters().setName(ContextParameterConstants.DISTRIBUTOR_GROUP_NAME);
86         contextParameters.getLockManagerParameters().setName(ContextParameterConstants.LOCKING_GROUP_NAME);
87         contextParameters.getPersistorParameters().setName(ContextParameterConstants.PERSISTENCE_GROUP_NAME);
88
89         ParameterService.register(contextParameters, true);
90         ParameterService.register(contextParameters.getDistributorParameters(), true);
91         ParameterService.register(contextParameters.getLockManagerParameters(), true);
92         ParameterService.register(contextParameters.getPersistorParameters(), true);
93
94         engineServiceParameters = new EngineServiceParameters();
95         engineServiceParameters.setName("EngDepMessagingTest");
96         engineServiceParameters.setVersion("0.0.1");
97         engineServiceParameters.setDeploymentPort(58820);
98         engineServiceParameters.setInstanceCount(3);
99         engineServiceParameters.setId(100);
100         engineServiceParameters.getEngineParameters().getExecutorParameterMap().put("MVEL",
101                         new MvelExecutorParameters());
102
103         ParameterService.register(engineServiceParameters, true);
104         ParameterService.register(engineServiceParameters.getEngineParameters(), true);
105     }
106
107     /**
108      * After test.
109      */
110     @After
111     public void afterTest() {
112         ParameterService.deregister(engineServiceParameters);
113         ParameterService.deregister(engineServiceParameters.getEngineParameters());
114
115         ParameterService.deregister(contextParameters.getDistributorParameters());
116         ParameterService.deregister(contextParameters.getLockManagerParameters());
117         ParameterService.deregister(contextParameters.getPersistorParameters());
118         ParameterService.deregister(contextParameters);
119
120         ParameterService.deregister(schemaParameters);
121     }
122
123     /**
124      * Test EngDep messaging.
125      *
126      * @throws URISyntaxException the URI syntax exception
127      * @throws IOException Signals that an I/O exception has occurred.
128      * @throws ApexException the apex exception
129      */
130     @Test
131     public void testEngDepMessaging() throws URISyntaxException, IOException, ApexException {
132         LOGGER.debug("engine<-->deployment messaging test starting . .  .");
133
134         ModelService.clear();
135
136         final EngineTestServer server = new EngineTestServer(engineServiceParameters);
137         assertNotNull(server);
138
139         final Thread serverThread = new Thread(server);
140         serverThread.start();
141         final long starttime = System.currentTimeMillis();
142         while (server.isStarting() && System.currentTimeMillis() - starttime < MAX_START_WAIT) {
143             ThreadUtilities.sleep(100);
144         }
145         if (server.isStarting()) {
146             fail("Test server failed to start after " + MAX_START_WAIT + " ms");
147         }
148
149         final AxPolicyModel apexPolicyModel = new SampleDomainModelFactory().getSamplePolicyModel("MVEL");
150
151         final BatchDeployer deployer1 = new BatchDeployer("localhost", 58820, System.out);
152         assertNotNull(deployer1);
153
154         deployer1.init();
155         deployer1.deployModel(apexPolicyModel, false, false);
156         deployer1.close();
157
158         // Send events
159         final Date testStartTime = new Date();
160         final Map<String, Object> eventDataMap = new HashMap<>();
161         eventDataMap.put("TestSlogan", "This is a test slogan");
162         eventDataMap.put("TestMatchCase", (byte) 123);
163         eventDataMap.put("TestTimestamp", testStartTime.getTime());
164         eventDataMap.put("TestTemperature", 34.5445667);
165
166         final ApexEvent event0 = new ApexEvent("Event0000", "0.0.1", "org.onap.policy.apex.domains.sample.events",
167                         "apex", "test");
168         event0.putAll(eventDataMap);
169         server.sendEvent(event0);
170
171         final ApexEvent event1 = new ApexEvent("Event0100", "0.0.1", "org.onap.policy.apex.domains.sample.events",
172                         "apex", "test");
173         event1.putAll(eventDataMap);
174         server.sendEvent(event1);
175
176         // Wait for results
177         while (server.getTotalActionEventsReceived() < 2) {
178             ThreadUtilities.sleep(100);
179         }
180         ThreadUtilities.sleep(500);
181
182         assertEquals(2, server.getTotalActionEventsReceived());
183
184         deployer1.init();
185         deployer1.close();
186
187         // Test re-initialization of model
188         final BatchDeployer deployer2 = new BatchDeployer("localhost", 58820, System.out);
189         assertNotNull(deployer2);
190
191         deployer2.init();
192         deployer2.deployModel(apexPolicyModel, true, true);
193         deployer2.close();
194
195         server.sendEvent(event0);
196         server.sendEvent(event1);
197
198         // Wait for results
199         while (server.getTotalActionEventsReceived() < 4) {
200             ThreadUtilities.sleep(100);
201         }
202         ThreadUtilities.sleep(500);
203
204         assertEquals(4, server.getTotalActionEventsReceived());
205
206         deployer2.init();
207         deployer2.close();
208
209         server.stopServer();
210         LOGGER.debug("engine<-->deployment messaging test finished");
211     }
212
213     /**
214      * Tear down.
215      *
216      * @throws Exception the exception
217      */
218     @After
219     public void tearDown() throws Exception {
220     }
221 }