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