Author: orudyy
Date: Thu Jun 26 15:32:02 2014
New Revision: 1605820

URL: http://svn.apache.org/r1605820
Log:
QPID-5853: Use quotes in broker command line provided by maven profile in order 
to allow command line arguments with spaces

Modified:
    qpid/trunk/qpid/java/pom.xml
    
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/BrokerCommandHelper.java
    
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/BrokerCommandHelperTest.java

Modified: qpid/trunk/qpid/java/pom.xml
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/pom.xml?rev=1605820&r1=1605819&r2=1605820&view=diff
==============================================================================
--- qpid/trunk/qpid/java/pom.xml (original)
+++ qpid/trunk/qpid/java/pom.xml Thu Jun 26 15:32:02 2014
@@ -60,8 +60,8 @@
     <profile.broker.type>internal</profile.broker.type>
     <profile.broker.stopped>Exception</profile.broker.stopped>
     <profile.broker.ready>BRK-1004</profile.broker.ready>
-    
<profile.broker.command>${qpid.home}${file.separator}bin${file.separator}qpid-server
 -sp ${at.sign}STORE_PATH -st ${at.sign}STORE_TYPE -l 
${at.sign}LOG_CONFIG_FILE</profile.broker.command>
-    
<profile.broker.command.windows>${qpid.home}${file.separator}bin${file.separator}qpid-server.bat
 -sp ${at.sign}STORE_PATH -st ${at.sign}STORE_TYPE -l 
${at.sign}LOG_CONFIG_FILE</profile.broker.command.windows>
+    
<profile.broker.command>"${qpid.home}${file.separator}bin${file.separator}qpid"-server
 -sp ${at.sign}STORE_PATH -st ${at.sign}STORE_TYPE -l 
${at.sign}LOG_CONFIG_FILE</profile.broker.command>
+    
<profile.broker.command.windows>"${qpid.home}${file.separator}bin${file.separator}qpid"-server.bat
 -sp ${at.sign}STORE_PATH -st ${at.sign}STORE_TYPE -l 
${at.sign}LOG_CONFIG_FILE</profile.broker.command.windows>
     <profile.test.excludes>Excludes JavaExcludes ${profile}.excludes 
${profile.specific.excludes}</profile.test.excludes>
     <profile.specific.excludes>JavaTransientExcludes 
Java010Excludes</profile.specific.excludes>
     <profile.broker.version>v0_10</profile.broker.version>
@@ -671,7 +671,7 @@
         <profile.broker.type>spawned</profile.broker.type>
         <profile.broker.stopped>Exception constructed</profile.broker.stopped>
         <profile.broker.ready>Listening on TCP</profile.broker.ready>
-        <profile.broker.command>${cpp-broker-dir}/qpidd -p ${at.sign}PORT 
--data-dir ${qpid.work}/${at.sign}PORT -t --auth no 
--no-module-dir</profile.broker.command>
+        <profile.broker.command>"${cpp-broker-dir}/qpidd" -p ${at.sign}PORT 
--data-dir "${qpid.work}/${at.sign}PORT" -t --auth no 
--no-module-dir</profile.broker.command>
         <profile.broker.command.windows />
         <profile.test.excludes>Excludes CPPExcludes ${profile}.excludes 
${profile.specific.excludes} cpp.excludes</profile.test.excludes>
         <profile.specific.excludes>CPPPrefetchExcludes 
CPPTransientExcludes</profile.specific.excludes>

Modified: 
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/BrokerCommandHelper.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/BrokerCommandHelper.java?rev=1605820&r1=1605819&r2=1605820&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/BrokerCommandHelper.java
 (original)
+++ 
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/BrokerCommandHelper.java
 Thu Jun 26 15:32:02 2014
@@ -18,7 +18,6 @@
 package org.apache.qpid.test.utils;
 
 import java.io.File;
-import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -35,7 +34,7 @@ public class BrokerCommandHelper
 
     public BrokerCommandHelper(String brokerCommandTemplate)
     {
-        _brokerCommandTemplateAsList = new 
LinkedList<String>(Arrays.asList(brokerCommandTemplate.split("\\s+")));
+        _brokerCommandTemplateAsList = split(brokerCommandTemplate);
     }
 
     public String[] getBrokerCommand( int port, String storePath, String 
storeType, File logConfigFile)
@@ -76,4 +75,37 @@ public class BrokerCommandHelper
         _brokerCommandTemplateAsList.remove(logOptionIndex);
         _brokerCommandTemplateAsList.remove(logOptionIndex);
     }
+
+    private static List<String> split(String str)
+    {
+        List<String> tokens = new LinkedList<String>();
+        boolean inQuote = false;
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < str.length(); i++)
+        {
+            char c = str.charAt(i);
+
+            if (c == '\"' || c == '\'')
+            {
+                inQuote = !inQuote;
+            }
+            else if (c == ' ' && !inQuote)
+            {
+                if (sb.length() > 0)
+                {
+                    tokens.add(sb.toString());
+                    sb.delete(0, sb.length());
+                }
+            }
+            else
+            {
+                sb.append(c);
+            }
+        }
+        if (sb.length() > 0)
+        {
+            tokens.add(sb.toString());
+        }
+        return tokens;
+    }
 }

