Author: rgodfrey
Date: Wed Apr 29 17:20:55 2015
New Revision: 1676802

URL: http://svn.apache.org/r1676802
Log:
QPID-6520 : [Java Tests] fix failing tests on windows

Modified:
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/group/FileGroupDatabase.java
    
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseTest.java
    qpid/java/trunk/common/src/main/java/org/apache/qpid/util/FileUtils.java
    
qpid/java/trunk/systests/src/main/java/org/apache/qpid/test/utils/SpawnedBrokerHolder.java
    
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/GroupProviderRestTest.java
    
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/GroupRestTest.java
    
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/acl/GroupRestACLTest.java

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/group/FileGroupDatabase.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/group/FileGroupDatabase.java?rev=1676802&r1=1676801&r2=1676802&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/group/FileGroupDatabase.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/group/FileGroupDatabase.java
 Wed Apr 29 17:20:55 2015
@@ -186,7 +186,7 @@ public class FileGroupDatabase implement
             }
             catch (IOException e)
             {
-                throw new ServerScopedRuntimeException("Unable to persist 
change to file " + _groupFile);
+                throw new ServerScopedRuntimeException("Unable to persist 
change to file " + _groupFile,e);
             }
         }
     }

Modified: 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseTest.java?rev=1676802&r1=1676801&r2=1676802&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseTest.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseTest.java
 Wed Apr 29 17:20:55 2015
@@ -427,7 +427,10 @@ public class FileGroupDatabaseTest exten
             props.put(group, users);
         }
 
-        props.store(new FileOutputStream(_groupFile), "test group file");
+        try(FileOutputStream fileOutputStream = new 
FileOutputStream(_groupFile))
+        {
+            props.store(fileOutputStream, "test group file");
+        }
     }
 
     private String createEmptyTestGroupFile() throws IOException

Modified: 
qpid/java/trunk/common/src/main/java/org/apache/qpid/util/FileUtils.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/common/src/main/java/org/apache/qpid/util/FileUtils.java?rev=1676802&r1=1676801&r2=1676802&view=diff
==============================================================================
--- qpid/java/trunk/common/src/main/java/org/apache/qpid/util/FileUtils.java 
(original)
+++ qpid/java/trunk/common/src/main/java/org/apache/qpid/util/FileUtils.java 
Wed Apr 29 17:20:55 2015
@@ -20,6 +20,9 @@
  */
 package org.apache.qpid.util;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.io.BufferedInputStream;
 import java.io.BufferedReader;
 import java.io.ByteArrayOutputStream;
@@ -41,6 +44,8 @@ import java.util.List;
  */
 public class FileUtils
 {
+    private static final Logger LOG = LoggerFactory.getLogger(FileUtils.class);
+
     private FileUtils()
     {
     }
@@ -294,6 +299,7 @@ public class FileUtils
                 // This can occur if the file is deleted outside the JVM
                 if (files == null)
                 {
+                    LOG.debug("Recursive delete failed as file was deleted 
outside JVM");
                     return false;
                 }
 
@@ -302,13 +308,23 @@ public class FileUtils
                     success = delete(files[i], true) && success;
                 }
 
-                return success && file.delete();
+                final boolean directoryDeleteSuccess = file.delete();
+                if(!directoryDeleteSuccess)
+                {
+                    LOG.debug("Failed to delete " + file.getPath());
+                }
+                return success && directoryDeleteSuccess;
             }
 
             return false;
         }
 
-        return file.delete();
+        success = file.delete();
+        if(!success)
+        {
+            LOG.debug("Failed to delete " + file.getPath());
+        }
+        return success;
     }
 
     public static class UnableToCopyException extends Exception

Modified: 
qpid/java/trunk/systests/src/main/java/org/apache/qpid/test/utils/SpawnedBrokerHolder.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/main/java/org/apache/qpid/test/utils/SpawnedBrokerHolder.java?rev=1676802&r1=1676801&r2=1676802&view=diff
==============================================================================
--- 
qpid/java/trunk/systests/src/main/java/org/apache/qpid/test/utils/SpawnedBrokerHolder.java
 (original)
+++ 
qpid/java/trunk/systests/src/main/java/org/apache/qpid/test/utils/SpawnedBrokerHolder.java
 Wed Apr 29 17:20:55 2015
@@ -57,6 +57,7 @@ public class SpawnedBrokerHolder impleme
 
     private  Process _process;
     private  Integer _pid;
+    private List<String> _windowsPids;
     private Set<Integer> _portsUsedByBroker;
     private String _brokerCommand;
 
@@ -137,9 +138,10 @@ public class SpawnedBrokerHolder impleme
         // Add all the specified system properties to QPID_OPTS
         if (!_jvmOptions.isEmpty())
         {
+            boolean isWindows = SystemUtils.isWindows();
             for (String key : _jvmOptions.keySet())
             {
-                qpidOpts += " -D" + key + "=" + _jvmOptions.get(key);
+                qpidOpts += " -D" + key + "=" +(isWindows ? 
doWindowsCommandEscaping(_jvmOptions.get(key)) : _jvmOptions.get(key));
             }
         }
 
@@ -188,6 +190,8 @@ public class SpawnedBrokerHolder impleme
                     + standardOutputPiper.getStopLine());
         }
 
