| /* |
| * |
| * 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.Net; |
| using NUnit.Framework; |
| using Apache.Qpid.Client.Qms; |
| |
| namespace Apache.Qpid.Client.Tests.url |
| { |
| [TestFixture] |
| public class connectionUrlTests |
| { |
| [Test] |
| public void FailoverURL() |
| { |
| //String url = "amqp://ritchiem:bob@/temp?brokerlist='tcp://localhost:5672;tcp://fancyserver:3000/',failover='roundrobin'"; |
| String url = "amqp://ritchiem:bob@default/temp?brokerlist='tcp://localhost:5672;tcp://fancyserver:3000/',failover='roundrobin'"; |
| |
| IConnectionInfo connectionurl = QpidConnectionInfo.FromUrl(url); |
| |
| Assert.AreEqual("roundrobin", connectionurl.FailoverMethod); |
| Assert.IsTrue(connectionurl.Username.Equals("ritchiem")); |
| Assert.IsTrue(connectionurl.Password.Equals("bob")); |
| Assert.IsTrue(connectionurl.VirtualHost.Equals("/temp")); |
| |
| Assert.IsTrue(connectionurl.BrokerCount == 2); |
| |
| IBrokerInfo service = connectionurl.GetBrokerInfo(0); |
| |
| Assert.IsTrue(service.Transport.Equals("tcp")); |
| Assert.IsTrue(service.Host.Equals("localhost")); |
| Assert.IsTrue(service.Port == 5672); |
| |
| service = connectionurl.GetBrokerInfo(1); |
| |
| Assert.IsTrue(service.Transport.Equals("tcp")); |
| Assert.IsTrue(service.Host.Equals("fancyserver")); |
| Assert.IsTrue(service.Port == 3000); |
| |
| } |
| |
| [Test] |
| public void SingleTransportUsernamePasswordURL() |
| { |
| String url = "amqp://ritchiem:bob@default/temp?brokerlist='tcp://localhost:5672'"; |
| |
| IConnectionInfo connectionurl = QpidConnectionInfo.FromUrl(url); |
| |
| Assert.IsTrue(connectionurl.FailoverMethod == null); |
| Assert.IsTrue(connectionurl.Username.Equals("ritchiem")); |
| Assert.IsTrue(connectionurl.Password.Equals("bob")); |
| Assert.IsTrue(connectionurl.VirtualHost.Equals("/temp")); |
| |
| Assert.IsTrue(connectionurl.BrokerCount == 1); |
| |
| IBrokerInfo service = connectionurl.GetBrokerInfo(0); |
| |
| Assert.IsTrue(service.Transport.Equals("tcp")); |
| Assert.IsTrue(service.Host.Equals("localhost")); |
| Assert.IsTrue(service.Port == 5672); |
| } |
| |
| [Test] |
| public void SingleTransportUsernameBlankPasswordURL() |
| { |
| String url = "amqp://ritchiem:@default/temp?brokerlist='tcp://localhost:5672'"; |
| |
| IConnectionInfo connectionurl = QpidConnectionInfo.FromUrl(url); |
| |
| Assert.IsTrue(connectionurl.FailoverMethod == null); |
| Assert.IsTrue(connectionurl.Username.Equals("ritchiem")); |
| Assert.IsTrue(connectionurl.Password.Equals("")); |
| Assert.IsTrue(connectionurl.VirtualHost.Equals("/temp")); |
| |
| Assert.IsTrue(connectionurl.BrokerCount == 1); |
| |
| IBrokerInfo service = connectionurl.GetBrokerInfo(0); |
| |
| Assert.IsTrue(service.Transport.Equals("tcp")); |
| Assert.IsTrue(service.Host.Equals("localhost")); |
| Assert.IsTrue(service.Port == 5672); |
| } |
| |
| [Test] |
| public void FailedURLNullPassword() |
| { |
| String url = "amqp://ritchiem@default/temp?brokerlist='tcp://localhost:5672'"; |
| |
| try |
| { |
| QpidConnectionInfo.FromUrl(url); |
| Assert.Fail("URL has null password"); |
| } |
| catch (UrlSyntaxException e) |
| { |
| Assert.AreEqual("Null password in user information not allowed.", e.Message); |
| Assert.IsTrue(e.GetIndex() == 7); |
| } |
| } |
| |
| [Test] |
| public void SingleTransportURL() |
| { |
| String url = "amqp://guest:guest@default/test?brokerlist='tcp://localhost:5672'"; |
| |
| IConnectionInfo connectionurl = QpidConnectionInfo.FromUrl(url); |
| |
| |
| Assert.IsTrue(connectionurl.FailoverMethod == null); |
| Assert.IsTrue(connectionurl.Username.Equals("guest")); |
| Assert.IsTrue(connectionurl.Password.Equals("guest")); |
| Assert.IsTrue(connectionurl.VirtualHost.Equals("/test")); |
| |
| |
| Assert.IsTrue(connectionurl.BrokerCount == 1); |
| |
| |
| IBrokerInfo service = connectionurl.GetBrokerInfo(0); |
| |
| Assert.IsTrue(service.Transport.Equals("tcp")); |
| Assert.IsTrue(service.Host.Equals("localhost")); |
| Assert.IsTrue(service.Port == 5672); |
| } |
| |
| [Test] |
| public void SingleTransportWithClientURLURL() |
| { |
| String url = "amqp://guest:guest@clientname/temp?brokerlist='tcp://localhost:5672'"; |
| |
| IConnectionInfo connectionurl = QpidConnectionInfo.FromUrl(url); |
| |
| |
| Assert.IsTrue(connectionurl.FailoverMethod == null); |
| Assert.IsTrue(connectionurl.Username.Equals("guest")); |
| Assert.IsTrue(connectionurl.Password.Equals("guest")); |
| Assert.IsTrue(connectionurl.VirtualHost.Equals("/temp")); |
| Assert.IsTrue(connectionurl.ClientName.Equals("clientname")); |
| |
| |
| Assert.IsTrue(connectionurl.BrokerCount == 1); |
| |
| |
| IBrokerInfo service = connectionurl.GetBrokerInfo(0); |
| |
| Assert.IsTrue(service.Transport.Equals("tcp")); |
| Assert.IsTrue(service.Host.Equals("localhost")); |
| Assert.IsTrue(service.Port == 5672); |
| } |
| |
| [Test] |
| public void SingleTransport1OptionURL() |
| { |
| String url = "amqp://guest:guest@default/temp?brokerlist='tcp://localhost:5672',routingkey='jim'"; |
| |
| IConnectionInfo connectionurl = QpidConnectionInfo.FromUrl(url); |
| |
| Assert.IsTrue(connectionurl.FailoverMethod == null); |
| Assert.IsTrue(connectionurl.Username.Equals("guest")); |
| Assert.IsTrue(connectionurl.Password.Equals("guest")); |
| Assert.IsTrue(connectionurl.VirtualHost.Equals("/temp")); |
| |
| |
| Assert.IsTrue(connectionurl.BrokerCount == 1); |
| |
| IBrokerInfo service = connectionurl.GetBrokerInfo(0); |
| |
| Assert.IsTrue(service.Transport.Equals("tcp")); |
| |
| Assert.IsTrue(service.Host.Equals("localhost")); |
| Assert.IsTrue(service.Port == 5672); |
| Assert.IsTrue(connectionurl.GetOption("routingkey").Equals("jim")); |
| } |
| |
| [Test] |
| public void SingleTransportDefaultedBroker() |
| { |
| String url = "amqp://guest:guest@default/temp?brokerlist='localhost:'"; |
| |
| IConnectionInfo connectionurl = QpidConnectionInfo.FromUrl(url); |
| |
| Assert.IsTrue(connectionurl.FailoverMethod == null); |
| Assert.IsTrue(connectionurl.Username.Equals("guest")); |
| Assert.IsTrue(connectionurl.Password.Equals("guest")); |
| Assert.IsTrue(connectionurl.VirtualHost.Equals("/temp")); |
| |
| |
| Assert.IsTrue(connectionurl.BrokerCount == 1); |
| |
| IBrokerInfo service = connectionurl.GetBrokerInfo(0); |
| |
| Assert.IsTrue(service.Transport.Equals("tcp")); |
| |
| Assert.IsTrue(service.Host.Equals("localhost")); |
| Assert.IsTrue(service.Port == 5672); |
| } |
| |
| [Test] |
| public void SingleTransportMultiOptionURL() |
| { |
| String url = "amqp://guest:guest@default/temp?brokerlist='tcp://localhost:5672',routingkey='jim',timeout='200',immediatedelivery='true'"; |
| |
| IConnectionInfo connectionurl = QpidConnectionInfo.FromUrl(url); |
| |
| Assert.IsTrue(connectionurl.FailoverMethod == null); |
| Assert.IsTrue(connectionurl.Username.Equals("guest")); |
| Assert.IsTrue(connectionurl.Password.Equals("guest")); |
| Assert.IsTrue(connectionurl.VirtualHost.Equals("/temp")); |
| |
| Assert.IsTrue(connectionurl.BrokerCount == 1); |
| |
| IBrokerInfo service = connectionurl.GetBrokerInfo(0); |
| |
| Assert.IsTrue(service.Transport.Equals("tcp")); |
| |
| Assert.IsTrue(service.Host.Equals("localhost")); |
| Assert.IsTrue(service.Port == 5672); |
| |
| Assert.IsTrue(connectionurl.GetOption("routingkey").Equals("jim")); |
| Assert.IsTrue(connectionurl.GetOption("timeout").Equals("200")); |
| Assert.IsTrue(connectionurl.GetOption("immediatedelivery").Equals("true")); |
| } |
| |
| [Test] |
| public void SinglevmURL() |
| { |
| String url = "amqp://guest:guest@default/messages?brokerlist='vm://default:2'"; |
| |
| IConnectionInfo connectionurl = QpidConnectionInfo.FromUrl(url); |
| |
| Assert.IsTrue(connectionurl.FailoverMethod == null); |
| Assert.IsTrue(connectionurl.Username.Equals("guest")); |
| Assert.IsTrue(connectionurl.Password.Equals("guest")); |
| Assert.IsTrue(connectionurl.VirtualHost.Equals("/messages")); |
| |
| Assert.IsTrue(connectionurl.BrokerCount == 1); |
| |
| IBrokerInfo service = connectionurl.GetBrokerInfo(0); |
| |
| Assert.IsTrue(service.Transport.Equals("vm")); |
| Assert.AreEqual("localhost", service.Host); |
| Assert.AreEqual(2, service.Port); |
| } |
| |
| [Test] |
| public void FailoverVMURL() |
| { |
| String url = "amqp://ritchiem:bob@default/temp?brokerlist='vm://default:2;vm://default:3',failover='roundrobin'"; |
| |
| IConnectionInfo connectionurl = QpidConnectionInfo.FromUrl(url); |
| |
| Assert.IsTrue(connectionurl.FailoverMethod.Equals("roundrobin")); |
| Assert.IsTrue(connectionurl.Username.Equals("ritchiem")); |
| Assert.IsTrue(connectionurl.Password.Equals("bob")); |
| Assert.IsTrue(connectionurl.VirtualHost.Equals("/temp")); |
| |
| Assert.AreEqual(2, connectionurl.BrokerCount); |
| |
| IBrokerInfo service = connectionurl.GetBrokerInfo(0); |
| |
| Assert.IsTrue(service.Transport.Equals("vm")); |
| Assert.AreEqual("localhost", service.Host); |
| Assert.IsTrue(service.Port == 2); |
| |
| service = connectionurl.GetBrokerInfo(1); |
| Assert.IsTrue(service.Transport.Equals("vm")); |
| Assert.AreEqual("localhost", service.Host); |
| Assert.IsTrue(service.Port == 3); |
| } |
| |
| [Test] |
| public void NoVirtualHostURL() |
| { |
| String url = "amqp://user@default?brokerlist='tcp://localhost:5672'"; |
| |
| try |
| { |
| QpidConnectionInfo.FromUrl(url); |
| Assert.Fail("URL has no virtual host should not parse"); |
| } |
| catch (UrlSyntaxException) |
| { |
| // This should occur. |
| } |
| } |
| |
| [Test] |
| public void NoClientID() |
| { |
| String url = "amqp://user:@default/test?brokerlist='tcp://localhost:5672'"; |
| |
| IConnectionInfo connectionurl = QpidConnectionInfo.FromUrl(url); |
| |
| Assert.IsTrue(connectionurl.Username.Equals("user")); |
| Assert.IsTrue(connectionurl.Password.Equals("")); |
| Assert.IsTrue(connectionurl.VirtualHost.Equals("/test")); |
| Assert.IsTrue(connectionurl.ClientName.StartsWith(Dns.GetHostName())); |
| |
| Assert.IsTrue(connectionurl.BrokerCount == 1); |
| } |
| |
| [Test] |
| public void WrongOptionSeparatorInOptions() |
| { |
| String url = "amqp://guest:guest@default/test?brokerlist='tcp://localhost:5672;tcp://localhost:5673'+failover='roundrobin'"; |
| try |
| { |
| QpidConnectionInfo.FromUrl(url); |
| Assert.Fail("URL Should not parse"); |
| } |
| catch (UrlSyntaxException urise) |
| { |
| Assert.IsTrue(urise.Message.Equals("Unterminated option. Possible illegal option separator:'+'")); |
| } |
| |
| } |
| |
| [Test] |
| public void NoUserDetailsProvidedWithClientID() |
| |
| { |
| String url = "amqp://clientID/test?brokerlist='tcp://localhost:5672;tcp://localhost:5673'"; |
| try |
| { |
| QpidConnectionInfo.FromUrl(url); |
| Assert.Fail("URL Should not parse"); |
| } |
| catch (UrlSyntaxException urise) |
| { |
| Assert.IsTrue(urise.Message.StartsWith("User information not found on url")); |
| } |
| |
| } |
| |
| [Test] |
| public void NoUserDetailsProvidedNOClientID() |
| |
| { |
| String url = "amqp:///test@default?brokerlist='tcp://localhost:5672;tcp://localhost:5673'"; |
| try |
| { |
| QpidConnectionInfo.FromUrl(url); |
| Assert.Fail("URL Should not parse"); |
| } |
| catch (UrlSyntaxException urise) |
| { |
| |
| Assert.IsTrue(urise.Message.StartsWith("User information not found on url")); |
| } |
| |
| } |
| |
| [Test] |
| public void CheckVirtualHostFormat() |
| { |
| String url = "amqp://guest:guest@default/t.-_+!=:?brokerlist='tcp://localhost:5672'"; |
| |
| IConnectionInfo connection = QpidConnectionInfo.FromUrl(url); |
| Assert.IsTrue(connection.VirtualHost.Equals("/t.-_+!=:")); |
| } |
| |
| [Test] |
| public void CheckDefaultPort() |
| { |
| String url = "amqp://guest:guest@default/test=:?brokerlist='tcp://localhost'"; |
| |
| IConnectionInfo connection = QpidConnectionInfo.FromUrl(url); |
| |
| IBrokerInfo broker = connection.GetBrokerInfo(0); |
| Assert.IsTrue(broker.Port == BrokerInfoConstants.DEFAULT_PORT); |
| |
| } |
| |
| [Test] |
| public void CheckMissingFinalQuote() |
| { |
| String url = "amqp://guest:guest@id/test" + "?brokerlist='tcp://localhost:5672"; |
| |
| try |
| { |
| QpidConnectionInfo.FromUrl(url); |
| } |
| catch (UrlSyntaxException e) |
| { |
| // Assert.AreEqual("Unterminated option at index 32: brokerlist='tcp://localhost:5672", |
| // e.Message); |
| Assert.AreEqual("Unterminated option", e.Message); |
| } |
| } |
| |
| [Test] |
| public void ValidateQpidConnectionInfoFromToString() |
| { |
| String url = "amqp://ritchiem:bob@default/temp?brokerlist='tcp://localhost:5672;tcp://fancyserver:3000/',failover='roundrobin'"; |
| |
| IConnectionInfo connectionInfo = QpidConnectionInfo.FromUrl(url); |
| IConnectionInfo connectionInfo1 = QpidConnectionInfo.FromUrl(connectionInfo.ToString()); |
| |
| Console.WriteLine(connectionInfo.ToString()); |
| Console.WriteLine(connectionInfo1.ToString()); |
| |
| Assert.AreEqual(connectionInfo.Username, connectionInfo1.Username); |
| Assert.AreEqual(connectionInfo.Password, connectionInfo1.Password); |
| Assert.AreEqual(connectionInfo.VirtualHost, connectionInfo1.VirtualHost); |
| |
| Assert.IsTrue((connectionInfo1.GetAllBrokerInfos().Count == 2)); |
| Assert.IsTrue(connectionInfo.GetBrokerInfo(0).Equals(connectionInfo1.GetBrokerInfo(0))); |
| Assert.IsTrue(connectionInfo.GetBrokerInfo(1).Equals(connectionInfo1.GetBrokerInfo(1))); |
| |
| } |
| |
| [Test] |
| public void EnsureVirtualHostStartsWithSlash() |
| { |
| IConnectionInfo connection = new QpidConnectionInfo(); |
| connection.VirtualHost = "test"; |
| Assert.AreEqual("/test", connection.VirtualHost); |
| |
| connection.VirtualHost = "/mytest"; |
| Assert.AreEqual("/mytest", connection.VirtualHost); |
| |
| connection.VirtualHost = ""; |
| Assert.AreEqual("/", connection.VirtualHost); |
| |
| connection.VirtualHost = null; |
| Assert.AreEqual("/", connection.VirtualHost); |
| } |
| } |
| } |