2  * ============LICENSE_START=======================================================
 
   3  *  Copyright (C) 2018 Ericsson. All rights reserved.
 
   4  *  Modifications Copyright (C) 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
 
  10  *      http://www.apache.org/licenses/LICENSE-2.0
 
  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.
 
  18  * SPDX-License-Identifier: Apache-2.0
 
  19  * ============LICENSE_END=========================================================
 
  22 package org.onap.policy.distribution.main.parameters;
 
  24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
  25 import static org.junit.Assert.assertEquals;
 
  26 import static org.junit.Assert.assertTrue;
 
  28 import java.io.IOException;
 
  29 import java.nio.file.Files;
 
  30 import java.nio.file.Paths;
 
  31 import org.junit.Test;
 
  32 import org.onap.policy.common.parameters.ParameterRuntimeException;
 
  33 import org.onap.policy.distribution.main.PolicyDistributionException;
 
  34 import org.onap.policy.distribution.main.startstop.DistributionCommandLineArguments;
 
  35 import org.onap.policy.distribution.main.testclasses.DummyPolicyDecoderParameterGroup;
 
  36 import org.onap.policy.distribution.main.testclasses.DummyPolicyForwarderParameterGroup;
 
  39  * Class to perform unit test of DistributionParameterHandler.
 
  41  * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com)
 
  43 public class TestDistributionParameterHandler {
 
  45     public void testParameterHandlerNoParameterFile() throws PolicyDistributionException {
 
  46         final String[] noArgumentString =
 
  47             { "-c", "parameters/NoParameterFile.json" };
 
  49         final DistributionCommandLineArguments noArguments = new DistributionCommandLineArguments();
 
  50         noArguments.parse(noArgumentString);
 
  51         assertThatThrownBy(() ->
 
  52             new DistributionParameterHandler().getParameters(noArguments)
 
  53         ).isInstanceOf(PolicyDistributionException.class).hasMessageContaining("FileNotFoundException");
 
  57     public void testParameterHandlerEmptyParameters() throws PolicyDistributionException {
 
  58         final String[] emptyArgumentString =
 
  59             { "-c", "parameters/EmptyParameters.json" };
 
  61         final DistributionCommandLineArguments emptyArguments = new DistributionCommandLineArguments();
 
  62         emptyArguments.parse(emptyArgumentString);
 
  64         assertThatThrownBy(() ->
 
  65             new DistributionParameterHandler().getParameters(emptyArguments)
 
  66         ).isInstanceOf(PolicyDistributionException.class)
 
  67         .hasMessageContaining("no parameters found in \"parameters/EmptyParameters.json\"");
 
  71     public void testParameterHandlerBadParameters() throws PolicyDistributionException {
 
  72         final String[] badArgumentString =
 
  73             { "-c", "parameters/BadParameters.json" };
 
  75         final DistributionCommandLineArguments badArguments = new DistributionCommandLineArguments();
 
  76         badArguments.parse(badArgumentString);
 
  78         assertThatThrownBy(() ->
 
  79             new DistributionParameterHandler().getParameters(badArguments)
 
  80         ).isInstanceOf(PolicyDistributionException.class)
 
  81             .hasMessageContaining("error reading parameters from \"parameters/BadParameters.json\"\n"
 
  82                 + "(JsonSyntaxException):java.lang.IllegalStateException: "
 
  83                 + "Expected a string but was BEGIN_ARRAY at line 2 column 15 path $.name");
 
  87     public void testParameterHandlerInvalidParameters() throws PolicyDistributionException {
 
  88         final String[] invalidArgumentString =
 
  89             { "-c", "parameters/InvalidParameters.json" };
 
  91         final DistributionCommandLineArguments invalidArguments = new DistributionCommandLineArguments();
 
  92         invalidArguments.parse(invalidArgumentString);
 
  94         assertThatThrownBy(() ->
 
  95             new DistributionParameterHandler().getParameters(invalidArguments)
 
  96         ).isInstanceOf(PolicyDistributionException.class)
 
  97             .hasMessageContaining("error reading parameters from \"parameters/InvalidParameters.json\"\n"
 
  98                 + "(JsonSyntaxException):java.lang.IllegalStateException: "
 
  99                 + "Expected a string but was BEGIN_ARRAY at line 2 column 15 path $.name");
 
 103     public void testParameterHandlerNoParameters() throws PolicyDistributionException {
 
 104         final String[] noArgumentString =
 
 105             { "-c", "parameters/NoParameters.json" };
 
 107         final DistributionCommandLineArguments noArguments = new DistributionCommandLineArguments();
 
 108         noArguments.parse(noArgumentString);
 
 110         assertThatThrownBy(() ->
 
 111             new DistributionParameterHandler().getParameters(noArguments)
 
 112         ).isInstanceOf(ParameterRuntimeException.class)
 
 113             .hasMessageContaining("map parameter \"receptionHandlerParameters\" is null");
 
 117     public void testParameterHandlerMinumumParameters() throws PolicyDistributionException {
 
 118         final String[] minArgumentString =
 
 119             { "-c", "parameters/MinimumParameters.json" };
 
 121         final DistributionCommandLineArguments minArguments = new DistributionCommandLineArguments();
 
 122         minArguments.parse(minArgumentString);
 
 124         final DistributionParameterGroup parGroup = new DistributionParameterHandler().getParameters(minArguments);
 
 125         assertEquals(CommonTestData.DISTRIBUTION_GROUP_NAME, parGroup.getName());
 
 129     public void testDistributionParameterGroup() throws PolicyDistributionException {
 
 130         final String[] distributionConfigParameters =
 
 131             { "-c", "parameters/DistributionConfigParameters.json" };
 
 133         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 134         arguments.parse(distributionConfigParameters);
 
 136         final DistributionParameterGroup parGroup = new DistributionParameterHandler().getParameters(arguments);
 
 137         assertTrue(arguments.checkSetConfigurationFilePath());
 
 138         assertEquals(CommonTestData.DISTRIBUTION_GROUP_NAME, parGroup.getName());
 
 139         assertEquals(CommonTestData.RECEPTION_HANDLER_TYPE, parGroup.getReceptionHandlerParameters()
 
 140                 .get(CommonTestData.DUMMY_RECEPTION_HANDLER_KEY).getReceptionHandlerType());
 
 141         assertEquals(CommonTestData.DECODER_TYPE,
 
 142                 parGroup.getReceptionHandlerParameters().get(CommonTestData.DUMMY_RECEPTION_HANDLER_KEY)
 
 143                         .getPluginHandlerParameters().getPolicyDecoders().get(CommonTestData.DUMMY_DECODER_KEY)
 
 145         assertEquals(CommonTestData.FORWARDER_TYPE,
 
 146                 parGroup.getReceptionHandlerParameters().get(CommonTestData.DUMMY_RECEPTION_HANDLER_KEY)
 
 147                         .getPluginHandlerParameters().getPolicyForwarders()
 
 148                         .get(CommonTestData.DUMMY_ENGINE_FORWARDER_KEY).getForwarderType());
 
 149         assertEquals(CommonTestData.FORWARDER_HOST,
 
 150                 ((DummyPolicyForwarderParameterGroup) parGroup.getPolicyForwarderConfigurationParameters()
 
 151                         .get(CommonTestData.FORWARDER_CONFIGURATION_PARAMETERS)).getHostname());
 
 152         assertEquals(CommonTestData.POLICY_TYPE,
 
 153                 ((DummyPolicyDecoderParameterGroup) parGroup.getPolicyDecoderConfigurationParameters()
 
 154                         .get(CommonTestData.DECODER_CONFIGURATION_PARAMETERS)).getPolicyType());
 
 155         assertEquals(CommonTestData.POLICY_NAME,
 
 156                 ((DummyPolicyDecoderParameterGroup) parGroup.getPolicyDecoderConfigurationParameters()
 
 157                         .get(CommonTestData.DECODER_CONFIGURATION_PARAMETERS)).getPolicyName());
 
 161     public void testDistributionParameterGroup_InvalidForwarderConfigurationClassName()
 
 162             throws PolicyDistributionException {
 
 163         final String[] distributionConfigParameters =
 
 164             { "-c", "parameters/DistributionConfigParameters_InvalidForwarderConfigurationClassName.json" };
 
 166         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 167         arguments.parse(distributionConfigParameters);
 
 169         assertThatThrownBy(() ->
 
 170             new DistributionParameterHandler().getParameters(arguments)
 
 171         ).isInstanceOf(PolicyDistributionException.class)
 
 172             .hasMessageContaining("parameter \"parameterClassName\" value \"\" invalid in JSON file");
 
 176     public void testDistributionParameterGroup_UnknownForwarderConfigurationClassName()
 
 177             throws PolicyDistributionException {
 
 178         final String[] distributionConfigParameters =
 
 179             { "-c", "parameters/DistributionConfigParameters_UnknownForwarderConfigurationClassName.json" };
 
 181         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 182         arguments.parse(distributionConfigParameters);
 
 184         assertThatThrownBy(() ->
 
 185             new DistributionParameterHandler().getParameters(arguments)
 
 186         ).isInstanceOf(PolicyDistributionException.class)
 
 187             .hasMessageContaining("parameter \"parameterClassName\" value \"org.onap.policy.Unknown\", "
 
 188             + "could not find class");
 
 192     public void testDistributionParameterGroup_InvalidName() throws PolicyDistributionException {
 
 193         final String[] distributionConfigParameters =
 
 194             { "-c", "parameters/DistributionConfigParameters_InvalidName.json" };
 
 196         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 197         arguments.parse(distributionConfigParameters);
 
 199         assertThatThrownBy(() ->
 
 200             new DistributionParameterHandler().getParameters(arguments)
 
 201         ).isInstanceOf(PolicyDistributionException.class)
 
 202             .hasMessageContaining("field \"name\" type \"java.lang.String\" value \" "
 
 203             + "\" INVALID, must be a non-blank string");
 
 207     public void testDistributionParameterGroup_NoReceptionHandler() throws PolicyDistributionException {
 
 208         final String[] distributionConfigParameters =
 
 209             { "-c", "parameters/DistributionConfigParameters_NoReceptionHandler.json" };
 
 211         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 212         arguments.parse(distributionConfigParameters);
 
 214         assertThatThrownBy(() ->
 
 215             new DistributionParameterHandler().getParameters(arguments)
 
 216         ).isInstanceOf(ParameterRuntimeException.class)
 
 217             .hasMessageContaining("map parameter \"receptionHandlerParameters\" is null");
 
 221     public void testDistributionParameterGroup_EmptyReceptionHandler() throws PolicyDistributionException {
 
 222         final String[] distributionConfigParameters =
 
 223             { "-c", "parameters/DistributionConfigParameters_EmptyReceptionHandler.json" };
 
 225         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 226         arguments.parse(distributionConfigParameters);
 
 228         assertThatThrownBy(() ->
 
 229             new DistributionParameterHandler().getParameters(arguments)
 
 230         ).isInstanceOf(PolicyDistributionException.class)
 
 231             .hasMessageContaining("must have at least one reception handler\n");
 
 235     public void testDistributionParameterGroup_NoPolicyDecoder() throws PolicyDistributionException {
 
 236         final String[] distributionConfigParameters =
 
 237             { "-c", "parameters/DistributionConfigParameters_NoPolicyDecoder.json" };
 
 239         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 240         arguments.parse(distributionConfigParameters);
 
 242         assertThatThrownBy(() ->
 
 243             new DistributionParameterHandler().getParameters(arguments)
 
 244         ).isInstanceOf(ParameterRuntimeException.class)
 
 245             .hasMessageContaining("map parameter \"policyDecoders\" is null");
 
 249     public void testDistributionParameterGroup_NoPolicyForwarder() throws PolicyDistributionException {
 
 250         final String[] distributionConfigParameters =
 
 251             { "-c", "parameters/DistributionConfigParameters_NoPolicyForwarder.json" };
 
 253         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 254         arguments.parse(distributionConfigParameters);
 
 256         assertThatThrownBy(() ->
 
 257             new DistributionParameterHandler().getParameters(arguments)
 
 258         ).isInstanceOf(ParameterRuntimeException.class)
 
 259             .hasMessageContaining("map parameter \"policyForwarders\" is null");
 
 263     public void testDistributionParameterGroup_EmptyPolicyDecoder() throws PolicyDistributionException {
 
 264         final String[] distributionConfigParameters =
 
 265             { "-c", "parameters/DistributionConfigParameters_EmptyPolicyDecoder.json" };
 
 267         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 268         arguments.parse(distributionConfigParameters);
 
 270         assertThatThrownBy(() ->
 
 271             new DistributionParameterHandler().getParameters(arguments)
 
 272         ).isInstanceOf(PolicyDistributionException.class)
 
 273             .hasMessageContaining("must have at least one policy decoder\n");
 
 277     public void testDistributionParameterGroup_EmptyPolicyForwarder() throws PolicyDistributionException {
 
 278         final String[] distributionConfigParameters =
 
 279             { "-c", "parameters/DistributionConfigParameters_EmptyPolicyForwarder.json" };
 
 281         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 282         arguments.parse(distributionConfigParameters);
 
 284         assertThatThrownBy(() ->
 
 285             new DistributionParameterHandler().getParameters(arguments)
 
 286         ).isInstanceOf(PolicyDistributionException.class)
 
 287             .hasMessageContaining("must have at least one policy forwarder\n");
 
 291     public void testDistributionParameterGroup_InvalidReceptionHandlerParameters()
 
 292             throws PolicyDistributionException, IOException {
 
 293         final String[] distributionConfigParameters =
 
 294             { "-c", "parameters/DistributionConfigParameters_InvalidReceptionHandlerParameters.json" };
 
 296         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 297         arguments.parse(distributionConfigParameters);
 
 299         String resultString = Files.readString(Paths.get(
 
 300                 "src/test/resources/expectedValidationResults/InvalidReceptionHandlerParameters.txt"))
 
 301                 .trim().replaceAll("\\r\\n", "\\\n");
 
 302         assertThatThrownBy(() ->
 
 303             new DistributionParameterHandler().getParameters(arguments)
 
 304         ).isInstanceOf(PolicyDistributionException.class)
 
 305             .hasMessageContaining(resultString);
 
 309     public void testDistributionParameterGroup_InvalidDecoderAndForwarderParameters()
 
 310             throws PolicyDistributionException, IOException {
 
 311         final String[] distributionConfigParameters =
 
 312             { "-c", "parameters/DistributionConfigParameters_InvalidDecoderAndForwarderParameters.json" };
 
 314         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 315         arguments.parse(distributionConfigParameters);
 
 316         String resultString = new String(Files.readString(Paths.get(
 
 317                 "src/test/resources/expectedValidationResults/InvalidDecoderAndForwarderParameters.txt"))
 
 318                 .trim().replaceAll("\\r\\n", "\\\n"));
 
 319         assertThatThrownBy(() -> new DistributionParameterHandler().getParameters(arguments))
 
 320         .isInstanceOf(PolicyDistributionException.class)
 
 321             .hasMessageContaining((resultString));
 
 325     public void testDistributionParameterGroup_InvalidRestServerParameters()
 
 326             throws PolicyDistributionException, IOException {
 
 327         final String[] distributionConfigParameters =
 
 328             { "-c", "parameters/DistributionConfigParameters_InvalidRestServerParameters.json" };
 
 330         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 331         arguments.parse(distributionConfigParameters);
 
 333         String resultString = new String(Files.readString(Paths.get(
 
 334                 "src/test/resources/expectedValidationResults/InvalidRestServerParameters.txt"))
 
 335                 .trim().replaceAll("\\r\\n", "\\\n"));
 
 336         assertThatThrownBy(() -> new DistributionParameterHandler().getParameters(arguments))
 
 337         .isInstanceOf(PolicyDistributionException.class)
 
 338             .hasMessageContaining(resultString);
 
 342     public void testDistributionVersion() throws PolicyDistributionException {
 
 343         final String[] distributionConfigParameters =
 
 345         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 346         final String version = arguments.parse(distributionConfigParameters);
 
 347         assertTrue(version.startsWith("ONAP Policy Framework Distribution Service"));
 
 351     public void testDistributionHelp() throws PolicyDistributionException {
 
 352         final String[] distributionConfigParameters =
 
 354         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 355         final String help = arguments.parse(distributionConfigParameters);
 
 356         assertTrue(help.startsWith("usage:"));
 
 360     public void testDistributionInvalidOption() throws PolicyDistributionException {
 
 361         final String[] distributionConfigParameters =
 
 363         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 364         assertThatThrownBy(() ->
 
 365             arguments.parse(distributionConfigParameters)
 
 366         ).isInstanceOf(PolicyDistributionException.class)
 
 367             .hasMessageContaining("invalid command line arguments specified");
 
 371     public void testDistributionParameterGroup_InvalidReceptionHandlerClass() throws PolicyDistributionException {
 
 372         final String[] distributionConfigParameters =
 
 373             { "-c", "parameters/DistributionConfigParameters_InvalidReceptionHandlerClass.json" };
 
 375         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 376         arguments.parse(distributionConfigParameters);
 
 378         assertThatThrownBy(() -> new DistributionParameterHandler().getParameters(arguments))
 
 379         .isInstanceOf(PolicyDistributionException.class)
 
 380             .hasMessageContaining("could not find class");
 
 384     public void testDistributionParameterGroup_EmptyReceptionHandlerClass() throws PolicyDistributionException {
 
 385         final String[] distributionConfigParameters =
 
 386             { "-c", "parameters/DistributionConfigParameters_EmptyReceptionHandlerClass.json" };
 
 388         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 389         arguments.parse(distributionConfigParameters);
 
 391         assertThatThrownBy(() -> new DistributionParameterHandler().getParameters(arguments))
 
 392         .isInstanceOf(PolicyDistributionException.class)
 
 393             .hasMessageContaining("invalid in JSON file");
 
 397     public void testDistributionParameterGroup_InvalidDecoderConfigurationClassName()
 
 398             throws PolicyDistributionException {
 
 399         final String[] distributionConfigParameters =
 
 400             { "-c", "parameters/DistributionConfigParameters_InvalidDecoderConfigurationClassName.json" };
 
 402         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 403         arguments.parse(distributionConfigParameters);
 
 405         assertThatThrownBy(() -> new DistributionParameterHandler().getParameters(arguments))
 
 406         .isInstanceOf(PolicyDistributionException.class)
 
 407             .hasMessageContaining("parameter \"parameterClassName\" value \"\" invalid in JSON file");
 
 411     public void testDistributionParameterGroup_UnknownDecoderConfigurationClassName()
 
 412             throws PolicyDistributionException {
 
 413         final String[] distributionConfigParameters =
 
 414             { "-c", "parameters/DistributionConfigParameters_UnknownDecoderConfigurationClassName.json" };
 
 416         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 417         arguments.parse(distributionConfigParameters);
 
 419         assertThatThrownBy(() -> new DistributionParameterHandler().getParameters(arguments))
 
 420             .isInstanceOf(PolicyDistributionException.class)
 
 421             .hasMessageContaining("parameter \"parameterClassName\" value"
 
 422                 + " \"org.onap.policy.Unknown\", could not find class");