Skip to content

Commit

Permalink
GH-3 Replace topic wild cards in queue name to avoid exceptions (#40)
Browse files Browse the repository at this point in the history
Co-authored-by: ue85540 <ue85540@sbb.ch>
  • Loading branch information
GreenRover and ue85540 authored Jan 15, 2021
1 parent ded251a commit c1ad273
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -66,14 +66,20 @@ private static String getQueueName(String topicName, String groupName,
boolean isAnonymous, String anonGroupPostfix) {
String queueName;
if (isAnonymous) {
queueName = topicName + QUEUE_NAME_DELIM + JCSMPFactory.onlyInstance().createUniqueName(anonGroupPostfix);
queueName = replaceTopicWildCards(topicName, "_") + QUEUE_NAME_DELIM + JCSMPFactory.onlyInstance().createUniqueName(anonGroupPostfix);
} else {
queueName = topicName + QUEUE_NAME_DELIM + groupName;
queueName = replaceTopicWildCards(topicName, "_") + QUEUE_NAME_DELIM + groupName;
}

return properties.getPrefix() + queueName;
}

private static String replaceTopicWildCards(String topicName, CharSequence replacement) {
return topicName
.replace("*", replacement)
.replace(">", replacement);
}

public static String getErrorQueueName(String queueName) {
return queueName + QUEUE_NAME_DELIM + ERROR_QUEUE_POSTFIX;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.solace.spring.cloud.stream.binder.util;

import com.solace.spring.cloud.stream.binder.properties.SolaceConsumerProperties;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

import java.util.Arrays;
import java.util.Collection;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

@RunWith(Parameterized.class)
public class SolaceProvisioningUtilQueueNameTest {

private final String destination;
private final String groupName;
private final boolean isAnonymous;
private final String expected;
private final boolean expectSuffix;
private final SolaceConsumerProperties consumerProperties;

@Parameters(name = "topic: {0}, group: {1}, prefix: {2}, suffix: {3} == {4}")
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{ "simple/destination", "simpleGroup", "", null, "simple/destination.simpleGroup" },
{ "wildcard/*/destination/>", "simpleGroup", "", null, "wildcard/_/destination/_.simpleGroup" },

{ "simple/destination", "simpleGroup", "prefix", null, "prefixsimple/destination.simpleGroup" },
{ "wildcard/*/destination/>", "simpleGroup", "prefix", null, "prefixwildcard/_/destination/_.simpleGroup" },

{ "simple/destination", "simpleGroup", "", "annoPostix", "simple/destination.annoPostix" },
{ "wildcard/*/destination/>", "simpleGroup", "", "annoPostix", "wildcard/_/destination/_.annoPostix" },

{ "simple/destination", "simpleGroup", "prefix", "annoPostix", "prefixsimple/destination.annoPostix" },
{ "wildcard/*/destination/>", "simpleGroup", "prefix", "annoPostix", "prefixwildcard/_/destination/_.annoPostix" }
});
}

public SolaceProvisioningUtilQueueNameTest(String destination, String groupName, String prefix, String anonymousGroupPostfix, String expected) {
this.destination = destination;
this.groupName = groupName;
this.isAnonymous = anonymousGroupPostfix != null;
this.expected = expected;
this.expectSuffix = anonymousGroupPostfix != null;

this.consumerProperties = new SolaceConsumerProperties();
this.consumerProperties.setAnonymousGroupPostfix(anonymousGroupPostfix);
this.consumerProperties.setPrefix(prefix);
}

@Test
public void getQueueName() {
if (expectSuffix) {
assertTrue(SolaceProvisioningUtil.getQueueName(destination, groupName, consumerProperties, isAnonymous).startsWith(expected));
} else {
assertEquals(expected, SolaceProvisioningUtil.getQueueName(destination, groupName, consumerProperties, isAnonymous));
}

}
}

0 comments on commit c1ad273

Please sign in to comment.