Map empty virtual host to "/" when parsed from an address

Previously, an address that ended in a "/" would result in the virtual
host being an empty string. This was inconsistent with setVirtualHost
which would map an empty string to "/".

This commit updates the address parsing logic to call setVirtualHost
rather than assigning the value directly to this.virtualHost. This
ensures that the special handling for an empty string is applied
consistently.

Closes gh-3304
This commit is contained in:
Andy Wilkinson 2015-06-22 15:20:41 +01:00
parent cd62596e82
commit 8681a8ad2a
2 changed files with 15 additions and 4 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2014 the original author or authors.
* Copyright 2012-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -27,6 +27,7 @@ import org.springframework.util.StringUtils;
*
* @author Greg Turnquist
* @author Dave Syer
* @author Andy Wilkinson
*/
@ConfigurationProperties(prefix = "spring.rabbitmq")
public class RabbitProperties {
@ -115,7 +116,7 @@ public class RabbitProperties {
}
int index = address.indexOf("/");
if (index >= 0 && index < address.length()) {
this.virtualHost = address.substring(index + 1);
setVirtualHost(address.substring(index + 1));
address = address.substring(0, index);
}
if (!address.contains(":")) {

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2014 the original author or authors.
* Copyright 2012-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -25,6 +25,7 @@ import static org.junit.Assert.assertNull;
* Tests for {@link RabbitProperties}.
*
* @author Dave Syer
* @author Andy Wilkinson
*/
public class RabbitPropertiesTests {
@ -85,6 +86,15 @@ public class RabbitPropertiesTests {
assertEquals("lemur.cloudamqp.com:5672", this.properties.getAddresses());
}
@Test
public void addressWithTrailingSlash() {
this.properties.setAddresses("amqp://root:password@otherhost:1111/");
assertEquals("otherhost", this.properties.getHost());
assertEquals(1111, this.properties.getPort());
assertEquals("root", this.properties.getUsername());
assertEquals("/", this.properties.getVirtualHost());
}
@Test
public void testDefaultVirtualHost() {
this.properties.setVirtualHost("/");
@ -92,7 +102,7 @@ public class RabbitPropertiesTests {
}
@Test
public void testemptyVirtualHost() {
public void testEmptyVirtualHost() {
this.properties.setVirtualHost("");
assertEquals("/", this.properties.getVirtualHost());
}