You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ra...@apache.org on 2010/06/02 18:10:15 UTC
svn commit: r950615 [2/2] - in
/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils:
QpidBrokerTestCase.java QpidTestCase.java
Modified: qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java?rev=950615&r1=950614&r2=950615&view=diff
==============================================================================
--- qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java (original)
+++ qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java Wed Jun 2 16:10:15 2010
@@ -1,101 +1,21 @@
-/* Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * 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
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
package org.apache.qpid.test.utils;
import java.io.BufferedReader;
import java.io.File;
-import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.LineNumberReader;
-import java.io.PrintStream;
-import java.net.MalformedURLException;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-import javax.jms.Connection;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.MessageProducer;
-import javax.jms.Queue;
-import javax.jms.Session;
-import javax.jms.BytesMessage;
-import javax.jms.MapMessage;
-import javax.jms.TextMessage;
-import javax.jms.ObjectMessage;
-import javax.jms.StreamMessage;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
import junit.framework.TestCase;
import junit.framework.TestResult;
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.XMLConfiguration;
-import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
-import org.apache.log4j.Level;
-import org.apache.qpid.AMQException;
-import org.apache.qpid.client.AMQConnection;
-import org.apache.qpid.client.AMQConnectionFactory;
-import org.apache.qpid.client.AMQQueue;
-import org.apache.qpid.client.transport.TransportConnection;
-import org.apache.qpid.exchange.ExchangeDefaults;
-import org.apache.qpid.jms.BrokerDetails;
-import org.apache.qpid.jms.ConnectionURL;
-import org.apache.qpid.server.configuration.ServerConfiguration;
-import org.apache.qpid.server.registry.ApplicationRegistry;
-import org.apache.qpid.server.registry.ConfigurationFileApplicationRegistry;
-import org.apache.qpid.server.store.DerbyMessageStore;
-import org.apache.qpid.url.URLSyntaxException;
-import org.apache.qpid.util.LogMonitor;
-/**
- * Qpid base class for system testing test cases.
- */
public class QpidTestCase extends TestCase
{
- protected final String QpidHome = System.getProperty("QPID_HOME");
- protected File _configFile = new File(System.getProperty("broker.config"));
-
- protected static final Logger _logger = Logger.getLogger(QpidTestCase.class);
- protected static final int LOGMONITOR_TIMEOUT = 5000;
-
- protected long RECEIVE_TIMEOUT = 1000l;
-
- private Map<String, String> _propertiesSetForTestOnly = new HashMap<String, String>();
- private Map<String, String> _propertiesSetForBroker = new HashMap<String, String>();
- private Map<Logger, Level> _loggerLevelSetForTest = new HashMap<Logger, Level>();
-
- private XMLConfiguration _testConfiguration = new XMLConfiguration();
- private XMLConfiguration _testVirtualhosts = new XMLConfiguration();
-
- protected static final String INDEX = "index";
- protected static final String CONTENT = "content";
-
+ protected static final Logger _logger = Logger.getLogger(QpidBrokerTestCase.class);
+
/**
* Some tests are excluded when the property test.excludes is set to true.
* An exclusion list is either a file (prop test.excludesfile) which contains one test name
@@ -105,8 +25,6 @@ public class QpidTestCase extends TestCa
* excluded and testName is the name of the test to be excluded.
* className#* excludes all the tests of the specified class.
*/
- private static final String DEFAULT_INITIAL_CONTEXT = "org.apache.qpid.jndi.PropertiesFileInitialContextFactory";
-
static
{
if (Boolean.getBoolean("test.exclude"))
@@ -151,199 +69,10 @@ public class QpidTestCase extends TestCa
_exclusionList = exclusionList;
}
-
- String initialContext = System.getProperty(InitialContext.INITIAL_CONTEXT_FACTORY);
-
- if (initialContext == null || initialContext.length() == 0)
- {
- System.setProperty(InitialContext.INITIAL_CONTEXT_FACTORY, DEFAULT_INITIAL_CONTEXT);
- }
}
-
- private static List<String> _exclusionList;
-
- // system properties
- private static final String BROKER_LANGUAGE = "broker.language";
- private static final String BROKER = "broker";
- private static final String BROKER_CLEAN = "broker.clean";
- private static final String BROKER_CLEAN_BETWEEN_TESTS = "broker.clean.between.tests";
- private static final String BROKER_VERSION = "broker.version";
- protected static final String BROKER_READY = "broker.ready";
- private static final String BROKER_STOPPED = "broker.stopped";
- private static final String TEST_OUTPUT = "test.output";
- private static final String BROKER_LOG_INTERLEAVE = "broker.log.interleave";
- private static final String BROKER_LOG_PREFIX = "broker.log.prefix";
- private static final String BROKER_PERSITENT = "broker.persistent";
-
- // values
- protected static final String JAVA = "java";
- protected static final String CPP = "cpp";
- protected static final String VM = "vm";
- protected static final String EXTERNAL = "external";
- private static final String VERSION_08 = "0-8";
- private static final String VERSION_010 = "0-10";
-
- protected static final String QPID_HOME = "QPID_HOME";
-
- public static final int DEFAULT_VM_PORT = 1;
- public static final int DEFAULT_PORT = Integer.getInteger("test.port", ServerConfiguration.DEFAULT_PORT);
- public static final int DEFAULT_MANAGEMENT_PORT = Integer.getInteger("test.mport", ServerConfiguration.DEFAULT_JMXPORT);
- public static final int DEFAULT_SSL_PORT = Integer.getInteger("test.sslport", ServerConfiguration.DEFAULT_SSL_PORT);
-
- protected String _brokerLanguage = System.getProperty(BROKER_LANGUAGE, JAVA);
- protected String _broker = System.getProperty(BROKER, VM);
- private String _brokerClean = System.getProperty(BROKER_CLEAN, null);
- private Boolean _brokerCleanBetweenTests = Boolean.getBoolean(BROKER_CLEAN_BETWEEN_TESTS);
- private String _brokerVersion = System.getProperty(BROKER_VERSION, VERSION_08);
- protected String _output = System.getProperty(TEST_OUTPUT);
- protected Boolean _brokerPersistent = Boolean.getBoolean(BROKER_PERSITENT);
-
- protected static String _brokerLogPrefix = System.getProperty(BROKER_LOG_PREFIX,"BROKER: ");
- protected static boolean _interleaveBrokerLog = Boolean.getBoolean(BROKER_LOG_INTERLEAVE);
-
- protected File _outputFile;
-
- protected PrintStream _brokerOutputStream;
-
- protected Map<Integer, Process> _brokers = new HashMap<Integer, Process>();
-
- protected InitialContext _initialContext;
- protected AMQConnectionFactory _connectionFactory;
-
- protected String _testName;
-
- // the connections created for a given test
- protected List<Connection> _connections = new ArrayList<Connection>();
- public static final String QUEUE = "queue";
- public static final String TOPIC = "topic";
- /** Map to hold test defined environment properties */
- private Map<String, String> _env;
-
- /** Ensure our messages have some sort of size */
- protected static final int DEFAULT_MESSAGE_SIZE = 1024;
+ private static List<String> _exclusionList;
- /** Size to create our message*/
- private int _messageSize = DEFAULT_MESSAGE_SIZE;
- /** Type of message*/
- protected enum MessageType
- {
- BYTES,
- MAP,
- OBJECT,
- STREAM,
- TEXT
- }
- private MessageType _messageType = MessageType.TEXT;
-
- public QpidTestCase(String name)
- {
- super(name);
- }
-
- public QpidTestCase()
- {
- this("QpidTestCase");
- }
-
- public Logger getLogger()
- {
- return QpidTestCase._logger;
- }
-
- public void runBare() throws Throwable
- {
- _testName = getClass().getSimpleName() + "." + getName();
- String qname = getClass().getName() + "." + getName();
-
- // Initialize this for each test run
- _env = new HashMap<String, String>();
-
- PrintStream oldOut = System.out;
- PrintStream oldErr = System.err;
- PrintStream out = null;
- PrintStream err = null;
-
- boolean redirected = _output != null && _output.length() > 0;
- if (redirected)
- {
- _outputFile = new File(String.format("%s/TEST-%s.out", _output, qname));
- out = new PrintStream(_outputFile);
- err = new PrintStream(String.format("%s/TEST-%s.err", _output, qname));
- System.setOut(out);
- System.setErr(err);
-
- if (_interleaveBrokerLog)
- {
- _brokerOutputStream = out;
- }
- else
- {
- _brokerOutputStream = new PrintStream(new FileOutputStream(String
- .format("%s/TEST-%s.broker.out", _output, qname)), true);
- }
- }
-
- _logger.info("========== start " + _testName + " ==========");
- try
- {
- super.runBare();
- }
- catch (Exception e)
- {
- _logger.error("exception", e);
- throw e;
- }
- finally
- {
- try
- {
- stopBroker();
- }
- catch (Exception e)
- {
- _logger.error("exception stopping broker", e);
- }
-
- if(_brokerCleanBetweenTests)
- {
- try
- {
- cleanBroker();
- }
- catch (Exception e)
- {
- _logger.error("exception cleaning up broker", e);
- }
- }
-
- _logger.info("========== stop " + _testName + " ==========");
-
- if (redirected)
- {
- System.setErr(oldErr);
- System.setOut(oldOut);
- err.close();
- out.close();
- if (!_interleaveBrokerLog)
- {
- _brokerOutputStream.close();
- }
- }
- }
- }
-
- @Override
- protected void setUp() throws Exception
- {
- if (!_configFile.exists())
- {
- fail("Unable to test without config file:" + _configFile);
- }
-
- startBroker();
- }
-
public void run(TestResult testResult)
{
if (_exclusionList != null && (_exclusionList.contains(getClass().getPackage().getName() + ".*") ||
@@ -358,1057 +87,14 @@ public class QpidTestCase extends TestCa
super.run(testResult);
}
}
-
- private static final class Piper extends Thread
- {
-
- private LineNumberReader in;
- private PrintStream out;
- private String ready;
- private CountDownLatch latch;
- private boolean seenReady;
- private String stopped;
- private String stopLine;
-
- public Piper(InputStream in, PrintStream out, String ready)
- {
- this(in, out, ready, null);
- }
-
- public Piper(InputStream in, PrintStream out, String ready, String stopped)
- {
- this.in = new LineNumberReader(new InputStreamReader(in));
- this.out = out;
- this.ready = ready;
- this.stopped = stopped;
- this.seenReady = false;
-
- if (this.ready != null && !this.ready.equals(""))
- {
- this.latch = new CountDownLatch(1);
- }
- else
- {
- this.latch = null;
- }
- }
-
- public Piper(InputStream in, PrintStream out)
- {
- this(in, out, null);
- }
-
- public boolean await(long timeout, TimeUnit unit) throws InterruptedException
- {
- if (latch == null)
- {
- return true;
- }
- else
- {
- latch.await(timeout, unit);
- return seenReady;
- }
- }
-
- public void run()
- {
- try
- {
- String line;
- while ((line = in.readLine()) != null)
- {
- if (_interleaveBrokerLog)
- {
- line = _brokerLogPrefix + line;
- }
- out.println(line);
-
- if (latch != null && line.contains(ready))
- {
- seenReady = true;
- latch.countDown();
- }
-
- if (!seenReady && line.contains(stopped))
- {
- stopLine = line;
- }
- }
- }
- catch (IOException e)
- {
- // this seems to happen regularly even when
- // exits are normal
- }
- finally
- {
- if (latch != null)
- {
- latch.countDown();
- }
- }
- }
-
- public String getStopLine()
- {
- return stopLine;
- }
- }
-
- public void startBroker() throws Exception
- {
- startBroker(0);
- }
-
- /**
- * Return the management portin use by the broker on this main port
- *
- * @param mainPort the broker's main port.
- *
- * @return the management port that corresponds to the broker on the given port
- */
- protected int getManagementPort(int mainPort)
- {
- return mainPort + (DEFAULT_MANAGEMENT_PORT - (_broker.equals(VM) ? DEFAULT_VM_PORT : DEFAULT_PORT));
- }
-
- /**
- * Get the Port that is use by the current broker
- *
- * @return the current port
- */
- protected int getPort()
- {
- return getPort(0);
- }
-
- protected int getPort(int port)
- {
- if (_broker.equals(VM))
- {
- return port == 0 ? DEFAULT_VM_PORT : port;
- }
- else if (!_broker.equals(EXTERNAL))
- {
- return port == 0 ? DEFAULT_PORT : port;
- }
- else
- {
- return port;
- }
- }
-
- protected String getBrokerCommand(int port) throws MalformedURLException
- {
- return _broker
- .replace("@PORT", "" + port)
- .replace("@SSL_PORT", "" + (port - 1))
- .replace("@MPORT", "" + getManagementPort(port))
- .replace("@CONFIG_FILE", _configFile.toString());
- }
-
- public void startBroker(int port) throws Exception
- {
- port = getPort(port);
-
- // Save any configuration changes that have been made
- saveTestConfiguration();
- saveTestVirtualhosts();
-
- Process process = null;
- if (_broker.equals(VM))
- {
- setConfigurationProperty("management.jmxport", String.valueOf(getManagementPort(port)));
- setConfigurationProperty(ServerConfiguration.MGMT_CUSTOM_REGISTRY_SOCKET, String.valueOf(false));
- saveTestConfiguration();
-
- // create an in_VM broker
- final ConfigurationFileApplicationRegistry registry = new ConfigurationFileApplicationRegistry(_configFile);
- try
- {
- ApplicationRegistry.initialise(registry, port);
- }
- catch (Exception e)
- {
- _logger.error("Broker initialise failed due to:",e);
- try
- {
- registry.close();
- }
- catch (Throwable closeE)
- {
- closeE.printStackTrace();
- }
- throw e;
- }
- TransportConnection.createVMBroker(port);
- }
- else if (!_broker.equals(EXTERNAL))
- {
- String cmd = getBrokerCommand(port);
- _logger.info("starting broker: " + cmd);
- ProcessBuilder pb = new ProcessBuilder(cmd.split("\\s+"));
- pb.redirectErrorStream(true);
-
- Map<String, String> env = pb.environment();
-
- String qpidHome = System.getProperty(QPID_HOME);
- env.put(QPID_HOME, qpidHome);
-
- //Augment Path with bin directory in QPID_HOME.
- env.put("PATH", env.get("PATH").concat(File.pathSeparator + qpidHome + "/bin"));
-
- //Add the test name to the broker run.
- // DON'T change PNAME, qpid.stop needs this value.
- env.put("QPID_PNAME", "-DPNAME=QPBRKR -DTNAME=\"" + _testName + "\"");
- // Add the port to QPID_WORK to ensure unique working dirs for multi broker tests
- env.put("QPID_WORK", System.getProperty("QPID_WORK")+ "/" + port);
-
-
- // Use the environment variable to set amqj.logging.level for the broker
- // The value used is a 'server' value in the test configuration to
- // allow a differentiation between the client and broker logging levels.
- if (System.getProperty("amqj.server.logging.level") != null)
- {
- setBrokerEnvironment("AMQJ_LOGGING_LEVEL", System.getProperty("amqj.server.logging.level"));
- }
-
- // Add all the environment settings the test requested
- if (!_env.isEmpty())
- {
- for (Map.Entry<String, String> entry : _env.entrySet())
- {
- env.put(entry.getKey(), entry.getValue());
- }
- }
-
-
- // Add default test logging levels that are used by the log4j-test
- // Use the convenience methods to push the current logging setting
- // in to the external broker's QPID_OPTS string.
- if (System.getProperty("amqj.protocol.logging.level") != null)
- {
- setSystemProperty("amqj.protocol.logging.level");
- }
- if (System.getProperty("root.logging.level") != null)
- {
- setSystemProperty("root.logging.level");
- }
-
-
- String QPID_OPTS = " ";
- // Add all the specified system properties to QPID_OPTS
- if (!_propertiesSetForBroker.isEmpty())
- {
- for (String key : _propertiesSetForBroker.keySet())
- {
- QPID_OPTS += "-D" + key + "=" + _propertiesSetForBroker.get(key) + " ";
- }
-
- if (env.containsKey("QPID_OPTS"))
- {
- env.put("QPID_OPTS", env.get("QPID_OPTS") + QPID_OPTS);
- }
- else
- {
- env.put("QPID_OPTS", QPID_OPTS);
- }
- }
-
- process = pb.start();
-
- Piper p = new Piper(process.getInputStream(),
- _brokerOutputStream,
- System.getProperty(BROKER_READY),
- System.getProperty(BROKER_STOPPED));
-
- p.start();
-
- if (!p.await(30, TimeUnit.SECONDS))
- {
- _logger.info("broker failed to become ready (" + p.ready + "):" + p.getStopLine());
- //Ensure broker has stopped
- process.destroy();
- cleanBroker();
- throw new RuntimeException("broker failed to become ready:"
- + p.getStopLine());
- }
-
- try
- {
- int exit = process.exitValue();
- _logger.info("broker aborted: " + exit);
- cleanBroker();
- throw new RuntimeException("broker aborted: " + exit);
- }
- catch (IllegalThreadStateException e)
- {
- // this is expect if the broker started succesfully
- }
- }
-
- _brokers.put(port, process);
- }
-
- public String getTestConfigFile()
- {
- String path = _output == null ? System.getProperty("java.io.tmpdir") : _output;
- return path + "/" + getTestQueueName() + "-config.xml";
- }
-
- public String getTestVirtualhostsFile()
- {
- String path = _output == null ? System.getProperty("java.io.tmpdir") : _output;
- return path + "/" + getTestQueueName() + "-virtualhosts.xml";
- }
-
- protected void saveTestConfiguration() throws ConfigurationException
- {
- // Specifiy the test config file
- String testConfig = getTestConfigFile();
- setSystemProperty("test.config", testConfig);
-
- // Create the file if configuration does not exist
- if (_testConfiguration.isEmpty())
- {
- _testConfiguration.addProperty("__ignore", "true");
- }
- _testConfiguration.save(testConfig);
- }
-
- protected void saveTestVirtualhosts() throws ConfigurationException
- {
- // Specifiy the test virtualhosts file
- String testVirtualhosts = getTestVirtualhostsFile();
- setSystemProperty("test.virtualhosts", testVirtualhosts);
-
- // Create the file if configuration does not exist
- if (_testVirtualhosts.isEmpty())
- {
- _testVirtualhosts.addProperty("__ignore", "true");
- }
- _testVirtualhosts.save(testVirtualhosts);
- }
-
- public void cleanBroker()
- {
- if (_brokerClean != null)
- {
- _logger.info("clean: " + _brokerClean);
-
- try
- {
- ProcessBuilder pb = new ProcessBuilder(_brokerClean.split("\\s+"));
- pb.redirectErrorStream(true);
- Process clean = pb.start();
- new Piper(clean.getInputStream(),_brokerOutputStream).start();
-
- clean.waitFor();
-
- _logger.info("clean exited: " + clean.exitValue());
- }
- catch (IOException e)
- {
- throw new RuntimeException(e);
- }
- catch (InterruptedException e)
- {
- throw new RuntimeException(e);
- }
- }
- }
-
- public void stopBroker() throws Exception
+
+ public QpidTestCase(String name)
{
- stopBroker(0);
+ super(name);
}
-
- public void stopBroker(int port) throws Exception
+
+ public QpidTestCase()
{
- port = getPort(port);
-
- _logger.info("stopping broker: " + getBrokerCommand(port));
- Process process = _brokers.remove(port);
- if (process != null)
- {
- process.destroy();
- process.waitFor();
- _logger.info("broker exited: " + process.exitValue());
- }
- else if (_broker.equals(VM))
- {
- TransportConnection.killVMBroker(port);
- ApplicationRegistry.remove(port);
- }
- }
-
- /**
- * Attempt to set the Java Broker to use the BDBMessageStore for persistence
- * Falling back to the DerbyMessageStore if
- *
- * @param virtualhost - The virtualhost to modify
- *
- * @throws ConfigurationException - when reading/writing existing configuration
- * @throws IOException - When creating a temporary file.
- */
- protected void makeVirtualHostPersistent(String virtualhost)
- throws ConfigurationException, IOException
- {
- Class<?> storeClass = null;
- try
- {
- // Try and lookup the BDB class
- storeClass = Class.forName("org.apache.qpid.server.store.berkeleydb.BDBMessageStore");
- }
- catch (ClassNotFoundException e)
- {
- // No BDB store, we'll use Derby instead.
- storeClass = DerbyMessageStore.class;
- }
-
-
- setConfigurationProperty("virtualhosts.virtualhost." + virtualhost + ".store.class",
- storeClass.getName());
- setConfigurationProperty("virtualhosts.virtualhost." + virtualhost + ".store." + DerbyMessageStore.ENVIRONMENT_PATH_PROPERTY,
- "${QPID_WORK}/" + virtualhost);
- }
-
- /**
- * Get a property value from the current configuration file.
- *
- * @param property the property to lookup
- *
- * @return the requested String Value
- *
- * @throws org.apache.commons.configuration.ConfigurationException
- *
- */
- protected String getConfigurationStringProperty(String property) throws ConfigurationException
- {
- // Call save Configuration to be sure we have saved the test specific
- // file. As the optional status
- saveTestConfiguration();
- saveTestVirtualhosts();
-
- ServerConfiguration configuration = new ServerConfiguration(_configFile);
- // Don't need to configuration.configure() here as we are just pulling
- // values directly by String.
- return configuration.getConfig().getString(property);
- }
-
- /**
- * Set a configuration Property for this test run.
- *
- * This creates a new configuration based on the current configuration
- * with the specified property change.
- *
- * Multiple calls to this method will result in multiple temporary
- * configuration files being created.
- *
- * @param property the configuration property to set
- * @param value the new value
- *
- * @throws ConfigurationException when loading the current config file
- * @throws IOException when writing the new config file
- */
- protected void setConfigurationProperty(String property, String value)
- throws ConfigurationException, IOException
- {
- // Choose which file to write the property to based on prefix.
- if (property.startsWith("virtualhosts"))
- {
- _testVirtualhosts.setProperty(StringUtils.substringAfter(property, "virtualhosts."), value);
- }
- else
- {
- _testConfiguration.setProperty(property, value);
- }
- }
-
- /**
- * Set a System property that is to be applied only to the external test
- * broker.
- *
- * This is a convenience method to enable the setting of a -Dproperty=value
- * entry in QPID_OPTS
- *
- * This is only useful for the External Java Broker tests.
- *
- * @param property the property name
- * @param value the value to set the property to
- */
- protected void setBrokerOnlySystemProperty(String property, String value)
- {
- if (!_propertiesSetForBroker.containsKey(property))
- {
- _propertiesSetForBroker.put(property, value);
- }
-
- }
-
- /**
- * Set a System (-D) property for this test run.
- *
- * This convenience method copies the current VMs System Property
- * for the external VM Broker.
- *
- * @param property the System property to set
- */
- protected void setSystemProperty(String property)
- {
- setSystemProperty(property, System.getProperty(property));
- }
-
- /**
- * Set a System property for the duration of this test.
- *
- * When the test run is complete the value will be reverted.
- *
- * The values set using this method will also be propogated to the external
- * Java Broker via a -D value defined in QPID_OPTS.
- *
- * If the value should not be set on the broker then use
- * setTestClientSystemProperty().
- *
- * @param property the property to set
- * @param value the new value to use
- */
- protected void setSystemProperty(String property, String value)
- {
- // Record the value for the external broker
- _propertiesSetForBroker.put(property, value);
-
- //Set the value for the test client vm aswell.
- setTestClientSystemProperty(property, value);
- }
-
- /**
- * Set a System (-D) property for the external Broker of this test.
- *
- * @param property The property to set
- * @param value the value to set it to.
- */
- protected void setTestClientSystemProperty(String property, String value)
- {
- if (!_propertiesSetForTestOnly.containsKey(property))
- {
- // Record the current value so we can revert it later.
- _propertiesSetForTestOnly.put(property, System.getProperty(property));
- }
-
- System.setProperty(property, value);
- }
-
- /**
- * Restore the System property values that were set before this test run.
- */
- protected void revertSystemProperties()
- {
- for (String key : _propertiesSetForTestOnly.keySet())
- {
- String value = _propertiesSetForTestOnly.get(key);
- if (value != null)
- {
- System.setProperty(key, value);
- }
- else
- {
- System.clearProperty(key);
- }
- }
-
- _propertiesSetForTestOnly.clear();
-
- // We don't change the current VMs settings for Broker only properties
- // so we can just clear this map
- _propertiesSetForBroker.clear();
- }
-
- /**
- * Add an environtmen variable for the external broker environment
- *
- * @param property the property to set
- * @param value the value to set it to
- */
- protected void setBrokerEnvironment(String property, String value)
- {
- _env.put(property, value);
- }
-
- /**
- * Adjust the VMs Log4j Settings just for this test run
- *
- * @param logger the logger to change
- * @param level the level to set
- */
- protected void setLoggerLevel(Logger logger, Level level)
- {
- assertNotNull("Cannot set level of null logger", logger);
- assertNotNull("Cannot set Logger("+logger.getName()+") to null level.",level);
-
- if (!_loggerLevelSetForTest.containsKey(logger))
- {
- // Record the current value so we can revert it later.
- _loggerLevelSetForTest.put(logger, logger.getLevel());
- }
-
- logger.setLevel(level);
- }
-
- /**
- * Restore the logging levels defined by this test.
- */
- protected void revertLoggingLevels()
- {
- for (Logger logger : _loggerLevelSetForTest.keySet())
- {
- logger.setLevel(_loggerLevelSetForTest.get(logger));
- }
-
- _loggerLevelSetForTest.clear();
-
- }
-
- /**
- * Check whether the broker is an 0.8
- *
- * @return true if the broker is an 0_8 version, false otherwise.
- */
- public boolean isBroker08()
- {
- return _brokerVersion.equals(VERSION_08);
- }
-
- public boolean isBroker010()
- {
- return _brokerVersion.equals(VERSION_010);
- }
-
- protected boolean isJavaBroker()
- {
- return _brokerLanguage.equals("java") || _broker.equals("vm");
- }
-
- protected boolean isCppBroker()
- {
- return _brokerLanguage.equals("cpp");
- }
-
- protected boolean isExternalBroker()
- {
- return !_broker.equals("vm");
- }
-
- protected boolean isBrokerStorePersistent()
- {
- return _brokerPersistent;
- }
-
- public void restartBroker() throws Exception
- {
- restartBroker(0);
- }
-
- public void restartBroker(int port) throws Exception
- {
- stopBroker(port);
- startBroker(port);
- }
-
- /**
- * we assume that the environment is correctly set
- * i.e. -Djava.naming.provider.url="..//example010.properties"
- * TODO should be a way of setting that through maven
- *
- * @return an initial context
- *
- * @throws NamingException if there is an error getting the context
- */
- public InitialContext getInitialContext() throws NamingException
- {
- _logger.info("get InitialContext");
- if (_initialContext == null)
- {
- _initialContext = new InitialContext();
- }
- return _initialContext;
- }
-
- /**
- * Get the default connection factory for the currently used broker
- * Default factory is "local"
- *
- * @return A conection factory
- *
- * @throws Exception if there is an error getting the tactory
- */
- public AMQConnectionFactory getConnectionFactory() throws NamingException
- {
- _logger.info("get ConnectionFactory");
- if (_connectionFactory == null)
- {
- if (Boolean.getBoolean("profile.use_ssl"))
- {
- _connectionFactory = getConnectionFactory("default.ssl");
- }
- else
- {
- _connectionFactory = getConnectionFactory("default");
- }
- }
- return _connectionFactory;
- }
-
- /**
- * Get a connection factory for the currently used broker
- *
- * @param factoryName The factory name
- *
- * @return A conection factory
- *
- * @throws Exception if there is an error getting the tactory
- */
- public AMQConnectionFactory getConnectionFactory(String factoryName) throws NamingException
- {
- if (_broker.equals(VM))
- {
- factoryName += ".vm";
- }
-
- return (AMQConnectionFactory) getInitialContext().lookup(factoryName);
- }
-
- public Connection getConnection() throws JMSException, NamingException
- {
- return getConnection("guest", "guest");
- }
-
- public Connection getConnection(ConnectionURL url) throws JMSException
- {
- _logger.info(url.getURL());
- Connection connection = new AMQConnectionFactory(url).createConnection(url.getUsername(), url.getPassword());
-
- _connections.add(connection);
-
- return connection;
- }
-
- /**
- * Get a connection (remote or in-VM)
- *
- * @param username The user name
- * @param password The user password
- *
- * @return a newly created connection
- *
- * @throws Exception if there is an error getting the connection
- */
- public Connection getConnection(String username, String password) throws JMSException, NamingException
- {
- _logger.info("get connection");
- Connection con = getConnectionFactory().createConnection(username, password);
- //add the connection in the lis of connections
- _connections.add(con);
- return con;
- }
-
- public Connection getClientConnection(String username, String password, String id) throws JMSException, URLSyntaxException, AMQException, NamingException
- {
- _logger.info("get Connection");
- Connection con;
- if (_broker.equals(VM))
- {
- con = new AMQConnection("vm://:1", username, password, id, "test");
- }
- else
- {
- con = getConnectionFactory().createConnection(username, password, id);
- }
- //add the connection in the lis of connections
- _connections.add(con);
- return con;
- }
-
- /**
- * Return a uniqueName for this test.
- * In this case it returns a queue Named by the TestCase and TestName
- *
- * @return String name for a queue
- */
- protected String getTestQueueName()
- {
- return getClass().getSimpleName() + "-" + getName();
- }
-
- /**
- * Return a Queue specific for this test.
- * Uses getTestQueueName() as the name of the queue
- * @return
- */
- public Queue getTestQueue()
- {
- return new AMQQueue(ExchangeDefaults.DIRECT_EXCHANGE_NAME, getTestQueueName());
- }
-
-
- protected void tearDown() throws java.lang.Exception
- {
- try
- {
- // close all the connections used by this test.
- for (Connection c : _connections)
- {
- c.close();
- }
- }
- finally{
- // Ensure any problems with close does not interfer with property resets
- revertSystemProperties();
- revertLoggingLevels();
- }
- }
-
- /**
- * Consume all the messages in the specified queue. Helper to ensure
- * persistent tests don't leave data behind.
- *
- * @param queue the queue to purge
- *
- * @return the count of messages drained
- *
- * @throws Exception if a problem occurs
- */
- protected int drainQueue(Queue queue) throws Exception
- {
- Connection connection = getConnection();
-
- Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
- MessageConsumer consumer = session.createConsumer(queue);
-
- connection.start();
-
- int count = 0;
- while (consumer.receive(1000) != null)
- {
- count++;
- }
-
- connection.close();
-
- return count;
- }
-
- /**
- * Send messages to the given destination.
- *
- * If session is transacted then messages will be commited before returning
- *
- * @param session the session to use for sending
- * @param destination where to send them to
- * @param count no. of messages to send
- *
- * @return the sent messges
- *
- * @throws Exception
- */
- public List<Message> sendMessage(Session session, Destination destination,
- int count) throws Exception
- {
- return sendMessage(session, destination, count, 0, 0);
- }
-
- /**
- * Send messages to the given destination.
- *
- * If session is transacted then messages will be commited before returning
- *
- * @param session the session to use for sending
- * @param destination where to send them to
- * @param count no. of messages to send
- *
- * @param batchSize the batchSize in which to commit, 0 means no batching,
- * but a single commit at the end
- * @return the sent messgse
- *
- * @throws Exception
- */
- public List<Message> sendMessage(Session session, Destination destination,
- int count, int batchSize) throws Exception
- {
- return sendMessage(session, destination, count, 0, batchSize);
- }
-
- /**
- * Send messages to the given destination.
- *
- * If session is transacted then messages will be commited before returning
- *
- * @param session the session to use for sending
- * @param destination where to send them to
- * @param count no. of messages to send
- *
- * @param offset offset allows the INDEX value of the message to be adjusted.
- * @param batchSize the batchSize in which to commit, 0 means no batching,
- * but a single commit at the end
- * @return the sent messgse
- *
- * @throws Exception
- */
- public List<Message> sendMessage(Session session, Destination destination,
- int count, int offset, int batchSize) throws Exception
- {
- List<Message> messages = new ArrayList<Message>(count);
-
- MessageProducer producer = session.createProducer(destination);
-
- for (int i = offset; i < (count + offset); i++)
- {
- Message next = createNextMessage(session, i);
-
- producer.send(next);
-
- if (session.getTransacted() && batchSize > 0)
- {
- if (i % batchSize == 0)
- {
- session.commit();
- }
-
- }
-
- messages.add(next);
- }
-
- // Ensure we commit the last messages
- // Commit the session if we are transacted and
- // we have no batchSize or
- // our count is not divible by batchSize.
- if (session.getTransacted() &&
- ( batchSize == 0 || count % batchSize != 0))
- {
- session.commit();
- }
-
- return messages;
- }
-
- public Message createNextMessage(Session session, int msgCount) throws JMSException
- {
- Message message = createMessage(session, _messageSize);
- message.setIntProperty(INDEX, msgCount);
-
- return message;
-
- }
-
- public Message createMessage(Session session, int messageSize) throws JMSException
- {
- String payload = new String(new byte[messageSize]);
-
- Message message;
-
- switch (_messageType)
- {
- case BYTES:
- message = session.createBytesMessage();
- ((BytesMessage) message).writeUTF(payload);
- break;
- case MAP:
- message = session.createMapMessage();
- ((MapMessage) message).setString(CONTENT, payload);
- break;
- default: // To keep the compiler happy
- case TEXT:
- message = session.createTextMessage();
- ((TextMessage) message).setText(payload);
- break;
- case OBJECT:
- message = session.createObjectMessage();
- ((ObjectMessage) message).setObject(payload);
- break;
- case STREAM:
- message = session.createStreamMessage();
- ((StreamMessage) message).writeString(payload);
- break;
- }
-
- return message;
- }
-
- protected int getMessageSize()
- {
- return _messageSize;
- }
-
- protected void setMessageSize(int byteSize)
- {
- _messageSize = byteSize;
- }
-
- public ConnectionURL getConnectionURL() throws NamingException
- {
- return getConnectionFactory().getConnectionURL();
- }
-
- public BrokerDetails getBroker()
- {
- try
- {
- if (getConnectionFactory().getConnectionURL().getBrokerCount() > 0)
- {
- return getConnectionFactory().getConnectionURL().getBrokerDetails(0);
- }
- else
- {
- fail("No broker details are available.");
- }
- }
- catch (NamingException e)
- {
- fail(e.getMessage());
- }
-
- //keep compiler happy
- return null;
- }
-
- public void reloadBroker() throws ConfigurationException, IOException
- {
- reloadBroker(0);
- }
-
- public void reloadBroker(int port) throws ConfigurationException, IOException
- {
- if (_broker.equals(VM))
- {
- ApplicationRegistry.getInstance().getConfiguration().reparseConfigFileSecuritySections();
- }
- else // FIXME: should really use the JMX interface to do this
- {
- /*
- * Sigh, this is going to get messy. grep for BRKR and the port number
- */
- String osName = System.getProperty("os.name");
- boolean osx = osName.equals("Mac OS X");
-
- String cmd = osx ? "/usr/sbin/lsof -i TCP:%d -Fp" : "/usr/bin/pgrep -f %d";
- Process p = Runtime.getRuntime().exec(String.format(cmd, getPort(port)));
- BufferedReader reader = new BufferedReader (new InputStreamReader(p.getInputStream()));
- String pid = reader.readLine();
- while (reader.ready())
- {
- pid = reader.readLine();
- }
-
- cmd = "/bin/kill -SIGHUP " + (osx ? pid.substring(1) : pid);
- p = Runtime.getRuntime().exec(cmd);
-
- LogMonitor _monitor = new LogMonitor(_outputFile);
- assertTrue("The expected server security configuration reload did not occur",
- _monitor.waitForMessage(ServerConfiguration.SECURITY_CONFIG_RELOADED, LOGMONITOR_TIMEOUT));
-
- }
+ this("QpidTestCase");
}
}
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org