| /* | |
| * 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 System; | |
| using System.Xml; | |
| using Apache.NMS.Test; | |
| using Apache.NMS.Util; | |
| using NUnit.Framework; | |
| using Apache.NMS.XMS; | |
| namespace Apache.NMS.XMS.Test | |
| { | |
| /// <summary> | |
| /// Useful class for test cases support. | |
| /// </summary> | |
| public class XMSTestSupport : NMSTestSupport | |
| { | |
| /// <summary> | |
| /// Gets the environment variable name for the configuration file path. | |
| /// </summary> | |
| /// <returns>Environment variable name</returns> | |
| public override string GetConfigEnvVarName() | |
| { | |
| return "XMSTESTCONFIGPATH"; | |
| } | |
| /// <summary> | |
| /// Gets the default name for the configuration filename. | |
| /// </summary> | |
| /// <returns>Default name of the configuration filename</returns> | |
| public override string GetDefaultConfigFileName() | |
| { | |
| return "xmsprovider-test.config"; | |
| } | |
| /// <summary> | |
| /// Gets a new client id. | |
| /// </summary> | |
| /// <returns>Client id</returns> | |
| public override string GetTestClientId() | |
| { | |
| return base.GetTestClientId(); | |
| //return null; | |
| } | |
| /// <summary> | |
| /// Create a new connection to the broker. | |
| /// </summary> | |
| /// <param name="newClientId">Client ID of the new connection.</param> | |
| /// <returns>New connection</returns> | |
| public override IConnection CreateConnection(string newClientId) | |
| { | |
| IConnection newConnection; | |
| // IBM.XMS throws an exception if attempting to set the ClientId | |
| // on the Connection after it was created. | |
| // In a multithreaded environment, it would probably be best to | |
| // create as many factories as client ids, rather than change the | |
| // client id on the factory before creating a connection. Plus it | |
| // wouldn't be a good idea to protect the code section through a | |
| // semaphore, since connections creation takes a long time to be | |
| // performed. | |
| if(newClientId != null) | |
| { | |
| ((Apache.NMS.XMS.ConnectionFactory)Factory).ClientId = newClientId; | |
| } | |
| if(this.userName == null) | |
| { | |
| newConnection = Factory.CreateConnection(); | |
| } | |
| else | |
| { | |
| newConnection = Factory.CreateConnection(userName, passWord); | |
| } | |
| Assert.IsNotNull(newConnection, "Connection not created"); | |
| return newConnection; | |
| } | |
| ISession cleanupSession = null; | |
| /// <summary> | |
| /// Gets a clear destination. This will try to delete an existing | |
| /// destination and re-create it. | |
| /// </summary> | |
| /// <param name="session">Session</param> | |
| /// <param name="destinationURI">Destination URI</param> | |
| /// <returns>Clear destination</returns> | |
| public override IDestination GetClearDestination(ISession session, | |
| string destinationURI) | |
| { | |
| IDestination destination = SessionUtil.GetDestination(session, destinationURI); | |
| // Destination exists. Can't use the given session to clean up: | |
| // once used synchronously, IBM XMS doesn't allow the session to be | |
| // used asynchronously. Therefore, we create a specific synchronous | |
| // session to perform cleanups. | |
| if(cleanupSession == null) | |
| { | |
| IConnection cleanupConnection = CreateConnection("Cleanup"); | |
| cleanupSession = cleanupConnection.CreateSession(); | |
| } | |
| IDestination cleanupDestination = SessionUtil.GetDestination(cleanupSession, destinationURI); | |
| using(IMessageConsumer consumer = cleanupSession.CreateConsumer(destination)) | |
| { | |
| while(consumer.Receive(TimeSpan.FromMilliseconds(750)) != null) | |
| { | |
| } | |
| } | |
| return destination; | |
| } | |
| } | |
| } |