+        _windowsPids = retrieveWindowsPidsIfPossible();
+
         try
         {
             //test that the broker is still running and hasn't exited 
unexpectedly
@@ -203,6 +207,19 @@ public class SpawnedBrokerHolder impleme
 
     }
 
+    private String doWindowsCommandEscaping(String value)
+    {
+        if(value.contains("\"") && !value.startsWith("\""))
+        {
+        return "\"" + value.replaceAll("\"", "\"\"") + "\"";
+
+        }
+        else
+        {
+            return value;
+        }
+    }
+
     protected void createBrokerWork(final String qpidWork)
     {
         if (qpidWork != null)
@@ -259,7 +276,7 @@ public class SpawnedBrokerHolder impleme
         waitUntilPortsAreFree();
     }
 
-    private void doWindowsKill()
+    private List<String> retrieveWindowsPidsIfPossible()
     {
         try
         {
@@ -295,36 +312,64 @@ public class SpawnedBrokerHolder impleme
                             }
                             children.add(processIdStr);
                         }
-                        if (line.substring(0, _brokerCommand.length() + 7)
-                                .toLowerCase()
+                        if (line.toLowerCase()
                                 .contains(_brokerCommand.toLowerCase()))
                         {
                             parentProcess = processIdStr;
                         }
 
                     }
-                    if (parentProcess != null)
+
+                }
+                LOGGER.debug("Parent process: " + parentProcess);
+                if (parentProcess != null)
+                {
+                    List<String> returnVal = new ArrayList<>();
+                    returnVal.add(parentProcess);
+                    List<String> children = 
parentProcessMap.get(parentProcess);
+                    if (children != null)
                     {
-                        List<String> children = 
parentProcessMap.get(parentProcess);
-                        if (children != null)
+                        for (String child : children)
                         {
-                            for (String child : children)
-                            {
-                                p = Runtime.getRuntime().exec(new 
String[]{"taskkill", "/PID", child, "/T", "/F"});
-                                consumeAllOutput(p);
-                            }
+                            returnVal.add(child);
                         }
-                        p = Runtime.getRuntime().exec(new String[]{"taskkill", 
"/PID", parentProcess, "/T", "/F"});
-                        consumeAllOutput(p);
                     }
-
+                    return returnVal;
                 }
+
+
             }
         }
         catch (IOException e)
         {
             LOGGER.error("Error whilst killing process " + _brokerCommand, e);
         }
+        return null;
+    }
+
+    private void doWindowsKill()
+    {
+        if(_windowsPids != null && !_windowsPids.isEmpty())
+        {
+            String parentProcess = _windowsPids.remove(0);
+            try
+            {
+
+                Process p;
+                for (String child : _windowsPids)
+                {
+                    p = Runtime.getRuntime().exec(new String[]{"taskkill", 
"/PID", child, "/T", "/F"});
+                    consumeAllOutput(p);
+                }
+                p = Runtime.getRuntime().exec(new String[]{"taskkill", "/PID", 
parentProcess, "/T", "/F"});
+                consumeAllOutput(p);
+
+            }
+            catch (IOException e)
+            {
+                LOGGER.error("Error whilst killing process " + _brokerCommand, 
e);
+            }
+        }
     }
 
     private static void consumeAllOutput(Process p) throws IOException

Modified: 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/GroupProviderRestTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/GroupProviderRestTest.java?rev=1676802&r1=1676801&r2=1676802&view=diff
==============================================================================
--- 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/GroupProviderRestTest.java
 (original)
+++ 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/GroupProviderRestTest.java
 Wed Apr 29 17:20:55 2015
@@ -375,7 +375,10 @@ public class GroupProviderRestTest exten
         Properties props = new Properties();
         props.put("myGroup.users", "guest");
 
-        props.store(new FileOutputStream(groupFile), "test group file");
+        try(final FileOutputStream out = new FileOutputStream(groupFile))
+        {
+            props.store(out, "test group file");
+        }
 
         return groupFile;
     }

Modified: 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/GroupRestTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/GroupRestTest.java?rev=1676802&r1=1676801&r2=1676802&view=diff
==============================================================================
--- 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/GroupRestTest.java
 (original)
+++ 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/GroupRestTest.java
 Wed Apr 29 17:20:55 2015
@@ -137,7 +137,10 @@ public class GroupRestTest extends QpidR
         Properties props = new Properties();
         props.put(GROUP_NAME + ".users", EXISTING_MEMBER);
 
-        props.store(new FileOutputStream(groupFile), "test group file");
+        try(final FileOutputStream out = new FileOutputStream(groupFile))
+        {
+            props.store(out, "test group file");
+        }
 
         return groupFile;
     }

Modified: 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/acl/GroupRestACLTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/acl/GroupRestACLTest.java?rev=1676802&r1=1676801&r2=1676802&view=diff
==============================================================================
--- 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/acl/GroupRestACLTest.java
 (original)
+++ 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/acl/GroupRestACLTest.java
 Wed Apr 29 17:20:55 2015
@@ -88,7 +88,10 @@ public class GroupRestACLTest extends Qp
         props.put(DENIED_GROUP + ".users", DENIED_USER);
         props.put(OTHER_GROUP + ".users", OTHER_USER);
 
-        props.store(new FileOutputStream(groupFile), "test group file");
+        try(final FileOutputStream out = new FileOutputStream(groupFile))
+        {
+            props.store(out, "test group file");
+        }
 
         return groupFile;
     }



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

Reply via email to