aboutsummaryrefslogtreecommitdiffstats
path: root/services/services-engine
diff options
context:
space:
mode:
authoradheli.tavares <adheli.tavares@est.tech>2021-04-13 14:51:44 +0100
committerAdheli Tavares <adheli.tavares@est.tech>2021-04-22 08:12:06 +0000
commit3fce2a6b2ba5b556995622f368e97bb1d4f4151e (patch)
treec8b3f7a5b5cda9df4af6ce75236a40b599d26d15 /services/services-engine
parenta80ff846c0cce0224fd3b5d0ecbe34abfd1f1a6b (diff)
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 <adheli.tavares@est.tech>
Diffstat (limited to 'services/services-engine')
-rw-r--r--services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArguments.java180
-rw-r--r--services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java7
-rw-r--r--services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArgumentsTest.java83
-rw-r--r--services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexMainTest.java2
4 files changed, 109 insertions, 163 deletions
diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArguments.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArguments.java
index 31131b465..0d7560f89 100644
--- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArguments.java
+++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArguments.java
@@ -1,7 +1,7 @@
/*-
* ============LICENSE_START=======================================================
* Copyright (C) 2016-2018 Ericsson. All rights reserved.
- * Modification Copyright (C) 2020 Nordix Foundation.
+ * Modification Copyright (C) 2020-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.
@@ -22,21 +22,19 @@
package org.onap.policy.apex.service.engine.main;
import java.io.File;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.net.URL;
import java.util.Arrays;
import lombok.Getter;
import lombok.Setter;
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.model.basicmodel.concepts.ApexException;
import org.onap.policy.apex.model.basicmodel.concepts.ApexRuntimeException;
-import org.onap.policy.common.utils.resources.ResourceUtils;
+import org.onap.policy.common.utils.cmd.CommandLineArgumentsHandler;
+import org.onap.policy.common.utils.cmd.CommandLineException;
+import org.onap.policy.common.utils.resources.MessageConstants;
import org.onap.policy.common.utils.validation.ParameterValidationUtils;
/**
@@ -45,30 +43,34 @@ import org.onap.policy.common.utils.validation.ParameterValidationUtils;
*
* @author Liam Fallon (liam.fallon@ericsson.com)
*/
-public class ApexCommandLineArguments {
+public class ApexCommandLineArguments extends CommandLineArgumentsHandler {
// A system property holding the root directory for relative paths in the
// configuration file
public static final String APEX_RELATIVE_FILE_ROOT = "APEX_RELATIVE_FILE_ROOT";
-
- // Recurring string constants
- private static final String FILE_PREAMBLE = " file \"";
private static final String RELATIVE_FILE_ROOT = "relative file root \"";
- private static final int HELP_LINE_LENGTH = 120;
-
- // Apache Commons CLI options
- private final Options options;
@Getter
@Setter
private String toscaPolicyFilePath = null;
+
+ @Getter
private String relativeFileRoot = null;
+ private CommandLine cmd = null;
+
/**
* Construct the options for the CLI editor.
*/
public ApexCommandLineArguments() {
+ super(ApexMain.class.getName(), MessageConstants.POLICY_APEX_PDP, apexCustomOptions());
+ }
+
+ /**
+ * Builds Apex custom options.
+ */
+ private static Options apexCustomOptions() {
//@formatter:off
- options = new Options();
+ Options options = new Options();
options.addOption(Option.builder("h")
.longOpt("help")
.desc("outputs the usage of this command")
@@ -76,25 +78,26 @@ public class ApexCommandLineArguments {
.type(Boolean.class)
.build());
options.addOption(Option.builder("v")
- .longOpt("version")
- .desc("outputs the version of Apex")
- .required(false)
- .type(Boolean.class)
- .build());
+ .longOpt("version")
+ .desc("outputs the version of Apex")
+ .required(false)
+ .type(Boolean.class)
+ .build());
options.addOption(Option.builder("rfr")
- .longOpt("relative-file-root")
- .desc("the root file path for relative file paths specified in the Apex configuration file, "
- + "defaults to the current directory from where Apex is executed")
- .hasArg()
- .argName(APEX_RELATIVE_FILE_ROOT)
- .required(false)
- .type(String.class)
- .build());
+ .longOpt("relative-file-root")
+ .desc("the root file path for relative file paths specified in the Apex configuration file, "
+ + "defaults to the current directory from where Apex is executed")
+ .hasArg()
+ .argName(APEX_RELATIVE_FILE_ROOT)
+ .required(false)
+ .type(String.class)
+ .build());
options.addOption(Option.builder("p").longOpt("tosca-policy-file")
.desc("the full path to the ToscaPolicy file to use.").hasArg().argName("TOSCA_POLICY_FILE")
.required(false)
.type(String.class).build());
//@formatter:on
+ return options;
}
/**
@@ -109,106 +112,72 @@ public class ApexCommandLineArguments {
// Parse the arguments
try {
parse(args);
- } catch (final ApexException e) {
+ } catch (final CommandLineException e) {
throw new ApexRuntimeException("parse error on Apex 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 ApexException on command argument errors
- */
- public String parse(final String[] args) throws ApexException {
+ @Override
+ public String parse(final String[] args) throws CommandLineException {
// Clear all our arguments
setToscaPolicyFilePath(null);
- CommandLine commandLine = null;
+ setRelativeFileRoot(null);
+
try {
- commandLine = new DefaultParser().parse(options, args);
+ cmd = new DefaultParser().parse(apexCustomOptions(), args);
} catch (final ParseException e) {
- throw new ApexException("invalid command line arguments specified : " + e.getMessage());
+ throw new CommandLineException("invalid command line arguments specified", e);
}
// Arguments left over after Commons CLI does its stuff
- final String[] remainingArgs = commandLine.getArgs();
+ final String[] remainingArgs = cmd.getArgs();
- if (remainingArgs.length > 0 && commandLine.hasOption('p') || remainingArgs.length > 1) {
- throw new ApexException("too many command line arguments specified : " + Arrays.toString(args));
+ if (remainingArgs.length > 0 && cmd.hasOption('p') || remainingArgs.length > 1) {
+ throw new CommandLineException("too many command line arguments specified: " + Arrays.toString(args));
}
if (remainingArgs.length == 1) {
toscaPolicyFilePath = remainingArgs[0];
}
- if (commandLine.hasOption('h')) {
- return help(ApexMain.class.getName());
+ if (cmd.hasOption('h')) {
+ return help();
}
- if (commandLine.hasOption('v')) {
+ if (cmd.hasOption('v')) {
return version();
}
- if (commandLine.hasOption("rfr")) {
- setRelativeFileRoot(commandLine.getOptionValue("rfr"));
- } else {
- setRelativeFileRoot(null);
+ if (cmd.hasOption("rfr")) {
+ setRelativeFileRoot(cmd.getOptionValue("rfr"));
}
- if (commandLine.hasOption('p')) {
- toscaPolicyFilePath = commandLine.getOptionValue('p');
+ if (cmd.hasOption('p')) {
+ setToscaPolicyFilePath(cmd.getOptionValue('p'));
}
return null;
}
+ @Override
+ public CommandLine getCommandLine() {
+ return this.cmd;
+ }
+
/**
* Validate the command line options.
*
* @throws ApexException on command argument validation errors
*/
- public void validate() throws ApexException {
- validateReadableFile("Tosca Policy", toscaPolicyFilePath);
+ public void validateInputFiles() throws ApexException {
+ try {
+ validateReadableFile("Tosca Policy", toscaPolicyFilePath);
+ } catch (CommandLineException e) {
+ throw new ApexException(e.getMessage());
+ }
validateRelativeFileRoot();
}
/**
- * Print version information for Apex.
- *
- * @return the version string
- */
- public String version() {
- return ResourceUtils.getResourceAsString("version.txt");
- }
-
- /**
- * Print help information for Apex.
- *
- * @param mainClassName the main class name
- * @return the help string
- */
- public String help(final String mainClassName) {
- final StringWriter stringWriter = new StringWriter();
- final PrintWriter stringPrintWriter = new PrintWriter(stringWriter);
-
- new HelpFormatter().printHelp(stringPrintWriter, HELP_LINE_LENGTH, mainClassName + " [options...]", "options",
- options, 0, 0, "");
-
- return stringWriter.toString();
- }
-
- /**
- * Gets the root file path for relative file paths in the configuration file.
- *
- * @return the root file path
- */
- public String getRelativeFileRoot() {
- return relativeFileRoot;
- }
-
-
- /**
* Sets the root file path for relative file paths in the configuration file.
*
* @param relativeFileRoot the configuration file path
@@ -231,37 +200,6 @@ public class ApexCommandLineArguments {
}
/**
- * Validate readable file.
- *
- * @param fileTag the file tag
- * @param fileName the file name
- * @throws ApexException the apex exception
- */
- private void validateReadableFile(final String fileTag, final String fileName) throws ApexException {
- if (fileName == null || fileName.length() == 0) {
- throw new ApexException(fileTag + " file was not specified as an argument");
- }
-
- // The file name can refer to a resource on the local file system or on the
- // class path
- final URL fileUrl = ResourceUtils.getUrl4Resource(fileName);
- if (fileUrl == null) {
- throw new ApexException(fileTag + FILE_PREAMBLE + fileName + "\" does not exist");
- }
-
- final File theFile = new File(fileUrl.getPath());
- if (!theFile.exists()) {
- throw new ApexException(fileTag + FILE_PREAMBLE + fileName + "\" does not exist");
- }
- if (!theFile.isFile()) {
- throw new ApexException(fileTag + FILE_PREAMBLE + fileName + "\" is not a normal file");
- }
- if (!theFile.canRead()) {
- throw new ApexException(fileTag + FILE_PREAMBLE + fileName + "\" is ureadable");
- }
- }
-
- /**
* Validate the relative file root.
*/
private void validateRelativeFileRoot() throws ApexException {
diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java
index 3e9072dd4..9757c57e8 100644
--- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java
+++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java
@@ -1,7 +1,7 @@
/*-
* ============LICENSE_START=======================================================
* Copyright (C) 2016-2018 Ericsson. All rights reserved.
- * Modification Copyright (C) 2019-2021 Nordix Foundation.
+ * Modifications Copyright (C) 2019-2021 Nordix Foundation.
* Modifications Copyright (C) 2020-2021 Bell Canada. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -38,6 +38,7 @@ import org.onap.policy.apex.service.parameters.ApexParameters;
import org.onap.policy.apex.service.parameters.engineservice.EngineServiceParameters;
import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters;
import org.onap.policy.common.parameters.ParameterService;
+import org.onap.policy.common.utils.cmd.CommandLineException;
import org.slf4j.ext.XLogger;
import org.slf4j.ext.XLoggerFactory;
@@ -110,8 +111,8 @@ public class ApexMain {
}
// Validate that the arguments are sane
- arguments.validate();
- } catch (final ApexException e) {
+ arguments.validateInputFiles();
+ } catch (final ApexException | CommandLineException e) {
LOGGER.error("Arguments validation failed.", e);
throw new ApexException("Arguments validation failed.", e);
}
diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArgumentsTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArgumentsTest.java
index 09663c0bf..b5b68c9fc 100644
--- a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArgumentsTest.java
+++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArgumentsTest.java
@@ -1,7 +1,7 @@
/*-
* ============LICENSE_START=======================================================
* Copyright (C) 2016-2018 Ericsson. All rights reserved.
- * Modifications Copyright (C) 2020 Nordix Foundation
+ * Modifications Copyright (C) 2020-2021 Nordix Foundation.
* Modifications Copyright (C) 2020 Bell Canada. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -22,12 +22,14 @@
package org.onap.policy.apex.service.engine.main;
+import static org.assertj.core.api.Assertions.assertThatCode;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.Assert.assertTrue;
import org.junit.After;
import org.junit.Test;
import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
+import org.onap.policy.common.utils.cmd.CommandLineException;
/**
* Test Apex Command Line Arguments.
@@ -41,14 +43,9 @@ public class ApexCommandLineArgumentsTest {
}
@Test
- public void testCommandLineArguments() throws ApexException {
+ public void testCommandLineArguments() throws ApexException, CommandLineException {
final ApexCommandLineArguments apexArguments = new ApexCommandLineArguments();
- final String[] args00 = {""};
- apexArguments.parse(args00);
- assertThatThrownBy(() -> apexArguments.validate())
- .hasMessage("Tosca Policy file was not specified as an argument");
-
final String[] args01 = {"-h"};
final String result = apexArguments.parse(args01);
assertTrue(result.startsWith("usage: org.onap.policy.apex.service.engine.main.ApexMain [options...]"));
@@ -65,70 +62,80 @@ public class ApexCommandLineArgumentsTest {
final String result04 = apexArguments.parse(args04);
assertTrue(result04.startsWith("usage: org.onap.policy.apex.service.engine.main.ApexMain [options...]"));
- final String[] args05 = {"-a"};
- assertThatThrownBy(() -> apexArguments.parse(args05))
- .hasMessage("invalid command line arguments specified : Unrecognized option: -a");
-
final String[] args06 = {"-p", "goodbye", "-h", "-v"};
final String result06 = apexArguments.parse(args06);
assertTrue(result06.startsWith("usage: org.onap.policy.apex.service.engine.main.ApexMain [options...]"));
+ }
+
+ @Test
+ public void testCommandLineArgumentsExceptions() throws ApexException, CommandLineException {
+ final ApexCommandLineArguments apexArguments = new ApexCommandLineArguments();
+
+ final String[] args00 = {""};
+ apexArguments.parse(args00);
+ assertThatThrownBy(() -> apexArguments.validateInputFiles())
+ .hasMessage("Tosca Policy file was not specified as an argument");
+
+ final String[] args05 = {"-a"};
+ assertThatThrownBy(() -> apexArguments.parse(args05)).hasMessage("invalid command line arguments specified")
+ .hasRootCauseMessage("Unrecognized option: -a");
final String[] args07 = {"-p", "goodbye", "-h", "aaa"};
assertThatThrownBy(() -> apexArguments.parse(args07))
- .hasMessage("too many command line arguments specified : [-p, goodbye, -h, aaa]");
+ .hasMessage("too many command line arguments specified: [-p, goodbye, -h, aaa]");
+ }
+
+ @Test
+ public void testCommandLineFileParameters() throws ApexException, CommandLineException {
+ final ApexCommandLineArguments apexArguments = new ApexCommandLineArguments();
+
+ final String[] args02 = {"-p", "src/test/resources/parameters/goodParams.json"};
+ apexArguments.parse(args02);
+ assertThatCode(() -> apexArguments.validateInputFiles()).doesNotThrowAnyException();
}
@Test
- public void testCommandLineFileParameters() throws ApexException {
+ public void testCommandLineFileParametersExceptions() throws ApexException, CommandLineException {
final ApexCommandLineArguments apexArguments = new ApexCommandLineArguments();
final String[] args00 = {"-c", "zooby"};
- assertThatThrownBy(() -> apexArguments.parse(args00))
- .hasMessage("invalid command line arguments specified : Unrecognized option: -c");
+ assertThatThrownBy(() -> apexArguments.parse(args00)).hasMessage("invalid command line arguments specified")
+ .hasRootCauseMessage("Unrecognized option: -c");
final String[] args01 = {"-p"};
- assertThatThrownBy(() -> apexArguments.parse(args01))
- .hasMessage("invalid command line arguments specified : Missing argument for option: p");
-
- final String[] args02 = {"-p", "src/test/resources/parameters/goodParams.json"};
- apexArguments.parse(args02);
- apexArguments.validate();
+ assertThatThrownBy(() -> apexArguments.parse(args01)).hasMessage("invalid command line arguments specified")
+ .hasRootCauseMessage("Missing argument for option: p");
final String[] args03 = {"-p", "src/test/resources/parameters/goodParams.json", "-m", "zooby"};
- assertThatThrownBy(() -> apexArguments.parse(args03))
- .hasMessage("invalid command line arguments specified : Unrecognized option: -m");
-
- final String[] args06 = {"-p", "src/test/resources/parameters/goodParams.json"};
- apexArguments.parse(args06);
- apexArguments.validate();
+ assertThatThrownBy(() -> apexArguments.parse(args03)).hasMessage("invalid command line arguments specified")
+ .hasRootCauseMessage("Unrecognized option: -m");
}
@Test
- public void testCommandLineRelativeRootParameters() throws ApexException {
+ public void testCommandLineRelativeRootParameters() throws ApexException, CommandLineException {
final ApexCommandLineArguments apexArguments = new ApexCommandLineArguments();
final String[] args00 = {"-p", "src/test/resources/parameters/goodParams.json", "-rfr", "zooby"};
apexArguments.parse(args00);
- assertThatThrownBy(() -> apexArguments.validate())
- .hasMessageContaining("zooby\" does not exist or is not a directory");
+ assertThatThrownBy(() -> apexArguments.validateInputFiles())
+ .hasMessageContaining("zooby\" does not exist or is not a directory");
final String[] args01 = {"-rfr"};
- assertThatThrownBy(() -> apexArguments.parse(args01))
- .hasMessage("invalid command line arguments specified : Missing argument for option: rfr");
+ assertThatThrownBy(() -> apexArguments.parse(args01)).hasMessage("invalid command line arguments specified")
+ .hasRootCauseMessage("Missing argument for option: rfr");
final String[] args02 = {"-p", "src/test/resources/parameters/goodParams.json", "-rfr", "pom.xml"};
apexArguments.parse(args02);
- assertThatThrownBy(() -> apexArguments.validate())
- .hasMessageContaining("pom.xml\" does not exist or is not a directory");
+ assertThatThrownBy(() -> apexArguments.validateInputFiles())
+ .hasMessageContaining("pom.xml\" does not exist or is not a directory");
final String[] args03 = {"-p", "src/test/resources/parameters/goodParams.json", "-rfr", "target"};
apexArguments.parse(args03);
- apexArguments.validate();
+ assertThatCode(() -> apexArguments.validateInputFiles()).doesNotThrowAnyException();
- final String[] args04 =
- {"-p", "src/test/resources/parameters/goodParamsRelative.json", "-rfr", "src/test/resources"};
+ final String[] args04 = {"-p", "parameters/goodParamsRelative.json", "-rfr", "src/test/resources"};
apexArguments.parse(args04);
- apexArguments.validate();
+ assertThatCode(() -> apexArguments.validateInputFiles()).doesNotThrowAnyException();
}
}
diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexMainTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexMainTest.java
index 5764a5275..b7532aba2 100644
--- a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexMainTest.java
+++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexMainTest.java
@@ -89,7 +89,7 @@ public class ApexMainTest {
apexMain1 = new ApexMain(args);
await().atMost(200, TimeUnit.MILLISECONDS).until(() -> outContent.toString()
- .contains("invalid command line arguments specified : Unrecognized option: -whee"));
+ .contains("invalid command line arguments specified"));
assertNotNull(apexMain1);
}