3da98163af6e54db12f132dc568c0a12c144828a
[policy/apex-pdp.git] / services / services-engine / src / test / java / org / onap / policy / apex / service / engine / parameters / ParameterTests.java
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.service.engine.parameters;
23
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertFalse;
26 import static org.junit.Assert.assertTrue;
27 import static org.junit.Assert.fail;
28
29 import java.util.Arrays;
30
31 import org.junit.Test;
32 import org.onap.policy.apex.service.engine.event.impl.filecarrierplugin.consumer.ApexFileEventConsumer;
33 import org.onap.policy.apex.service.engine.event.impl.filecarrierplugin.producer.ApexFileEventProducer;
34 import org.onap.policy.apex.service.engine.main.ApexCommandLineArguments;
35 import org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperDooperCarrierTechnologyParameters;
36 import org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperDooperEventProducer;
37 import org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperDooperEventSubscriber;
38 import org.onap.policy.apex.service.parameters.ApexParameterHandler;
39 import org.onap.policy.apex.service.parameters.ApexParameters;
40 import org.onap.policy.apex.service.parameters.carriertechnology.CarrierTechnologyParameters;
41 import org.onap.policy.apex.service.parameters.eventprotocol.EventProtocolParameters;
42 import org.onap.policy.common.parameters.ParameterException;
43
44 /**
45  * Test for an empty parameter file.
46  *
47  * @author Liam Fallon (liam.fallon@ericsson.com)
48  */
49 public class ParameterTests {
50     @Test
51     public void testInvalidParametersNoFileTest() throws ParameterException {
52         final String[] args = {"-c", "src/test/resources/parameters/invalidNoFile.json"};
53         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
54
55         try {
56             new ApexParameterHandler().getParameters(arguments);
57             fail("This test should throw an exception");
58         } catch (final ParameterException e) {
59             assertTrue(e.getMessage().startsWith("error reading parameters from \"src"));
60             assertTrue(e.getMessage().contains("FileNotFoundException"));
61         }
62     }
63
64     @Test
65     public void testInvalidParametersEmptyTest() {
66         final String[] args = {"-c", "src/test/resources/parameters/empty.json"};
67         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
68
69         try {
70             new ApexParameterHandler().getParameters(arguments);
71             fail("This test should throw an exception");
72         } catch (final ParameterException e) {
73             assertTrue(e.getMessage()
74                     .startsWith("validation error(s) on parameters from \"src/test/resources/parameters/empty.json\""));
75         }
76     }
77
78     @Test
79     public void testInvalidParametersNoParamsTest() {
80         final String[] args = {"-c", "src/test/resources/parameters/noParams.json"};
81         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
82
83         try {
84             new ApexParameterHandler().getParameters(arguments);
85             fail("This test should throw an exception");
86         } catch (final ParameterException e) {
87             assertEquals("validation error(s) on parameters from \"src/test/resources/parameters/noParams.json\"\n"
88                     + "parameter group \"APEX_PARAMETERS\" type "
89                     + "\"org.onap.policy.apex.service.parameters.ApexParameters\" INVALID, "
90                     + "parameter group has status INVALID\n" + "  parameter group \"UNDEFINED\" INVALID, "
91                     + "engine service parameters are not specified\n"
92                     + "  parameter group map \"eventOutputParameters\" INVALID, "
93                     + "at least one event output must be specified\n"
94                     + "  parameter group map \"eventInputParameters\" INVALID, "
95                     + "at least one event input must be specified\n", e.getMessage());
96         }
97     }
98
99     @Test
100     public void testInvalidParametersBlankParamsTest() {
101         final String[] args = {"-c", "src/test/resources/parameters/blankParams.json"};
102         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
103
104         try {
105             new ApexParameterHandler().getParameters(arguments);
106             fail("This test should throw an exception");
107         } catch (final ParameterException e) {
108
109             assertEquals("validation error(s) on parameters from \"src/test/resources/parameters/blankParams.json\"\n"
110                     + "parameter group \"APEX_PARAMETERS\" type "
111                     + "\"org.onap.policy.apex.service.parameters.ApexParameters\" INVALID, "
112                     + "parameter group has status INVALID\n" + "  parameter group \"ENGINE_SERVICE_PARAMETERS\" type "
113                     + "\"org.onap.policy.apex.service.parameters.engineservice.EngineServiceParameters\" "
114                     + "INVALID, parameter group has status INVALID\n"
115                     + "    field \"id\" type \"int\" value \"-1\" INVALID, "
116                     + "id not specified or specified value [-1] invalid, must be specified as id >= 0\n"
117                     + "  parameter group map \"eventOutputParameters\" INVALID, "
118                     + "at least one event output must be specified\n"
119                     + "  parameter group map \"eventInputParameters\" INVALID, "
120                     + "at least one event input must be specified\n", e.getMessage());
121         }
122     }
123
124     @Test
125     public void testInvalidParametersTest() {
126         final String[] args = {"-c", "src/test/resources/parameters/badParams.json"};
127         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
128
129         try {
130             new ApexParameterHandler().getParameters(arguments);
131             fail("This test should throw an exception");
132         } catch (final ParameterException e) {
133             assertEquals("validation error(s) on parameters from \"src/test/resources/parameters/badParams.json\"\n"
134                     + "parameter group \"APEX_PARAMETERS\" type "
135                     + "\"org.onap.policy.apex.service.parameters.ApexParameters\" INVALID, "
136                     + "parameter group has status INVALID\n" + "  parameter group \"hello there\" type "
137                     + "\"org.onap.policy.apex.service.parameters.engineservice.EngineServiceParameters\" "
138                     + "INVALID, parameter group has status INVALID\n"
139                     + "    field \"name\" type \"java.lang.String\" value \"hello there\" INVALID, "
140                     + "name is invalid, it must match regular expression[A-Za-z0-9\\-_\\.]+\n"
141                     + "    field \"id\" type \"int\" value \"-45\" INVALID, id not specified or "
142                     + "specified value [-45] invalid, must be specified as id >= 0\n"
143                     + "    field \"instanceCount\" type \"int\" value \"-345\" INVALID, "
144                     + "instanceCount [-345] invalid, must be specified as instanceCount >= 1\n"
145                     + "    field \"deploymentPort\" type \"int\" value \"65536\" INVALID, "
146                     + "deploymentPort [65536] invalid, must be specified as 1024 <= port <= 65535\n"
147                     + "    field \"policyModelFileName\" type \"java.lang.String\" "
148                     + "value \"/some/file/name.xml\" INVALID, not found\n"
149                     + "  parameter group map \"eventOutputParameters\" INVALID, "
150                     + "parameter group map has status INVALID\n" + "    parameter group \"FirstProducer\" type "
151                     + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID"
152                     + ", parameter group has status INVALID\n" + "      parameter group \"FILE\" type "
153                     + "\"org.onap.policy.apex.service.engine.event.impl."
154                     + "filecarrierplugin.FileCarrierTechnologyParameters\" INVALID, "
155                     + "parameter group has status INVALID\n"
156                     + "        field \"fileName\" type \"java.lang.String\" value \"null\" INVALID, "
157                     + "\"null\" invalid, must be specified as a non-empty string\n"
158                     + "  parameter group map \"eventInputParameters\" INVALID, "
159                     + "parameter group map has status INVALID\n" + "    parameter group \"TheFileConsumer1\" type "
160                     + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID"
161                     + ", parameter group has status INVALID\n" + "      parameter group \"FILE\" type "
162                     + "\"org.onap.policy.apex.service.engine.event.impl."
163                     + "filecarrierplugin.FileCarrierTechnologyParameters\" INVALID, "
164                     + "parameter group has status INVALID\n"
165                     + "        field \"fileName\" type \"java.lang.String\" value \"null\" INVALID, "
166                     + "\"null\" invalid, must be specified as a non-empty string\n", e.getMessage());
167         }
168     }
169
170     @Test
171     public void testModelNotFileTest() {
172         final String[] args = {"-c", "src/test/resources/parameters/badParamsModelNotFile.json"};
173         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
174
175         try {
176             new ApexParameterHandler().getParameters(arguments);
177             fail("This test should throw an exception");
178         } catch (final ParameterException e) {
179             assertEquals(
180                     "validation error(s) on parameters from "
181                             + "\"src/test/resources/parameters/badParamsModelNotFile.json\"\n"
182                             + "parameter group \"APEX_PARAMETERS\" type "
183                             + "\"org.onap.policy.apex.service.parameters.ApexParameters\" INVALID, "
184                             + "parameter group has status INVALID\n" + "  parameter group \"MyApexEngine\" type "
185                             + "\"org.onap.policy.apex.service.parameters.engineservice.EngineServiceParameters\" "
186                             + "INVALID, parameter group has status INVALID\n" + "    field \"policyModelFileName\" "
187                             + "type \"java.lang.String\" value \"src/test\" INVALID, is not a plain file\n",
188                     e.getMessage());
189         }
190     }
191
192     @Test
193     public void testGoodParametersTest() {
194         final String[] args = {"-c", "src/test/resources/parameters/goodParams.json"};
195         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
196
197         try {
198             final ApexParameters parameters = new ApexParameterHandler().getParameters(arguments);
199
200             assertEquals(2, parameters.getEventInputParameters().size());
201             assertEquals(2, parameters.getEventOutputParameters().size());
202
203             assertTrue(parameters.getEventOutputParameters().containsKey("FirstProducer"));
204             assertTrue(parameters.getEventOutputParameters().containsKey("MyOtherProducer"));
205             assertEquals("FILE", parameters.getEventOutputParameters().get("FirstProducer")
206                     .getCarrierTechnologyParameters().getLabel());
207             assertEquals("FILE", parameters.getEventOutputParameters().get("MyOtherProducer")
208                     .getCarrierTechnologyParameters().getLabel());
209             assertEquals(ApexFileEventProducer.class.getName(), parameters.getEventOutputParameters()
210                     .get("MyOtherProducer").getCarrierTechnologyParameters().getEventProducerPluginClass());
211             assertEquals(ApexFileEventConsumer.class.getName(), parameters.getEventOutputParameters()
212                     .get("MyOtherProducer").getCarrierTechnologyParameters().getEventConsumerPluginClass());
213             assertEquals("JSON",
214                     parameters.getEventOutputParameters().get("FirstProducer").getEventProtocolParameters().getLabel());
215             assertEquals("JSON", parameters.getEventOutputParameters().get("MyOtherProducer")
216                     .getEventProtocolParameters().getLabel());
217
218             assertTrue(parameters.getEventInputParameters().containsKey("TheFileConsumer1"));
219             assertTrue(parameters.getEventInputParameters().containsKey("MySuperDooperConsumer1"));
220             assertEquals("FILE", parameters.getEventInputParameters().get("TheFileConsumer1")
221                     .getCarrierTechnologyParameters().getLabel());
222             assertEquals("SUPER_DOOPER", parameters.getEventInputParameters().get("MySuperDooperConsumer1")
223                     .getCarrierTechnologyParameters().getLabel());
224             assertEquals("JSON", parameters.getEventInputParameters().get("TheFileConsumer1")
225                     .getEventProtocolParameters().getLabel());
226             assertEquals("SUPER_TOK_DEL", parameters.getEventInputParameters().get("MySuperDooperConsumer1")
227                     .getEventProtocolParameters().getLabel());
228             assertEquals(ApexFileEventProducer.class.getName(), parameters.getEventInputParameters()
229                     .get("TheFileConsumer1").getCarrierTechnologyParameters().getEventProducerPluginClass());
230             assertEquals(ApexFileEventConsumer.class.getName(), parameters.getEventInputParameters()
231                     .get("TheFileConsumer1").getCarrierTechnologyParameters().getEventConsumerPluginClass());
232             assertEquals(SuperDooperEventProducer.class.getName(), parameters.getEventInputParameters()
233                     .get("MySuperDooperConsumer1").getCarrierTechnologyParameters().getEventProducerPluginClass());
234             assertEquals(SuperDooperEventSubscriber.class.getName(), parameters.getEventInputParameters()
235                     .get("MySuperDooperConsumer1").getCarrierTechnologyParameters().getEventConsumerPluginClass());
236         } catch (final ParameterException e) {
237             fail("This test should not throw an exception");
238         }
239     }
240
241     @Test
242     public void testSuperDooperParametersTest() {
243         final String[] args = {"-c", "src/test/resources/parameters/superDooperParams.json"};
244         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
245
246         try {
247             final ApexParameters parameters = new ApexParameterHandler().getParameters(arguments);
248
249             assertEquals("MyApexEngine", parameters.getEngineServiceParameters().getName());
250             assertEquals("0.0.1", parameters.getEngineServiceParameters().getVersion());
251             assertEquals(45, parameters.getEngineServiceParameters().getId());
252             assertEquals(345, parameters.getEngineServiceParameters().getInstanceCount());
253             assertEquals(65522, parameters.getEngineServiceParameters().getDeploymentPort());
254
255             final CarrierTechnologyParameters prodCarrierTech =
256                     parameters.getEventOutputParameters().get("FirstProducer").getCarrierTechnologyParameters();
257             final EventProtocolParameters prodEventProt =
258                     parameters.getEventOutputParameters().get("FirstProducer").getEventProtocolParameters();
259             final CarrierTechnologyParameters consCarrierTech =
260                     parameters.getEventInputParameters().get("MySuperDooperConsumer1").getCarrierTechnologyParameters();
261             final EventProtocolParameters consEventProt =
262                     parameters.getEventInputParameters().get("MySuperDooperConsumer1").getEventProtocolParameters();
263
264             assertEquals("SUPER_DOOPER", prodCarrierTech.getLabel());
265             assertEquals("SUPER_TOK_DEL", prodEventProt.getLabel());
266             assertEquals("SUPER_DOOPER", consCarrierTech.getLabel());
267             assertEquals("JSON", consEventProt.getLabel());
268
269             assertTrue(prodCarrierTech instanceof SuperDooperCarrierTechnologyParameters);
270
271             final SuperDooperCarrierTechnologyParameters superDooperParameters =
272                     (SuperDooperCarrierTechnologyParameters) prodCarrierTech;
273             assertEquals("somehost:12345", superDooperParameters.getBootstrapServers());
274             assertEquals("0", superDooperParameters.getAcks());
275             assertEquals(25, superDooperParameters.getRetries());
276             assertEquals(98765, superDooperParameters.getBatchSize());
277             assertEquals(21, superDooperParameters.getLingerTime());
278             assertEquals(50505050, superDooperParameters.getBufferMemory());
279             assertEquals("first-group-id", superDooperParameters.getGroupId());
280             assertFalse(superDooperParameters.isEnableAutoCommit());
281             assertEquals(441, superDooperParameters.getAutoCommitTime());
282             assertEquals(987, superDooperParameters.getSessionTimeout());
283             assertEquals("producer-out", superDooperParameters.getProducerTopic());
284             assertEquals(101, superDooperParameters.getConsumerPollTime());
285             assertEquals("some.key.serailizer", superDooperParameters.getKeySerializer());
286             assertEquals("some.value.serailizer", superDooperParameters.getValueSerializer());
287             assertEquals("some.key.deserailizer", superDooperParameters.getKeyDeserializer());
288             assertEquals("some.value.deserailizer", superDooperParameters.getValueDeserializer());
289
290             final String[] consumerTopics = {"consumer-out-0", "consumer-out-1", "consumer-out-2"};
291             assertEquals(Arrays.asList(consumerTopics), superDooperParameters.getConsumerTopicList());
292         } catch (final ParameterException e) {
293             fail("This test should not throw an exception");
294         }
295     }
296 }