[ROCKETMQ-52] Add unit tests for Validators and ThreadLocalIndex
Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/edde487e Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/edde487e Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/edde487e Branch: refs/heads/ROCKETMQ-57 Commit: edde487ed932b7e5b6700b203a897ed7c08c8373 Parents: 4587775 Author: yukon <yu...@apache.org> Authored: Tue Jan 17 12:53:23 2017 +0800 Committer: yukon <yu...@apache.org> Committed: Thu Jan 19 15:45:19 2017 +0800 ---------------------------------------------------------------------- client/pom.xml | 4 ++ .../org/apache/rocketmq/client/Validators.java | 8 +-- .../client/common/ThreadLocalIndex.java | 4 -- .../client/impl/producer/TopicPublishInfo.java | 2 +- .../latency/LatencyFaultToleranceImpl.java | 2 +- .../apache/rocketmq/client/ValidatorsTest.java | 52 +++++++++++++++++++- .../client/common/ThreadLocalIndexTest.java | 33 +++++++++++++ 7 files changed, 94 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/edde487e/client/pom.xml ---------------------------------------------------------------------- diff --git a/client/pom.xml b/client/pom.xml index 713523d..3a0f6ae 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -38,5 +38,9 @@ <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </dependency> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + </dependency> </dependencies> </project> http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/edde487e/client/src/main/java/org/apache/rocketmq/client/Validators.java ---------------------------------------------------------------------- diff --git a/client/src/main/java/org/apache/rocketmq/client/Validators.java b/client/src/main/java/org/apache/rocketmq/client/Validators.java index 7ea1bf9..899efa6 100644 --- a/client/src/main/java/org/apache/rocketmq/client/Validators.java +++ b/client/src/main/java/org/apache/rocketmq/client/Validators.java @@ -118,23 +118,23 @@ public class Validators { */ public static void checkTopic(String topic) throws MQClientException { if (UtilAll.isBlank(topic)) { - throw new MQClientException("the specified topic is blank", null); + throw new MQClientException("The specified topic is blank", null); } if (!regularExpressionMatcher(topic, PATTERN)) { throw new MQClientException(String.format( - "the specified topic[%s] contains illegal characters, allowing only %s", topic, + "The specified topic[%s] contains illegal characters, allowing only %s", topic, VALID_PATTERN_STR), null); } if (topic.length() > CHARACTER_MAX_LENGTH) { - throw new MQClientException("the specified topic is longer than topic max length 255.", null); + throw new MQClientException("The specified topic is longer than topic max length 255.", null); } //whether the same with system reserved keyword if (topic.equals(MixAll.DEFAULT_TOPIC)) { throw new MQClientException( - String.format("the topic[%s] is conflict with default topic.", topic), null); + String.format("The topic[%s] is conflict with default topic.", topic), null); } } } http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/edde487e/client/src/main/java/org/apache/rocketmq/client/common/ThreadLocalIndex.java ---------------------------------------------------------------------- diff --git a/client/src/main/java/org/apache/rocketmq/client/common/ThreadLocalIndex.java b/client/src/main/java/org/apache/rocketmq/client/common/ThreadLocalIndex.java index a30b5da..ab223c3 100644 --- a/client/src/main/java/org/apache/rocketmq/client/common/ThreadLocalIndex.java +++ b/client/src/main/java/org/apache/rocketmq/client/common/ThreadLocalIndex.java @@ -23,10 +23,6 @@ public class ThreadLocalIndex { private final ThreadLocal<Integer> threadLocalIndex = new ThreadLocal<Integer>(); private final Random random = new Random(); - public ThreadLocalIndex(int value) { - - } - public int getAndIncrement() { Integer index = this.threadLocalIndex.get(); if (null == index) { http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/edde487e/client/src/main/java/org/apache/rocketmq/client/impl/producer/TopicPublishInfo.java ---------------------------------------------------------------------- diff --git a/client/src/main/java/org/apache/rocketmq/client/impl/producer/TopicPublishInfo.java b/client/src/main/java/org/apache/rocketmq/client/impl/producer/TopicPublishInfo.java index 52c5cfb..deb02cf 100644 --- a/client/src/main/java/org/apache/rocketmq/client/impl/producer/TopicPublishInfo.java +++ b/client/src/main/java/org/apache/rocketmq/client/impl/producer/TopicPublishInfo.java @@ -27,7 +27,7 @@ public class TopicPublishInfo { private boolean orderTopic = false; private boolean haveTopicRouterInfo = false; private List<MessageQueue> messageQueueList = new ArrayList<MessageQueue>(); - private volatile ThreadLocalIndex sendWhichQueue = new ThreadLocalIndex(0); + private volatile ThreadLocalIndex sendWhichQueue = new ThreadLocalIndex(); private TopicRouteData topicRouteData; public boolean isOrderTopic() { http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/edde487e/client/src/main/java/org/apache/rocketmq/client/latency/LatencyFaultToleranceImpl.java ---------------------------------------------------------------------- diff --git a/client/src/main/java/org/apache/rocketmq/client/latency/LatencyFaultToleranceImpl.java b/client/src/main/java/org/apache/rocketmq/client/latency/LatencyFaultToleranceImpl.java index 5309bc9..72d4347 100644 --- a/client/src/main/java/org/apache/rocketmq/client/latency/LatencyFaultToleranceImpl.java +++ b/client/src/main/java/org/apache/rocketmq/client/latency/LatencyFaultToleranceImpl.java @@ -27,7 +27,7 @@ import org.apache.rocketmq.client.common.ThreadLocalIndex; public class LatencyFaultToleranceImpl implements LatencyFaultTolerance<String> { private final ConcurrentHashMap<String, FaultItem> faultItemTable = new ConcurrentHashMap<String, FaultItem>(16); - private final ThreadLocalIndex whichItemWorst = new ThreadLocalIndex(0); + private final ThreadLocalIndex whichItemWorst = new ThreadLocalIndex(); @Override public void updateFaultItem(final String name, final long currentLatency, final long notAvailableDuration) { http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/edde487e/client/src/test/java/org/apache/rocketmq/client/ValidatorsTest.java ---------------------------------------------------------------------- diff --git a/client/src/test/java/org/apache/rocketmq/client/ValidatorsTest.java b/client/src/test/java/org/apache/rocketmq/client/ValidatorsTest.java index 6775404..2db648d 100644 --- a/client/src/test/java/org/apache/rocketmq/client/ValidatorsTest.java +++ b/client/src/test/java/org/apache/rocketmq/client/ValidatorsTest.java @@ -17,17 +17,67 @@ package org.apache.rocketmq.client; +import org.apache.commons.lang3.StringUtils; import org.apache.rocketmq.client.exception.MQClientException; +import org.apache.rocketmq.common.MixAll; import org.junit.Test; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Fail.failBecauseExceptionWasNotThrown; + public class ValidatorsTest { @Test - public void topicValidatorTest() throws MQClientException { + public void testCheckTopic_Success() throws MQClientException { Validators.checkTopic("Hello"); Validators.checkTopic("%RETRY%Hello"); Validators.checkTopic("_%RETRY%Hello"); Validators.checkTopic("-%RETRY%Hello"); Validators.checkTopic("223-%RETRY%Hello"); } + + @Test + public void testCheckTopic_HasIllegalCharacters() { + String illegalTopic = "TOPIC&*^"; + try { + Validators.checkTopic(illegalTopic); + failBecauseExceptionWasNotThrown(MQClientException.class); + } catch (MQClientException e) { + assertThat(e).hasMessageStartingWith(String.format("The specified topic[%s] contains illegal characters, allowing only %s", illegalTopic, Validators.VALID_PATTERN_STR)); + } + } + + @Test + public void testCheckTopic_UseDefaultTopic() { + String defaultTopic = MixAll.DEFAULT_TOPIC; + try { + Validators.checkTopic(defaultTopic); + failBecauseExceptionWasNotThrown(MQClientException.class); + } catch (MQClientException e) { + assertThat(e).hasMessageStartingWith(String.format("The topic[%s] is conflict with default topic.", defaultTopic)); + } + } + + @Test + public void testCheckTopic_BlankTopic() { + String blankTopic = ""; + try { + Validators.checkTopic(blankTopic); + failBecauseExceptionWasNotThrown(MQClientException.class); + } catch (MQClientException e) { + assertThat(e).hasMessageStartingWith("The specified topic is blank"); + } + } + + @Test + public void testCheckTopic_TooLongTopic() { + String tooLongTopic = StringUtils.rightPad("TooLongTopic", Validators.CHARACTER_MAX_LENGTH + 1, "_"); + assertThat(tooLongTopic.length()).isGreaterThan(Validators.CHARACTER_MAX_LENGTH); + try { + Validators.checkTopic(tooLongTopic); + failBecauseExceptionWasNotThrown(MQClientException.class); + } catch (MQClientException e) { + assertThat(e).hasMessageStartingWith("The specified topic is longer than topic max length 255."); + } + } } http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/edde487e/client/src/test/java/org/apache/rocketmq/client/common/ThreadLocalIndexTest.java ---------------------------------------------------------------------- diff --git a/client/src/test/java/org/apache/rocketmq/client/common/ThreadLocalIndexTest.java b/client/src/test/java/org/apache/rocketmq/client/common/ThreadLocalIndexTest.java new file mode 100644 index 0000000..b937e45 --- /dev/null +++ b/client/src/test/java/org/apache/rocketmq/client/common/ThreadLocalIndexTest.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.rocketmq.client.common; + +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ThreadLocalIndexTest { + + @Test + public void getAndIncrement() throws Exception { + ThreadLocalIndex localIndex = new ThreadLocalIndex(); + int initialVal = localIndex.getAndIncrement(); + + assertThat(localIndex.getAndIncrement()).isEqualTo(initialVal + 1); + } + +} \ No newline at end of file