// Copyright (c) 2007-Present Pivotal Software, Inc. All rights reserved. // // This software, the RabbitMQ Java client library, is triple-licensed under the // Mozilla Public License 1.1 ("MPL"), the GNU General Public License version 2 // ("GPL") and the Apache License version 2 ("ASL"). For the MPL, please see // LICENSE-MPL-RabbitMQ. For the GPL, please see LICENSE-GPL2. For the ASL, // please see LICENSE-APACHE2. // // This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, // either express or implied. See the LICENSE file for specific language governing // rights and limitations of this software. // // If you have any questions regarding licensing, please contact us at // info@rabbitmq.com. package com.rabbitmq.client.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import java.net.URISyntaxException; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import org.junit.Test; import com.rabbitmq.client.ConnectionFactory; public class AmqpUriTest extends BrokerTestCase { @Test public void uriParsing() throws URISyntaxException, NoSuchAlgorithmException, KeyManagementException { /* From the spec (subset of the tests) */ parseSuccess("amqp://user:pass@host:10000/vhost", "user", "pass", "host", 10000, "vhost"); parseSuccess("aMQps://user%61:%61pass@host:10000/v%2fhost", "usera", "apass", "host", 10000, "v/host"); parseSuccess("amqp://host", "guest", "guest", "host", 5672, "/"); parseSuccess("amqp:///vhost", "guest", "guest", "localhost", 5672, "vhost"); parseSuccess("amqp://host/", "guest", "guest", "host", 5672, ""); parseSuccess("amqp://host/%2f", "guest", "guest", "host", 5672, "/"); parseSuccess("amqp://[::1]", "guest", "guest", "[::1]", 5672, "/"); /* Various other success cases */ parseSuccess("amqp://host:100", "guest", "guest", "host", 100, "/"); parseSuccess("amqp://[::1]:100", "guest", "guest", "[::1]", 100, "/"); parseSuccess("amqp://host/blah", "guest", "guest", "host", 5672, "blah"); parseSuccess("amqp://host:100/blah", "guest", "guest", "host", 100, "blah"); parseSuccess("amqp://[::1]/blah", "guest", "guest", "[::1]", 5672, "blah"); parseSuccess("amqp://[::1]:100/blah", "guest", "guest", "[::1]", 100, "blah"); parseSuccess("amqp://user:pass@host", "user", "pass", "host", 5672, "/"); parseSuccess("amqp://user:pass@[::1]", "user", "pass", "[::1]", 5672, "/"); parseSuccess("amqp://user:pass@[::1]:100", "user", "pass", "[::1]", 100, "/"); /* Various failure cases */ parseFail("http://www.rabbitmq.com"); parseFail("amqp://foo[::1]"); parseFail("amqp://foo:[::1]"); parseFail("amqp://[::1]foo"); parseFail("amqp://foo%1"); parseFail("amqp://foo%1x"); parseFail("amqp://foo%xy"); } private void parseSuccess(String uri, String user, String password, String host, int port, String vhost) throws URISyntaxException, NoSuchAlgorithmException, KeyManagementException { ConnectionFactory cf = TestUtils.connectionFactory(); cf.setUri(uri); assertEquals(user, cf.getUsername()); assertEquals(password, cf.getPassword()); assertEquals(host, cf.getHost()); assertEquals(port, cf.getPort()); assertEquals(vhost, cf.getVirtualHost()); } private void parseFail(String uri) { try { (TestUtils.connectionFactory()).setUri(uri); fail("URI parse didn't fail: '" + uri + "'"); } catch (Exception e) { // whoosh! } } }