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