2  * ============LICENSE_START=======================================================
 
   3  *  Copyright (C) 2018 Ericsson. All rights reserved.
 
   4  * ================================================================================
 
   5  * Licensed under the Apache License, Version 2.0 (the "License");
 
   6  * you may not use this file except in compliance with the License.
 
   7  * You may obtain a copy of the License at
 
   9  *      http://www.apache.org/licenses/LICENSE-2.0
 
  11  * Unless required by applicable law or agreed to in writing, software
 
  12  * distributed under the License is distributed on an "AS IS" BASIS,
 
  13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  14  * See the License for the specific language governing permissions and
 
  15  * limitations under the License.
 
  17  * SPDX-License-Identifier: Apache-2.0
 
  18  * ============LICENSE_END=========================================================
 
  21 package org.onap.policy.distribution.main.parameters;
 
  23 import static org.junit.Assert.assertEquals;
 
  24 import static org.junit.Assert.assertTrue;
 
  25 import static org.junit.Assert.fail;
 
  27 import java.io.IOException;
 
  28 import java.nio.file.Files;
 
  29 import java.nio.file.Paths;
 
  31 import org.junit.Test;
 
  32 import org.onap.policy.distribution.main.PolicyDistributionException;
 
  33 import org.onap.policy.distribution.main.startstop.DistributionCommandLineArguments;
 
  36  * Class to perform unit test of DistributionParameterHandler.
 
  38  * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com)
 
  40 public class TestDistributionParameterHandler {
 
  42     public void testParameterHandlerNoParameterFile() throws PolicyDistributionException {
 
  43         final String[] noArgumentString =
 
  44         { "-c", "parameters/NoParameterFile.json" };
 
  46         final DistributionCommandLineArguments noArguments = new DistributionCommandLineArguments();
 
  47         noArguments.parse(noArgumentString);
 
  50             new DistributionParameterHandler().getParameters(noArguments);
 
  51             fail("test should throw an exception here");
 
  52         } catch (final Exception e) {
 
  53             assertTrue(e.getMessage().contains("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);
 
  66             new DistributionParameterHandler().getParameters(emptyArguments);
 
  67             fail("test should throw an exception here");
 
  68         } catch (final Exception e) {
 
  69             assertEquals("no parameters found in \"parameters/EmptyParameters.json\"", e.getMessage());
 
  74     public void testParameterHandlerBadParameters() throws PolicyDistributionException {
 
  75         final String[] badArgumentString =
 
  76         { "-c", "parameters/BadParameters.json" };
 
  78         final DistributionCommandLineArguments badArguments = new DistributionCommandLineArguments();
 
  79         badArguments.parse(badArgumentString);
 
  82             new DistributionParameterHandler().getParameters(badArguments);
 
  83             fail("test should throw an exception here");
 
  84         } catch (final Exception e) {
 
  85             assertEquals("error reading parameters from \"parameters/BadParameters.json\"\n"
 
  86                     + "(JsonSyntaxException):java.lang.IllegalStateException: "
 
  87                     + "Expected a string but was BEGIN_ARRAY at line 2 column 15 path $.name", e.getMessage());
 
  92     public void testParameterHandlerInvalidParameters() throws PolicyDistributionException {
 
  93         final String[] invalidArgumentString =
 
  94         { "-c", "parameters/InvalidParameters.json" };
 
  96         final DistributionCommandLineArguments invalidArguments = new DistributionCommandLineArguments();
 
  97         invalidArguments.parse(invalidArgumentString);
 
 100             new DistributionParameterHandler().getParameters(invalidArguments);
 
 101             fail("test should throw an exception here");
 
 102         } catch (final Exception e) {
 
 103             assertEquals("error reading parameters from \"parameters/InvalidParameters.json\"\n"
 
 104                     + "(JsonSyntaxException):java.lang.IllegalStateException: "
 
 105                     + "Expected a string but was BEGIN_ARRAY at line 2 column 15 path $.name", e.getMessage());
 
 110     public void testParameterHandlerNoParameters() throws PolicyDistributionException {
 
 111         final String[] noArgumentString =
 
 112         { "-c", "parameters/NoParameters.json" };
 
 114         final DistributionCommandLineArguments noArguments = new DistributionCommandLineArguments();
 
 115         noArguments.parse(noArgumentString);
 
 118             new DistributionParameterHandler().getParameters(noArguments);
 
 119             fail("test should throw an exception here");
 
 120         } catch (final Exception e) {
 
 121             assertEquals("map parameter \"receptionHandlerParameters\" is null", e.getMessage());
 
 126     public void testParameterHandlerMinumumParameters() throws PolicyDistributionException {
 
 127         final String[] minArgumentString =
 
 128         { "-c", "parameters/MinimumParameters.json" };
 
 130         final DistributionCommandLineArguments minArguments = new DistributionCommandLineArguments();
 
 131         minArguments.parse(minArgumentString);
 
 133         final DistributionParameterGroup parGroup = new DistributionParameterHandler().getParameters(minArguments);
 
 134         assertEquals(CommonTestData.DISTRIBUTION_GROUP_NAME, parGroup.getName());
 
 138     public void testDistributionParameterGroup() throws PolicyDistributionException {
 
 139         final String[] distributionConfigParameters =
 
 140         { "-c", "parameters/DistributionConfigParameters.json" };
 
 142         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 143         arguments.parse(distributionConfigParameters);
 
 145         final DistributionParameterGroup parGroup = new DistributionParameterHandler().getParameters(arguments);
 
 146         assertTrue(arguments.checkSetConfigurationFilePath());
 
 147         assertEquals(CommonTestData.DISTRIBUTION_GROUP_NAME, parGroup.getName());
 
 148         assertEquals(CommonTestData.RECEPTION_HANDLER_TYPE, parGroup.getReceptionHandlerParameters()
 
 149                 .get(CommonTestData.DUMMY_RECEPTION_HANDLER_KEY).getReceptionHandlerType());
 
 150         assertEquals(CommonTestData.DECODER_TYPE,
 
 151                 parGroup.getReceptionHandlerParameters().get(CommonTestData.DUMMY_RECEPTION_HANDLER_KEY)
 
 152                         .getPluginHandlerParameters().getPolicyDecoders().get(CommonTestData.DUMMY_DECODER_KEY)
 
 154         assertEquals(CommonTestData.FORWARDER_TYPE,
 
 155                 parGroup.getReceptionHandlerParameters().get(CommonTestData.DUMMY_RECEPTION_HANDLER_KEY)
 
 156                         .getPluginHandlerParameters().getPolicyForwarders()
 
 157                         .get(CommonTestData.DUMMY_ENGINE_FORWARDER_KEY).getForwarderType());
 
 161     public void testDistributionParameterGroup_InvalidName() throws PolicyDistributionException {
 
 162         final String[] distributionConfigParameters =
 
 163         { "-c", "parameters/DistributionConfigParameters_InvalidName.json" };
 
 165         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 166         arguments.parse(distributionConfigParameters);
 
 169             new DistributionParameterHandler().getParameters(arguments);
 
 170             fail("test should throw an exception here");
 
 171         } catch (final Exception e) {
 
 172             assertTrue(e.getMessage().contains(
 
 173                     "field \"name\" type \"java.lang.String\" value \" \" INVALID, must be a non-blank string"));
 
 178     public void testDistributionParameterGroup_NoReceptionHandler() throws PolicyDistributionException {
 
 179         final String[] distributionConfigParameters =
 
 180         { "-c", "parameters/DistributionConfigParameters_NoReceptionHandler.json" };
 
 182         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 183         arguments.parse(distributionConfigParameters);
 
 186             new DistributionParameterHandler().getParameters(arguments);
 
 187             fail("test should throw an exception here");
 
 188         } catch (final Exception e) {
 
 189             assertTrue(e.getMessage().contains("map parameter \"receptionHandlerParameters\" is null"));
 
 194     public void testDistributionParameterGroup_EmptyReceptionHandler() throws PolicyDistributionException {
 
 195         final String[] distributionConfigParameters =
 
 196         { "-c", "parameters/DistributionConfigParameters_EmptyReceptionHandler.json" };
 
 198         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 199         arguments.parse(distributionConfigParameters);
 
 202             new DistributionParameterHandler().getParameters(arguments);
 
 203             fail("test should throw an exception here");
 
 204         } catch (final Exception e) {
 
 205             assertTrue(e.getMessage().contains("must have at least one reception handler\n"));
 
 210     public void testDistributionParameterGroup_NoPolicyDecoder() throws PolicyDistributionException {
 
 211         final String[] distributionConfigParameters =
 
 212         { "-c", "parameters/DistributionConfigParameters_NoPolicyDecoder.json" };
 
 214         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 215         arguments.parse(distributionConfigParameters);
 
 218             new DistributionParameterHandler().getParameters(arguments);
 
 219             fail("test should throw an exception here");
 
 220         } catch (final Exception e) {
 
 221             assertTrue(e.getMessage().contains("map parameter \"policyDecoders\" is null"));
 
 226     public void testDistributionParameterGroup_NoPolicyForwarder() throws PolicyDistributionException {
 
 227         final String[] distributionConfigParameters =
 
 228         { "-c", "parameters/DistributionConfigParameters_NoPolicyForwarder.json" };
 
 230         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 231         arguments.parse(distributionConfigParameters);
 
 234             new DistributionParameterHandler().getParameters(arguments);
 
 235             fail("test should throw an exception here");
 
 236         } catch (final Exception e) {
 
 237             assertTrue(e.getMessage().contains("map parameter \"policyForwarders\" is null"));
 
 242     public void testDistributionParameterGroup_EmptyPolicyDecoder() throws PolicyDistributionException {
 
 243         final String[] distributionConfigParameters =
 
 244         { "-c", "parameters/DistributionConfigParameters_EmptyPolicyDecoder.json" };
 
 246         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 247         arguments.parse(distributionConfigParameters);
 
 250             new DistributionParameterHandler().getParameters(arguments);
 
 251             fail("test should throw an exception here");
 
 252         } catch (final Exception e) {
 
 253             assertTrue(e.getMessage().contains("must have at least one policy decoder\n"));
 
 258     public void testDistributionParameterGroup_EmptyPolicyForwarder() throws PolicyDistributionException {
 
 259         final String[] distributionConfigParameters =
 
 260         { "-c", "parameters/DistributionConfigParameters_EmptyPolicyForwarder.json" };
 
 262         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 263         arguments.parse(distributionConfigParameters);
 
 266             new DistributionParameterHandler().getParameters(arguments);
 
 267             fail("test should throw an exception here");
 
 268         } catch (final Exception e) {
 
 269             assertTrue(e.getMessage().endsWith("must have at least one policy forwarder\n"));
 
 274     public void testDistributionParameterGroup_InvalidReceptionHandlerParameters()
 
 275             throws PolicyDistributionException, IOException {
 
 276         final String[] distributionConfigParameters =
 
 277         { "-c", "parameters/DistributionConfigParameters_InvalidReceptionHandlerParameters.json" };
 
 279         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 280         arguments.parse(distributionConfigParameters);
 
 283             new DistributionParameterHandler().getParameters(arguments);
 
 284             fail("test should throw an exception here");
 
 285         } catch (final Exception e) {
 
 286             final String expectedResult = new String(Files.readAllBytes(
 
 287                     Paths.get("src/test/resources/expectedValidationResults/InvalidReceptionHandlerParameters.txt")))
 
 288                             .replaceAll("\\s+", "");
 
 289             assertEquals(expectedResult, e.getMessage().replaceAll("\\s+", ""));
 
 294     public void testDistributionParameterGroup_InvalidDecoderAndForwarderParameters()
 
 295             throws PolicyDistributionException, IOException {
 
 296         final String[] distributionConfigParameters =
 
 297         { "-c", "parameters/DistributionConfigParameters_InvalidDecoderAndForwarderParameters.json" };
 
 299         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 300         arguments.parse(distributionConfigParameters);
 
 303             new DistributionParameterHandler().getParameters(arguments);
 
 304             fail("test should throw an exception here");
 
 305         } catch (final Exception e) {
 
 306             final String expectedResult = new String(Files.readAllBytes(
 
 307                     Paths.get("src/test/resources/expectedValidationResults/InvalidDecoderAndForwarderParameters.txt")))
 
 308                             .replaceAll("\\s+", "");
 
 309             assertEquals(expectedResult, e.getMessage().replaceAll("\\s+", ""));
 
 314     public void testDistributionParameterGroup_InvalidRestServerParameters()
 
 315             throws PolicyDistributionException, IOException {
 
 316         final String[] distributionConfigParameters =
 
 317         { "-c", "parameters/DistributionConfigParameters_InvalidRestServerParameters.json" };
 
 319         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 320         arguments.parse(distributionConfigParameters);
 
 323             new DistributionParameterHandler().getParameters(arguments);
 
 324             fail("test should throw an exception here");
 
 325         } catch (final Exception e) {
 
 326             final String expectedResult = new String(Files.readAllBytes(
 
 327                     Paths.get("src/test/resources/expectedValidationResults/InvalidRestServerParameters.txt")))
 
 328                             .replaceAll("\\s+", "");
 
 329             assertEquals(expectedResult, e.getMessage().replaceAll("\\s+", ""));
 
 334     public void testDistributionVersion() throws PolicyDistributionException {
 
 335         final String[] distributionConfigParameters =
 
 337         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 338         final String version = arguments.parse(distributionConfigParameters);
 
 339         assertTrue(version.startsWith("ONAP Policy Framework Distribution Service"));
 
 343     public void testDistributionHelp() throws PolicyDistributionException {
 
 344         final String[] distributionConfigParameters =
 
 346         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 347         final String help = arguments.parse(distributionConfigParameters);
 
 348         assertTrue(help.startsWith("usage:"));
 
 352     public void testDistributionInvalidOption() throws PolicyDistributionException {
 
 353         final String[] distributionConfigParameters =
 
 355         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
 
 357             arguments.parse(distributionConfigParameters);
 
 358         } catch (final Exception exp) {
 
 359             assertTrue(exp.getMessage().startsWith("invalid command line arguments specified"));