dcafe68c1dc21d303f13bc2235c6993b5b193dad
[policy/distribution.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2018 Ericsson. All rights reserved.
4  *  Modifications Copyright (C) 2020-2021 Nordix Foundation.
5  *  Modifications Copyright (C) 2020 AT&T Intellectual Property. 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.distribution.main.parameters;
24
25 import static org.assertj.core.api.Assertions.assertThatThrownBy;
26 import static org.junit.Assert.assertEquals;
27 import static org.junit.Assert.assertTrue;
28
29 import java.io.IOException;
30 import java.nio.file.Files;
31 import java.nio.file.Paths;
32 import org.junit.Test;
33 import org.onap.policy.common.parameters.ParameterRuntimeException;
34 import org.onap.policy.common.utils.cmd.CommandLineException;
35 import org.onap.policy.distribution.main.PolicyDistributionException;
36 import org.onap.policy.distribution.main.startstop.DistributionCommandLineArguments;
37 import org.onap.policy.distribution.main.testclasses.DummyPolicyDecoderParameterGroup;
38 import org.onap.policy.distribution.main.testclasses.DummyPolicyForwarderParameterGroup;
39
40 /**
41  * Class to perform unit test of DistributionParameterHandler.
42  *
43  * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com)
44  */
45 public class TestDistributionParameterHandler {
46     @Test
47     public void testParameterHandlerNoParameterFile() throws PolicyDistributionException, CommandLineException {
48         verifyFailure("NoParameterFile.json", PolicyDistributionException.class, "FileNotFoundException");
49     }
50
51     @Test
52     public void testParameterHandlerEmptyParameters() throws PolicyDistributionException, CommandLineException {
53         verifyFailure("EmptyParameters.json", PolicyDistributionException.class,
54                 "no parameters found in \"parameters/EmptyParameters.json\"");
55     }
56
57     @Test
58     public void testParameterHandlerBadParameters() throws PolicyDistributionException, CommandLineException {
59         verifyFailure("BadParameters.json", PolicyDistributionException.class,
60                 "error reading parameters from \"parameters/BadParameters.json\"\n"
61                         + "(JsonSyntaxException):java.lang.IllegalStateException: "
62                         + "Expected a string but was BEGIN_ARRAY at line 2 column 15 path $.name");
63     }
64
65     @Test
66     public void testParameterHandlerInvalidParameters() throws PolicyDistributionException, CommandLineException {
67         verifyFailure("InvalidParameters.json", PolicyDistributionException.class,
68                 "error reading parameters from \"parameters/InvalidParameters.json\"\n"
69                         + "(JsonSyntaxException):java.lang.IllegalStateException: "
70                         + "Expected a string but was BEGIN_ARRAY at line 2 column 15 path $.name");
71     }
72
73     @Test
74     public void testParameterHandlerNoParameters() throws PolicyDistributionException, CommandLineException {
75         verifyFailure("NoParameters.json", ParameterRuntimeException.class,
76                 "map parameter \"receptionHandlerParameters\" is null");
77     }
78
79     @Test
80     public void testParameterHandlerMinumumParameters() throws PolicyDistributionException, CommandLineException {
81         final String[] minArgumentString = {"-c", "parameters/MinimumParameters.json"};
82
83         final DistributionCommandLineArguments minArguments = new DistributionCommandLineArguments();
84         minArguments.parse(minArgumentString);
85
86         final DistributionParameterGroup parGroup = new DistributionParameterHandler().getParameters(minArguments);
87         assertEquals(CommonTestData.DISTRIBUTION_GROUP_NAME, parGroup.getName());
88     }
89
90     @Test
91     public void testDistributionParameterGroup() throws PolicyDistributionException, CommandLineException {
92         final String[] distributionConfigParameters = {"-c", "parameters/DistributionConfigParameters.json"};
93
94         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
95         arguments.parse(distributionConfigParameters);
96
97         final DistributionParameterGroup parGroup = new DistributionParameterHandler().getParameters(arguments);
98         assertTrue(arguments.checkSetConfigurationFilePath());
99         assertEquals(CommonTestData.DISTRIBUTION_GROUP_NAME, parGroup.getName());
100         assertEquals(CommonTestData.RECEPTION_HANDLER_TYPE, parGroup.getReceptionHandlerParameters()
101                 .get(CommonTestData.DUMMY_RECEPTION_HANDLER_KEY).getReceptionHandlerType());
102         assertEquals(CommonTestData.DECODER_TYPE,
103                 parGroup.getReceptionHandlerParameters().get(CommonTestData.DUMMY_RECEPTION_HANDLER_KEY)
104                         .getPluginHandlerParameters().getPolicyDecoders().get(CommonTestData.DUMMY_DECODER_KEY)
105                         .getDecoderType());
106         assertEquals(CommonTestData.FORWARDER_TYPE,
107                 parGroup.getReceptionHandlerParameters().get(CommonTestData.DUMMY_RECEPTION_HANDLER_KEY)
108                         .getPluginHandlerParameters().getPolicyForwarders()
109                         .get(CommonTestData.DUMMY_ENGINE_FORWARDER_KEY).getForwarderType());
110         assertEquals(CommonTestData.FORWARDER_HOST,
111                 ((DummyPolicyForwarderParameterGroup) parGroup.getPolicyForwarderConfigurationParameters()
112                         .get(CommonTestData.FORWARDER_CONFIGURATION_PARAMETERS)).getHostname());
113         assertEquals(CommonTestData.POLICY_TYPE,
114                 ((DummyPolicyDecoderParameterGroup) parGroup.getPolicyDecoderConfigurationParameters()
115                         .get(CommonTestData.DECODER_CONFIGURATION_PARAMETERS)).getPolicyType());
116         assertEquals(CommonTestData.POLICY_NAME,
117                 ((DummyPolicyDecoderParameterGroup) parGroup.getPolicyDecoderConfigurationParameters()
118                         .get(CommonTestData.DECODER_CONFIGURATION_PARAMETERS)).getPolicyName());
119     }
120
121     @Test
122     public void testDistributionParameterGroup_InvalidForwarderConfigurationClassName()
123             throws PolicyDistributionException, CommandLineException {
124         verifyFailure("DistributionConfigParameters_InvalidForwarderConfigurationClassName.json",
125                 PolicyDistributionException.class, "parameter \"parameterClassName\" value \"\" invalid in JSON file");
126     }
127
128     @Test
129     public void testDistributionParameterGroup_UnknownForwarderConfigurationClassName()
130             throws PolicyDistributionException, CommandLineException {
131         verifyFailure("DistributionConfigParameters_UnknownForwarderConfigurationClassName.json",
132                 PolicyDistributionException.class,
133                 "parameter \"parameterClassName\" value \"org.onap.policy.Unknown\", could not find class");
134     }
135
136     @Test
137     public void testDistributionParameterGroup_InvalidName() throws PolicyDistributionException, CommandLineException {
138         verifyFailure("DistributionConfigParameters_InvalidName.json", PolicyDistributionException.class,
139                 "field \"name\" type \"java.lang.String\" value \" \" INVALID, must be a non-blank string");
140     }
141
142     @Test
143     public void testDistributionParameterGroup_NoReceptionHandler()
144             throws PolicyDistributionException, CommandLineException {
145         verifyFailure("DistributionConfigParameters_NoReceptionHandler.json", ParameterRuntimeException.class,
146                 "map parameter \"receptionHandlerParameters\" is null");
147     }
148
149     @Test
150     public void testDistributionParameterGroup_EmptyReceptionHandler()
151             throws PolicyDistributionException, CommandLineException {
152         verifyFailure("DistributionConfigParameters_EmptyReceptionHandler.json", PolicyDistributionException.class,
153                 "must have at least one reception handler\n");
154     }
155
156     @Test
157     public void testDistributionParameterGroup_NoPolicyDecoder()
158             throws PolicyDistributionException, CommandLineException {
159         verifyFailure("DistributionConfigParameters_NoPolicyDecoder.json", ParameterRuntimeException.class,
160                 "map parameter \"policyDecoders\" is null");
161     }
162
163     @Test
164     public void testDistributionParameterGroup_NoPolicyForwarder()
165             throws PolicyDistributionException, CommandLineException {
166         verifyFailure("DistributionConfigParameters_NoPolicyForwarder.json", ParameterRuntimeException.class,
167                 "map parameter \"policyForwarders\" is null");
168     }
169
170     @Test
171     public void testDistributionParameterGroup_EmptyPolicyDecoder()
172             throws PolicyDistributionException, CommandLineException {
173         verifyFailure("DistributionConfigParameters_EmptyPolicyDecoder.json", PolicyDistributionException.class,
174                 "must have at least one policy decoder\n");
175     }
176
177     @Test
178     public void testDistributionParameterGroup_EmptyPolicyForwarder()
179             throws PolicyDistributionException, CommandLineException {
180         verifyFailure("DistributionConfigParameters_EmptyPolicyForwarder.json", PolicyDistributionException.class,
181                 "must have at least one policy forwarder\n");
182     }
183
184     @Test
185     public void testDistributionParameterGroup_InvalidReceptionHandlerParameters()
186             throws PolicyDistributionException, IOException, CommandLineException {
187
188         String resultString = Files
189                 .readString(
190                         Paths.get("src/test/resources/expectedValidationResults/InvalidReceptionHandlerParameters.txt"))
191                 .trim().replaceAll("\\r\\n", "\\\n");
192
193         verifyFailure("DistributionConfigParameters_InvalidReceptionHandlerParameters.json",
194                 PolicyDistributionException.class, resultString);
195     }
196
197     @Test
198     public void testDistributionParameterGroup_InvalidDecoderAndForwarderParameters()
199             throws PolicyDistributionException, IOException, CommandLineException {
200
201         String resultString = new String(Files
202                 .readString(Paths
203                         .get("src/test/resources/expectedValidationResults/InvalidDecoderAndForwarderParameters.txt"))
204                 .trim().replaceAll("\\r\\n", "\\\n"));
205
206         verifyFailure("DistributionConfigParameters_InvalidDecoderAndForwarderParameters.json",
207                 PolicyDistributionException.class, resultString);
208     }
209
210     @Test
211     public void testDistributionParameterGroup_InvalidRestServerParameters()
212             throws PolicyDistributionException, IOException, CommandLineException {
213
214         String resultString = new String(Files
215                 .readString(Paths.get("src/test/resources/expectedValidationResults/InvalidRestServerParameters.txt"))
216                 .trim().replaceAll("\\r\\n", "\\\n"));
217
218         verifyFailure("DistributionConfigParameters_InvalidRestServerParameters.json",
219                 PolicyDistributionException.class, resultString);
220     }
221
222     @Test
223     public void testDistributionVersion() throws PolicyDistributionException, CommandLineException {
224         final String[] distributionConfigParameters = {"-v"};
225         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
226         final String version = arguments.parse(distributionConfigParameters);
227         assertTrue(version.startsWith("ONAP Policy Framework Distribution Service"));
228     }
229
230     @Test
231     public void testDistributionHelp() throws PolicyDistributionException, CommandLineException {
232         final String[] distributionConfigParameters = {"-h"};
233         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
234         final String help = arguments.parse(distributionConfigParameters);
235         assertTrue(help.startsWith("usage:"));
236     }
237
238     @Test
239     public void testDistributionInvalidOption() throws PolicyDistributionException {
240         final String[] distributionConfigParameters = {"-d"};
241         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
242         assertThatThrownBy(() -> arguments.parse(distributionConfigParameters))
243                 .hasMessageContaining("invalid command line arguments specified");
244     }
245
246     @Test
247     public void testDistributionParameterGroup_InvalidReceptionHandlerClass()
248             throws PolicyDistributionException, CommandLineException {
249         verifyFailure("DistributionConfigParameters_InvalidReceptionHandlerClass.json",
250                 PolicyDistributionException.class, "could not find class");
251     }
252
253     @Test
254     public void testDistributionParameterGroup_EmptyReceptionHandlerClass()
255             throws PolicyDistributionException, CommandLineException {
256         verifyFailure("DistributionConfigParameters_EmptyReceptionHandlerClass.json", PolicyDistributionException.class,
257                 "invalid in JSON file");
258     }
259
260     @Test
261     public void testDistributionParameterGroup_InvalidDecoderConfigurationClassName()
262             throws PolicyDistributionException, CommandLineException {
263         verifyFailure("DistributionConfigParameters_InvalidDecoderConfigurationClassName.json",
264                 PolicyDistributionException.class, "parameter \"parameterClassName\" value \"\" invalid in JSON file");
265     }
266
267     @Test
268     public void testDistributionParameterGroup_UnknownDecoderConfigurationClassName()
269             throws PolicyDistributionException, CommandLineException {
270         verifyFailure("DistributionConfigParameters_UnknownDecoderConfigurationClassName.json",
271                 PolicyDistributionException.class,
272                 "parameter \"parameterClassName\" value \"org.onap.policy.Unknown\", could not find class");
273     }
274
275     private <T> void verifyFailure(String fileName, Class<T> clazz, String expectedMessage)
276             throws PolicyDistributionException, CommandLineException {
277         final String[] distributionConfigParameters = {"-c", "parameters/" + fileName};
278
279         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
280         arguments.parse(distributionConfigParameters);
281
282         DistributionParameterHandler paramHandler = new DistributionParameterHandler();
283
284         assertThatThrownBy(() -> paramHandler.getParameters(arguments)).isInstanceOf(clazz)
285                 .hasMessageContaining(expectedMessage);
286     }
287 }