From ad1636fd349b2e6636837d98af1ba1d07500ec9f Mon Sep 17 00:00:00 2001
From: Phillip Wirth
Date: Fri, 20 Jun 2014 15:37:33 +0200
Subject: [PATCH] RabbitMQ virtual hosts can how start with a slash
The autoconfig strips out slashes where necessary to make a valid
hostname
Fixes gh-1128
---
.../autoconfigure/amqp/RabbitProperties.java | 15 ++++++---
.../amqp/RabbitAutoconfigurationTests.java | 22 +++----------
.../amqp/RabbitPropertiesTests.java | 32 ++++++++++++++++---
3 files changed, 43 insertions(+), 26 deletions(-)
diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java
index ad05afeb4e5..7f128dfb6ac 100644
--- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java
+++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java
@@ -21,7 +21,7 @@ import org.springframework.util.StringUtils;
/**
* Configuration properties for Rabbit.
- *
+ *
* @author Greg Turnquist
* @author Dave Syer
*/
@@ -110,10 +110,15 @@ public class RabbitProperties {
}
public void setVirtualHost(String virtualHost) {
- while (virtualHost.startsWith("/") && virtualHost.length() > 0) {
- virtualHost = virtualHost.substring(1);
- }
- this.virtualHost = "/" + virtualHost;
+ if ("".equals(virtualHost) || virtualHost.equals("/")) {
+ this.virtualHost = "/";
+ } else {
+// remove all trailing /
+ while (virtualHost.startsWith("/") && virtualHost.length() > 0) {
+ virtualHost = virtualHost.substring(1);
+ }
+ this.virtualHost = virtualHost;
+ }
}
}
diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoconfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoconfigurationTests.java
index 28b11b1494a..0be2b868e02 100644
--- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoconfigurationTests.java
+++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoconfigurationTests.java
@@ -16,6 +16,9 @@
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.Test;
import org.junit.rules.ExpectedException;
@@ -30,12 +33,9 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
/**
* Tests for {@link RabbitAutoConfiguration}.
- *
+ *
* @author Greg Turnquist
*/
public class RabbitAutoconfigurationTests {
@@ -74,7 +74,7 @@ public class RabbitAutoconfigurationTests {
.getBean(CachingConnectionFactory.class);
assertEquals("remote-server", connectionFactory.getHost());
assertEquals(9000, connectionFactory.getPort());
- assertEquals("/vhost", connectionFactory.getVirtualHost());
+ assertEquals("vhost", connectionFactory.getVirtualHost());
}
@Test
@@ -89,18 +89,6 @@ public class RabbitAutoconfigurationTests {
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
public void testRabbitTemplateDefaultVirtualHost() {
this.context = new AnnotationConfigApplicationContext();
diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitPropertiesTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitPropertiesTests.java
index 169e6423298..dd259f4d9d1 100644
--- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitPropertiesTests.java
+++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitPropertiesTests.java
@@ -16,19 +16,19 @@
package org.springframework.boot.autoconfigure.amqp;
-import org.junit.Test;
-
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
+import org.junit.Test;
+
/**
* Tests for {@link RabbitProperties}.
- *
+ *
* @author Dave Syer
*/
public class RabbitPropertiesTests {
- private RabbitProperties properties = new RabbitProperties();
+ private final RabbitProperties properties = new RabbitProperties();
@Test
public void addressesNotSet() {
@@ -50,4 +50,28 @@ public class RabbitPropertiesTests {
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());
+ }
+
}