Modified: 
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/BrokerCommandHelperTest.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/BrokerCommandHelperTest.java?rev=1605820&r1=1605819&r2=1605820&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/BrokerCommandHelperTest.java
 (original)
+++ 
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/BrokerCommandHelperTest.java
 Thu Jun 26 15:32:02 2014
@@ -23,22 +23,38 @@ import java.io.File;
 
 public class BrokerCommandHelperTest extends QpidTestCase
 {
-    private BrokerCommandHelper _brokerCommandHelper = new 
BrokerCommandHelper("qpid -p @PORT -sp @STORE_PATH -st @STORE_TYPE -l 
@LOG_CONFIG_FILE");
+    private static final String PATH_TO_QPID_EXECUTABLE = "/path  / to (/qpid";
+    private static final String ARGUMENT_WITH_SPACES = " blah / blah /blah";
+    private static final String ARGUMENT_PORT = "-p";
+    private static final String ARGUMENT_PORT_VALUE = "@PORT";
+    private static final String ARGUMENT_STORE_PATH = "-sp";
+    private static final String ARGUMENT_STORE_PATH_VALUE = "@STORE_PATH";
+    private static final String ARGUMENT_STORE_TYPE = "-st";
+    private static final String ARGUMENT_STORE_TYPE_VALUE = "@STORE_TYPE";
+    private static final String ARGUMENT_LOG = "-l";
+    private static final String ARGUMENT_LOG_VALUE = "@LOG_CONFIG_FILE";
 
-    private File logConfigFile = mock(File.class);
+    private BrokerCommandHelper _brokerCommandHelper;
+
+    private File _logConfigFile = mock(File.class);
 
     @Override
     public void setUp()
     {
-        when(logConfigFile.getAbsolutePath()).thenReturn("log Config File");
+        when(_logConfigFile.getAbsolutePath()).thenReturn("log Config File");
+        _brokerCommandHelper = new BrokerCommandHelper("\"" + 
PATH_TO_QPID_EXECUTABLE + "\" " + ARGUMENT_PORT + "     "
+                + ARGUMENT_PORT_VALUE + " " + ARGUMENT_STORE_PATH + " " + 
ARGUMENT_STORE_PATH_VALUE + " " + ARGUMENT_STORE_TYPE
+                + " " + ARGUMENT_STORE_TYPE_VALUE + " " + ARGUMENT_LOG + " " + 
ARGUMENT_LOG_VALUE + "     '" + ARGUMENT_WITH_SPACES
+                + "'");
     }
 
     public void testGetBrokerCommand()
     {
-        String[] brokerCommand = _brokerCommandHelper.getBrokerCommand(1, 
"configFile", "json", logConfigFile);
+        String[] brokerCommand = _brokerCommandHelper.getBrokerCommand(1, 
"path to config file", "json", _logConfigFile);
 
-        String[] expected = { "qpid", "-p", "1", "-sp", "configFile", "-st", 
"json", "-l", "\"log Config File\"" };
-        assertEquals("Unexpected broker command", 9, brokerCommand.length);
+        String[] expected = { PATH_TO_QPID_EXECUTABLE, ARGUMENT_PORT, "1", 
ARGUMENT_STORE_PATH,  "path to config file",
+                ARGUMENT_STORE_TYPE, "json", ARGUMENT_LOG, "\"log Config 
File\"", ARGUMENT_WITH_SPACES };
+        assertEquals("Unexpected broker command", expected.length, 
brokerCommand.length);
         for (int i = 0; i < expected.length; i++)
         {
             assertEquals("Unexpected command part value at " + i,expected[i], 
brokerCommand[i] );
@@ -48,10 +64,12 @@ public class BrokerCommandHelperTest ext
     public void testRemoveBrokerCommandLog4JFile()
     {
         _brokerCommandHelper.removeBrokerCommandLog4JFile();
-        String[] brokerCommand = _brokerCommandHelper.getBrokerCommand(1, 
"configFile", "json", logConfigFile);
+        String[] brokerCommand = _brokerCommandHelper.getBrokerCommand(1, 
"configFile", "json", _logConfigFile);
+
+        String[] expected = { PATH_TO_QPID_EXECUTABLE, ARGUMENT_PORT, "1", 
ARGUMENT_STORE_PATH, "configFile",
+                ARGUMENT_STORE_TYPE, "json", ARGUMENT_WITH_SPACES };
 
-        String[] expected = { "qpid", "-p", "1", "-sp", "configFile", "-st", 
"json" };
-        assertEquals("Unexpected broker command", 7, brokerCommand.length);
+        assertEquals("Unexpected broker command", expected.length, 
brokerCommand.length);
         for (int i = 0; i < expected.length; i++)
         {
             assertEquals("Unexpected command part value at " + i,expected[i], 
brokerCommand[i] );



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to