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