You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2015/01/27 16:00:16 UTC

svn commit: r1655057 [8/8] - in /qpid/branches/QPID-6262-JavaBrokerNIO: ./ qpid/ qpid/cpp/examples/messaging/ qpid/cpp/src/ qpid/cpp/src/qpid/amqp_0_10/ qpid/cpp/src/qpid/broker/ qpid/cpp/src/qpid/broker/amqp/ qpid/cpp/src/qpid/client/amqp0_10/ qpid/cp...

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/LogViewerTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/LogViewerTest.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/LogViewerTest.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/LogViewerTest.java Tue Jan 27 15:00:13 2015
@@ -28,25 +28,40 @@ import java.util.Map;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
-import org.apache.qpid.server.BrokerOptions;
+import org.apache.log4j.FileAppender;
+import org.apache.log4j.Logger;
+import org.apache.log4j.SimpleLayout;
+import org.apache.qpid.server.configuration.BrokerProperties;
 
 public class LogViewerTest extends QpidRestTestCase
 {
-    public static final String DEFAULT_FILE_APPENDER_NAME = "FileAppender";
     private String _expectedLogFileName;
+    private FileAppender _fileAppender;
+    private String _appenderName;
 
+    @Override
     public void setUp() throws Exception
     {
-        setSystemProperty("logsuffix", "-" + getTestQueueName());
-        _expectedLogFileName = System.getProperty("logprefix", "") + "qpid" + System.getProperty("logsuffix", "") + ".log";
-
-        // use real broker log file
-        File brokerLogFile = new File(System.getProperty(QPID_HOME), BrokerOptions.DEFAULT_LOG_CONFIG_FILE);
-        setBrokerCommandLog4JFile(brokerLogFile);
+        _appenderName = getTestQueueName();
+        _expectedLogFileName =  "qpid-" + _appenderName + ".log";
 
+        _fileAppender = new FileAppender(new SimpleLayout(),
+                System.getProperty(BrokerProperties.PROPERTY_QPID_WORK)  + File.separator +  _expectedLogFileName, false);
+        _fileAppender.setName(_appenderName);
+        Logger.getRootLogger().addAppender(_fileAppender);
         super.setUp();
     }
 
+    @Override
+    public void tearDown() throws Exception
+    {
+        if (_fileAppender != null)
+        {
+            Logger.getRootLogger().removeAppender(_fileAppender);
+        }
+        super.tearDown();
+    }
+
     public void testGetLogFiles() throws Exception
     {
         List<Map<String, Object>> logFiles = getRestTestHelper().getJsonAsList("/service/logfilenames");
@@ -54,24 +69,32 @@ public class LogViewerTest extends QpidR
 
         // 1 file appender is configured in QPID default log4j xml:
         assertTrue("Unexpected number of log files", logFiles.size() > 0);
+        Map<String, Object> logFileDetails = null;
+        for (Map<String, Object> appenderDetails: logFiles)
+        {
+            if (_appenderName.equals(appenderDetails.get("appenderName")))
+            {
+                logFileDetails = appenderDetails;
+                break;
+            }
+        }
 
-        Map<String, Object> logFileDetails = logFiles.get(0);
         assertEquals("Unexpected log file name", _expectedLogFileName, logFileDetails.get("name"));
         assertEquals("Unexpected log file mime type", "text/plain", logFileDetails.get("mimeType"));
-        assertEquals("Unexpected log file appender",DEFAULT_FILE_APPENDER_NAME, logFileDetails.get("appenderName"));
+        assertEquals("Unexpected log file appender",_appenderName, logFileDetails.get("appenderName"));
         assertTrue("Unexpected log file size", ((Number)logFileDetails.get("size")).longValue()>0);
         assertTrue("Unexpected log file modification time", ((Number)logFileDetails.get("lastModified")).longValue()>0);
     }
 
     public void testDownloadExistingLogFiles() throws Exception
     {
-        byte[] bytes = getRestTestHelper().getBytes("/service/logfile?l=" + DEFAULT_FILE_APPENDER_NAME + "%2F" + _expectedLogFileName);
+        byte[] bytes = getRestTestHelper().getBytes("/service/logfile?l=" + _appenderName + "%2F" + _expectedLogFileName);
 
         ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream(bytes));
         try
         {
             ZipEntry entry = zis.getNextEntry();
-            assertEquals("Unexpected broker log file name", DEFAULT_FILE_APPENDER_NAME + "/" + _expectedLogFileName, entry.getName());
+            assertEquals("Unexpected broker log file name", _appenderName + "/" + _expectedLogFileName, entry.getName());
             ByteArrayOutputStream baos = new ByteArrayOutputStream();
             byte[] buffer = new byte[1024];
             int len;
@@ -91,7 +114,7 @@ public class LogViewerTest extends QpidR
 
     public void testDownloadNonExistingLogFiles() throws Exception
     {
-        int responseCode = getRestTestHelper().submitRequest("/service/logfile?l=" + DEFAULT_FILE_APPENDER_NAME + "%2F"
+        int responseCode = getRestTestHelper().submitRequest("/service/logfile?l=" + _appenderName + "%2F"
                 + _expectedLogFileName + "_" + System.currentTimeMillis(), "GET");
 
         assertEquals("Unexpected response code", 404, responseCode);

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/TrustStoreRestTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/TrustStoreRestTest.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/TrustStoreRestTest.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/TrustStoreRestTest.java Tue Jan 27 15:00:13 2015
@@ -20,23 +20,19 @@
  */
 package org.apache.qpid.systest.rest;
 
-import java.io.IOException;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.codehaus.jackson.JsonGenerationException;
-import org.codehaus.jackson.JsonParseException;
-import org.codehaus.jackson.map.JsonMappingException;
+import javax.servlet.http.HttpServletResponse;
 
 import org.apache.qpid.server.model.AbstractConfiguredObject;
-import org.apache.qpid.server.model.Port;
-import org.apache.qpid.server.model.Transport;
 import org.apache.qpid.server.model.TrustStore;
 import org.apache.qpid.server.security.FileTrustStore;
 import org.apache.qpid.test.utils.TestBrokerConfiguration;
 import org.apache.qpid.test.utils.TestSSLConstants;
+import org.apache.qpid.util.DataUrlUtils;
+import org.apache.qpid.util.FileUtils;
 
 public class TrustStoreRestTest extends QpidRestTestCase
 {
@@ -56,7 +52,7 @@ public class TrustStoreRestTest extends
 
         Map<String, Object> truststore = trustStores.get(0);
         assertTrustStoreAttributes(truststore, TestBrokerConfiguration.ENTRY_NAME_SSL_TRUSTSTORE,
-                System.getProperty(QPID_HOME) + "/../" + TestSSLConstants.BROKER_TRUSTSTORE, false);
+                QPID_HOME + "/../" + TestSSLConstants.BROKER_TRUSTSTORE, false);
     }
 
     public void testCreate() throws Exception
@@ -66,7 +62,7 @@ public class TrustStoreRestTest extends
         String name = getTestName();
 
         assertNumberOfTrustStores(1);
-        createTrustStore(name, true);
+        createTrustStore(name, true, TestSSLConstants.TRUSTSTORE, TestSSLConstants.TRUSTSTORE_PASSWORD);
         assertNumberOfTrustStores(2);
 
         List<Map<String, Object>> trustStores = getRestTestHelper().getJsonAsList("truststore/" + name);
@@ -75,157 +71,73 @@ public class TrustStoreRestTest extends
         assertTrustStoreAttributes(trustStores.get(0), name, TestSSLConstants.TRUSTSTORE, true);
     }
 
-    public void testDelete() throws Exception
+    public void testCreateUsingDataUrl() throws Exception
     {
         super.setUp();
 
         String name = getTestName();
+        byte[] trustStoreAsBytes = FileUtils.readFileAsBytes(TestSSLConstants.TRUSTSTORE);
+        String dataUrlForTruststore = DataUrlUtils.getDataUrlForBytes(trustStoreAsBytes);
 
         assertNumberOfTrustStores(1);
-        createTrustStore(name, false);
-        assertNumberOfTrustStores(2);
-
-        int responseCode = getRestTestHelper().submitRequest("truststore/" + name , "DELETE");
-        assertEquals("Unexpected response code for provider deletion", 200, responseCode);
-
-        List<Map<String, Object>> trustStore = getRestTestHelper().getJsonAsList("truststore/" + name);
-        assertNotNull("details should not be null", trustStore);
-        assertTrue("details should be empty as the truststore no longer exists", trustStore.isEmpty());
-
-        //check only the default systests trust store remains
-        List<Map<String, Object>> trustStores = assertNumberOfTrustStores(1);
-        Map<String, Object> truststore = trustStores.get(0);
-        assertTrustStoreAttributes(truststore, TestBrokerConfiguration.ENTRY_NAME_SSL_TRUSTSTORE,
-                System.getProperty(QPID_HOME) + "/../" + TestSSLConstants.BROKER_TRUSTSTORE, false);
-    }
-
-    public void testDeleteFailsWhenTrustStoreInUse() throws Exception
-    {
-        String name = "testDeleteFailsWhenTrustStoreInUse";
 
-        //add a new trust store config to use
-        Map<String, Object> sslTrustStoreAttributes = new HashMap<String, Object>();
-        sslTrustStoreAttributes.put(TrustStore.NAME, name);
-        sslTrustStoreAttributes.put(FileTrustStore.PATH, TestSSLConstants.TRUSTSTORE);
-        sslTrustStoreAttributes.put(FileTrustStore.PASSWORD, TestSSLConstants.TRUSTSTORE_PASSWORD);
-        getBrokerConfiguration().addObjectConfiguration(TrustStore.class,sslTrustStoreAttributes);
-
-        //add the SSL port using it
-        Map<String, Object> sslPortAttributes = new HashMap<String, Object>();
-        sslPortAttributes.put(Port.TRANSPORTS, Collections.singleton(Transport.SSL));
-        sslPortAttributes.put(Port.PORT, DEFAULT_SSL_PORT);
-        sslPortAttributes.put(Port.NAME, TestBrokerConfiguration.ENTRY_NAME_SSL_PORT);
-        sslPortAttributes.put(Port.AUTHENTICATION_PROVIDER, TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER);
-        sslPortAttributes.put(Port.KEY_STORE, TestBrokerConfiguration.ENTRY_NAME_SSL_KEYSTORE);
-        sslPortAttributes.put(Port.TRUST_STORES, Collections.singleton(name));
-        getBrokerConfiguration().addObjectConfiguration(Port.class, sslPortAttributes);
+        createTrustStore(name, false, dataUrlForTruststore, TestSSLConstants.TRUSTSTORE_PASSWORD);
 
-        super.setUp();
-
-        //verify the truststore is there
         assertNumberOfTrustStores(2);
 
-        List<Map<String, Object>> trustStore = getRestTestHelper().getJsonAsList("truststore/" + name);
-        assertNotNull("details should not be null", trustStore);
-        assertTrustStoreAttributes(trustStore.get(0), name, TestSSLConstants.TRUSTSTORE, false);
-
-        //try to delete it, which should fail as it is in use
-        int responseCode = getRestTestHelper().submitRequest("truststore/" + name , "DELETE");
-        assertEquals("Unexpected response code for provider deletion", 409, responseCode);
+        List<Map<String, Object>> trustStores = getRestTestHelper().getJsonAsList("truststore/" + name);
+        assertNotNull("details cannot be null", trustStores);
 
-        //check its still there
-        assertNumberOfTrustStores(2);
-        trustStore = getRestTestHelper().getJsonAsList("truststore/" + name);
-        assertNotNull("details should not be null", trustStore);
-        assertTrustStoreAttributes(trustStore.get(0), name, TestSSLConstants.TRUSTSTORE, false);
+        assertTrustStoreAttributes(trustStores.get(0), name, dataUrlForTruststore, false);
     }
 
-    public void testUpdateWithGoodPathSucceeds() throws Exception
+    public void testDelete() throws Exception
     {
         super.setUp();
 
         String name = getTestName();
 
         assertNumberOfTrustStores(1);
-        createTrustStore(name, false);
+        createTrustStore(name, false, TestSSLConstants.TRUSTSTORE, TestSSLConstants.TRUSTSTORE_PASSWORD);
         assertNumberOfTrustStores(2);
 
-        Map<String, Object> attributes = new HashMap<String, Object>();
-        attributes.put(TrustStore.NAME, name);
-        attributes.put(FileTrustStore.PATH, TestSSLConstants.TRUSTSTORE);
-
-        int responseCode = getRestTestHelper().submitRequest("truststore/" + name , "PUT", attributes);
-        assertEquals("Unexpected response code for truststore update", 200, responseCode);
+        getRestTestHelper().submitRequest("truststore/" + name , "DELETE", HttpServletResponse.SC_OK);
 
         List<Map<String, Object>> trustStore = getRestTestHelper().getJsonAsList("truststore/" + name);
         assertNotNull("details should not be null", trustStore);
+        assertTrue("details should be empty as the truststore no longer exists", trustStore.isEmpty());
 
-        assertTrustStoreAttributes(trustStore.get(0), name, TestSSLConstants.TRUSTSTORE, false);
+        //check only the default systests trust store remains
+        List<Map<String, Object>> trustStores = assertNumberOfTrustStores(1);
+        Map<String, Object> truststore = trustStores.get(0);
+        assertTrustStoreAttributes(truststore, TestBrokerConfiguration.ENTRY_NAME_SSL_TRUSTSTORE,
+                QPID_HOME + "/../" + TestSSLConstants.BROKER_TRUSTSTORE, false);
     }
 
-    public void testUpdateWithNonExistentPathFails() throws Exception
-    {
-        super.setUp();
-
-        String name = getTestName();
-
-        assertNumberOfTrustStores(1);
-        createTrustStore(name, false);
-        assertNumberOfTrustStores(2);
-
-        Map<String, Object> attributes = new HashMap<String, Object>();
-        attributes.put(TrustStore.NAME, name);
-        attributes.put(FileTrustStore.PATH, "does.not.exist");
-
-        int responseCode = getRestTestHelper().submitRequest("truststore/" + name , "PUT", attributes);
-        assertEquals("Unexpected response code for trust store update", 409, responseCode);
-
-        List<Map<String, Object>> trustStore = getRestTestHelper().getJsonAsList("truststore/" + name);
-        assertNotNull("details should not be null", trustStore);
-
-        //verify the details remain unchanged
-        assertTrustStoreAttributes(trustStore.get(0), name, TestSSLConstants.TRUSTSTORE, false);
-    }
 
-    public void testUpdatePeersOnly() throws Exception
+    public void testUpdate() throws Exception
     {
         super.setUp();
 
         String name = getTestName();
 
         assertNumberOfTrustStores(1);
-        createTrustStore(name, false);
+        createTrustStore(name, false, TestSSLConstants.TRUSTSTORE, TestSSLConstants.TRUSTSTORE_PASSWORD);
         assertNumberOfTrustStores(2);
 
-        //update the peersOnly attribute from false to true
         Map<String, Object> attributes = new HashMap<String, Object>();
         attributes.put(TrustStore.NAME, name);
-        attributes.put(FileTrustStore.PEERS_ONLY, true);
+        attributes.put(FileTrustStore.PATH, TestSSLConstants.TRUSTSTORE);
 
-        int responseCode = getRestTestHelper().submitRequest("truststore/" + name , "PUT", attributes);
-        assertEquals("Unexpected response code for trust store update", 200, responseCode);
+        getRestTestHelper().submitRequest("truststore/" + name , "PUT", attributes, HttpServletResponse.SC_OK);
 
         List<Map<String, Object>> trustStore = getRestTestHelper().getJsonAsList("truststore/" + name);
         assertNotNull("details should not be null", trustStore);
 
-        assertTrustStoreAttributes(trustStore.get(0), name, TestSSLConstants.TRUSTSTORE, true);
-
-        //Update peersOnly to clear it (i.e go from from true to null, which will default to false)
-        attributes = new HashMap<String, Object>();
-        attributes.put(TrustStore.NAME, name);
-        attributes.put(FileTrustStore.PEERS_ONLY, null);
-
-        responseCode = getRestTestHelper().submitRequest("truststore/" + name , "PUT", attributes);
-        assertEquals("Unexpected response code for trust store update", 200, responseCode);
-
-        trustStore = getRestTestHelper().getJsonAsList("truststore/" + name);
-        assertNotNull("details should not be null", trustStore);
-
         assertTrustStoreAttributes(trustStore.get(0), name, TestSSLConstants.TRUSTSTORE, false);
     }
 
-    private List<Map<String, Object>> assertNumberOfTrustStores(int numberOfTrustStores) throws IOException,
-    JsonParseException, JsonMappingException
+    private List<Map<String, Object>> assertNumberOfTrustStores(int numberOfTrustStores) throws Exception
     {
         List<Map<String, Object>> trustStores = getRestTestHelper().getJsonAsList("truststore");
         assertNotNull("trust stores should not be null", trustStores);
@@ -234,17 +146,16 @@ public class TrustStoreRestTest extends
         return trustStores;
     }
 
-    private void createTrustStore(String name, boolean peersOnly) throws IOException, JsonGenerationException, JsonMappingException
+    private void createTrustStore(String name, boolean peersOnly, final String truststorePath, final String truststorePassword) throws Exception
     {
         Map<String, Object> trustStoreAttributes = new HashMap<String, Object>();
         trustStoreAttributes.put(TrustStore.NAME, name);
         //deliberately using the client trust store to differentiate from the one we are already for broker
-        trustStoreAttributes.put(FileTrustStore.PATH, TestSSLConstants.TRUSTSTORE);
-        trustStoreAttributes.put(FileTrustStore.PASSWORD, TestSSLConstants.TRUSTSTORE_PASSWORD);
+        trustStoreAttributes.put(FileTrustStore.PATH, truststorePath);
+        trustStoreAttributes.put(FileTrustStore.PASSWORD, truststorePassword);
         trustStoreAttributes.put(FileTrustStore.PEERS_ONLY, peersOnly);
 
-        int responseCode = getRestTestHelper().submitRequest("truststore/" + name, "PUT", trustStoreAttributes);
-        assertEquals("Unexpected response code", 201, responseCode);
+        getRestTestHelper().submitRequest("truststore/" + name, "PUT", trustStoreAttributes, HttpServletResponse.SC_CREATED);
     }
 
     private void assertTrustStoreAttributes(Map<String, Object> truststore, String name, String path, boolean peersOnly)

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java Tue Jan 27 15:00:13 2015
@@ -714,19 +714,6 @@ public class BrokerACLTest extends QpidR
 
     /* === AccessControlProvider === */
 
-    public void testCreateAccessControlProviderAllowed() throws Exception
-    {
-        getRestTestHelper().setUsernameAndPassword(ALLOWED_USER, ALLOWED_USER);
-
-        String accessControlProviderName = getTestName();
-
-        assertAccessControlProviderExistence(accessControlProviderName, false);
-
-        int responseCode = createAccessControlProvider(accessControlProviderName);
-        assertEquals("Access control provider creation should be allowed", 201, responseCode);
-
-        assertAccessControlProviderExistence(accessControlProviderName, true);
-    }
 
     public void testCreateAccessControlProviderDenied() throws Exception
     {
@@ -746,18 +733,13 @@ public class BrokerACLTest extends QpidR
     {
         getRestTestHelper().setUsernameAndPassword(ALLOWED_USER, ALLOWED_USER);
 
-        String accessControlProviderName = getTestName();
-
-        assertAccessControlProviderExistence(accessControlProviderName, false);
-
-        int responseCode = createAccessControlProvider(accessControlProviderName);
-        assertEquals("Access control provider creation should be allowed", 201, responseCode);
+        String accessControlProviderName = TestBrokerConfiguration.ENTRY_NAME_ACL_FILE;
 
         assertAccessControlProviderExistence(accessControlProviderName, true);
 
         getRestTestHelper().setUsernameAndPassword(DENIED_USER, DENIED_USER);
 
-        responseCode = getRestTestHelper().submitRequest("accesscontrolprovider/" + accessControlProviderName, "DELETE");
+        int responseCode = getRestTestHelper().submitRequest("accesscontrolprovider/" + accessControlProviderName, "DELETE");
         assertEquals("Access control provider deletion should be denied", 403, responseCode);
 
         assertAccessControlProviderExistence(accessControlProviderName, true);
@@ -767,16 +749,12 @@ public class BrokerACLTest extends QpidR
     {
         getRestTestHelper().setUsernameAndPassword(ALLOWED_USER, ALLOWED_USER);
 
-        String accessControlProviderName = getTestName();
-
-        assertAccessControlProviderExistence(accessControlProviderName, false);
+        String accessControlProviderName = TestBrokerConfiguration.ENTRY_NAME_ACL_FILE;
 
-        int responseCode = createAccessControlProvider(accessControlProviderName);
-        assertEquals("Access control provider creation should be allowed", 201, responseCode);
 
         assertAccessControlProviderExistence(accessControlProviderName, true);
 
-        responseCode = getRestTestHelper().submitRequest("accesscontrolprovider/" + accessControlProviderName, "DELETE");
+        int responseCode = getRestTestHelper().submitRequest("accesscontrolprovider/" + accessControlProviderName, "DELETE");
         assertEquals("Access control provider deletion should be allowed", 200, responseCode);
 
         assertAccessControlProviderExistence(accessControlProviderName, false);
@@ -786,20 +764,16 @@ public class BrokerACLTest extends QpidR
     {
         getRestTestHelper().setUsernameAndPassword(ALLOWED_USER, ALLOWED_USER);
 
-        String accessControlProviderName = getTestName();
-
-        assertAccessControlProviderExistence(accessControlProviderName, false);
-
-        int responseCode = createAccessControlProvider(accessControlProviderName);
-        assertEquals("Access control provider creation should be allowed", 201, responseCode);
+        String accessControlProviderName = TestBrokerConfiguration.ENTRY_NAME_ACL_FILE;
 
         assertAccessControlProviderExistence(accessControlProviderName, true);
 
+        File aclFile = TestFileUtils.createTempFile(this, ".acl", "ACL ALLOW all all");
+
         Map<String, Object> attributes = new HashMap<String, Object>();
-        attributes.put(GroupProvider.NAME, accessControlProviderName);
-        attributes.put(GroupProvider.TYPE, FileBasedGroupProviderImpl.GROUP_FILE_PROVIDER_TYPE);
-        attributes.put(FileBasedGroupProvider.PATH, "/path/to/file");
-        responseCode = getRestTestHelper().submitRequest("accesscontrolprovider/" + accessControlProviderName, "PUT", attributes);
+        attributes.put(AccessControlProvider.NAME, accessControlProviderName);
+        attributes.put(FileBasedGroupProvider.PATH, aclFile.getAbsolutePath());
+        int responseCode = getRestTestHelper().submitRequest("accesscontrolprovider/" + accessControlProviderName, "PUT", attributes);
         assertEquals("Setting of access control provider attributes should be allowed", 200, responseCode);
     }
 
@@ -807,12 +781,7 @@ public class BrokerACLTest extends QpidR
     {
         getRestTestHelper().setUsernameAndPassword(ALLOWED_USER, ALLOWED_USER);
 
-        String accessControlProviderName = getTestName();
-
-        assertAccessControlProviderExistence(accessControlProviderName, false);
-
-        int responseCode = createAccessControlProvider(accessControlProviderName);
-        assertEquals("Access control provider creation should be allowed", 201, responseCode);
+        String accessControlProviderName = TestBrokerConfiguration.ENTRY_NAME_ACL_FILE;
 
         assertAccessControlProviderExistence(accessControlProviderName, true);
 
@@ -822,7 +791,7 @@ public class BrokerACLTest extends QpidR
         attributes.put(GroupProvider.NAME, accessControlProviderName);
         attributes.put(GroupProvider.TYPE, FileBasedGroupProviderImpl.GROUP_FILE_PROVIDER_TYPE);
         attributes.put(FileBasedGroupProvider.PATH, "/path/to/file");
-        responseCode = getRestTestHelper().submitRequest("accesscontrolprovider/" + accessControlProviderName, "PUT", attributes);
+        int responseCode = getRestTestHelper().submitRequest("accesscontrolprovider/" + accessControlProviderName, "PUT", attributes);
         assertEquals("Setting of access control provider attributes should be denied", 403, responseCode);
     }
 

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionTest.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionTest.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionTest.java Tue Jan 27 15:00:13 2015
@@ -81,7 +81,6 @@ public class ConnectionTest extends Qpid
                                      + "&temporaryQueueExchange='tmp.direct'"
                                      + "&temporaryTopicExchange='tmp.topic'");
 
-            System.err.println(url.toString());
             conn = new AMQConnection(url);
 
 

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/test/unit/close/JavaServerCloseRaceConditionTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/test/unit/close/JavaServerCloseRaceConditionTest.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/test/unit/close/JavaServerCloseRaceConditionTest.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/test/unit/close/JavaServerCloseRaceConditionTest.java Tue Jan 27 15:00:13 2015
@@ -106,7 +106,7 @@ public class JavaServerCloseRaceConditio
         }
         catch (Exception e)
         {
-            assertTrue("Exception should say the exchange is not known.", e.getMessage().contains("Unknown exchange: " + EXCHANGE_NAME));
+            assertTrue("Exception should say the exchange is not known.", e.getMessage().contains("Unknown exchange: '" + EXCHANGE_NAME + "'"));
         }
 
         try
@@ -119,7 +119,7 @@ public class JavaServerCloseRaceConditio
         }
         catch (Exception e)
         {
-            assertTrue("Exception should say the exchange is not known.", e.getMessage().contains("Unknown exchange: " + EXCHANGE_NAME));
+            assertTrue("Exception should say the exchange is not known.", e.getMessage().contains("Unknown exchange: '" + EXCHANGE_NAME + "'"));
         }
 
     }

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/test/unit/close/MessageConsumerCloseTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/test/unit/close/MessageConsumerCloseTest.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/test/unit/close/MessageConsumerCloseTest.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/systests/src/test/java/org/apache/qpid/test/unit/close/MessageConsumerCloseTest.java Tue Jan 27 15:00:13 2015
@@ -35,7 +35,7 @@ import org.apache.qpid.test.utils.QpidBr
 
 public class MessageConsumerCloseTest  extends QpidBrokerTestCase
 {
-    Exception _exception;
+    private volatile Exception _exception;
 
     public void testConsumerCloseAndSessionRollback() throws Exception
     {
@@ -65,7 +65,7 @@ public class MessageConsumerCloseTest  e
         boolean messageReceived = receiveLatch.await(1l, TimeUnit.SECONDS);
         consumer.close();
 
-        assertNull("Exception occured on rollback:" + _exception, _exception);
+        assertNull("Exception occurred on rollback:" + _exception, _exception);
         assertTrue("Message is not received", messageReceived);
 
         consumer = session.createConsumer(destination);
@@ -74,4 +74,38 @@ public class MessageConsumerCloseTest  e
         Message message2 = consumer.receive(1000l);
         assertNotNull("message2 is not received", message2);
     }
+
+    public void testPrefetchedMessagesReleasedOnConsumerClose() throws Exception
+    {
+        Connection connection = getConnection();
+        final Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
+
+        Destination destination = getTestQueue();
+        MessageConsumer consumer = session.createConsumer(destination);
+
+        sendMessage(session, destination, 3);
+
+        connection.start();
+
+        Message msg1 = consumer.receive(1000);
+        assertNotNull("Message one was null", msg1);
+        assertEquals("Message one has unexpected content", 0, msg1.getIntProperty(INDEX));
+        session.commit();
+
+        // Messages two and three will have been prefetched by the consumer.
+        // Closing the consumer must make the available for delivery elsewhere
+
+        consumer.close();
+
+        MessageConsumer consumer2 = session.createConsumer(destination);
+
+        Message msg2 = consumer2.receive(1000);
+        Message msg3 = consumer2.receive(1000);
+        assertNotNull("Message two was null", msg2);
+        assertEquals("Message two has unexpected content", 1, msg2.getIntProperty(INDEX));
+
+        assertNotNull("Message three was null", msg3);
+        assertEquals("Message three has unexpected content", 2, msg3.getIntProperty(INDEX));
+        session.commit();
+    }
 }

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/test-profiles/JavaExcludes
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/test-profiles/JavaExcludes?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/test-profiles/JavaExcludes (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/test-profiles/JavaExcludes Tue Jan 27 15:00:13 2015
@@ -24,9 +24,6 @@ org.apache.qpid.client.SessionCreateTest
 org.apache.qpid.test.client.queue.QueuePolicyTest#testRingPolicy
 org.apache.qpid.test.client.queue.QueuePolicyTest#testRejectPolicy
 
-//QPID-3605 Durable subscriber with no-local true receives messages on re-connection
-org.apache.qpid.test.unit.topic.DurableSubscriptionTest#testNoLocalMessagesNotDeliveredAfterReconnection
-
 //QPID-4153 Messages causing a runtime selector error should be dead-lettered (or something similar)
 org.apache.qpid.test.client.message.SelectorTest#testRuntimeSelectorError
 

Propchange: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/test-profiles/JavaExcludes
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jan 27 15:00:13 2015
@@ -3,3 +3,4 @@
 /qpid/branches/java-broker-vhost-refactor/java/test-profiles/JavaExcludes:1493674-1494547
 /qpid/branches/java-network-refactor/qpid/java/test-profiles/08Excludes:805429-821809
 /qpid/branches/qpid-2935/qpid/java/test-profiles/JavaExcludes:1061302-1072333
+/qpid/trunk/qpid/java/test-profiles/JavaExcludes:1643238-1655056

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/test-profiles/python_tests/Java010PythonExcludes
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/test-profiles/python_tests/Java010PythonExcludes?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/test-profiles/python_tests/Java010PythonExcludes (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/test-profiles/python_tests/Java010PythonExcludes Tue Jan 27 15:00:13 2015
@@ -53,6 +53,8 @@ qpid_tests.broker_0_10.extensions.Extens
 qpid_tests.broker_0_10.priority.PriorityTests.test_ring_queue*
 qpid_tests.broker_0_10.priority.PriorityTests.test_fairshare*
 qpid_tests.broker_0_10.priority.PriorityTests.test_prioritised_delivery_with_alias
+#QPID-6299 broker does not support ring queue on lvq
+qpid_tests.broker_0_10.lvq.LVQTests.test_ring_lvq2
 
 #The broker does not support the autodelete property on exchanges
 qpid_tests.broker_0_10.exchange.AutodeleteTests.testAutodelete*

Propchange: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/test-profiles/test_resources/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jan 27 15:00:13 2015
@@ -3,3 +3,4 @@
 /qpid/branches/java-broker-vhost-refactor/java/test-profiles/test_resources:1493674-1494547
 /qpid/branches/java-network-refactor/qpid/java/test-profiles/test_resources:805429-821809
 /qpid/branches/qpid-2935/qpid/java/test-profiles/test_resources:1061302-1072333
+/qpid/trunk/qpid/java/test-profiles/test_resources:1643238-1655056

Propchange: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/test-profiles/test_resources/spawned-broker-log4j.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/test-profiles/test_resources/spawned-broker-log4j.xml
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Tue Jan 27 15:00:13 2015
@@ -0,0 +1,7 @@
+/incubator/qpid/trunk/qpid/java/test-profiles/log4j-test.xml:443187-726139
+/qpid/branches/0.5.x-dev/qpid/java/test-profiles/log4j-test.xml:931179
+/qpid/branches/java-broker-0-10/qpid/java/test-profiles/log4j-test.xml:795950-829653
+/qpid/branches/java-broker-vhost-refactor/java/test-profiles/log4j-test.xml:1493674-1494547
+/qpid/branches/java-network-refactor/qpid/java/test-profiles/log4j-test.xml:805429-821809
+/qpid/branches/qpid-2935/qpid/java/test-profiles/log4j-test.xml:1061302-1072333
+/qpid/trunk/qpid/java/test-profiles/test_resources/spawned-broker-log4j.xml:1644492-1655056

Propchange: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/python/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jan 27 15:00:13 2015
@@ -3,3 +3,4 @@
 /qpid/branches/java-network-refactor/qpid/python:805429-825319
 /qpid/branches/qmfv2/qpid/python:902858,902894
 /qpid/branches/qpid-2935/qpid/python:1061302-1072333
+/qpid/trunk/qpid/python:1643238-1655056

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/python/qpid/codec010.py
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/python/qpid/codec010.py?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/python/qpid/codec010.py (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/python/qpid/codec010.py Tue Jan 27 15:00:13 2015
@@ -225,6 +225,9 @@ class Codec(Packer):
   def write_vbin32(self, b):
     if isinstance(b, buffer):
       b = str(b)
+    # Allow unicode values in connection 'response' field
+    if isinstance(b, unicode):
+      b = b.encode('utf8')
     self.write_uint32(len(b))
     self.write(b)
 

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/python/qpid/sasl.py
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/python/qpid/sasl.py?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/python/qpid/sasl.py (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/python/qpid/sasl.py Tue Jan 27 15:00:13 2015
@@ -28,6 +28,9 @@ class WrapperClient:
     self._cli = _Client()
 
   def setAttr(self, name, value):
+    # Allow unicode user names and passwords
+    if isinstance(value, unicode):
+      value = value.encode('utf8')
     status = self._cli.setAttr(str(name), str(value))
     if status and name == 'username':
       status = self._cli.setAttr('externaluser', str(value))

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tests/src/py/qpid_tests/broker_0_10/lvq.py
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tests/src/py/qpid_tests/broker_0_10/lvq.py?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tests/src/py/qpid_tests/broker_0_10/lvq.py (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tests/src/py/qpid_tests/broker_0_10/lvq.py Tue Jan 27 15:00:13 2015
@@ -6,9 +6,9 @@
 # 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
-# 
+#
 #   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
@@ -20,18 +20,19 @@
 from qpid.tests.messaging.implementation import *
 from qpid.tests.messaging import Base
 import math
+import random
 
 class LVQTests (Base):
     """
     Test last value queue behaviour
-    """ 
+    """
 
     def setup_connection(self):
         return Connection.establish(self.broker, **self.connection_options())
 
     def setup_session(self):
         return self.conn.session()
-        
+
     def test_simple(self):
         snd = self.ssn.sender("lvq; {create: sender, delete: sender, node: {x-declare:{arguments:{'qpid.last_value_queue_key':lvq-key}}}}",
                               durable=self.durable())
@@ -59,6 +60,42 @@ class LVQTests (Base):
         rcv = self.ssn.receiver("lvq; {mode: browse}")
         assert (fetch_all(rcv) == ["a-3", "c-3", "d-1", "b-3"])
 
+    def check_ring_lvq(self, ring_size, keys, message_count):
+        address = "lvq; {create: sender, delete: sender, node: {x-declare:{arguments:{'qpid.last_value_queue_key':lvq-key,'qpid.policy_type':'ring','qpid.max_count':%i}}}}" % ring_size
+        snd = self.ssn.sender(address, durable=self.durable())
+        counters = {}
+        for k in keys:
+            counters[k] = 0
+        messages = []
+        for i in range(message_count):
+            k = random.choice(keys)
+            counters[k] += 1
+            messages.append(create_message(k, "%s-%i" % (k, counters[k])))
+        # make sure we have sent at least one message for every key
+        for k, v in counters.iteritems():
+            if v == 0:
+                counters[k] += 1
+                messages.append(create_message(k, "%s-%i" % (k, counters[k])))
+
+        for m in messages:
+            snd.send(m)
+
+        rcv = self.ssn.receiver("lvq; {mode: browse}")
+        retrieved = fetch_all_as_tuples(rcv)
+        print [v for k, v in retrieved]
+
+        for k, v in retrieved:
+            assert v == "%s-%i" % (k, counters[k])
+        assert len(retrieved) <= ring_size
+
+    def test_ring_lvq1(self):
+        self.check_ring_lvq(25, ["a","b","c","d"], 50)
+
+    def test_ring_lvq2(self):
+        self.check_ring_lvq(5, ["a","b","c","d","e","f","g"], 50)
+
+    def test_ring_lvq3(self):
+        self.check_ring_lvq(49, ["a"], 50)
 
 def create_message(key, content):
     msg = Message(content=content, properties={"lvq-key":key})
@@ -72,3 +109,14 @@ def fetch_all(rcv):
         except Empty:
             break
     return content
+
+def fetch_all_as_tuples(rcv):
+    content = []
+    while True:
+        try:
+            m = rcv.fetch(0)
+            k = m.properties["lvq-key"]
+            content.append((k, m.content))
+        except Empty:
+            break
+    return content

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tools/src/py/qlslibs/efp.py
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tools/src/py/qlslibs/efp.py?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tools/src/py/qlslibs/efp.py (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tools/src/py/qlslibs/efp.py Tue Jan 27 15:00:13 2015
@@ -85,15 +85,16 @@ class EfpManager(object):
         self.efp_partitions.remove(self.current_efp_partition)
         shutil.rmtree(os.path.join(self.current_efp_partition.efp_directory, dir_name))
     def report(self):
-        print 'Empty File Pool (EFP) report:'
-        print '============================='
-        print 'Found', len(self.efp_partitions), 'partition(s).'
+        print 'Empty File Pool (EFP) report'
+        print '============================'
+        print 'Found', len(self.efp_partitions), 'partition(s)'
         if (len(self.efp_partitions)) > 0:
+            sorted_efp_partitions = sorted(self.efp_partitions, key=lambda x: x.partition_number)
             EfpPartition.print_report_table_header()
-            for ptn in self.efp_partitions:
+            for ptn in sorted_efp_partitions:
                 ptn.print_report_table_line()
             print
-            for ptn in self.efp_partitions:
+            for ptn in sorted_efp_partitions:
                 ptn.report()
     def run(self, arg_tup):
         self._analyze_efp()
@@ -182,9 +183,12 @@ class EfpPartition(object):
                                        self.tot_file_size_kb, self.directory)
     def report(self):
         print 'Partition %s:' % os.path.basename(self.directory)
-        EmptyFilePool.print_report_table_header()
-        for dir_name in self.efp_pools.keys():
-            self.efp_pools[dir_name].print_report_table_line()
+        if len(self.efp_pools) > 0:
+            EmptyFilePool.print_report_table_header()
+            for dir_name in self.efp_pools.keys():
+                self.efp_pools[dir_name].print_report_table_line()
+        else:
+            print '<empty - no EFPs found in this partition>'
         print
     def scan(self):
         if os.path.exists(self.directory):
@@ -217,13 +221,16 @@ class EmptyFilePool(object):
     """
     EFP_DIR_SUFFIX = 'k'
     EFP_JRNL_EXTENTION = '.jrnl'
+    EFP_INUSE_DIRNAME = 'in_use'
+    EFP_RETURNED_DIRNAME = 'returned'
     def __init__(self, directory, partition_number):
         self.base_dir_name = os.path.basename(directory)
         self.directory = directory
         self.partition_number = partition_number
         self.data_size_kb = None
-        self.files = []
-        self.tot_file_size_kb = 0
+        self.efp_files = []
+        self.in_use_files = []
+        self.returned_files = []
         self._validate_efp_directory()
     def create_new_efp_files(self, num_files):
         """ Create one or more new empty journal files of the prescribed size for this EFP """
@@ -238,24 +245,37 @@ class EmptyFilePool(object):
         """ Static function to create an EFP directory name from the size of the files it contains """
         return '%dk' % file_size_kb
     def get_tot_file_count(self):
-        return len(self.files)
+        return len(self.efp_files)
     def get_tot_file_size_kb(self):
-        return self.data_size_kb * len(self.files)
+        return self.data_size_kb * len(self.efp_files)
     @staticmethod
     def print_report_table_header():
-        print 'data_size_kb file_count tot_file_size_kb efp_directory'
-        print '------------ ---------- ---------------- -------------'
+        print '             ---------- efp ------------ --------- in_use ---------- -------- returned ---------'
+        print 'data_size_kb file_count tot_file_size_kb file_count tot_file_size_kb file_count tot_file_size_kb efp_directory'
+        print '------------ ---------- ---------------- ---------- ---------------- ---------- ---------------- -------------'
     def print_report_table_line(self):
-        print '%12d %10d %16d %s' % (self.data_size_kb, self.get_tot_file_count(),
-                                     self.get_tot_file_size_kb(), self.get_directory())
+        print '%12d %10d %16d %10d %16d %10d %16d %s' % (self.data_size_kb, len(self.efp_files),
+                                                         self.data_size_kb * len(self.efp_files),
+                                                         len(self.in_use_files),
+                                                         self.data_size_kb * len(self.in_use_files),
+                                                         len(self.returned_files),
+                                                         self.data_size_kb * len(self.returned_files),
+                                                         self.get_directory())
     def scan(self):
         for efp_file in os.listdir(self.directory):
+            if efp_file == self.EFP_INUSE_DIRNAME:
+                for in_use_file in os.listdir(os.path.join(self.directory, self.EFP_INUSE_DIRNAME)):
+                    self.in_use_files.append(in_use_file)
+                continue
+            if efp_file == self.EFP_RETURNED_DIRNAME:
+                for returned_file in os.listdir(os.path.join(self.directory, self.EFP_RETURNED_DIRNAME)):
+                    self.returned_files.append(returned_file)
+                continue
             if self._validate_efp_file(os.path.join(self.directory, efp_file)):
-                self.files.append(efp_file)
+                self.efp_files.append(efp_file)
     def _add_efp_file(self, efp_file_name):
         """ Add a single journal file of the appropriate size to this EFP. No file size check is made here. """
-        self.files.append(efp_file_name)
-        self.tot_file_size_kb += os.path.getsize(efp_file_name)
+        self.efp_files.append(efp_file_name)
     def _create_new_efp_file(self):
         """ Create a single new empty journal file of the prescribed size for this EFP """
         file_name = str(uuid.uuid4()) + EmptyFilePool.EFP_JRNL_EXTENTION
@@ -296,7 +316,7 @@ class EmptyFilePool(object):
             return False
         file_hdr.load(file_handle)
         file_handle.close()
-        if not file_hdr.is_valid():
+        if not file_hdr.is_valid(True):
             return False
         return True
 

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tools/src/py/qlslibs/jrnl.py
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tools/src/py/qlslibs/jrnl.py?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tools/src/py/qlslibs/jrnl.py (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tools/src/py/qlslibs/jrnl.py Tue Jan 27 15:00:13 2015
@@ -155,19 +155,24 @@ class FileHeader(RecordHeader):
         self.queue_name = file_handle.read(self.queue_name_len)
     def is_end_of_file(self):
         return self.file_handle.tell() >= self.get_file_size()
-    def is_valid(self):
+    def is_valid(self, is_empty):
         if not RecordHeader.is_header_valid(self, self):
             return False
         if self.file_handle is None or self.file_header_size_sblks == 0 or self.partition_num == 0 or \
-           self.efp_data_size_kb == 0 or self.first_record_offset == 0 or self.timestamp_sec == 0 or \
-           self.timestamp_ns == 0 or self.file_num == 0:
-            return False
-        if self.queue_name_len == 0:
-            return False
-        if self.queue_name is None:
-            return False
-        if len(self.queue_name) != self.queue_name_len:
+           self.efp_data_size_kb == 0:
             return False
+        if is_empty:
+            if self.first_record_offset != 0 or self.timestamp_sec != 0 or self.timestamp_ns != 0 or \
+               self.file_num != 0 or self.queue_name_len != 0:
+                return False
+        else:
+            if self.first_record_offset == 0 or self.timestamp_sec == 0 or self.timestamp_ns == 0 or \
+               self.file_num == 0 or self.queue_name_len == 0:
+                return False
+            if self.queue_name is None:
+                return False
+            if len(self.queue_name) != self.queue_name_len:
+                return False
         return True
     def timestamp_str(self):
         """Get the timestamp of this record in string format"""

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tools/src/py/qpid-config
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tools/src/py/qpid-config?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tools/src/py/qpid-config (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tools/src/py/qpid-config Tue Jan 27 15:00:13 2015
@@ -105,6 +105,8 @@ class Config:
         self._if_unused         = True
         self._fileCount         = None
         self._fileSize          = None
+        self._efp_partition_num = None
+        self._efp_pool_file_size = None
         self._maxQueueSize      = None
         self._maxQueueCount     = None
         self._limitPolicy       = None
@@ -137,6 +139,8 @@ conn_options = {}
 
 FILECOUNT = "qpid.file_count"
 FILESIZE  = "qpid.file_size"
+EFP_PARTITION_NUM = "qpid.efp_partition_num"
+EFP_POOL_FILE_SIZE = "qpid.efp_pool_file_size"
 MAX_QUEUE_SIZE  = "qpid.max_size"
 MAX_QUEUE_COUNT  = "qpid.max_count"
 POLICY_TYPE  = "qpid.policy_type"
@@ -158,7 +162,8 @@ REPLICATE = "qpid.replicate"
 #i.e. the arguments for which there is special processing on add and
 #list
 SPECIAL_ARGS=[
-    FILECOUNT,FILESIZE,MAX_QUEUE_SIZE,MAX_QUEUE_COUNT,POLICY_TYPE,
+    FILECOUNT,FILESIZE,EFP_PARTITION_NUM,EFP_POOL_FILE_SIZE,
+    MAX_QUEUE_SIZE,MAX_QUEUE_COUNT,POLICY_TYPE,
     LVQ_KEY,MSG_SEQUENCE,IVE,QUEUE_EVENT_GENERATION,
     FLOW_STOP_COUNT,FLOW_RESUME_COUNT,FLOW_STOP_SIZE,FLOW_RESUME_SIZE,
     MSG_GROUP_HDR_KEY,SHARED_MSG_GROUP,REPLICATE]
@@ -213,8 +218,10 @@ def OptionsAndArguments(argv):
     parser.add_option_group(group2)
 
     group3 = OptionGroup(parser, "Options for Adding Queues")
-    group3.add_option("--file-count", action="store", type="int", metavar="<n>", help="Number of files in queue's persistence journal")
-    group3.add_option("--file-size", action="store", type="int", metavar="<n>", help="File size in pages (64KiB/page)")
+    group3.add_option("--file-count", action="store", type="int", metavar="<n>", help="[legacystore] Number of files in queue's persistence journal")
+    group3.add_option("--file-size", action="store", type="int", metavar="<n>", help="[legactystore] File size in pages (64KiB/page)")
+    group3.add_option("--efp-partition-num", action="store", type="int", metavar="<n>", help="[linearstore] EFP partition number")
+    group3.add_option("--efp-pool-file-size", action="store", type="int", metavar="<n>", help="[linearstore] EFP file size (KiB)")
     group3.add_option("--max-queue-size", action="store", type="int", metavar="<n>", help="Maximum in-memory queue size as bytes")
     group3.add_option("--max-queue-count", action="store", type="int", metavar="<n>", help="Maximum in-memory queue size as a number of messages")
     group3.add_option("--limit-policy", action="store", choices=["none", "reject", "ring", "ring-strict"], metavar="<policy>", help="Action to take when queue limit is reached")
@@ -294,6 +301,10 @@ def OptionsAndArguments(argv):
         config._fileCount = opts.file_count
     if opts.file_size is not None:
         config._fileSize = opts.file_size
+    if opts.efp_partition_num is not None:
+        config._efp_partition_num = opts.efp_partition_num
+    if opts.efp_pool_file_size is not None:
+        config._efp_pool_file_size = opts.efp_pool_file_size
     if opts.max_queue_size is not None:
         config._maxQueueSize = opts.max_queue_size
     if opts.max_queue_count is not None:
@@ -524,6 +535,8 @@ class BrokerManager:
                 if q.exclusive:  print "excl",
                 if FILESIZE in args: print "--file-size=%s" % args[FILESIZE],
                 if FILECOUNT in args: print "--file-count=%s" % args[FILECOUNT],
+                if EFP_PARTITION_NUM in args: print "--efp-partition-num=%s" % args[EFP_PARTITION_NUM],
+                if EFP_POOL_FILE_SIZE in args: print "--efp-pool-file-size=%s" % args[EFP_POOL_FILE_SIZE],
                 if MAX_QUEUE_SIZE in args: print "--max-queue-size=%s" % args[MAX_QUEUE_SIZE],
                 if MAX_QUEUE_COUNT in args: print "--max-queue-count=%s" % args[MAX_QUEUE_COUNT],
                 if POLICY_TYPE in args: print "--limit-policy=%s" % args[POLICY_TYPE].replace("_", "-"),
@@ -606,6 +619,10 @@ class BrokerManager:
                 declArgs[FILECOUNT] = config._fileCount
             if config._fileSize:
                 declArgs[FILESIZE]  = config._fileSize
+            if config._efp_partition_num:
+                declArgs[EFP_PARTITION_NUM] = config._efp_partition_num
+            if config._efp_pool_file_size:
+                declArgs[EFP_POOL_FILE_SIZE] = config._efp_pool_file_size
 
         if config._maxQueueSize is not None:
             declArgs[MAX_QUEUE_SIZE]  = config._maxQueueSize

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tools/src/py/qpid-qls-analyze
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tools/src/py/qpid-qls-analyze?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tools/src/py/qpid-qls-analyze (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tools/src/py/qpid-qls-analyze Tue Jan 27 15:00:13 2015
@@ -28,11 +28,11 @@ import sys
 
 default = os.path.normpath('/usr/share/qpid-tools')
 home = os.environ.get('QPID_TOOLS_HOME', default)
-sys.path.append(os.path.join(home,'python'))
+sys.path.append(os.path.join(home, 'python'))
 
 import argparse
 import os
-import qlslibs.anal
+import qlslibs.analyze
 import qlslibs.efp
 
 class QlsAnalyzerArgParser(argparse.ArgumentParser):
@@ -45,7 +45,9 @@ class QlsAnalyzerArgParser(argparse.Argu
                           help='Qpid Linear Store (QLS) directory to be analyzed')
         self.add_argument('--efp', action='store_true',
                           help='Analyze the Emtpy File Pool (EFP) and show stats')
-        self.add_argument('--show-recs', action='store_true',
+        self.add_argument('--show-recovered-recs', action='store_true',
+                          help='Show only recovered records')
+        self.add_argument('--show-recovery-recs', action='store_true',
                           help='Show material records found during recovery')
         self.add_argument('--show-all-recs', action='store_true',
                           help='Show all records (including fillers) found during recovery')
@@ -72,13 +74,13 @@ class QqpdLinearStoreAnalyzer(object):
     * The Linear Store
     * The Transaction Prepared List (TPL)
     """
-    QLS_ANALYZE_VERSION = '0.1'
+    QLS_ANALYZE_VERSION = '1.0'
     def __init__(self):
         self.args = None
         self._process_args()
         self.qls_dir = os.path.abspath(self.args.qls_dir)
         self.efp_manager = qlslibs.efp.EfpManager(self.qls_dir, None)
-        self.jrnl_recovery_mgr = qlslibs.anal.JournalRecoveryManager(self.qls_dir, self.args)
+        self.jrnl_recovery_mgr = qlslibs.analyze.JournalRecoveryManager(self.qls_dir, self.args)
     def _process_args(self):
         """ Create arg parser and process args """
         parser = QlsAnalyzerArgParser()
@@ -101,10 +103,6 @@ class QqpdLinearStoreAnalyzer(object):
 #==============================================================================
 
 if __name__ == "__main__":
-    # TODO: Remove this in due course
-    print 'WARNING: This program is still a work in progress and is largely untested.'
-    print '* USE AT YOUR OWN RISK *'
-    print
     M = QqpdLinearStoreAnalyzer()
     M.run()
     M.report()

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tools/src/py/qpid-route
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tools/src/py/qpid-route?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tools/src/py/qpid-route (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/tools/src/py/qpid-route Tue Jan 27 15:00:13 2015
@@ -25,6 +25,7 @@ import socket
 import os
 import locale
 from qmf.console import Session, BrokerURL
+from time import sleep
 
 usage = """
 Usage:  qpid-route [OPTIONS] dynamic add <dest-broker> <src-broker> <exchange> [tag] [exclude-list] [mechanism]
@@ -184,6 +185,21 @@ class RouteManager:
                 return link
         return None
 
+    def checkLink(self, link):
+        retry = 3
+        while link is None or (link.state in ("Waiting", "Connecting", "Closing") and retry > 0):
+            sleep(1)
+            link = self.getLink()
+            retry -= 1
+
+        if link == None:
+            raise Exception("Link failed to create")
+
+        if link.state == "Failed":
+            raise Exception("Link failed to create %s" % (link.lastError or ""))
+        elif config._verbose:
+            print "Link state is", link.state
+
     def addLink(self, remoteBroker, interbroker_mechanism=""):
         self.remote = BrokerURL(remoteBroker)
         if self.local.match(self.remote.host, self.remote.port):
@@ -196,8 +212,6 @@ class RouteManager:
             res = broker.connect(self.remote.host, self.remote.port, config._durable,
                                  interbroker_mechanism, self.remote.authName or "", self.remote.authPass or "",
                                  config._transport)
-            if config._verbose:
-                print "Connect method returned:", res.status, res.text
 
     def delLink(self, remoteBroker):
         self.remote = BrokerURL(remoteBroker)
@@ -321,8 +335,7 @@ class RouteManager:
 
         self.addLink(remoteBroker, interbroker_mechanism)
         link = self.getLink()
-        if link == None:
-            raise Exception("Link failed to create")
+        self.checkLink(link)
 
         bridges = self.agent.getObjects(_class="bridge")
         for bridge in bridges:
@@ -345,8 +358,7 @@ class RouteManager:
     def addQueueRoute(self, remoteBroker, interbroker_mechanism, exchange, queue ):
         self.addLink(remoteBroker, interbroker_mechanism)
         link = self.getLink()
-        if link == None:
-            raise Exception("Link failed to create")
+        self.checkLink(link)
 
         bridges = self.agent.getObjects(_class="bridge")
         for bridge in bridges:
@@ -537,6 +549,7 @@ def main(argv=None):
                 interbroker_mechanism = ""
                 if nargs > 4: interbroker_mechanism = args[4]
                 rm.addLink(remoteBroker, interbroker_mechanism)
+                rm.checkLink(rm.getLink())
             elif cmd == "del":
                 if nargs != 4:
                     Usage()



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org