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