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
 
  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.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;
 
  41  * Class to perform unit test of DistributionParameterHandler.
 
  43  * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com)
 
  45 public class TestDistributionParameterHandler {
 
  47     public void testParameterHandlerNoParameterFile() throws PolicyDistributionException, CommandLineException {
 
  48         verifyFailure("NoParameterFile.json", PolicyDistributionException.class, "FileNotFoundException");
 
  52     public void testParameterHandlerEmptyParameters() throws PolicyDistributionException, CommandLineException {
 
  53         verifyFailure("EmptyParameters.json", PolicyDistributionException.class,
 
  54                 "no parameters found in \"parameters/EmptyParameters.json\"");
 
  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");
 
  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");
 
  74     public void testParameterHandlerNoParameters() throws PolicyDistributionException, CommandLineException {
 
  75         verifyFailure("NoParameters.json", ParameterRuntimeException.class,
 
  76                 "map parameter \"receptionHandlerParameters\" is null");
 
  80     public void testParameterHandlerMinumumParameters() throws PolicyDistributionException, CommandLineException {
 
  81         final String[] minArgumentString = {"-c", "parameters/MinimumParameters.json"};
 
  83         final DistributionCommandLineArguments minArguments = new DistributionCommandLineArguments();
 
  84         minArguments.parse(minArgumentString);
 
  86         final DistributionParameterGroup parGroup = new DistributionParameterHandler().getParameters(minArguments);
 
  87         assertEquals(CommonTestData.DISTRIBUTION_GROUP_NAME, parGroup.getName());
 
  91     public void testDistributionParameterGroup() throws PolicyDistributionException, CommandLineException {
 
  92         final String[] distributionConfigParameters = {"-c", "parameters/DistributionConfigParameters.json"};
 
  94         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
  95         arguments.parse(distributionConfigParameters);
 
  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)
 
 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());
 
 122     public void testDistributionParameterGroup_InvalidForwarderConfigurationClassName()
 
 123             throws PolicyDistributionException, CommandLineException {
 
 124         verifyFailure("DistributionConfigParameters_InvalidForwarderConfigurationClassName.json",
 
 125                 PolicyDistributionException.class, "parameter \"parameterClassName\" value \"\" invalid in JSON file");
 
 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");
 
 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");
 
 143     public void testDistributionParameterGroup_NoReceptionHandler()
 
 144             throws PolicyDistributionException, CommandLineException {
 
 145         verifyFailure("DistributionConfigParameters_NoReceptionHandler.json", ParameterRuntimeException.class,
 
 146                 "map parameter \"receptionHandlerParameters\" is null");
 
 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");
 
 157     public void testDistributionParameterGroup_NoPolicyDecoder()
 
 158             throws PolicyDistributionException, CommandLineException {
 
 159         verifyFailure("DistributionConfigParameters_NoPolicyDecoder.json", ParameterRuntimeException.class,
 
 160                 "map parameter \"policyDecoders\" is null");
 
 164     public void testDistributionParameterGroup_NoPolicyForwarder()
 
 165             throws PolicyDistributionException, CommandLineException {
 
 166         verifyFailure("DistributionConfigParameters_NoPolicyForwarder.json", ParameterRuntimeException.class,
 
 167                 "map parameter \"policyForwarders\" is null");
 
 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");
 
 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");
 
 185     public void testDistributionParameterGroup_InvalidReceptionHandlerParameters()
 
 186             throws PolicyDistributionException, IOException, CommandLineException {
 
 188         String resultString = Files
 
 190                         Paths.get("src/test/resources/expectedValidationResults/InvalidReceptionHandlerParameters.txt"))
 
 191                 .trim().replaceAll("\\r\\n", "\\\n");
 
 193         verifyFailure("DistributionConfigParameters_InvalidReceptionHandlerParameters.json",
 
 194                 PolicyDistributionException.class, resultString);
 
 198     public void testDistributionParameterGroup_InvalidDecoderAndForwarderParameters()
 
 199             throws PolicyDistributionException, IOException, CommandLineException {
 
 201         String resultString = new String(Files
 
 203                         .get("src/test/resources/expectedValidationResults/InvalidDecoderAndForwarderParameters.txt"))
 
 204                 .trim().replaceAll("\\r\\n", "\\\n"));
 
 206         verifyFailure("DistributionConfigParameters_InvalidDecoderAndForwarderParameters.json",
 
 207                 PolicyDistributionException.class, resultString);
 
 211     public void testDistributionParameterGroup_InvalidRestServerParameters()
 
 212             throws PolicyDistributionException, IOException, CommandLineException {
 
 214         String resultString = new String(Files
 
 215                 .readString(Paths.get("src/test/resources/expectedValidationResults/InvalidRestServerParameters.txt"))
 
 216                 .trim().replaceAll("\\r\\n", "\\\n"));
 
 218         verifyFailure("DistributionConfigParameters_InvalidRestServerParameters.json",
 
 219                 PolicyDistributionException.class, resultString);
 
 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"));
 
 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:"));
 
 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");
 
 247     public void testDistributionParameterGroup_InvalidReceptionHandlerClass()
 
 248             throws PolicyDistributionException, CommandLineException {
 
 249         verifyFailure("DistributionConfigParameters_InvalidReceptionHandlerClass.json",
 
 250                 PolicyDistributionException.class, "could not find class");
 
 254     public void testDistributionParameterGroup_EmptyReceptionHandlerClass()
 
 255             throws PolicyDistributionException, CommandLineException {
 
 256         verifyFailure("DistributionConfigParameters_EmptyReceptionHandlerClass.json", PolicyDistributionException.class,
 
 257                 "invalid in JSON file");
 
 261     public void testDistributionParameterGroup_InvalidDecoderConfigurationClassName()
 
 262             throws PolicyDistributionException, CommandLineException {
 
 263         verifyFailure("DistributionConfigParameters_InvalidDecoderConfigurationClassName.json",
 
 264                 PolicyDistributionException.class, "parameter \"parameterClassName\" value \"\" invalid in JSON file");
 
 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");
 
 275     private <T> void verifyFailure(String fileName, Class<T> clazz, String expectedMessage)
 
 276             throws PolicyDistributionException, CommandLineException {
 
 277         final String[] distributionConfigParameters = {"-c", "parameters/" + fileName};
 
 279         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 280         arguments.parse(distributionConfigParameters);
 
 282         DistributionParameterHandler paramHandler = new DistributionParameterHandler();
 
 284         assertThatThrownBy(() -> paramHandler.getParameters(arguments)).isInstanceOf(clazz)
 
 285                 .hasMessageContaining(expectedMessage);