From 3fce2a6b2ba5b556995622f368e97bb1d4f4151e Mon Sep 17 00:00:00 2001 From: "adheli.tavares" Date: Tue, 13 Apr 2021 14:51:44 +0100 Subject: Refactor of command line classes ApexCommandLineArguments class to have parse() overriden to keep remainingArgs taking the tosca file without -p. Issue-ID: POLICY-3129 Change-Id: Ib067bf4c32992c4477cb6751f65269c103513d10 Signed-off-by: adheli.tavares --- .../onappf/ApexStarterCommandLineArguments.java | 255 ++------------------- .../apex/services/onappf/ApexStarterMain.java | 5 +- .../TestApexStarterCommandLineArguments.java | 53 +++++ .../onappf/comm/TestPdpStateChangeListener.java | 6 +- .../onappf/comm/TestPdpUpdateListener.java | 6 +- .../TestApexStarterParameterHandler.java | 20 +- 6 files changed, 88 insertions(+), 257 deletions(-) create mode 100644 services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/TestApexStarterCommandLineArguments.java (limited to 'services/services-onappf/src') diff --git a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterCommandLineArguments.java b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterCommandLineArguments.java index cad2ffa72..dfc43e0ac 100644 --- a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterCommandLineArguments.java +++ b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterCommandLineArguments.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2021 Nordix Foundation. * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,72 +21,24 @@ package org.onap.policy.apex.services.onappf; -import java.io.File; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.net.URL; -import java.util.Arrays; -import org.apache.commons.cli.CommandLine; -import org.apache.commons.cli.DefaultParser; -import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Option; -import org.apache.commons.cli.Options; -import org.apache.commons.cli.ParseException; -import org.onap.policy.apex.services.onappf.exception.ApexStarterException; import org.onap.policy.apex.services.onappf.exception.ApexStarterRunTimeException; -import org.onap.policy.common.utils.resources.ResourceUtils; +import org.onap.policy.common.utils.cmd.CommandLineArgumentsHandler; +import org.onap.policy.common.utils.cmd.CommandLineException; /** * This class reads and handles command line parameters for the apex starter. * * @author Ajith Sreekumar (ajith.sreekumar@est.tech) */ -public class ApexStarterCommandLineArguments { - - private static final String FILE_MESSAGE_PREAMBLE = " file \""; - private static final int HELP_LINE_LENGTH = 120; - - private final Options options; - private String configurationFilePath = null; - private String propertyFilePath = null; +public class ApexStarterCommandLineArguments extends CommandLineArgumentsHandler { + private static final String APEX_COMPONENT = "policy apex starter"; /** * Construct the options for the CLI editor. */ public ApexStarterCommandLineArguments() { - //@formatter:off - options = new Options(); - options.addOption(Option.builder("h") - .longOpt("help") - .desc("outputs the usage of this command") - .required(false) - .type(Boolean.class) - .build()); - options.addOption(Option.builder("v") - .longOpt("version") - .desc("outputs the version of apex starter") - .required(false) - .type(Boolean.class) - .build()); - options.addOption(Option.builder("c") - .longOpt("config-file") - .desc("the full path to the configuration file to use, " - + "the configuration file must be a Json file containing the apex starter parameters") - .hasArg() - .argName("CONFIG_FILE") - .required(false) - .type(String.class) - .build()); - options.addOption(Option.builder("p") - .longOpt("property-file") - .desc("the full path to the topic property file to use, " - + "the property file contains the apex starter topic properties") - .hasArg() - .argName("PROP_FILE") - .required(false) - .type(String.class) - .build()); - //@formatter:on + super(ApexStarterMain.class.getName(), APEX_COMPONENT, apexPropertyFileOpt()); } /** @@ -95,203 +47,24 @@ public class ApexStarterCommandLineArguments { * @param args The command line arguments */ public ApexStarterCommandLineArguments(final String[] args) { - // Set up the options with the default constructor this(); - // Parse the arguments try { parse(args); - } catch (final ApexStarterException e) { + } catch (final CommandLineException e) { throw new ApexStarterRunTimeException("parse error on apex starter parameters", e); } } /** - * Parse the command line options. - * - * @param args The command line arguments - * @return a string with a message for help and version, or null if there is no message - * @throws ApexStarterException on command argument errors - */ - public String parse(final String[] args) throws ApexStarterException { - // Clear all our arguments - setConfigurationFilePath(null); - setPropertyFilePath(null); - - CommandLine commandLine = null; - try { - commandLine = new DefaultParser().parse(options, args); - } catch (final ParseException e) { - throw new ApexStarterException("invalid command line arguments specified : " + e.getMessage()); - } - - // Arguments left over after Commons CLI does its stuff - final String[] remainingArgs = commandLine.getArgs(); - - if (remainingArgs.length > 0 && commandLine.hasOption('c') || remainingArgs.length > 0) { - throw new ApexStarterException("too many command line arguments specified : " + Arrays.toString(args)); - } - - if (remainingArgs.length == 1) { - configurationFilePath = remainingArgs[0]; - } - - if (commandLine.hasOption('h')) { - return help(ApexStarterMain.class.getName()); - } - - if (commandLine.hasOption('v')) { - return version(); - } - - if (commandLine.hasOption('c')) { - setConfigurationFilePath(commandLine.getOptionValue('c')); - } - - if (commandLine.hasOption('p')) { - setPropertyFilePath(commandLine.getOptionValue('p')); - } - - return null; - } - - /** - * Validate the command line options. - * - * @throws ApexStarterException on command argument validation errors - */ - public void validate() throws ApexStarterException { - validateReadableFile("apex starter configuration", configurationFilePath); - } - - /** - * Print version information for apex starter. - * - * @return the version string - */ - public String version() { - return ResourceUtils.getResourceAsString("src/main/resources/version.txt"); - } - - /** - * Print help information for apex starter. - * - * @param mainClassName the main class name - * @return the help string - */ - public String help(final String mainClassName) { - final HelpFormatter helpFormatter = new HelpFormatter(); - final StringWriter stringWriter = new StringWriter(); - final PrintWriter printWriter = new PrintWriter(stringWriter); - - helpFormatter.printHelp(printWriter, HELP_LINE_LENGTH, mainClassName + " [options...]", "options", options, 0, - 0, ""); - - return stringWriter.toString(); - } - - /** - * Gets the configuration file path. - * - * @return the configuration file path - */ - public String getConfigurationFilePath() { - return configurationFilePath; - } - - /** - * Gets the full expanded configuration file path. - * - * @return the configuration file path - */ - public String getFullConfigurationFilePath() { - return ResourceUtils.getFilePath4Resource(getConfigurationFilePath()); - } - - /** - * Sets the configuration file path. - * - * @param configurationFilePath the configuration file path - */ - public void setConfigurationFilePath(final String configurationFilePath) { - this.configurationFilePath = configurationFilePath; - - } - - /** - * Check set configuration file path. + * Build the extra option property-file for ApexStarter. * - * @return true, if check set configuration file path + * @return the property-file option */ - public boolean checkSetConfigurationFilePath() { - return configurationFilePath != null && configurationFilePath.length() > 0; - } - - /** - * Gets the property file path. - * - * @return the property file path - */ - public String getPropertyFilePath() { - return propertyFilePath; - } - - /** - * Gets the full expanded property file path. - * - * @return the property file path - */ - public String getFullPropertyFilePath() { - return ResourceUtils.getFilePath4Resource(getPropertyFilePath()); - } - - /** - * Sets the property file path. - * - * @param propertyFilePath the property file path - */ - public void setPropertyFilePath(final String propertyFilePath) { - this.propertyFilePath = propertyFilePath; - - } - - /** - * Check set property file path. - * - * @return true, if check set property file path - */ - public boolean checkSetPropertyFilePath() { - return propertyFilePath != null && propertyFilePath.length() > 0; - } - - /** - * Validate readable file. - * - * @param fileTag the file tag - * @param fileName the file name - * @throws ApexStarterException on the file name passed as a parameter - */ - private void validateReadableFile(final String fileTag, final String fileName) throws ApexStarterException { - if (fileName == null || fileName.length() == 0) { - throw new ApexStarterException(fileTag + " file was not specified as an argument"); - } - - // The file name refers to a resource on the local file system - final URL fileUrl = ResourceUtils.getUrl4Resource(fileName); - if (fileUrl == null) { - throw new ApexStarterException(fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" does not exist"); - } - - final File theFile = new File(fileUrl.getPath()); - if (!theFile.exists()) { - throw new ApexStarterException(fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" does not exist"); - } - if (!theFile.isFile()) { - throw new ApexStarterException(fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" is not a normal file"); - } - if (!theFile.canRead()) { - throw new ApexStarterException(fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" is ureadable"); - } + private static Option apexPropertyFileOpt() { + return Option.builder("p").longOpt("property-file") + .desc("the full path to the topic property file to use, " + + "the property file contains the policy apex starter properties") + .hasArg().argName("PROP_FILE").required(false).type(String.class).build(); } - } diff --git a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterMain.java b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterMain.java index 7daa22846..c9362bcdd 100644 --- a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterMain.java +++ b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterMain.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019-2020 Nordix Foundation. + * Copyright (C) 2019-2021 Nordix Foundation. * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. * ================================================================================ @@ -28,6 +28,7 @@ import org.onap.policy.apex.services.onappf.exception.ApexStarterException; import org.onap.policy.apex.services.onappf.exception.ApexStarterRunTimeException; import org.onap.policy.apex.services.onappf.parameters.ApexStarterParameterGroup; import org.onap.policy.apex.services.onappf.parameters.ApexStarterParameterHandler; +import org.onap.policy.common.utils.cmd.CommandLineException; import org.onap.policy.common.utils.resources.MessageConstants; import org.onap.policy.common.utils.services.Registry; import org.slf4j.Logger; @@ -77,7 +78,7 @@ public class ApexStarterMain { // Start the activator activator.initialize(); - } catch (final ApexStarterException e) { + } catch (final ApexStarterException | CommandLineException e) { if (null != activator) { Registry.unregister(ApexStarterConstants.REG_APEX_STARTER_ACTIVATOR); } diff --git a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/TestApexStarterCommandLineArguments.java b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/TestApexStarterCommandLineArguments.java new file mode 100644 index 000000000..e564d38e4 --- /dev/null +++ b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/TestApexStarterCommandLineArguments.java @@ -0,0 +1,53 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.apex.services.onappf; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class TestApexStarterCommandLineArguments { + + /** + * Test method for {@link org.onap.policy.apex.services.onappf.ApexStarterCommandLineArguments + * #getPropertyFilePath()}. + * Assert custom option was added to options object from super. + */ + @Test + public void testCommandLineHasPropertyFileOption() { + String[] args = {"-p", "someFile.json"}; + ApexStarterCommandLineArguments sut = new ApexStarterCommandLineArguments(args); + assertEquals("someFile.json", sut.getPropertyFilePath()); + } + + /** + * Test method for {@link org.onap.policy.apex.services.onappf.ApexStarterCommandLineArguments#version()}. + * Assert method consults version.txt from Apex module. + */ + @Test + public void testVersion() { + String[] args = {"-v"}; + ApexStarterCommandLineArguments sut = new ApexStarterCommandLineArguments(args); + assertThat(sut.version()).startsWith("ONAP Policy Framework Apex Starter Service"); + } + +} diff --git a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpStateChangeListener.java b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpStateChangeListener.java index 1d491ea03..b4308b8b9 100644 --- a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpStateChangeListener.java +++ b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpStateChangeListener.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019-2020 Nordix Foundation. + * Copyright (C) 2019-2021 Nordix Foundation. * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. * ================================================================================ @@ -45,6 +45,7 @@ import org.onap.policy.apex.services.onappf.handler.ApexEngineHandler; import org.onap.policy.apex.services.onappf.parameters.ApexStarterParameterGroup; import org.onap.policy.apex.services.onappf.parameters.ApexStarterParameterHandler; import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure; +import org.onap.policy.common.utils.cmd.CommandLineException; import org.onap.policy.common.utils.coder.CoderException; import org.onap.policy.common.utils.services.Registry; import org.onap.policy.models.pdp.concepts.PdpStateChange; @@ -73,9 +74,10 @@ public class TestPdpStateChangeListener { * @throws ApexStarterException if some error occurs while starting up the apex starter * @throws FileNotFoundException if the file is missing * @throws IOException if IO exception occurs + * @throws CommandLineException if any parsing of args has errors */ @Before - public void setUp() throws ApexStarterException, FileNotFoundException, IOException { + public void setUp() throws ApexStarterException, FileNotFoundException, IOException, CommandLineException { pdpUpdateMessageListener = new PdpUpdateListener(); pdpStateChangeListener = new PdpStateChangeListener(); Registry.newRegistry(); diff --git a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpUpdateListener.java b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpUpdateListener.java index d9b8fc09c..28e230ebb 100644 --- a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpUpdateListener.java +++ b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpUpdateListener.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2021 Nordix Foundation. * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. * ================================================================================ @@ -44,6 +44,7 @@ import org.onap.policy.apex.services.onappf.handler.PdpMessageHandler; import org.onap.policy.apex.services.onappf.parameters.ApexStarterParameterGroup; import org.onap.policy.apex.services.onappf.parameters.ApexStarterParameterHandler; import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure; +import org.onap.policy.common.utils.cmd.CommandLineException; import org.onap.policy.common.utils.coder.CoderException; import org.onap.policy.common.utils.services.Registry; import org.onap.policy.models.pdp.concepts.PdpStateChange; @@ -72,9 +73,10 @@ public class TestPdpUpdateListener { * @throws ApexStarterException if some error occurs while starting up the apex starter * @throws FileNotFoundException if the file is missing * @throws IOException if IO exception occurs + * @throws CommandLineException if any parsing of args has errors */ @Before - public void setUp() throws ApexStarterException, FileNotFoundException, IOException { + public void setUp() throws ApexStarterException, FileNotFoundException, IOException, CommandLineException { Registry.newRegistry(); final String[] apexStarterConfigParameters = {"-c", "src/test/resources/ApexStarterConfigParametersNoop.json"}; final ApexStarterCommandLineArguments arguments = new ApexStarterCommandLineArguments(); diff --git a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestApexStarterParameterHandler.java b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestApexStarterParameterHandler.java index d39cbecf0..dd424c15b 100644 --- a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestApexStarterParameterHandler.java +++ b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestApexStarterParameterHandler.java @@ -1,7 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * Modifications Copyright (C) 2020 Nordix Foundation + * Copyright (C) 2019-2021 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,6 +28,7 @@ import java.io.FileNotFoundException; import org.junit.Test; import org.onap.policy.apex.services.onappf.ApexStarterCommandLineArguments; import org.onap.policy.apex.services.onappf.exception.ApexStarterException; +import org.onap.policy.common.utils.cmd.CommandLineException; import org.onap.policy.common.utils.coder.CoderException; /** @@ -39,7 +39,7 @@ import org.onap.policy.common.utils.coder.CoderException; public class TestApexStarterParameterHandler { @Test - public void testParameterHandlerNoParameterFile() throws ApexStarterException { + public void testParameterHandlerNoParameterFile() throws ApexStarterException, CommandLineException { final String[] emptyArgumentString = { "-c", "src/test/resources/NoParametersFile.json" }; final ApexStarterCommandLineArguments emptyArguments = new ApexStarterCommandLineArguments(); @@ -51,7 +51,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testParameterHandlerEmptyParameters() throws ApexStarterException { + public void testParameterHandlerEmptyParameters() throws ApexStarterException, CommandLineException { final String[] noArgumentString = { "-c", "src/test/resources/NoParameters.json" }; final ApexStarterCommandLineArguments noArguments = new ApexStarterCommandLineArguments(); @@ -62,7 +62,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testParameterHandlerInvalidParameters() throws ApexStarterException { + public void testParameterHandlerInvalidParameters() throws ApexStarterException, CommandLineException { final String[] invalidArgumentString = { "-c", "src/test/resources/InvalidParameters.json" }; final ApexStarterCommandLineArguments invalidArguments = new ApexStarterCommandLineArguments(); @@ -74,7 +74,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testParameterHandlerNoParameters() throws ApexStarterException { + public void testParameterHandlerNoParameters() throws ApexStarterException, CommandLineException { final String[] noArgumentString = { "-c", "src/test/resources/EmptyConfigParameters.json" }; final ApexStarterCommandLineArguments noArguments = new ApexStarterCommandLineArguments(); @@ -85,7 +85,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testApexStarterParameterGroup() throws ApexStarterException { + public void testApexStarterParameterGroup() throws ApexStarterException, CommandLineException { final String[] apexStarterConfigParameters = { "-c", "src/test/resources/ApexStarterConfigParameters.json" }; final ApexStarterCommandLineArguments arguments = new ApexStarterCommandLineArguments(); @@ -97,7 +97,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testApexStarterParameterGroup_InvalidName() throws ApexStarterException { + public void testApexStarterParameterGroup_InvalidName() throws ApexStarterException, CommandLineException { final String[] apexStarterConfigParameters = { "-c", "src/test/resources/ApexStarterConfigParameters_InvalidName.json" }; @@ -110,7 +110,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testApexStarterVersion() throws ApexStarterException { + public void testApexStarterVersion() throws ApexStarterException, CommandLineException { final String[] apexStarterConfigParameters = { "-v" }; final ApexStarterCommandLineArguments arguments = new ApexStarterCommandLineArguments(); final String version = arguments.parse(apexStarterConfigParameters); @@ -118,7 +118,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testApexStarterHelp() throws ApexStarterException { + public void testApexStarterHelp() throws ApexStarterException, CommandLineException { final String[] apexStarterConfigParameters = { "-h" }; final ApexStarterCommandLineArguments arguments = new ApexStarterCommandLineArguments(); final String help = arguments.parse(apexStarterConfigParameters); -- cgit 1.2.3-korg