APEX standalone support for ToscaPolicy format
[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  * Modifications Copyright (C) 2020 Bell Canada. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  * SPDX-License-Identifier: Apache-2.0
20  * ============LICENSE_END=========================================================
21  */
22
23 package org.onap.policy.apex.service.engine.parameters;
24
25 import static org.assertj.core.api.Assertions.assertThatThrownBy;
26 import static org.junit.Assert.assertEquals;
27 import static org.junit.Assert.assertFalse;
28 import static org.junit.Assert.assertTrue;
29
30 import java.nio.file.NoSuchFileException;
31 import java.util.Arrays;
32 import org.junit.Test;
33 import org.onap.policy.apex.service.engine.event.impl.filecarrierplugin.consumer.ApexFileEventConsumer;
34 import org.onap.policy.apex.service.engine.event.impl.filecarrierplugin.producer.ApexFileEventProducer;
35 import org.onap.policy.apex.service.engine.main.ApexCommandLineArguments;
36 import org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperDooperCarrierTechnologyParameters;
37 import org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperDooperEventProducer;
38 import org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperDooperEventSubscriber;
39 import org.onap.policy.apex.service.parameters.ApexParameterHandler;
40 import org.onap.policy.apex.service.parameters.ApexParameters;
41 import org.onap.policy.apex.service.parameters.carriertechnology.CarrierTechnologyParameters;
42 import org.onap.policy.apex.service.parameters.eventprotocol.EventProtocolParameters;
43 import org.onap.policy.common.parameters.ParameterException;
44
45 /**
46  * Test for an empty parameter file.
47  *
48  * @author Liam Fallon (liam.fallon@ericsson.com)
49  */
50 public class ParameterTests {
51     @Test
52     public void testInvalidParametersNoFileTest() throws ParameterException {
53         final String[] args = {"-p", "src/test/resources/parameters/invalidNoFile.json"};
54         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
55
56         assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments))
57             .hasRootCauseInstanceOf(NoSuchFileException.class);
58     }
59
60     @Test
61     public void testInvalidParametersEmptyTest() {
62         final String[] args = {"-p", "src/test/resources/parameters/empty.json"};
63         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
64
65         assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments))
66             .hasMessageStartingWith("error reading parameters from \"src/test/resources/parameters/empty.json");
67     }
68
69     @Test
70     public void testInvalidParametersNoParamsTest() {
71         final String[] args = {"-p", "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 = {"-p", "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                 + "    field \"policyModel\" type \"java.lang.String\" value \"null\" INVALID, must be specified\n"
101                 + "  parameter group map \"eventOutputParameters\" INVALID, "
102                 + "at least one event output must be specified\n"
103                 + "  parameter group map \"eventInputParameters\" INVALID, "
104                 + "at least one event input must be specified\n");
105     }
106
107     @Test
108     public void testInvalidParametersTest() {
109         final String[] args = {"-p", "src/test/resources/parameters/badParams.json"};
110         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
111
112         assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments))
113             .hasMessage("validation error(s) on parameters from \"src/test/resources/parameters/badParams.json\"\n"
114                 + "parameter group \"APEX_PARAMETERS\" type "
115                 + "\"org.onap.policy.apex.service.parameters.ApexParameters\" INVALID, "
116                 + "parameter group has status INVALID\n" + "  parameter group \"hello there\" type "
117                 + "\"org.onap.policy.apex.service.parameters.engineservice.EngineServiceParameters\" "
118                 + "INVALID, parameter group has status INVALID\n"
119                 + "    field \"name\" type \"java.lang.String\" value \"hello there\" INVALID, "
120                 + "name is invalid, it must match regular expression[A-Za-z0-9\\-_\\.]+\n"
121                 + "    field \"id\" type \"int\" value \"-45\" INVALID, id not specified or "
122                 + "specified value [-45] invalid, must be specified as id >= 0\n"
123                 + "    field \"instanceCount\" type \"int\" value \"-345\" INVALID, "
124                 + "instanceCount [-345] invalid, must be specified as instanceCount >= 1\n"
125                 + "    field \"deploymentPort\" type \"int\" value \"65536\" INVALID, "
126                 + "deploymentPort [65536] invalid, must be specified as 1024 <= port <= 65535\n"
127                 + "  parameter group map \"eventOutputParameters\" INVALID, "
128                 + "parameter group map has status INVALID\n" + "    parameter group \"FirstProducer\" type "
129                 + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID"
130                 + ", parameter group has status INVALID\n" + "      parameter group \"FILE\" type "
131                 + "\"org.onap.policy.apex.service.engine.event.impl."
132                 + "filecarrierplugin.FileCarrierTechnologyParameters\" INVALID, "
133                 + "parameter group has status INVALID\n"
134                 + "        field \"fileName\" type \"java.lang.String\" value \"null\" INVALID, "
135                 + "\"null\" invalid, must be specified as a non-empty string\n"
136                 + "  parameter group map \"eventInputParameters\" INVALID, "
137                 + "parameter group map has status INVALID\n" + "    parameter group \"TheFileConsumer1\" type "
138                 + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID"
139                 + ", parameter group has status INVALID\n" + "      parameter group \"FILE\" type "
140                 + "\"org.onap.policy.apex.service.engine.event.impl."
141                 + "filecarrierplugin.FileCarrierTechnologyParameters\" INVALID, "
142                 + "parameter group has status INVALID\n"
143                 + "        field \"fileName\" type \"java.lang.String\" value \"null\" INVALID, "
144                 + "\"null\" invalid, must be specified as a non-empty string\n");
145     }
146
147     @Test
148     public void testGoodParametersTest() throws ParameterException {
149         final String[] args = {"-p", "src/test/resources/parameters/goodParams.json"};
150         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
151
152         final ApexParameters parameters = new ApexParameterHandler().getParameters(arguments);
153
154         assertEquals(2, parameters.getEventInputParameters().size());
155         assertEquals(2, parameters.getEventOutputParameters().size());
156         assertTrue(parameters.getEventOutputParameters().containsKey("FirstProducer"));
157         assertTrue(parameters.getEventOutputParameters().containsKey("MyOtherProducer"));
158         assertEquals("FILE", parameters.getEventOutputParameters().get("FirstProducer")
159                 .getCarrierTechnologyParameters().getLabel());
160         assertEquals("FILE", parameters.getEventOutputParameters().get("MyOtherProducer")
161                 .getCarrierTechnologyParameters().getLabel());
162         assertEquals(ApexFileEventProducer.class.getName(), parameters.getEventOutputParameters()
163                 .get("MyOtherProducer").getCarrierTechnologyParameters().getEventProducerPluginClass());
164         assertEquals(ApexFileEventConsumer.class.getName(), parameters.getEventOutputParameters()
165                 .get("MyOtherProducer").getCarrierTechnologyParameters().getEventConsumerPluginClass());
166         assertEquals("JSON",
167                 parameters.getEventOutputParameters().get("FirstProducer").getEventProtocolParameters().getLabel());
168         assertEquals("JSON", parameters.getEventOutputParameters().get("MyOtherProducer")
169                 .getEventProtocolParameters().getLabel());
170
171         assertTrue(parameters.getEventInputParameters().containsKey("TheFileConsumer1"));
172         assertTrue(parameters.getEventInputParameters().containsKey("MySuperDooperConsumer1"));
173         assertEquals("FILE", parameters.getEventInputParameters().get("TheFileConsumer1")
174                 .getCarrierTechnologyParameters().getLabel());
175         assertEquals("SUPER_DOOPER", parameters.getEventInputParameters().get("MySuperDooperConsumer1")
176                 .getCarrierTechnologyParameters().getLabel());
177         assertEquals("JSON", parameters.getEventInputParameters().get("TheFileConsumer1")
178                 .getEventProtocolParameters().getLabel());
179         assertEquals("SUPER_TOK_DEL", parameters.getEventInputParameters().get("MySuperDooperConsumer1")
180                 .getEventProtocolParameters().getLabel());
181         assertEquals(ApexFileEventProducer.class.getName(), parameters.getEventInputParameters()
182                 .get("TheFileConsumer1").getCarrierTechnologyParameters().getEventProducerPluginClass());
183         assertEquals(ApexFileEventConsumer.class.getName(), parameters.getEventInputParameters()
184                 .get("TheFileConsumer1").getCarrierTechnologyParameters().getEventConsumerPluginClass());
185         assertEquals(SuperDooperEventProducer.class.getName(), parameters.getEventInputParameters()
186                 .get("MySuperDooperConsumer1").getCarrierTechnologyParameters().getEventProducerPluginClass());
187         assertEquals(SuperDooperEventSubscriber.class.getName(), parameters.getEventInputParameters()
188                 .get("MySuperDooperConsumer1").getCarrierTechnologyParameters().getEventConsumerPluginClass());
189     }
190
191     @Test
192     public void testSuperDooperParametersTest() throws ParameterException {
193         final String[] args = {"-p", "src/test/resources/parameters/superDooperParams.json"};
194         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
195
196         final ApexParameters parameters = new ApexParameterHandler().getParameters(arguments);
197
198         assertEquals("MyApexEngine", parameters.getEngineServiceParameters().getName());
199         assertEquals("0.0.1", parameters.getEngineServiceParameters().getVersion());
200         assertEquals(45, parameters.getEngineServiceParameters().getId());
201         assertEquals(345, parameters.getEngineServiceParameters().getInstanceCount());
202         assertEquals(65522, parameters.getEngineServiceParameters().getDeploymentPort());
203
204         final CarrierTechnologyParameters prodCarrierTech =
205                 parameters.getEventOutputParameters().get("FirstProducer").getCarrierTechnologyParameters();
206         final EventProtocolParameters prodEventProt =
207                 parameters.getEventOutputParameters().get("FirstProducer").getEventProtocolParameters();
208         final CarrierTechnologyParameters consCarrierTech =
209                 parameters.getEventInputParameters().get("MySuperDooperConsumer1").getCarrierTechnologyParameters();
210         final EventProtocolParameters consEventProt =
211                 parameters.getEventInputParameters().get("MySuperDooperConsumer1").getEventProtocolParameters();
212
213         assertEquals("SUPER_DOOPER", prodCarrierTech.getLabel());
214         assertEquals("SUPER_TOK_DEL", prodEventProt.getLabel());
215         assertEquals("SUPER_DOOPER", consCarrierTech.getLabel());
216         assertEquals("JSON", consEventProt.getLabel());
217
218         assertTrue(prodCarrierTech instanceof SuperDooperCarrierTechnologyParameters);
219
220         final SuperDooperCarrierTechnologyParameters superDooperParameters =
221                 (SuperDooperCarrierTechnologyParameters) prodCarrierTech;
222         assertEquals("somehost:12345", superDooperParameters.getBootstrapServers());
223         assertEquals("0", superDooperParameters.getAcks());
224         assertEquals(25, superDooperParameters.getRetries());
225         assertEquals(98765, superDooperParameters.getBatchSize());
226         assertEquals(21, superDooperParameters.getLingerTime());
227         assertEquals(50505050, superDooperParameters.getBufferMemory());
228         assertEquals("first-group-id", superDooperParameters.getGroupId());
229         assertFalse(superDooperParameters.isEnableAutoCommit());
230         assertEquals(441, superDooperParameters.getAutoCommitTime());
231         assertEquals(987, superDooperParameters.getSessionTimeout());
232         assertEquals("producer-out", superDooperParameters.getProducerTopic());
233         assertEquals(101, superDooperParameters.getConsumerPollTime());
234         assertEquals("some.key.serailizer", superDooperParameters.getKeySerializer());
235         assertEquals("some.value.serailizer", superDooperParameters.getValueSerializer());
236         assertEquals("some.key.deserailizer", superDooperParameters.getKeyDeserializer());
237         assertEquals("some.value.deserailizer", superDooperParameters.getValueDeserializer());
238
239         final String[] consumerTopics = {"consumer-out-0", "consumer-out-1", "consumer-out-2"};
240         assertEquals(Arrays.asList(consumerTopics), superDooperParameters.getConsumerTopicList());
241
242     }
243 }