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: [email protected] For additional commands, e-mail: [email protected]
