This is an automated email from the ASF dual-hosted git repository.

clebertsuconic pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/main by this push:
     new db1338af52 ARTEMIS-4020 Fixing Management DTO Parsing with custom ETC
db1338af52 is described below

commit db1338af5227fc016cf4ab37b2230a837f863688
Author: Clebert Suconic <[email protected]>
AuthorDate: Wed Nov 2 09:16:24 2022 -0400

    ARTEMIS-4020 Fixing Management DTO Parsing with custom ETC
    
    This is fixing an issue introduced by the logging changes where a custome 
ETC would not work correctly.
---
 .../org/apache/activemq/artemis/boot/Artemis.java  | 44 ++++++++----
 .../org/apache/activemq/artemis/cli/Artemis.java   | 45 +++++++-----
 .../activemq/artemis/cli/commands/Action.java      |  2 +-
 .../artemis/cli/commands/ActionAbstract.java       |  5 +-
 .../activemq/artemis/cli/commands/HelpAction.java  |  2 +-
 .../artemis/cli/commands/address/HelpAddress.java  |  2 +-
 .../artemis/cli/commands/check/HelpCheck.java      |  2 +-
 .../artemis/cli/commands/queue/HelpQueue.java      |  2 +-
 .../artemis/cli/commands/tools/HelpData.java       |  2 +-
 .../artemis/cli/commands/user/HelpUser.java        |  2 +-
 .../commands/messages/ConnectionAbstractTest.java  |  4 +-
 .../cli/commands/messages/TransferTest.java        |  4 +-
 .../org/apache/activemq/cli/test/ArtemisTest.java  |  8 +--
 .../org/apache/activemq/cli/test/CheckTest.java    |  6 +-
 .../activemq/cli/test/OptionsValidationTest.java   |  2 +-
 .../activemq/artemis/maven/ArtemisCLIPlugin.java   |  6 +-
 .../artemis/maven/ArtemisCreatePlugin.java         |  2 +-
 tests/smoke-tests/pom.xml                          | 17 ++++-
 .../tests/smoke/custometc/CustomETCTest.java       | 83 ++++++++++++++++++++++
 19 files changed, 187 insertions(+), 53 deletions(-)

