Commit ad1636fd authored by Phillip Wirth's avatar Phillip Wirth Committed by Dave Syer

RabbitMQ virtual hosts can how start with a slash

The autoconfig strips out slashes where necessary to make a valid
hostname

Fixes gh-1128
parent 34119957
...@@ -110,10 +110,15 @@ public class RabbitProperties { ...@@ -110,10 +110,15 @@ public class RabbitProperties {
} }
public void setVirtualHost(String virtualHost) { public void setVirtualHost(String virtualHost) {
if ("".equals(virtualHost) || virtualHost.equals("/")) {
this.virtualHost = "/";
} else {
// remove all trailing /
while (virtualHost.startsWith("/") && virtualHost.length() > 0) { while (virtualHost.startsWith("/") && virtualHost.length() > 0) {
virtualHost = virtualHost.substring(1); virtualHost = virtualHost.substring(1);
} }
this.virtualHost = "/" + virtualHost; this.virtualHost = virtualHost;
}
} }
} }
...@@ -16,6 +16,9 @@ ...@@ -16,6 +16,9 @@
package org.springframework.boot.autoconfigure.amqp; package org.springframework.boot.autoconfigure.amqp;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.rules.ExpectedException; import org.junit.rules.ExpectedException;
...@@ -30,9 +33,6 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext ...@@ -30,9 +33,6 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/** /**
* Tests for {@link RabbitAutoConfiguration}. * Tests for {@link RabbitAutoConfiguration}.
* *
...@@ -74,7 +74,7 @@ public class RabbitAutoconfigurationTests { ...@@ -74,7 +74,7 @@ public class RabbitAutoconfigurationTests {
.getBean(CachingConnectionFactory.class); .getBean(CachingConnectionFactory.class);
assertEquals("remote-server", connectionFactory.getHost()); assertEquals("remote-server", connectionFactory.getHost());
assertEquals(9000, connectionFactory.getPort()); assertEquals(9000, connectionFactory.getPort());
assertEquals("/vhost", connectionFactory.getVirtualHost()); assertEquals("vhost", connectionFactory.getVirtualHost());
} }
@Test @Test
...@@ -89,18 +89,6 @@ public class RabbitAutoconfigurationTests { ...@@ -89,18 +89,6 @@ public class RabbitAutoconfigurationTests {
assertEquals("/", connectionFactory.getVirtualHost()); assertEquals("/", connectionFactory.getVirtualHost());
} }
@Test
public void testRabbitTemplateVirtualHostMissingSlash() {
this.context = new AnnotationConfigApplicationContext();
this.context.register(TestConfiguration.class, RabbitAutoConfiguration.class);
EnvironmentTestUtils.addEnvironment(this.context,
"spring.rabbitmq.virtual_host:foo");
this.context.refresh();
CachingConnectionFactory connectionFactory = this.context
.getBean(CachingConnectionFactory.class);
assertEquals("/foo", connectionFactory.getVirtualHost());
}
@Test @Test
public void testRabbitTemplateDefaultVirtualHost() { public void testRabbitTemplateDefaultVirtualHost() {
this.context = new AnnotationConfigApplicationContext(); this.context = new AnnotationConfigApplicationContext();
......
...@@ -16,11 +16,11 @@ ...@@ -16,11 +16,11 @@
package org.springframework.boot.autoconfigure.amqp; package org.springframework.boot.autoconfigure.amqp;
import org.junit.Test;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull;
import org.junit.Test;
/** /**
* Tests for {@link RabbitProperties}. * Tests for {@link RabbitProperties}.
* *
...@@ -28,7 +28,7 @@ import static org.junit.Assert.assertNull; ...@@ -28,7 +28,7 @@ import static org.junit.Assert.assertNull;
*/ */
public class RabbitPropertiesTests { public class RabbitPropertiesTests {
private RabbitProperties properties = new RabbitProperties(); private final RabbitProperties properties = new RabbitProperties();
@Test @Test
public void addressesNotSet() { public void addressesNotSet() {
...@@ -50,4 +50,28 @@ public class RabbitPropertiesTests { ...@@ -50,4 +50,28 @@ public class RabbitPropertiesTests {
assertEquals(9999, this.properties.getPort()); assertEquals(9999, this.properties.getPort());
} }
@Test
public void testDefaultVirtualHost() {
this.properties.setVirtualHost("/");
assertEquals("/", this.properties.getVirtualHost());
}
@Test
public void testemptyVirtualHost() {
this.properties.setVirtualHost("");
assertEquals("/", this.properties.getVirtualHost());
}
@Test
public void testCustomVirtualHost() {
this.properties.setVirtualHost("myvHost");
assertEquals("myvHost", this.properties.getVirtualHost());
}
@Test
public void testCustomFalsyVirtualHost() {
this.properties.setVirtualHost("/myvHost");
assertEquals("myvHost", this.properties.getVirtualHost());
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment