2  * ============LICENSE_START=======================================================
 
   3  *  Copyright (C) 2018 Ericsson. All rights reserved.
 
   4  *  Modifications Copyright (C) 2020 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
 
  11  *      http://www.apache.org/licenses/LICENSE-2.0
 
  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.
 
  19  * SPDX-License-Identifier: Apache-2.0
 
  20  * ============LICENSE_END=========================================================
 
  23 package org.onap.policy.distribution.main.parameters;
 
  25 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
  26 import static org.junit.Assert.assertEquals;
 
  27 import static org.junit.Assert.assertTrue;
 
  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.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;
 
  40  * Class to perform unit test of DistributionParameterHandler.
 
  42  * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com)
 
  44 public class TestDistributionParameterHandler {
 
  46     public void testParameterHandlerNoParameterFile() throws PolicyDistributionException {
 
  47         final String[] noArgumentString =
 
  48             { "-c", "parameters/NoParameterFile.json" };
 
  50         final DistributionCommandLineArguments noArguments = new DistributionCommandLineArguments();
 
  51         noArguments.parse(noArgumentString);
 
  52         assertThatThrownBy(() ->
 
  53             new DistributionParameterHandler().getParameters(noArguments)
 
  54         ).isInstanceOf(PolicyDistributionException.class).hasMessageContaining("FileNotFoundException");
 
  58     public void testParameterHandlerEmptyParameters() throws PolicyDistributionException {
 
  59         final String[] emptyArgumentString =
 
  60             { "-c", "parameters/EmptyParameters.json" };
 
  62         final DistributionCommandLineArguments emptyArguments = new DistributionCommandLineArguments();
 
  63         emptyArguments.parse(emptyArgumentString);
 
  65         assertThatThrownBy(() ->
 
  66             new DistributionParameterHandler().getParameters(emptyArguments)
 
  67         ).isInstanceOf(PolicyDistributionException.class)
 
  68         .hasMessageContaining("no parameters found in \"parameters/EmptyParameters.json\"");
 
  72     public void testParameterHandlerBadParameters() throws PolicyDistributionException {
 
  73         final String[] badArgumentString =
 
  74             { "-c", "parameters/BadParameters.json" };
 
  76         final DistributionCommandLineArguments badArguments = new DistributionCommandLineArguments();
 
  77         badArguments.parse(badArgumentString);
 
  79         assertThatThrownBy(() ->
 
  80             new DistributionParameterHandler().getParameters(badArguments)
 
  81         ).isInstanceOf(PolicyDistributionException.class)
 
  82             .hasMessageContaining("error reading parameters from \"parameters/BadParameters.json\"\n"
 
  83                 + "(JsonSyntaxException):java.lang.IllegalStateException: "
 
  84                 + "Expected a string but was BEGIN_ARRAY at line 2 column 15 path $.name");
 
  88     public void testParameterHandlerInvalidParameters() throws PolicyDistributionException {
 
  89         final String[] invalidArgumentString =
 
  90             { "-c", "parameters/InvalidParameters.json" };
 
  92         final DistributionCommandLineArguments invalidArguments = new DistributionCommandLineArguments();
 
  93         invalidArguments.parse(invalidArgumentString);
 
  95         assertThatThrownBy(() ->
 
  96             new DistributionParameterHandler().getParameters(invalidArguments)
 
  97         ).isInstanceOf(PolicyDistributionException.class)
 
  98             .hasMessageContaining("error reading parameters from \"parameters/InvalidParameters.json\"\n"
 
  99                 + "(JsonSyntaxException):java.lang.IllegalStateException: "
 
 100                 + "Expected a string but was BEGIN_ARRAY at line 2 column 15 path $.name");
 
 104     public void testParameterHandlerNoParameters() throws PolicyDistributionException {
 
 105         final String[] noArgumentString =
 
 106             { "-c", "parameters/NoParameters.json" };
 
 108         final DistributionCommandLineArguments noArguments = new DistributionCommandLineArguments();
 
 109         final DistributionParameterHandler paramHandler = new DistributionParameterHandler();
 
 110         noArguments.parse(noArgumentString);
 
 111         assertThatThrownBy(() -> paramHandler.getParameters(noArguments)).isInstanceOf(ParameterRuntimeException.class)
 
 112             .hasMessageContaining("map parameter \"receptionHandlerParameters\" is null");
 
 116     public void testParameterHandlerMinumumParameters() throws PolicyDistributionException {
 
 117         final String[] minArgumentString =
 
 118             { "-c", "parameters/MinimumParameters.json" };
 
 120         final DistributionCommandLineArguments minArguments = new DistributionCommandLineArguments();
 
 121         minArguments.parse(minArgumentString);
 
 123         final DistributionParameterGroup parGroup = new DistributionParameterHandler().getParameters(minArguments);
 
 124         assertEquals(CommonTestData.DISTRIBUTION_GROUP_NAME, parGroup.getName());
 
 128     public void testDistributionParameterGroup() throws PolicyDistributionException {
 
 129         final String[] distributionConfigParameters =
 
 130             { "-c", "parameters/DistributionConfigParameters.json" };
 
 132         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 133         arguments.parse(distributionConfigParameters);
 
 135         final DistributionParameterGroup parGroup = new DistributionParameterHandler().getParameters(arguments);
 
 136         assertTrue(arguments.checkSetConfigurationFilePath());
 
 137         assertEquals(CommonTestData.DISTRIBUTION_GROUP_NAME, parGroup.getName());
 
 138         assertEquals(CommonTestData.RECEPTION_HANDLER_TYPE, parGroup.getReceptionHandlerParameters()
 
 139                 .get(CommonTestData.DUMMY_RECEPTION_HANDLER_KEY).getReceptionHandlerType());
 
 140         assertEquals(CommonTestData.DECODER_TYPE,
 
 141                 parGroup.getReceptionHandlerParameters().get(CommonTestData.DUMMY_RECEPTION_HANDLER_KEY)
 
 142                         .getPluginHandlerParameters().getPolicyDecoders().get(CommonTestData.DUMMY_DECODER_KEY)
 
 144         assertEquals(CommonTestData.FORWARDER_TYPE,
 
 145                 parGroup.getReceptionHandlerParameters().get(CommonTestData.DUMMY_RECEPTION_HANDLER_KEY)
 
 146                         .getPluginHandlerParameters().getPolicyForwarders()
 
 147                         .get(CommonTestData.DUMMY_ENGINE_FORWARDER_KEY).getForwarderType());
 
 148         assertEquals(CommonTestData.FORWARDER_HOST,
 
 149                 ((DummyPolicyForwarderParameterGroup) parGroup.getPolicyForwarderConfigurationParameters()
 
 150                         .get(CommonTestData.FORWARDER_CONFIGURATION_PARAMETERS)).getHostname());
 
 151         assertEquals(CommonTestData.POLICY_TYPE,
 
 152                 ((DummyPolicyDecoderParameterGroup) parGroup.getPolicyDecoderConfigurationParameters()
 
 153                         .get(CommonTestData.DECODER_CONFIGURATION_PARAMETERS)).getPolicyType());
 
 154         assertEquals(CommonTestData.POLICY_NAME,
 
 155                 ((DummyPolicyDecoderParameterGroup) parGroup.getPolicyDecoderConfigurationParameters()
 
 156                         .get(CommonTestData.DECODER_CONFIGURATION_PARAMETERS)).getPolicyName());
 
 160     public void testDistributionParameterGroup_InvalidForwarderConfigurationClassName()
 
 161             throws PolicyDistributionException {
 
 162         final String[] distributionConfigParameters =
 
 163             { "-c", "parameters/DistributionConfigParameters_InvalidForwarderConfigurationClassName.json" };
 
 165         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 166         arguments.parse(distributionConfigParameters);
 
 168         assertThatThrownBy(() ->
 
 169             new DistributionParameterHandler().getParameters(arguments)
 
 170         ).isInstanceOf(PolicyDistributionException.class)
 
 171             .hasMessageContaining("parameter \"parameterClassName\" value \"\" invalid in JSON file");
 
 175     public void testDistributionParameterGroup_UnknownForwarderConfigurationClassName()
 
 176             throws PolicyDistributionException {
 
 177         final String[] distributionConfigParameters =
 
 178             { "-c", "parameters/DistributionConfigParameters_UnknownForwarderConfigurationClassName.json" };
 
 180         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 181         arguments.parse(distributionConfigParameters);
 
 183         assertThatThrownBy(() ->
 
 184             new DistributionParameterHandler().getParameters(arguments)
 
 185         ).isInstanceOf(PolicyDistributionException.class)
 
 186             .hasMessageContaining("parameter \"parameterClassName\" value \"org.onap.policy.Unknown\", "
 
 187             + "could not find class");
 
 191     public void testDistributionParameterGroup_InvalidName() throws PolicyDistributionException {
 
 192         final String[] distributionConfigParameters =
 
 193             { "-c", "parameters/DistributionConfigParameters_InvalidName.json" };
 
 195         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 196         arguments.parse(distributionConfigParameters);
 
 198         assertThatThrownBy(() ->
 
 199             new DistributionParameterHandler().getParameters(arguments)
 
 200         ).isInstanceOf(PolicyDistributionException.class)
 
 201             .hasMessageContaining("field \"name\" type \"java.lang.String\" value \" "
 
 202             + "\" INVALID, must be a non-blank string");
 
 206     public void testDistributionParameterGroup_NoReceptionHandler() throws PolicyDistributionException {
 
 207         final String[] distributionConfigParameters =
 
 208             { "-c", "parameters/DistributionConfigParameters_NoReceptionHandler.json" };
 
 210         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 211         final DistributionParameterHandler paramHandler = new DistributionParameterHandler();
 
 212         arguments.parse(distributionConfigParameters);
 
 214         assertThatThrownBy(() -> paramHandler.getParameters(arguments)).isInstanceOf(ParameterRuntimeException.class)
 
 215             .hasMessageContaining("map parameter \"receptionHandlerParameters\" is null");
 
 219     public void testDistributionParameterGroup_EmptyReceptionHandler() throws PolicyDistributionException {
 
 220         final String[] distributionConfigParameters =
 
 221             { "-c", "parameters/DistributionConfigParameters_EmptyReceptionHandler.json" };
 
 223         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 224         arguments.parse(distributionConfigParameters);
 
 226         assertThatThrownBy(() ->
 
 227             new DistributionParameterHandler().getParameters(arguments)
 
 228         ).isInstanceOf(PolicyDistributionException.class)
 
 229             .hasMessageContaining("must have at least one reception handler\n");
 
 233     public void testDistributionParameterGroup_NoPolicyDecoder() throws PolicyDistributionException {
 
 234         final String[] distributionConfigParameters =
 
 235             { "-c", "parameters/DistributionConfigParameters_NoPolicyDecoder.json" };
 
 237         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 238         final DistributionParameterHandler paramHandler = new DistributionParameterHandler();
 
 239         arguments.parse(distributionConfigParameters);
 
 241         assertThatThrownBy(() -> paramHandler.getParameters(arguments)).isInstanceOf(ParameterRuntimeException.class)
 
 242             .hasMessageContaining("map parameter \"policyDecoders\" is null");
 
 246     public void testDistributionParameterGroup_NoPolicyForwarder() throws PolicyDistributionException {
 
 247         final String[] distributionConfigParameters =
 
 248             { "-c", "parameters/DistributionConfigParameters_NoPolicyForwarder.json" };
 
 250         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 251         final DistributionParameterHandler paramHandler = new DistributionParameterHandler();
 
 252         arguments.parse(distributionConfigParameters);
 
 254         assertThatThrownBy(() -> paramHandler.getParameters(arguments)).isInstanceOf(ParameterRuntimeException.class)
 
 255             .hasMessageContaining("map parameter \"policyForwarders\" is null");
 
 259     public void testDistributionParameterGroup_EmptyPolicyDecoder() throws PolicyDistributionException {
 
 260         final String[] distributionConfigParameters =
 
 261             { "-c", "parameters/DistributionConfigParameters_EmptyPolicyDecoder.json" };
 
 263         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 264         arguments.parse(distributionConfigParameters);
 
 266         assertThatThrownBy(() ->
 
 267             new DistributionParameterHandler().getParameters(arguments)
 
 268         ).isInstanceOf(PolicyDistributionException.class)
 
 269             .hasMessageContaining("must have at least one policy decoder\n");
 
 273     public void testDistributionParameterGroup_EmptyPolicyForwarder() throws PolicyDistributionException {
 
 274         final String[] distributionConfigParameters =
 
 275             { "-c", "parameters/DistributionConfigParameters_EmptyPolicyForwarder.json" };
 
 277         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 278         arguments.parse(distributionConfigParameters);
 
 280         assertThatThrownBy(() ->
 
 281             new DistributionParameterHandler().getParameters(arguments)
 
 282         ).isInstanceOf(PolicyDistributionException.class)
 
 283             .hasMessageContaining("must have at least one policy forwarder\n");
 
 287     public void testDistributionParameterGroup_InvalidReceptionHandlerParameters()
 
 288             throws PolicyDistributionException, IOException {
 
 289         final String[] distributionConfigParameters =
 
 290             { "-c", "parameters/DistributionConfigParameters_InvalidReceptionHandlerParameters.json" };
 
 292         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 293         arguments.parse(distributionConfigParameters);
 
 295         String resultString = Files.readString(Paths.get(
 
 296                 "src/test/resources/expectedValidationResults/InvalidReceptionHandlerParameters.txt"))
 
 297                 .trim().replaceAll("\\r\\n", "\\\n");
 
 298         assertThatThrownBy(() ->
 
 299             new DistributionParameterHandler().getParameters(arguments)
 
 300         ).isInstanceOf(PolicyDistributionException.class)
 
 301             .hasMessageContaining(resultString);
 
 305     public void testDistributionParameterGroup_InvalidDecoderAndForwarderParameters()
 
 306             throws PolicyDistributionException, IOException {
 
 307         final String[] distributionConfigParameters =
 
 308             { "-c", "parameters/DistributionConfigParameters_InvalidDecoderAndForwarderParameters.json" };
 
 310         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 311         arguments.parse(distributionConfigParameters);
 
 312         String resultString = new String(Files.readString(Paths.get(
 
 313                 "src/test/resources/expectedValidationResults/InvalidDecoderAndForwarderParameters.txt"))
 
 314                 .trim().replaceAll("\\r\\n", "\\\n"));
 
 315         assertThatThrownBy(() -> new DistributionParameterHandler().getParameters(arguments))
 
 316         .isInstanceOf(PolicyDistributionException.class)
 
 317             .hasMessageContaining((resultString));
 
 321     public void testDistributionParameterGroup_InvalidRestServerParameters()
 
 322             throws PolicyDistributionException, IOException {
 
 323         final String[] distributionConfigParameters =
 
 324             { "-c", "parameters/DistributionConfigParameters_InvalidRestServerParameters.json" };
 
 326         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 327         arguments.parse(distributionConfigParameters);
 
 329         String resultString = new String(Files.readString(Paths.get(
 
 330                 "src/test/resources/expectedValidationResults/InvalidRestServerParameters.txt"))
 
 331                 .trim().replaceAll("\\r\\n", "\\\n"));
 
 332         assertThatThrownBy(() -> new DistributionParameterHandler().getParameters(arguments))
 
 333         .isInstanceOf(PolicyDistributionException.class)
 
 334             .hasMessageContaining(resultString);
 
 338     public void testDistributionVersion() throws PolicyDistributionException {
 
 339         final String[] distributionConfigParameters =
 
 341         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 342         final String version = arguments.parse(distributionConfigParameters);
 
 343         assertTrue(version.startsWith("ONAP Policy Framework Distribution Service"));
 
 347     public void testDistributionHelp() throws PolicyDistributionException {
 
 348         final String[] distributionConfigParameters =
 
 350         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 351         final String help = arguments.parse(distributionConfigParameters);
 
 352         assertTrue(help.startsWith("usage:"));
 
 356     public void testDistributionInvalidOption() throws PolicyDistributionException {
 
 357         final String[] distributionConfigParameters =
 
 359         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 360         assertThatThrownBy(() ->
 
 361             arguments.parse(distributionConfigParameters)
 
 362         ).isInstanceOf(PolicyDistributionException.class)
 
 363             .hasMessageContaining("invalid command line arguments specified");
 
 367     public void testDistributionParameterGroup_InvalidReceptionHandlerClass() throws PolicyDistributionException {
 
 368         final String[] distributionConfigParameters =
 
 369             { "-c", "parameters/DistributionConfigParameters_InvalidReceptionHandlerClass.json" };
 
 371         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 372         arguments.parse(distributionConfigParameters);
 
 374         assertThatThrownBy(() -> new DistributionParameterHandler().getParameters(arguments))
 
 375         .isInstanceOf(PolicyDistributionException.class)
 
 376             .hasMessageContaining("could not find class");
 
 380     public void testDistributionParameterGroup_EmptyReceptionHandlerClass() throws PolicyDistributionException {
 
 381         final String[] distributionConfigParameters =
 
 382             { "-c", "parameters/DistributionConfigParameters_EmptyReceptionHandlerClass.json" };
 
 384         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 385         arguments.parse(distributionConfigParameters);
 
 387         assertThatThrownBy(() -> new DistributionParameterHandler().getParameters(arguments))
 
 388         .isInstanceOf(PolicyDistributionException.class)
 
 389             .hasMessageContaining("invalid in JSON file");
 
 393     public void testDistributionParameterGroup_InvalidDecoderConfigurationClassName()
 
 394             throws PolicyDistributionException {
 
 395         final String[] distributionConfigParameters =
 
 396             { "-c", "parameters/DistributionConfigParameters_InvalidDecoderConfigurationClassName.json" };
 
 398         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 399         arguments.parse(distributionConfigParameters);
 
 401         assertThatThrownBy(() -> new DistributionParameterHandler().getParameters(arguments))
 
 402         .isInstanceOf(PolicyDistributionException.class)
 
 403             .hasMessageContaining("parameter \"parameterClassName\" value \"\" invalid in JSON file");
 
 407     public void testDistributionParameterGroup_UnknownDecoderConfigurationClassName()
 
 408             throws PolicyDistributionException {
 
 409         final String[] distributionConfigParameters =
 
 410             { "-c", "parameters/DistributionConfigParameters_UnknownDecoderConfigurationClassName.json" };
 
 412         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 413         arguments.parse(distributionConfigParameters);
 
 415         assertThatThrownBy(() -> new DistributionParameterHandler().getParameters(arguments))
 
 416             .isInstanceOf(PolicyDistributionException.class)
 
 417             .hasMessageContaining("parameter \"parameterClassName\" value"
 
 418                 + " \"org.onap.policy.Unknown\", could not find class");