diff --git 
a/artemis-boot/src/main/java/org/apache/activemq/artemis/boot/Artemis.java 
b/artemis-boot/src/main/java/org/apache/activemq/artemis/boot/Artemis.java
index 73939a633d..4b86eacac2 100644
--- a/artemis-boot/src/main/java/org/apache/activemq/artemis/boot/Artemis.java
+++ b/artemis-boot/src/main/java/org/apache/activemq/artemis/boot/Artemis.java
@@ -26,8 +26,6 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 
 /**
  * <p>
@@ -37,8 +35,6 @@ import java.util.logging.Logger;
  */
 public class Artemis {
 
-   private static final Logger logger = 
Logger.getLogger(Artemis.class.getName());
-
    public static void main(String[] args) throws Throwable {
       String home = System.getProperty("artemis.home");
 
@@ -47,7 +43,22 @@ public class Artemis {
       String instance = System.getProperty("artemis.instance");
       File fileInstance = instance != null ? new File(instance) : null;
 
-      Object result = execute(fileHome, fileInstance, true, args);
+
+      String brokerEtc = System.getProperty("artemis.instance.etc");
+      File fileBrokerETC = null;
+      if (brokerEtc != null) {
+         brokerEtc = brokerEtc.replace("\\", "/");
+         fileBrokerETC = new File(brokerEtc);
+      } else {
+         if (instance != null) {
+            brokerEtc = instance + "/etc";
+            fileBrokerETC = new File(brokerEtc);
+         }
+      }
+
+
+
+      Object result = execute(fileHome, fileInstance, fileBrokerETC, true, 
args);
       if (result instanceof Exception) {
          // Set a nonzero status code for the exceptions caught and printed by 
org.apache.activemq.artemis.cli.Artemis.execute
          System.exit(1);
@@ -57,14 +68,14 @@ public class Artemis {
    /**
     * This is a good method for booting an embedded command
     */
-   public static Object execute(File artemisHome, File artemisInstance, 
boolean useSystemOut, List<String> args) throws Throwable {
-      return execute(artemisHome, artemisInstance, useSystemOut, 
args.toArray(new String[args.size()]));
+   public static Object execute(File artemisHome, File artemisInstance, File 
fileBrokerETC, boolean useSystemOut, List<String> args) throws Throwable {
+      return execute(artemisHome, artemisInstance, fileBrokerETC, 
useSystemOut, args.toArray(new String[args.size()]));
    }
 
    /**
     * This is a good method for booting an embedded command
     */
-   public static Object execute(File fileHome, File fileInstance, boolean 
useSystemOut, String... args) throws Throwable {
+   public static Object execute(File fileHome, File fileInstance, File 
fileBrokerETC, boolean useSystemOut, String... args) throws Throwable {
       ArrayList<File> dirs = new ArrayList<>();
       if (fileHome != null) {
          dirs.add(new File(fileHome, "lib"));
@@ -76,11 +87,16 @@ public class Artemis {
       ArrayList<URL> urls = new ArrayList<>();
 
       // Without the etc on the config, things like JGroups configuration 
wouldn't be loaded
-      if (fileInstance != null) {
-         File etcFile = new File(fileInstance, "etc");
+      if (fileBrokerETC == null && fileInstance != null) {
+         // the fileBrokerETC could be null if execute is called directly from 
an external module
+         fileBrokerETC = new File(fileInstance, "etc");
+      }
+
+      if (fileBrokerETC != null) {
          // Adding etc to the classLoader so modules can lookup for their 
configs
-         urls.add(etcFile.toURI().toURL());
+         urls.add(fileBrokerETC.toURI().toURL());
       }
+
       if (fileHome != null) {
          File etcFile = new File(fileHome, "etc");
          // Adding etc to the classLoader so modules can lookup for their 
configs
@@ -122,10 +138,10 @@ public class Artemis {
       URLClassLoader loader = new URLClassLoader(urls.toArray(new 
URL[urls.size()]));
       Thread.currentThread().setContextClassLoader(loader);
       Class<?> clazz = 
loader.loadClass("org.apache.activemq.artemis.cli.Artemis");
-      Method method = clazz.getMethod("execute", Boolean.TYPE, Boolean.TYPE, 
File.class, File.class, args.getClass());
+      Method method = clazz.getMethod("execute", Boolean.TYPE, Boolean.TYPE, 
File.class, File.class, File.class, args.getClass());
 
       try {
-         return method.invoke(null, useSystemOut, useSystemOut, fileHome, 
fileInstance, args);
+         return method.invoke(null, useSystemOut, useSystemOut, fileHome, 
fileInstance, fileBrokerETC, args);
       } catch (InvocationTargetException e) {
          throw e.getTargetException();
       } finally {
@@ -138,7 +154,7 @@ public class Artemis {
       try {
          urls.add(file.toURI().toURL());
       } catch (MalformedURLException e) {
-         logger.log(Level.WARNING, e.getMessage(), e);
+         e.printStackTrace();
       }
    }
 
diff --git 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/Artemis.java 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/Artemis.java
index 7609217c9b..f58e56dcf0 100644
--- a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/Artemis.java
+++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/Artemis.java
@@ -93,18 +93,26 @@ public class Artemis {
       String instance = System.getProperty("artemis.instance");
       File fileInstance = instance != null ? new File(instance) : null;
 
-      verifyManagementDTO(fileInstance);
 
-      execute(true, true, fileHome, fileInstance, args);
+      String brokerEtc = System.getProperty("artemis.instance.etc");
+      if (brokerEtc != null) {
+         brokerEtc = brokerEtc.replace("\\", "/");
+      } else {
+         brokerEtc = instance + "/etc";
+      }
+
+      File fileBrokerETC = new File(brokerEtc);
+
+      verifyManagementDTO(fileBrokerETC);
+
+      execute(true, true, fileHome, fileInstance, fileBrokerETC, args);
    }
 
 
    // Notice this has to happen before any Log4j is used.
    //        otherwise Log4j's JMX will start the JMX before this property was 
able to tbe set
-   public static void verifyManagementDTO(File fileInstance) {
-      if (fileInstance != null) {
-
-         File etc = new File(fileInstance, "etc");
+   public static void verifyManagementDTO(File etc) {
+      if (etc != null) {
          File management = new File(etc, "management.xml");
 
          try {
@@ -119,16 +127,21 @@ public class Artemis {
    }
 
    public static Object internalExecute(String... args) throws Exception {
-      return internalExecute(null, null, args);
+      return internalExecute(null, null, null, args);
    }
 
-   public static Object execute(File artemisHome, File artemisInstance, 
List<String> args) throws Exception {
-      return execute(false, false, artemisHome, artemisInstance, 
args.toArray(new String[args.size()]));
+   public static Object execute(File artemisHome, File artemisInstance, File 
etcFolder, List<String> args) throws Exception {
+      return execute(false, false, artemisHome, artemisInstance, etcFolder, 
args.toArray(new String[args.size()]));
    }
 
-   public static Object execute(boolean inputEnabled, boolean useSystemOut, 
File artemisHome, File artemisInstance, String... args) throws Exception {
+   public static Object execute(boolean inputEnabled, boolean useSystemOut, 
File artemisHome, File artemisInstance, File etcFolder, String... args) throws 
Exception {
+
+      // using a default etc in case that is not set in the variables
+      if (etcFolder == null && artemisInstance != null) {
+         etcFolder = new File(artemisInstance, "etc");
+      }
 
-      verifyManagementDTO(artemisInstance);
+      verifyManagementDTO(etcFolder);
 
       if (inputEnabled) {
          InputAbstract.enableInput();
@@ -145,7 +158,7 @@ public class Artemis {
       ActionContext.setSystem(context);
 
       try {
-         return internalExecute(artemisHome, artemisInstance, args, context);
+         return internalExecute(artemisHome, artemisInstance, etcFolder, args, 
context);
       } catch (ConfigurationException configException) {
          context.err.println(configException.getMessage());
          context.out.println();
@@ -177,13 +190,13 @@ public class Artemis {
     * This method is used to validate exception returns.
     * Useful on test cases
     */
-   private static Object internalExecute(File artemisHome, File 
artemisInstance, String[] args) throws Exception {
-      return internalExecute(artemisHome, artemisInstance, args, 
ActionContext.system());
+   private static Object internalExecute(File artemisHome, File 
artemisInstance, File etcFolder, String[] args) throws Exception {
+      return internalExecute(artemisHome, artemisInstance, etcFolder, args, 
ActionContext.system());
    }
 
-   public static Object internalExecute(File artemisHome, File 
artemisInstance, String[] args, ActionContext context) throws Exception {
+   public static Object internalExecute(File artemisHome, File 
artemisInstance, File etcFolder, String[] args, ActionContext context) throws 
Exception {
       Action action = builder(artemisInstance).build().parse(args);
-      action.setHomeValues(artemisHome, artemisInstance);
+      action.setHomeValues(artemisHome, artemisInstance, etcFolder);
 
       if (action.isVerbose()) {
          context.out.print("Executing " + action.getClass().getName() + " ");
diff --git 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Action.java
 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Action.java
index 29ddd08808..5ed583754d 100644
--- 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Action.java
+++ 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Action.java
@@ -22,7 +22,7 @@ public interface Action {
 
    boolean isVerbose();
 
-   void setHomeValues(File brokerHome, File brokerInstance);
+   void setHomeValues(File brokerHome, File brokerInstance, File etcFolder);
 
    Object execute(ActionContext context) throws Exception;
 
diff --git 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/ActionAbstract.java
 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/ActionAbstract.java
index 54044616fb..3c4e73d327 100644
--- 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/ActionAbstract.java
+++ 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/ActionAbstract.java
@@ -63,13 +63,16 @@ public abstract class ActionAbstract implements Action {
    }
 
    @Override
-   public void setHomeValues(File brokerHome, File brokerInstance) {
+   public void setHomeValues(File brokerHome, File brokerInstance, File 
etcFolder) {
       if (brokerHome != null) {
          this.brokerHome = brokerHome.getAbsolutePath();
       }
       if (brokerInstance != null) {
          this.brokerInstance = brokerInstance.getAbsolutePath();
       }
+      if (etcFolder != null) {
+         this.brokerEtc = etcFolder.getAbsolutePath();
+      }
    }
 
    @Override
diff --git 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/HelpAction.java
 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/HelpAction.java
index ebbacddbaa..571de5a655 100644
--- 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/HelpAction.java
+++ 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/HelpAction.java
@@ -28,7 +28,7 @@ public class HelpAction extends Help implements Action {
    }
 
    @Override
-   public void setHomeValues(File brokerHome, File brokerInstance) {
+   public void setHomeValues(File brokerHome, File brokerInstance, File 
etcFolder) {
 
    }
 
diff --git 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/HelpAddress.java
 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/HelpAddress.java
index 0ed89793cd..ed3f9d045c 100644
--- 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/HelpAddress.java
+++ 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/HelpAddress.java
@@ -35,7 +35,7 @@ public class HelpAddress extends Help implements Action {
    }
 
    @Override
-   public void setHomeValues(File brokerHome, File brokerInstance) {
+   public void setHomeValues(File brokerHome, File brokerInstance, File etc) {
    }
 
    @Override
diff --git 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/check/HelpCheck.java
 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/check/HelpCheck.java
index 67508f883f..46aa352809 100644
--- 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/check/HelpCheck.java
+++ 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/check/HelpCheck.java
@@ -35,7 +35,7 @@ public class HelpCheck extends Help implements Action {
    }
 
    @Override
-   public void setHomeValues(File brokerHome, File brokerInstance) {
+   public void setHomeValues(File brokerHome, File brokerInstance, File etc) {
    }
 
    @Override
diff --git 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/queue/HelpQueue.java
 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/queue/HelpQueue.java
index dc2bd453b0..afe724f6ec 100644
--- 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/queue/HelpQueue.java
+++ 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/queue/HelpQueue.java
@@ -35,7 +35,7 @@ public class HelpQueue extends Help implements Action {
    }
 
    @Override
-   public void setHomeValues(File brokerHome, File brokerInstance) {
+   public void setHomeValues(File brokerHome, File brokerInstance, File etc) {
    }
 
    @Override
diff --git 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/HelpData.java
 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/HelpData.java
index 86b9a60076..dcd911d69a 100644
--- 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/HelpData.java
+++ 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/HelpData.java
@@ -35,7 +35,7 @@ public class HelpData extends Help implements Action {
    }
 
    @Override
-   public void setHomeValues(File brokerHome, File brokerInstance) {
+   public void setHomeValues(File brokerHome, File brokerInstance, File etc) {
 
    }
 
diff --git 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/user/HelpUser.java
 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/user/HelpUser.java
index 2e0ce2b0b2..acf3cd95f9 100644
--- 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/user/HelpUser.java
+++ 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/user/HelpUser.java
@@ -34,7 +34,7 @@ public class HelpUser extends Help implements Action {
    }
 
    @Override
-   public void setHomeValues(File brokerHome, File brokerInstance) {
+   public void setHomeValues(File brokerHome, File brokerInstance, File 
etcFolder) {
    }
 
    @Override
diff --git 
a/artemis-cli/src/test/java/org/apache/activemq/artemis/cli/commands/messages/ConnectionAbstractTest.java
 
b/artemis-cli/src/test/java/org/apache/activemq/artemis/cli/commands/messages/ConnectionAbstractTest.java
index eae0128cd4..aa5851112a 100644
--- 
a/artemis-cli/src/test/java/org/apache/activemq/artemis/cli/commands/messages/ConnectionAbstractTest.java
+++ 
b/artemis-cli/src/test/java/org/apache/activemq/artemis/cli/commands/messages/ConnectionAbstractTest.java
@@ -34,7 +34,7 @@ public class ConnectionAbstractTest {
 
       System.setProperty("artemis.instance.etc", 
brokerInstanceEtc.getAbsolutePath());
       try {
-         connectionAbstract.setHomeValues(null, 
brokerInstanceEtc.getParentFile());
+         connectionAbstract.setHomeValues(null, 
brokerInstanceEtc.getParentFile(), null);
 
          connectionAbstract.execute(new TestActionContext());
 
@@ -54,7 +54,7 @@ public class ConnectionAbstractTest {
 
       System.setProperty("artemis.instance.etc", 
brokerInstanceEtc.getAbsolutePath());
       try {
-         connectionAbstract.setHomeValues(null, 
brokerInstanceEtc.getParentFile());
+         connectionAbstract.setHomeValues(null, 
brokerInstanceEtc.getParentFile(), null);
          connectionAbstract.setAcceptor("amqp");
 
          connectionAbstract.execute(new TestActionContext());
diff --git 
a/artemis-cli/src/test/java/org/apache/activemq/artemis/cli/commands/messages/TransferTest.java
 
b/artemis-cli/src/test/java/org/apache/activemq/artemis/cli/commands/messages/TransferTest.java
index 5ef1c3db23..44556f3822 100644
--- 
a/artemis-cli/src/test/java/org/apache/activemq/artemis/cli/commands/messages/TransferTest.java
+++ 
b/artemis-cli/src/test/java/org/apache/activemq/artemis/cli/commands/messages/TransferTest.java
@@ -35,7 +35,7 @@ public class TransferTest {
 
       System.setProperty("artemis.instance.etc", 
brokerInstanceEtc.getAbsolutePath());
       try {
-         transfer.setHomeValues(null, brokerInstanceEtc.getParentFile());
+         transfer.setHomeValues(null, brokerInstanceEtc.getParentFile(), null);
 
          try {
             transfer.execute(new TestActionContext());
@@ -58,7 +58,7 @@ public class TransferTest {
 
       System.setProperty("artemis.instance.etc", 
brokerInstanceEtc.getAbsolutePath());
       try {
-         transfer.setHomeValues(null, brokerInstanceEtc.getParentFile());
+         transfer.setHomeValues(null, brokerInstanceEtc.getParentFile(), null);
          transfer.setSourceAcceptor("amqp");
 
          try {
diff --git 
a/artemis-cli/src/test/java/org/apache/activemq/cli/test/ArtemisTest.java 
b/artemis-cli/src/test/java/org/apache/activemq/cli/test/ArtemisTest.java
index 99da77ff8b..3d09920b72 100644
--- a/artemis-cli/src/test/java/org/apache/activemq/cli/test/ArtemisTest.java
+++ b/artemis-cli/src/test/java/org/apache/activemq/cli/test/ArtemisTest.java
@@ -1287,14 +1287,14 @@ public class ArtemisTest extends CliTestBase {
           * it will read from the InputStream in the ActionContext. It can't 
read the password since it's using
           * System.console.readPassword() for that.
           */
-         assertEquals(Integer.valueOf(100), Artemis.internalExecute(null, 
null, new String[] {"producer", "--destination", "queue://q1", 
"--message-count", "100", "--password", "admin"}, context));
+         assertEquals(Integer.valueOf(100), Artemis.internalExecute(null, 
null, null, new String[] {"producer", "--destination", "queue://q1", 
"--message-count", "100", "--password", "admin"}, context));
 
          /*
           * This is the same as above except it will prompt the user to 
re-enter both the URL and the username.
           */
          in = new 
ByteArrayInputStream("tcp://localhost:61616\nadmin\n".getBytes());
          context = new ActionContext(in, System.out, System.err);
-         assertEquals(Integer.valueOf(100), Artemis.internalExecute(null, 
null, new String[] {"producer", "--destination", "queue://q1", 
"--message-count", "100", "--password", "admin", "--url", 
"tcp://badhost:11111"}, context));
+         assertEquals(Integer.valueOf(100), Artemis.internalExecute(null, 
null, null, new String[] {"producer", "--destination", "queue://q1", 
"--message-count", "100", "--password", "admin", "--url", 
"tcp://badhost:11111"}, context));
       } finally {
          stopServer();
       }
@@ -1318,14 +1318,14 @@ public class ArtemisTest extends CliTestBase {
           * it will read from the InputStream in the ActionContext. It can't 
read the password since it's using
           * System.console.readPassword() for that.
           */
-         assertTrue((int) Artemis.internalExecute(null, null, new String[] 
{"queue", "stat", "--password", "admin"}, context) > 0);
+         assertTrue((int) Artemis.internalExecute(null, null, null, new 
String[] {"queue", "stat", "--password", "admin"}, context) > 0);
 
          /*
           * This is the same as above except it will prompt the user to 
re-enter both the URL and the username.
           */
          in = new 
ByteArrayInputStream("tcp://localhost:61616\nadmin\n".getBytes());
          context = new ActionContext(in, System.out, System.err);
-         assertTrue((int) Artemis.internalExecute(null, null, new String[] 
{"queue", "stat", "--password", "admin", "--url", "tcp://badhost:11111"}, 
context) > 0);
+         assertTrue((int) Artemis.internalExecute(null, null, null, new 
String[] {"queue", "stat", "--password", "admin", "--url", 
"tcp://badhost:11111"}, context) > 0);
       } finally {
          stopServer();
       }
diff --git 
a/artemis-cli/src/test/java/org/apache/activemq/cli/test/CheckTest.java 
b/artemis-cli/src/test/java/org/apache/activemq/cli/test/CheckTest.java
index 3f0215090c..54373f984a 100644
--- a/artemis-cli/src/test/java/org/apache/activemq/cli/test/CheckTest.java
+++ b/artemis-cli/src/test/java/org/apache/activemq/cli/test/CheckTest.java
@@ -154,7 +154,7 @@ public class CheckTest extends CliTestBase {
                    "--replicated", "--host", "127.0.0.1", "--default-port", 
"61626", "--silent", "--no-autotune", "--no-web", "--require-login", "--slave");
 
       System.setProperty("artemis.instance", masterInstance.getAbsolutePath());
-      Object master = Artemis.execute(false, false, null, masterInstance, 
"run");
+      Object master = Artemis.execute(false, false, null, masterInstance, 
null, "run");
       ActiveMQServerImpl masterServer = 
(ActiveMQServerImpl)((Pair)master).getB();
 
       try {
@@ -181,7 +181,7 @@ public class CheckTest extends CliTestBase {
          }
 
          LockAbstract.unlock();
-         Object slave = Artemis.execute(false, false, null, slaveInstance, 
"run");
+         Object slave = Artemis.execute(false, false, null, slaveInstance, 
null, "run");
          ActiveMQServerImpl slaveServer = 
(ActiveMQServerImpl)((Pair)slave).getB();
 
          Wait.assertTrue("Backup isn't announced", () -> 
slaveServer.getBackupManager() != null &&
@@ -197,7 +197,7 @@ public class CheckTest extends CliTestBase {
             nodeCheck.setPeers(2);
             Assert.assertEquals(3, nodeCheck.execute(context));
          } finally {
-            Artemis.internalExecute(null, slaveInstance, new String[] 
{"stop"}, ActionContext.system());
+            Artemis.internalExecute(null, slaveInstance, null, new String[] 
{"stop"}, ActionContext.system());
          }
       } finally {
          stopServer();
diff --git 
a/artemis-cli/src/test/java/org/apache/activemq/cli/test/OptionsValidationTest.java
 
b/artemis-cli/src/test/java/org/apache/activemq/cli/test/OptionsValidationTest.java
index 31935f3668..9f9e0b50cc 100644
--- 
a/artemis-cli/src/test/java/org/apache/activemq/cli/test/OptionsValidationTest.java
+++ 
b/artemis-cli/src/test/java/org/apache/activemq/cli/test/OptionsValidationTest.java
@@ -103,7 +103,7 @@ public class OptionsValidationTest extends CliTestBase {
          invalidArgs = new String[] {group, command, "--blahblah-" + command, 
"--rubbish-" + command + "=" + "more-rubbish", "--input=blahblah"};
       }
       try {
-         Artemis.internalExecute(null, needInstance ? this.artemisInstance : 
null, invalidArgs, context);
+         Artemis.internalExecute(null, needInstance ? this.artemisInstance : 
null, null, invalidArgs, context);
          fail("cannot detect invalid options");
       } catch (InvalidOptionsError e) {
          assertTrue(e.getMessage().contains("Found unexpected parameters"));
diff --git 
a/artemis-maven-plugin/src/main/java/org/apache/activemq/artemis/maven/ArtemisCLIPlugin.java
 
b/artemis-maven-plugin/src/main/java/org/apache/activemq/artemis/maven/ArtemisCLIPlugin.java
index c1c3851d27..1fbd4832e7 100644
--- 
a/artemis-maven-plugin/src/main/java/org/apache/activemq/artemis/maven/ArtemisCLIPlugin.java
+++ 
b/artemis-maven-plugin/src/main/java/org/apache/activemq/artemis/maven/ArtemisCLIPlugin.java
@@ -50,6 +50,10 @@ public class ArtemisCLIPlugin extends ArtemisAbstractPlugin {
    @Parameter(defaultValue = "${basedir}/target/server0", required = true)
    private File location;
 
+
+   @Parameter
+   private File etc;
+
    @Parameter
    private String[] args;
 
@@ -127,7 +131,7 @@ public class ArtemisCLIPlugin extends ArtemisAbstractPlugin 
{
                }
             }
          } else {
-            Artemis.execute(home, location, useSystemOutput, args);
+            Artemis.execute(home, location, etc, useSystemOutput, args);
          }
 
          Thread.sleep(600);
diff --git 
a/artemis-maven-plugin/src/main/java/org/apache/activemq/artemis/maven/ArtemisCreatePlugin.java
 
b/artemis-maven-plugin/src/main/java/org/apache/activemq/artemis/maven/ArtemisCreatePlugin.java
index 2c8a5c623e..792ba7aca9 100644
--- 
a/artemis-maven-plugin/src/main/java/org/apache/activemq/artemis/maven/ArtemisCreatePlugin.java
+++ 
b/artemis-maven-plugin/src/main/java/org/apache/activemq/artemis/maven/ArtemisCreatePlugin.java
@@ -264,7 +264,7 @@ public class ArtemisCreatePlugin extends 
ArtemisAbstractPlugin {
          commandLineStream.println("# These are the commands used to create " 
+ instance.getName());
          commandLineStream.println(getCommandline(listCommands));
 
-         Artemis.execute(home, null, useSystemOutput, listCommands);
+         Artemis.execute(home, null, null, useSystemOutput, listCommands);
 
          if (configuration != null) {
             String[] list = configuration.list();
diff --git a/tests/smoke-tests/pom.xml b/tests/smoke-tests/pom.xml
index bd43037ba9..a2951950a6 100644
--- a/tests/smoke-tests/pom.xml
+++ b/tests/smoke-tests/pom.xml
@@ -1180,7 +1180,6 @@
                      </args>
                   </configuration>
                </execution>
-
                <execution>
                   <phase>test-compile</phase>
                   <id>create-create-nettynative</id>
@@ -1197,6 +1196,22 @@
                      
<configuration>${basedir}/target/classes/servers/nettynative</configuration>
                   </configuration>
                </execution>
+               <execution>
+                  <phase>test-compile</phase>
+                  <id>create-custom-etc</id>
+                  <goals>
+                     <goal>create</goal>
+                  </goals>
+                  <configuration>
+                     <allowAnonymous>true</allowAnonymous>
+                     <noWeb>true</noWeb>
+                     <instance>${basedir}/target/customETC/server</instance>
+                     <args>
+                        <arg>--etc</arg>
+                        <arg>${basedir}/target/customETC/theCustomETC</arg>
+                     </args>
+                  </configuration>
+               </execution>
             </executions>
             <dependencies>
                <dependency>
diff --git 
a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/custometc/CustomETCTest.java
 
b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/custometc/CustomETCTest.java
new file mode 100644
index 0000000000..e0ad4d155a
--- /dev/null
+++ 
b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/custometc/CustomETCTest.java
@@ -0,0 +1,83 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.
+ */
+
+package org.apache.activemq.artemis.tests.smoke.custometc;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Queue;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+
+import java.io.File;
+import java.nio.file.Files;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.apache.activemq.artemis.tests.smoke.common.SmokeTestBase;
+import org.apache.activemq.artemis.tests.util.CFUtil;
+import org.apache.activemq.artemis.utils.RandomUtil;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class CustomETCTest extends SmokeTestBase {
+
+   public static final String SERVER_NAME_0 = "customETC/server";
+
+   public CustomETCTest() {
+   }
+
+   @Before
+   public void before() throws Exception {
+      cleanupData(SERVER_NAME_0);
+      disableCheckThread();
+      startServer(SERVER_NAME_0, 0, 30000);
+   }
+
+   @Test
+   public void testSimpleSendReceive() throws Exception {
+
+      ConnectionFactory cf = CFUtil.createConnectionFactory("core", 
"tcp://localhost:61616");
+      try (Connection connection = cf.createConnection()) {
+         Session session = connection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
+         Queue queue = session.createQueue(getName());
+         MessageConsumer consumer = session.createConsumer(queue);
+         MessageProducer producer = session.createProducer(queue);
+         String text = RandomUtil.randomString();
+         connection.start();
+         producer.send(session.createTextMessage(text));
+         TextMessage txtMessage = (TextMessage) consumer.receive(5000);
+         Assert.assertNotNull(txtMessage);
+         Assert.assertEquals(text, txtMessage.getText());
+      }
+
+      File logLocation = new File(getServerLocation(SERVER_NAME_0) + 
"/log/artemis.log");
+      Assert.assertTrue(logLocation.exists());
+
+      AtomicBoolean started = new AtomicBoolean(false);
+      Files.lines(logLocation.toPath()).forEach(line -> {
+         if (line.contains("AMQ221007")) { // server started
+            started.set(true);
+         }
+      });
+
+      Assert.assertTrue(started.get());
+   }
+
+}
\ No newline at end of file

Reply via email to