From ebfd9ff053b04ab379acfc0fefedee5a31b6d8a5 Mon Sep 17 00:00:00 2001 From: "Stephen D. Huston" Date: Fri, 21 Oct 2011 01:19:00 +0000 Subject: Undo bad merge from trunk - merged at wrong level. git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/QPID-2519@1187150 13f79535-47bb-0310-9956-ffa450edef68 --- .../Qpid.Integration.Tests/framework/TestUtils.csx | 188 +++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 dotnet/Qpid.Integration.Tests/framework/TestUtils.csx (limited to 'dotnet/Qpid.Integration.Tests/framework/TestUtils.csx') diff --git a/dotnet/Qpid.Integration.Tests/framework/TestUtils.csx b/dotnet/Qpid.Integration.Tests/framework/TestUtils.csx new file mode 100644 index 0000000000..bb00bf2683 --- /dev/null +++ b/dotnet/Qpid.Integration.Tests/framework/TestUtils.csx @@ -0,0 +1,188 @@ +/* + * + * 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. + * + */ +using log4net; + +using static Apache.Qpid.Integration.Tests.framework.MessagingTestConfigProperties.*; + +using uk.co.thebadgerset.junit.extensions.util.ParsedProperties; + +using javax.jms.*; +using javax.naming.Context; +using javax.naming.InitialContext; +using javax.naming.NamingException; + +using System.Collections.Generic.IDictionary; + +namespace Apache.Qpid.Integration.Tests.framework +{ + /// + /// TestUtils provides static helper methods that are usefull for writing tests against QPid. + /// + ///

+ ///
CRC Card
Responsibilities Collaborations + ///
Create connections from test properties. + ///
Create test messages. + ///
Inject a short pause in a test. + ///
Serialize properties into a message. + ///
+ ///

+ public class TestUtils + { + /// Used for debugging. + private static ILog log = LogManager.GetLogger(typeof(TestUtils)); + + /// Some dummy data to stuff all test messages with. + private static final byte[] MESSAGE_DATA_BYTES = + "Test Message -- Test Message -- Test Message -- Test Message -- Test Message -- Test Message -- Test Message -- " + .getBytes(); + + /// + /// Establishes a JMS connection using a set of properties and qpids built in JNDI implementation. This is a simple + /// convenience method for code that does not anticipate handling connection failures. All exceptions that indicate + /// that the connection has failed, are wrapped as rutime exceptions, presumably handled by a top level failure + /// handler. + /// + ///

This utility makes use of the following test parameters from to control + /// the connection creation: + /// + ///

+ ///
The username. + ///
The password. + ///
The virtual host name. + ///
The broker URL. + ///
The broker name in the initial context. + /// + /// Connection properties as defined in . + /// + /// A JMS conneciton. + public static Connection createConnection(ParsedProperties messagingProps) + { + log.debug("public static Connection createConnection(ParsedProperties messagingProps = " + messagingProps + + "): called"); + + try + { + // Extract the configured connection properties from the test configuration. + string conUsername = messagingProps.getProperty(USERNAME_PROPNAME); + string conPassword = messagingProps.getProperty(PASSWORD_PROPNAME); + string virtualHost = messagingProps.getProperty(VIRTUAL_HOST_PROPNAME); + string brokerUrl = messagingProps.getProperty(BROKER_PROPNAME); + + // Create the broker connection url. + string connectionstring = + "amqp://" + conUsername + ":" + conPassword + "@clientid/" + ((virtualHost != null) ? virtualHost : "") + + "?brokerlist='" + brokerUrl + "'"; + + // Create properties to create the initial context from, and inject the connection factory configuration + // for the defined connection name into it. + messagingProps.setProperty("connectionfactory." + CONNECTION_NAME, connectionString); + + Context ctx = new InitialContext(messagingProps); + + ConnectionFactory cf = (ConnectionFactory) ctx.lookup(CONNECTION_NAME); + + return cf.createConnection(); + } + catch (NamingException e) + { + throw new RuntimeException("Got JNDI NamingException whilst looking up the connection factory.", e); + } + catch (JMSException e) + { + throw new RuntimeException("Could not establish connection due to JMSException.", e); + } + } + + /// + /// Creates a test message of the specified size, on the given JMS session. + /// + /// The JMS session. + /// The size of the message in bytes. + /// + /// A bytes message, of the specified size, filled with dummy data. + /// + /// Any underlying JMSExceptions are allowed to fall through. + public static Message createTestMessageOfSize(Session session, int size) throws JMSException + { + BytesMessage message = session.createBytesMessage(); + + if (size > 0) + { + int div = MESSAGE_DATA_BYTES.length / size; + int mod = MESSAGE_DATA_BYTES.length % size; + + for (int i = 0; i < div; i++) + { + message.writeBytes(MESSAGE_DATA_BYTES); + } + + if (mod != 0) + { + message.writeBytes(MESSAGE_DATA_BYTES, 0, mod); + } + } + + return message; + } + + /// + /// Pauses for the specified length of time. In the event of failing to pause for at least that length of time + /// due to interuption of the thread, a RutimeException is raised to indicate the failure. The interupted status + /// of the thread is restores in that case. This method should only be used when it is expected that the pause + /// will be succesfull, for example in test code that relies on inejecting a pause. + /// + /// The minimum time to pause for in milliseconds. + public static void pause(long t) + { + try + { + Thread.sleep(t); + } + catch (InterruptedException e) + { + // Restore the interrupted status + Thread.currentThread().interrupt(); + + throw new RuntimeException("Failed to generate the requested pause length.", e); + } + } + + /// + /// Sets properties of different types on a JMS Message. + /// + /// The message to set properties on. + /// The property name/value pairs to set. + /// + /// All underlying JMSExceptions are allowed to fall through. + /// + /// Move this helper method somewhere else. For example, TestUtils. + public static void setPropertiesOnMessage(Message message, Map properties) throws JMSException + { + for (Map.Entry entry : properties.entrySet()) + { + string name = entry.getKey().ToString(); + Object value = entry.getValue(); + + message.setObjectProperty(name, value); + } + } + } +} \ No newline at end of file -- cgit v1.2.1