62e27eac9dd00b71dc5c01f1ed6a9b059718bbfa
[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.service.engine.parameters;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertTrue;
25 import static org.junit.Assert.fail;
26
27 import java.util.Arrays;
28
29 import org.junit.Test;
30 import org.onap.policy.apex.service.engine.main.ApexCommandLineArguments;
31 import org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperDooperCarrierTechnologyParameters;
32 import org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperTokenDelimitedEventProtocolParameters;
33 import org.onap.policy.apex.service.parameters.ApexParameterException;
34 import org.onap.policy.apex.service.parameters.ApexParameterHandler;
35 import org.onap.policy.apex.service.parameters.ApexParameters;
36 import org.onap.policy.apex.service.parameters.carriertechnology.CarrierTechnologyParameters;
37 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMode;
38 import org.onap.policy.apex.service.parameters.eventprotocol.EventProtocolParameters;
39
40 /**
41  * Test for an empty parameter file
42  * 
43  * @author Liam Fallon (liam.fallon@ericsson.com)
44  */
45 public class SyncParameterTests {
46     @Test
47     public void syncBadNoSyncWithPeer() throws ApexParameterException {
48         final String[] args = {"-c", "src/test/resources/parameters/syncBadParamsNoSyncWithPeer.json"};
49         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
50
51         try {
52             new ApexParameterHandler().getParameters(arguments);
53             fail("This test should throw an exception");
54         } catch (final ApexParameterException e) {
55             assertEquals(
56                     "validation error(s) on parameters from \"src/test/resources/parameters/syncBadParamsNoSyncWithPeer.json\"\n"
57                             + "Apex parameters invalid\n"
58                             + " parameter \\\"synchronousPeer\\\" is illegal on non synchronous event output \"SyncProducer0\"",
59                     e.getMessage());
60         }
61     }
62
63     @Test
64     public void syncBadNotSyncWithPeer() throws ApexParameterException {
65         final String[] args = {"-c", "src/test/resources/parameters/syncBadParamsNotSyncWithPeer.json"};
66         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
67
68         try {
69             new ApexParameterHandler().getParameters(arguments);
70             fail("This test should throw an exception");
71         } catch (final ApexParameterException e) {
72             assertEquals(
73                     "validation error(s) on parameters from \"src/test/resources/parameters/syncBadParamsNotSyncWithPeer.json\"\n"
74                             + "Apex parameters invalid\n"
75                             + " parameter \\\"synchronousPeer\\\" is illegal on non synchronous event output \"SyncProducer0\"",
76                     e.getMessage());
77         }
78     }
79
80     @Test
81     public void syncBadSyncBadPeers() throws ApexParameterException {
82         final String[] args = {"-c", "src/test/resources/parameters/syncBadParamsBadPeers.json"};
83         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
84
85         try {
86             new ApexParameterHandler().getParameters(arguments);
87             fail("This test should throw an exception");
88         } catch (final ApexParameterException e) {
89             assertEquals(
90                     "validation error(s) on parameters from \"src/test/resources/parameters/syncBadParamsBadPeers.json\"\n"
91                             + "Apex parameters invalid\n"
92                             + " specified \"synchronousPeer\" parameter value \"SyncConsumer1\" on event input \"SyncConsumer0\" does not exist or is an invalid peer for this event handler\n"
93                             + " specified \"synchronousPeer\" parameter value \"SyncConsumer0\" on event input \"SyncConsumer1\" does not exist or is an invalid peer for this event handler\n"
94                             + " specified \"synchronousPeer\" parameter value \"SyncProducer1\" on event output \"SyncProducer0\" does not exist or is an invalid peer for this event handler\n"
95                             + " specified \"synchronousPeer\" parameter value \"SyncProducer0\" on event output \"SyncProducer1\" does not exist or is an invalid peer for this event handler",
96                     e.getMessage());
97         }
98     }
99
100     @Test
101     public void syncBadSyncInvalidTimeout() throws ApexParameterException {
102         final String[] args = {"-c", "src/test/resources/parameters/syncBadParamsInvalidTimeout.json"};
103         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
104
105         try {
106             new ApexParameterHandler().getParameters(arguments);
107             fail("This test should throw an exception");
108         } catch (final ApexParameterException e) {
109             assertEquals(
110                     "validation error(s) on parameters from \"src/test/resources/parameters/syncBadParamsInvalidTimeout.json\"\n"
111                             + "Apex parameters invalid\n"
112                             + " parameter \\\"synchronousTimeout\\\" value \"-1\" is illegal on synchronous event input \"SyncConsumer0\", specify a non-negative timeout value in milliseconds\n"
113                             + " parameter \\\"synchronousTimeout\\\" value \"-99999999\" is illegal on synchronous event input \"SyncConsumer1\", specify a non-negative timeout value in milliseconds\n"
114                             + " parameter \\\"synchronousTimeout\\\" value \"-10\" is illegal on synchronous event output \"SyncProducer0\", specify a non-negative timeout value in milliseconds\n"
115                             + " parameter \\\"synchronousTimeout\\\" value \"-3\" is illegal on synchronous event output \"SyncProducer1\", specify a non-negative timeout value in milliseconds\n"
116                             + " synchronous timeout of event input \"SyncConsumer0\" and event output \"SyncProducer0\" [-1/-10] do not match\n"
117                             + " synchronous timeout of event input \"SyncConsumer1\" and event output \"SyncProducer1\" [-99999999/-3] do not match",
118                     e.getMessage());
119         }
120     }
121
122     @Test
123     public void syncBadSyncBadTimeout() throws ApexParameterException {
124         final String[] args = {"-c", "src/test/resources/parameters/syncBadParamsBadTimeout.json"};
125         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
126
127         try {
128             new ApexParameterHandler().getParameters(arguments);
129             fail("This test should throw an exception");
130         } catch (final ApexParameterException e) {
131             assertEquals(
132                     "validation error(s) on parameters from \"src/test/resources/parameters/syncBadParamsBadTimeout.json\"\n"
133                             + "Apex parameters invalid\n"
134                             + " parameter \\\"synchronousTimeout\\\" is illegal on non synchronous event output \"MyOtherProducer\"",
135                     e.getMessage());
136         }
137     }
138
139     @Test
140     public void syncBadSyncUnpairedTimeout() throws ApexParameterException {
141         final String[] args = {"-c", "src/test/resources/parameters/syncBadParamsUnpairedTimeout.json"};
142         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
143
144         try {
145             new ApexParameterHandler().getParameters(arguments);
146             fail("This test should throw an exception");
147         } catch (final ApexParameterException e) {
148             assertEquals(
149                     "validation error(s) on parameters from \"src/test/resources/parameters/syncBadParamsUnpairedTimeout.json\"\n"
150                             + "Apex parameters invalid\n"
151                             + " synchronous timeout of event input \"SyncConsumer0\" and event output \"SyncProducer0\" [1/10] do not match\n"
152                             + " synchronous timeout of event input \"SyncConsumer1\" and event output \"SyncProducer1\" [99999999/3] do not match",
153                     e.getMessage());
154         }
155     }
156
157     @Test
158     public void syncGoodSyncGoodTimeoutProducer() throws ApexParameterException {
159         final String[] args = {"-c", "src/test/resources/parameters/syncGoodParamsProducerTimeout.json"};
160         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
161
162         try {
163             final ApexParameters parameters = new ApexParameterHandler().getParameters(arguments);
164             assertEquals(12345, parameters.getEventInputParameters().get("SyncConsumer0")
165                     .getPeerTimeout(EventHandlerPeeredMode.SYNCHRONOUS));
166             assertEquals(1, parameters.getEventInputParameters().get("SyncConsumer1")
167                     .getPeerTimeout(EventHandlerPeeredMode.SYNCHRONOUS));
168             assertEquals(12345, parameters.getEventOutputParameters().get("SyncProducer0")
169                     .getPeerTimeout(EventHandlerPeeredMode.SYNCHRONOUS));
170             assertEquals(1, parameters.getEventOutputParameters().get("SyncProducer1")
171                     .getPeerTimeout(EventHandlerPeeredMode.SYNCHRONOUS));
172         } catch (final Exception e) {
173             fail("This test should not throw an exception");
174         }
175     }
176
177     @Test
178     public void syncGoodSyncGoodTimeoutConsumer() throws ApexParameterException {
179         final String[] args = {"-c", "src/test/resources/parameters/syncGoodParamsConsumerTimeout.json"};
180         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
181
182         try {
183             final ApexParameters parameters = new ApexParameterHandler().getParameters(arguments);
184             assertEquals(12345, parameters.getEventInputParameters().get("SyncConsumer0")
185                     .getPeerTimeout(EventHandlerPeeredMode.SYNCHRONOUS));
186             assertEquals(1, parameters.getEventInputParameters().get("SyncConsumer1")
187                     .getPeerTimeout(EventHandlerPeeredMode.SYNCHRONOUS));
188             assertEquals(12345, parameters.getEventOutputParameters().get("SyncProducer0")
189                     .getPeerTimeout(EventHandlerPeeredMode.SYNCHRONOUS));
190             assertEquals(1, parameters.getEventOutputParameters().get("SyncProducer1")
191                     .getPeerTimeout(EventHandlerPeeredMode.SYNCHRONOUS));
192         } catch (final Exception e) {
193             fail("This test should not throw an exception");
194         }
195     }
196
197     @Test
198     public void syncGoodSyncGoodTimeoutBoth() throws ApexParameterException {
199         final String[] args = {"-c", "src/test/resources/parameters/syncGoodParamsBothTimeout.json"};
200         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
201
202         try {
203             final ApexParameters parameters = new ApexParameterHandler().getParameters(arguments);
204             assertEquals(12345, parameters.getEventInputParameters().get("SyncConsumer0")
205                     .getPeerTimeout(EventHandlerPeeredMode.SYNCHRONOUS));
206             assertEquals(1, parameters.getEventInputParameters().get("SyncConsumer1")
207                     .getPeerTimeout(EventHandlerPeeredMode.SYNCHRONOUS));
208             assertEquals(12345, parameters.getEventOutputParameters().get("SyncProducer0")
209                     .getPeerTimeout(EventHandlerPeeredMode.SYNCHRONOUS));
210             assertEquals(1, parameters.getEventOutputParameters().get("SyncProducer1")
211                     .getPeerTimeout(EventHandlerPeeredMode.SYNCHRONOUS));
212         } catch (final Exception e) {
213             fail("This test should not throw an exception");
214         }
215     }
216
217     @Test
218     public void syncUnusedConsumerPeers() throws ApexParameterException {
219         final String[] args = {"-c", "src/test/resources/parameters/syncUnusedConsumerPeers.json"};
220         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
221
222         try {
223             new ApexParameterHandler().getParameters(arguments);
224             fail("This test should throw an exception");
225         } catch (final ApexParameterException e) {
226             assertEquals(
227                     "validation error(s) on parameters from \"src/test/resources/parameters/syncUnusedConsumerPeers.json\"\n"
228                             + "Apex parameters invalid\n"
229                             + " value of parameter \"synchronousPeer\" on event output \"SyncProducer1\" must be unique, it s used on another event output\n"
230                             + ""
231                             + " synchronous peers of event input \"SyncConsumer1\" and event output \"SyncProducer1/SyncConsumer0\" do not match",
232                     e.getMessage());
233         }
234     }
235
236     @Test
237     public void syncMismatchedPeers() throws ApexParameterException {
238         final String[] args = {"-c", "src/test/resources/parameters/syncMismatchedPeers.json"};
239         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
240
241         try {
242             new ApexParameterHandler().getParameters(arguments);
243             fail("This test should throw an exception");
244         } catch (final ApexParameterException e) {
245             assertEquals(
246                     "validation error(s) on parameters from \"src/test/resources/parameters/syncMismatchedPeers.json\"\n"
247                             + "Apex parameters invalid\n"
248                             + " synchronous peers of event input \"SyncConsumer0\" and event output \"SyncProducer0/SyncConsumer1\" do not match\n"
249                             + " synchronous peers of event input \"SyncConsumer1\" and event output \"SyncProducer1/SyncConsumer0\" do not match",
250                     e.getMessage());
251         }
252     }
253
254     @Test
255     public void syncUnusedProducerPeers() throws ApexParameterException {
256         final String[] args = {"-c", "src/test/resources/parameters/syncUnusedProducerPeers.json"};
257         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
258
259         try {
260             new ApexParameterHandler().getParameters(arguments);
261             fail("This test should throw an exception");
262         } catch (final ApexParameterException e) {
263             assertEquals(
264                     "validation error(s) on parameters from \"src/test/resources/parameters/syncUnusedProducerPeers.json\"\n"
265                             + "Apex parameters invalid\n"
266                             + " value of parameter \"synchronousPeer\" on event input \"SyncConsumer1\" must be unique, it s used on another event input\n"
267                             + " synchronous peers of event input \"SyncConsumer0\" and event output \"SyncProducer1/SyncConsumer1\" do not match",
268                     e.getMessage());
269         }
270     }
271
272     @Test
273     public void syncMismatchedTimeout() throws ApexParameterException {
274         final String[] args = {"-c", "src/test/resources/parameters/syncUnusedProducerPeers.json"};
275         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
276
277         try {
278             new ApexParameterHandler().getParameters(arguments);
279             fail("This test should throw an exception");
280         } catch (final ApexParameterException e) {
281             assertEquals(
282                     "validation error(s) on parameters from \"src/test/resources/parameters/syncUnusedProducerPeers.json\"\n"
283                             + "Apex parameters invalid\n"
284                             + " value of parameter \"synchronousPeer\" on event input \"SyncConsumer1\" must be unique, it s used on another event input\n"
285                             + " synchronous peers of event input \"SyncConsumer0\" and event output \"SyncProducer1/SyncConsumer1\" do not match",
286                     e.getMessage());
287         }
288     }
289
290     @Test
291     public void syncGoodParametersTest() {
292         final String[] args = {"-c", "src/test/resources/parameters/SyncGoodParams.json"};
293         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
294
295         try {
296             final ApexParameters parameters = new ApexParameterHandler().getParameters(arguments);
297
298             assertEquals("MyApexEngine", parameters.getEngineServiceParameters().getName());
299             assertEquals("0.0.1", parameters.getEngineServiceParameters().getVersion());
300             assertEquals(45, parameters.getEngineServiceParameters().getId());
301             assertEquals(19, parameters.getEngineServiceParameters().getInstanceCount());
302             assertEquals(65522, parameters.getEngineServiceParameters().getDeploymentPort());
303
304             final CarrierTechnologyParameters prodCT0 =
305                     parameters.getEventOutputParameters().get("SyncProducer0").getCarrierTechnologyParameters();
306             final EventProtocolParameters prodEP0 =
307                     parameters.getEventOutputParameters().get("SyncProducer0").getEventProtocolParameters();
308             final CarrierTechnologyParameters consCT0 =
309                     parameters.getEventInputParameters().get("SyncConsumer0").getCarrierTechnologyParameters();
310             final EventProtocolParameters consEP0 =
311                     parameters.getEventInputParameters().get("SyncConsumer0").getEventProtocolParameters();
312             final CarrierTechnologyParameters prodCT1 =
313                     parameters.getEventOutputParameters().get("SyncProducer1").getCarrierTechnologyParameters();
314             final EventProtocolParameters prodEP1 =
315                     parameters.getEventOutputParameters().get("SyncProducer1").getEventProtocolParameters();
316             final CarrierTechnologyParameters consCT1 =
317                     parameters.getEventInputParameters().get("SyncConsumer1").getCarrierTechnologyParameters();
318             final EventProtocolParameters consEP1 =
319                     parameters.getEventInputParameters().get("SyncConsumer1").getEventProtocolParameters();
320
321             assertEquals("FILE", prodCT0.getLabel());
322             assertEquals("JSON", prodEP0.getLabel());
323             assertEquals("FILE", consCT0.getLabel());
324             assertEquals("JSON", consEP0.getLabel());
325             assertEquals("FILE", prodCT1.getLabel());
326             assertEquals("JSON", prodEP1.getLabel());
327             assertEquals("SUPER_DOOPER", consCT1.getLabel());
328             assertEquals("SUPER_TOK_DEL", consEP1.getLabel());
329
330             assertTrue(consCT1 instanceof SuperDooperCarrierTechnologyParameters);
331             assertTrue(consEP1 instanceof SuperTokenDelimitedEventProtocolParameters);
332
333             final SuperDooperCarrierTechnologyParameters superDooperParameters =
334                     (SuperDooperCarrierTechnologyParameters) consCT1;
335             assertEquals("localhost:9092", superDooperParameters.getBootstrapServers());
336             assertEquals("all", superDooperParameters.getAcks());
337             assertEquals(0, superDooperParameters.getRetries());
338             assertEquals(16384, superDooperParameters.getBatchSize());
339             assertEquals(1, superDooperParameters.getLingerTime());
340             assertEquals(33554432, superDooperParameters.getBufferMemory());
341             assertEquals("default-group-id", superDooperParameters.getGroupId());
342             assertTrue(superDooperParameters.isEnableAutoCommit());
343             assertEquals(1000, superDooperParameters.getAutoCommitTime());
344             assertEquals(30000, superDooperParameters.getSessionTimeout());
345             assertEquals("apex-out", superDooperParameters.getProducerTopic());
346             assertEquals(100, superDooperParameters.getConsumerPollTime());
347             assertEquals("org.apache.superDooper.common.serialization.StringSerializer",
348                     superDooperParameters.getKeySerializer());
349             assertEquals("org.apache.superDooper.common.serialization.StringSerializer",
350                     superDooperParameters.getValueSerializer());
351             assertEquals("org.apache.superDooper.common.serialization.StringDeserializer",
352                     superDooperParameters.getKeyDeserializer());
353             assertEquals("org.apache.superDooper.common.serialization.StringDeserializer",
354                     superDooperParameters.getValueDeserializer());
355
356             final String[] consumerTopics = {"apex-in"};
357             assertEquals(Arrays.asList(consumerTopics), superDooperParameters.getConsumerTopicList());
358         } catch (final ApexParameterException e) {
359             fail("This test should not throw an exception");
360         }
361     }
362 }