You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by st...@apache.org on 2017/01/19 12:46:08 UTC

[01/28] incubator-rocketmq git commit: Integrate with Coveralls

Repository: incubator-rocketmq
Updated Branches:
  refs/heads/ROCKETMQ-54 3884370e8 -> a06a51763


Integrate with Coveralls


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/62963b5c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/62963b5c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/62963b5c

Branch: refs/heads/ROCKETMQ-54
Commit: 62963b5c623561791b0d1c4836d7339ee93b22a7
Parents: 2a9769a
Author: vongosling <vo...@apache.org>
Authored: Tue Jan 17 13:09:02 2017 +0800
Committer: vongosling <vo...@apache.org>
Committed: Tue Jan 17 13:09:02 2017 +0800

----------------------------------------------------------------------
 pom.xml | 5 +++++
 1 file changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/62963b5c/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index ca7ea1d..617ac9c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -317,6 +317,11 @@
                     <encoding>${project.build.sourceEncoding}</encoding>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.eluder.coveralls</groupId>
+                <artifactId>coveralls-maven-plugin</artifactId>
+                <version>4.3.0</version>
+            </plugin>
         </plugins>
     </build>
 


[05/28] incubator-rocketmq git commit: Testing RocketMQ Project on Multiple Operating Systems

Posted by st...@apache.org.
Testing RocketMQ Project on Multiple Operating Systems


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/1c529533
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/1c529533
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/1c529533

Branch: refs/heads/ROCKETMQ-54
Commit: 1c529533e12882c112f3a3f3a3500c65c531da50
Parents: 2892a77
Author: vongosling <vo...@apache.org>
Authored: Tue Jan 17 18:41:06 2017 +0800
Committer: vongosling <vo...@apache.org>
Committed: Tue Jan 17 18:41:06 2017 +0800

----------------------------------------------------------------------
 .travis.yml | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/1c529533/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index 45b7d5d..0019310 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,3 +1,6 @@
+os:
+  - linux
+  - osx
 language: java
 jdk:
   - oraclejdk8


[13/28] incubator-rocketmq git commit: Polish travis script

Posted by st...@apache.org.
Polish travis script


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/5cb7e382
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/5cb7e382
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/5cb7e382

Branch: refs/heads/ROCKETMQ-54
Commit: 5cb7e382b7c1aae651971cd6e93926448df7efc2
Parents: 3e3988d
Author: vongosling <vo...@apache.org>
Authored: Wed Jan 18 23:44:29 2017 +0800
Committer: vongosling <vo...@apache.org>
Committed: Wed Jan 18 23:44:29 2017 +0800

----------------------------------------------------------------------
 .travis.yml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/5cb7e382/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index 8701b48..9394f0a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -10,7 +10,7 @@ language: java
 matrix:
   include:
   # On OSX, run with default JDK only.
-  - os: osx
+  # - os: osx
   # On Linux, run with specific JDKs only.
   - os: linux
     env: CUSTOM_JDK="oraclejdk8"
@@ -35,7 +35,8 @@ before_install:
 
 
 script:
-  - travis_retry mvn -B clean apache-rat:check package jacoco:report coveralls:report
+  - travis_retry mvn -B clean apache-rat:check
+  - travis_retry mvn package jacoco:report coveralls:report
 
 after_success:
   - mvn sonar:sonar


[17/28] incubator-rocketmq git commit: [ROCKETMQ-52] Add unit tests for DefaultMQPushConsumer

Posted by st...@apache.org.
[ROCKETMQ-52] Add unit tests for DefaultMQPushConsumer


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/9d8bd590
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/9d8bd590
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/9d8bd590

Branch: refs/heads/ROCKETMQ-54
Commit: 9d8bd5902a1639080ec50fcf918750f1c7d240f0
Parents: acf9bc3
Author: yukon <yu...@apache.org>
Authored: Thu Jan 19 15:19:34 2017 +0800
Committer: yukon <yu...@apache.org>
Committed: Thu Jan 19 15:45:19 2017 +0800

----------------------------------------------------------------------
 .../consumer/DefaultMQPullConsumerTest.java     |   2 +-
 .../consumer/DefaultMQPushConsumerTest.java     | 180 +++++++++++++++++++
 .../client/producer/DefaultMQProducerTest.java  |   2 +-
 3 files changed, 182 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/9d8bd590/client/src/test/java/org/apache/rocketmq/client/consumer/DefaultMQPullConsumerTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/consumer/DefaultMQPullConsumerTest.java b/client/src/test/java/org/apache/rocketmq/client/consumer/DefaultMQPullConsumerTest.java
index 6dc4ed8..6672b1e 100644
--- a/client/src/test/java/org/apache/rocketmq/client/consumer/DefaultMQPullConsumerTest.java
+++ b/client/src/test/java/org/apache/rocketmq/client/consumer/DefaultMQPullConsumerTest.java
@@ -146,7 +146,7 @@ public class DefaultMQPullConsumerTest {
         });
     }
 
-    private PullResultExt createPullResult(PullMessageRequestHeader requestHeader, PullStatus pullStatus, List<MessageExt> messageExtList) {
+    private PullResultExt createPullResult(PullMessageRequestHeader requestHeader, PullStatus pullStatus, List<MessageExt> messageExtList) throws Exception {
         return new PullResultExt(pullStatus, requestHeader.getQueueOffset() + messageExtList.size(), 123, 2048, messageExtList, 0, new byte[] {});
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/9d8bd590/client/src/test/java/org/apache/rocketmq/client/consumer/DefaultMQPushConsumerTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/consumer/DefaultMQPushConsumerTest.java b/client/src/test/java/org/apache/rocketmq/client/consumer/DefaultMQPushConsumerTest.java
new file mode 100644
index 0000000..7f5c874
--- /dev/null
+++ b/client/src/test/java/org/apache/rocketmq/client/consumer/DefaultMQPushConsumerTest.java
@@ -0,0 +1,180 @@
+/*
+ * 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.consumer;
+
+import java.io.ByteArrayOutputStream;
+import java.lang.reflect.Field;
+import java.net.InetSocketAddress;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import org.apache.rocketmq.client.ClientConfig;
+import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
+import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
+import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
+import org.apache.rocketmq.client.exception.MQBrokerException;
+import org.apache.rocketmq.client.impl.CommunicationMode;
+import org.apache.rocketmq.client.impl.FindBrokerResult;
+import org.apache.rocketmq.client.impl.MQClientAPIImpl;
+import org.apache.rocketmq.client.impl.MQClientManager;
+import org.apache.rocketmq.client.impl.consumer.ConsumeMessageConcurrentlyService;
+import org.apache.rocketmq.client.impl.consumer.DefaultMQPushConsumerImpl;
+import org.apache.rocketmq.client.impl.consumer.ProcessQueue;
+import org.apache.rocketmq.client.impl.consumer.PullAPIWrapper;
+import org.apache.rocketmq.client.impl.consumer.PullMessageService;
+import org.apache.rocketmq.client.impl.consumer.PullRequest;
+import org.apache.rocketmq.client.impl.consumer.PullResultExt;
+import org.apache.rocketmq.client.impl.factory.MQClientInstance;
+import org.apache.rocketmq.common.message.MessageClientExt;
+import org.apache.rocketmq.common.message.MessageDecoder;
+import org.apache.rocketmq.common.message.MessageExt;
+import org.apache.rocketmq.common.message.MessageQueue;
+import org.apache.rocketmq.common.protocol.header.PullMessageRequestHeader;
+import org.apache.rocketmq.remoting.exception.RemotingException;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.stubbing.Answer;
+
+import static org.apache.rocketmq.client.producer.DefaultMQProducerTest.createTopicRoute;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.nullable;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.class)
+public class DefaultMQPushConsumerTest {
+    private String consumerGroup;
+    private String topic = "FooBar";
+    private String brokerName = "BrokerA";
+    @Spy
+    private MQClientInstance mQClientFactory = MQClientManager.getInstance().getAndCreateMQClientInstance(new ClientConfig());
+    @Mock
+    private MQClientAPIImpl mQClientAPIImpl;
+    private PullAPIWrapper pullAPIWrapper;
+    private DefaultMQPushConsumer pushConsumer;
+
+    @Before
+    public void init() throws Exception {
+        consumerGroup = "FooBarGroup" + System.currentTimeMillis();
+        pullAPIWrapper = spy(new PullAPIWrapper(mQClientFactory, consumerGroup, false));
+        pushConsumer = new DefaultMQPushConsumer(consumerGroup);
+        pushConsumer.setNamesrvAddr("127.0.0.1:9876");
+        pushConsumer.setPullInterval(60 * 1000);
+
+        pushConsumer.registerMessageListener(new MessageListenerConcurrently() {
+            @Override public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
+                ConsumeConcurrentlyContext context) {
+                return null;
+            }
+        });
+        pushConsumer.subscribe(topic, "*");
+        pushConsumer.start();
+
+        DefaultMQPushConsumerImpl pushConsumerImpl = pushConsumer.getDefaultMQPushConsumerImpl();
+        Field field = DefaultMQPushConsumerImpl.class.getDeclaredField("mQClientFactory");
+        field.setAccessible(true);
+        field.set(pushConsumerImpl, mQClientFactory);
+
+        field = MQClientInstance.class.getDeclaredField("mQClientAPIImpl");
+        field.setAccessible(true);
+        field.set(mQClientFactory, mQClientAPIImpl);
+
+        field = DefaultMQPushConsumerImpl.class.getDeclaredField("pullAPIWrapper");
+        field.setAccessible(true);
+        field.set(pushConsumerImpl, pullAPIWrapper);
+
+        when(mQClientFactory.findBrokerAddressInSubscribe(anyString(), anyLong(), anyBoolean())).thenReturn(new FindBrokerResult("127.0.0.1:10911", false));
+        mQClientFactory.registerConsumer(consumerGroup, pushConsumerImpl);
+        mQClientFactory.start();
+        when(mQClientAPIImpl.getTopicRouteInfoFromNameServer(anyString(), anyLong())).thenReturn(createTopicRoute());
+    }
+
+    @After
+    public void terminate() {
+        pushConsumer.shutdown();
+    }
+
+    @Test
+    public void testPullMessage_Success() throws InterruptedException, RemotingException, MQBrokerException {
+        final CountDownLatch countDownLatch = new CountDownLatch(1);
+        final MessageExt[] messageExts = new MessageExt[1];
+        pushConsumer.getDefaultMQPushConsumerImpl().setConsumeMessageService(new ConsumeMessageConcurrentlyService(pushConsumer.getDefaultMQPushConsumerImpl(), new MessageListenerConcurrently() {
+            @Override public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
+                ConsumeConcurrentlyContext context) {
+                messageExts[0] = msgs.get(0);
+                countDownLatch.countDown();
+                return null;
+            }
+        }));
+        doAnswer(new Answer() {
+            @Override public Object answer(InvocationOnMock mock) throws Throwable {
+                PullMessageRequestHeader requestHeader = mock.getArgument(1);
+                MessageClientExt messageClientExt = new MessageClientExt();
+                messageClientExt.setTopic(topic);
+                messageClientExt.setQueueId(0);
+                messageClientExt.setMsgId("123");
+                messageClientExt.setBody(new byte[] {'a'});
+                messageClientExt.setOffsetMsgId("234");
+                messageClientExt.setBornHost(new InetSocketAddress(8080));
+                messageClientExt.setStoreHost(new InetSocketAddress(8080));
+                PullResult pullResult = createPullResult(requestHeader, PullStatus.FOUND, Collections.<MessageExt>singletonList(messageClientExt));
+                ((PullCallback)mock.getArgument(4)).onSuccess(pullResult);
+                return null;
+            }
+        }).when(mQClientAPIImpl).pullMessage(anyString(), any(PullMessageRequestHeader.class), anyLong(), any(CommunicationMode.class), nullable(PullCallback.class));
+
+        PullMessageService pullMessageService = mQClientFactory.getPullMessageService();
+        pullMessageService.executePullRequestImmediately(createPullRequest());
+        countDownLatch.await();
+        assertThat(messageExts[0].getTopic()).isEqualTo(topic);
+        assertThat(messageExts[0].getBody()).isEqualTo(new byte[] {'a'});
+    }
+
+    private PullRequest createPullRequest() {
+        PullRequest pullRequest = new PullRequest();
+        pullRequest.setConsumerGroup(consumerGroup);
+        pullRequest.setNextOffset(1024);
+
+        MessageQueue messageQueue = new MessageQueue();
+        messageQueue.setBrokerName(brokerName);
+        messageQueue.setQueueId(0);
+        messageQueue.setTopic(topic);
+        pullRequest.setMessageQueue(messageQueue);
+        pullRequest.setProcessQueue(new ProcessQueue());
+
+        return pullRequest;
+    }
+
+    private PullResultExt createPullResult(PullMessageRequestHeader requestHeader, PullStatus pullStatus, List<MessageExt> messageExtList) throws Exception {
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+        for (MessageExt messageExt : messageExtList) {
+            outputStream.write(MessageDecoder.encode(messageExt, false));
+        }
+        return new PullResultExt(pullStatus, requestHeader.getQueueOffset() + messageExtList.size(), 123, 2048, messageExtList, 0, outputStream.toByteArray());
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/9d8bd590/client/src/test/java/org/apache/rocketmq/client/producer/DefaultMQProducerTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/producer/DefaultMQProducerTest.java b/client/src/test/java/org/apache/rocketmq/client/producer/DefaultMQProducerTest.java
index bbaff00..eddd380 100644
--- a/client/src/test/java/org/apache/rocketmq/client/producer/DefaultMQProducerTest.java
+++ b/client/src/test/java/org/apache/rocketmq/client/producer/DefaultMQProducerTest.java
@@ -190,7 +190,7 @@ public class DefaultMQProducerTest {
         }
     }
 
-    private TopicRouteData createTopicRoute() {
+    public static TopicRouteData createTopicRoute() {
         TopicRouteData topicRouteData = new TopicRouteData();
 
         topicRouteData.setFilterServerTable(new HashMap<String, List<String>>());


[10/28] incubator-rocketmq git commit: Polish coveralls, jacoco, sonar and travis-ci integration

Posted by st...@apache.org.
Polish coveralls,jacoco,sonar and travis-ci integration


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/54967c31
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/54967c31
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/54967c31

Branch: refs/heads/ROCKETMQ-54
Commit: 54967c31cfc0af7883b46a1f71086772e9256f7c
Parents: cc069a1
Author: vongosling <vo...@apache.org>
Authored: Wed Jan 18 14:36:22 2017 +0800
Committer: vongosling <vo...@apache.org>
Committed: Wed Jan 18 14:36:22 2017 +0800

----------------------------------------------------------------------
 .travis.yml | 17 +++++++----------
 pom.xml     | 43 ++++++++++++++++++++++++++++++++++++-------
 2 files changed, 43 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/54967c31/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index c3c525d..2afd6bd 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,20 +4,18 @@ notifications:
       - dev@rocketmq.incubator.apache.org
   on_success: change
   on_failure: always
-  
+
+language: java
+
 matrix:
   include:
   # On OSX, run with default JDK only.
-  - language: java
   - os: osx
   # On Linux, run with specific JDKs only.
-  - language: java
   - os: linux
     env: CUSTOM_JDK="oraclejdk8"
-  - language: java
   - os: linux
     env: CUSTOM_JDK="oraclejdk7"
-  - language: java
   - os: linux
     env: CUSTOM_JDK="openjdk7"
 
@@ -26,7 +24,7 @@ before_install:
   - cat ~/.mavenrc
   - if [ "$TRAVIS_OS_NAME" == "osx" ]; then export JAVA_HOME=$(/usr/libexec/java_home); fi
   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then jdk_switcher use "$CUSTOM_JDK"; fi
-#
+
 #os:
 #  - linux
 #  - osx
@@ -36,9 +34,8 @@ before_install:
 #  - openjdk7
 
 
-#script:
-#  - travis_retry mvn --batch-mode clean apache-rat:check
-#  - travis_wait 60 mvn --batch-mode clean package findbugs:check
+script:
+  - travis_retry mvn -B clean apache-rat:check package jacoo:report coveralls:report
 
 after_success:
-  - mvn clean apache-rat:check cobertura:cobertura coveralls:report
+  - mvn sonar:sonar

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/54967c31/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index f189bb4..e9ab2ea 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,7 +32,7 @@
     <artifactId>rocketmq-all</artifactId>
     <version>4.0.0-SNAPSHOT</version>
     <packaging>pom</packaging>
-    <name>Apache RocketMQ git s${project.version}</name>
+    <name>Apache RocketMQ ${project.version}</name>
     <url>http://rocketmq.incubator.apache.org/</url>
 
     <prerequisites>
@@ -152,6 +152,8 @@
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+
         <!--maven properties -->
         <maven.test.skip>false</maven.test.skip>
         <maven.javadoc.skip>true</maven.javadoc.skip>
@@ -159,6 +161,14 @@
         <maven.compiler.source>1.7</maven.compiler.source>
         <maven.compiler.target>1.7</maven.compiler.target>
 
+        <!-- BEFORE SonarQube 4.4.0 - the destination file for the code coverage report has to be set to the same value
+             in the parent pom and in each module pom. Then JaCoCo will add up information in
+             the same report, so that, it will give the cross-module code coverage. -->
+        <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
+        <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
+        <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
+        <sonar.jacoco.itReportPath>${project.basedir}/../target/jacoco-it.exec</sonar.jacoco.itReportPath>
+        <sonar.language>java</sonar.language>
         <!-- URL of the ASF SonarQube server -->
         <sonar.host.url>https://builds.apache.org/analysis</sonar.host.url>
         <!-- Exclude all generated code -->
@@ -329,14 +339,33 @@
                 <version>4.3.0</version>
             </plugin>
             <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>cobertura-maven-plugin</artifactId>
-                <version>2.7</version>
+                <groupId>org.jacoco</groupId>
+                <artifactId>jacoco-maven-plugin</artifactId>
+                <version>0.7.6.201602180812</version>
                 <configuration>
-                    <format>xml</format>
-                    <!-- aggregated reports for multi-module projects -->
-                    <aggregate>true</aggregate>
+                    <append>true</append>
                 </configuration>
+                <executions>
+                    <execution>
+                        <id>agent-for-ut</id>
+                        <goals>
+                            <goal>prepare-agent</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>agent-for-it</id>
+                        <goals>
+                            <goal>prepare-agent-integration</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>report</id>
+                        <phase>prepare-package</phase>
+                        <goals>
+                            <goal>report</goal>
+                        </goals>
+                    </execution>
+                </executions>
             </plugin>
             <plugin>
                 <groupId>org.codehaus.mojo</groupId>


[02/28] incubator-rocketmq git commit: Integrate travis-ci with coveralls

Posted by st...@apache.org.
Integrate travis-ci with coveralls


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/0623b3c6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/0623b3c6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/0623b3c6

Branch: refs/heads/ROCKETMQ-54
Commit: 0623b3c6392e717af6879cd3bf78fc2ca40308f4
Parents: 62963b5
Author: vongosling <vo...@apache.org>
Authored: Tue Jan 17 13:57:33 2017 +0800
Committer: vongosling <vo...@apache.org>
Committed: Tue Jan 17 13:57:33 2017 +0800

----------------------------------------------------------------------
 .travis.yml |  7 +++++++
 README.md   |  2 +-
 pom.xml     | 15 +++++++++++++++
 3 files changed, 23 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/0623b3c6/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index b2168ad..a9927e2 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,3 +3,10 @@ jdk:
   - oraclejdk8
   - oraclejdk7
   - openjdk7
+
+script:
+  - travis_retry mvn --batch-mode clean apache-rat:check
+  - travis_wait 60 mvn --batch-mode clean package findbugs:check
+
+after_success:
+  - mvn clean cobertura:cobertura coveralls:report

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/0623b3c6/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index a0259f0..32c86fe 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-## RocketMQ [![Build Status](https://travis-ci.org/apache/incubator-rocketmq.svg?branch=master)](https://travis-ci.org/apache/incubator-rocketmq)
+## RocketMQ [![Build Status](https://travis-ci.org/apache/incubator-rocketmq.svg?branch=master)](https://travis-ci.org/apache/incubator-rocketmq) [![Coverage Status](https://coveralls.io/repos/github/apache/incubator-rocketmq/badge.svg?branch=master)](https://coveralls.io/github/apache/incubator-rocketmq?branch=master)
 [![Maven Central](https://img.shields.io/badge/maven--center-stable--version-green.svg)](http://search.maven.org/#search%7Cga%7C1%7Corg.apache.rocketmq)
 [![GitHub release](https://img.shields.io/badge/release-download-orange.svg)](https://github.org/apache/rocketmqreleases)
 [![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/0623b3c6/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 617ac9c..afd3d84 100644
--- a/pom.xml
+++ b/pom.xml
@@ -322,6 +322,21 @@
                 <artifactId>coveralls-maven-plugin</artifactId>
                 <version>4.3.0</version>
             </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>cobertura-maven-plugin</artifactId>
+                <version>2.7</version>
+                <configuration>
+                    <format>xml</format>
+                    <!-- aggregated reports for multi-module projects -->
+                    <aggregate>true</aggregate>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>findbugs-maven-plugin</artifactId>
+                <version>3.0.4</version>
+            </plugin>
         </plugins>
     </build>
 


[09/28] incubator-rocketmq git commit: Polish travis config

Posted by st...@apache.org.
Polish travis config


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/cc069a13
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/cc069a13
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/cc069a13

Branch: refs/heads/ROCKETMQ-54
Commit: cc069a131ca2f1c962051cd772466cda71e9737a
Parents: 3daf24e
Author: vongosling <vo...@apache.org>
Authored: Wed Jan 18 12:40:59 2017 +0800
Committer: vongosling <vo...@apache.org>
Committed: Wed Jan 18 12:40:59 2017 +0800

----------------------------------------------------------------------
 .travis.yml | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/cc069a13/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index 4d33a4e..c3c525d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,18 +1,23 @@
 notifications:
   email:
-  - dev@rocketmq.incubator.apache.org
+    recipients:
+      - dev@rocketmq.incubator.apache.org
   on_success: change
   on_failure: always
-language: java
+  
 matrix:
   include:
   # On OSX, run with default JDK only.
+  - language: java
   - os: osx
   # On Linux, run with specific JDKs only.
+  - language: java
   - os: linux
     env: CUSTOM_JDK="oraclejdk8"
+  - language: java
   - os: linux
     env: CUSTOM_JDK="oraclejdk7"
+  - language: java
   - os: linux
     env: CUSTOM_JDK="openjdk7"
 


[27/28] incubator-rocketmq git commit: [ROCKETMQ-51] Remove heavy unit tests in rocketmq-broker

Posted by st...@apache.org.
[ROCKETMQ-51] Remove heavy unit tests in rocketmq-broker


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/c549854f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/c549854f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/c549854f

Branch: refs/heads/ROCKETMQ-54
Commit: c549854f923d1b82ab41b7bb9d957809b0056563
Parents: 6511bc3
Author: yukon <yu...@apache.org>
Authored: Wed Jan 18 17:08:26 2017 +0800
Committer: yukon <yu...@apache.org>
Committed: Thu Jan 19 15:45:19 2017 +0800

----------------------------------------------------------------------
 .../rocketmq/broker/BrokerTestHarness.java      | 69 -----------------
 .../broker/api/BrokerFastFailureTest.java       | 61 ---------------
 .../rocketmq/broker/api/SendMessageTest.java    | 79 --------------------
 .../offset/ConsumerOffsetManagerTest.java       | 61 ---------------
 .../broker/topic/TopicConfigManagerTest.java    | 60 ---------------
 5 files changed, 330 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/c549854f/broker/src/test/java/org/apache/rocketmq/broker/BrokerTestHarness.java
----------------------------------------------------------------------
diff --git a/broker/src/test/java/org/apache/rocketmq/broker/BrokerTestHarness.java b/broker/src/test/java/org/apache/rocketmq/broker/BrokerTestHarness.java
deleted file mode 100644
index f5332dc..0000000
--- a/broker/src/test/java/org/apache/rocketmq/broker/BrokerTestHarness.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * $Id: SendMessageTest.java 1831 2013-05-16 01:39:51Z vintagewang@apache.org $
- */
-package org.apache.rocketmq.broker;
-
-import java.io.File;
-import java.util.Random;
-import org.apache.rocketmq.common.BrokerConfig;
-import org.apache.rocketmq.remoting.netty.NettyClientConfig;
-import org.apache.rocketmq.remoting.netty.NettyServerConfig;
-import org.apache.rocketmq.store.config.MessageStoreConfig;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class BrokerTestHarness {
-
-    public final String BROKER_NAME = "TestBrokerName";
-    protected BrokerController brokerController = null;
-    protected Random random = new Random();
-    protected String brokerAddr = "";
-    protected Logger logger = LoggerFactory.getLogger(BrokerTestHarness.class);
-    protected BrokerConfig brokerConfig = new BrokerConfig();
-    protected NettyServerConfig nettyServerConfig = new NettyServerConfig();
-    protected NettyClientConfig nettyClientConfig = new NettyClientConfig();
-    protected MessageStoreConfig storeConfig = new MessageStoreConfig();
-
-    @Before
-    public void startup() throws Exception {
-        brokerConfig.setBrokerName(BROKER_NAME);
-        brokerConfig.setBrokerIP1("127.0.0.1");
-        storeConfig.setStorePathRootDir(System.getProperty("user.home") + File.separator + "unitteststore");
-        storeConfig.setStorePathCommitLog(System.getProperty("user.home") + File.separator + "unitteststore" + File.separator + "commitlog");
-        nettyServerConfig.setListenPort(10000 + random.nextInt(1000));
-        brokerAddr = brokerConfig.getBrokerIP1() + ":" + nettyServerConfig.getListenPort();
-        brokerController = new BrokerController(brokerConfig, nettyServerConfig, nettyClientConfig, storeConfig);
-        boolean initResult = brokerController.initialize();
-        Assert.assertTrue(initResult);
-        logger.info("Broker Start name:{} addr:{}", brokerConfig.getBrokerName(), brokerController.getBrokerAddr());
-        brokerController.start();
-    }
-
-    @After
-    public void shutdown() throws Exception {
-        if (brokerController != null) {
-            brokerController.shutdown();
-        }
-        //maybe need to clean the file store. But we do not suggest deleting anything.
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/c549854f/broker/src/test/java/org/apache/rocketmq/broker/api/BrokerFastFailureTest.java
----------------------------------------------------------------------
diff --git a/broker/src/test/java/org/apache/rocketmq/broker/api/BrokerFastFailureTest.java b/broker/src/test/java/org/apache/rocketmq/broker/api/BrokerFastFailureTest.java
deleted file mode 100644
index bec0af5..0000000
--- a/broker/src/test/java/org/apache/rocketmq/broker/api/BrokerFastFailureTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * 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.broker.api;
-
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.TimeUnit;
-import org.apache.rocketmq.broker.BrokerTestHarness;
-import org.apache.rocketmq.broker.latency.BrokerFastFailure;
-import org.apache.rocketmq.broker.latency.FutureTaskExt;
-import org.apache.rocketmq.remoting.netty.RequestTask;
-import org.junit.Assert;
-import org.junit.Test;
-
-public class BrokerFastFailureTest extends BrokerTestHarness {
-
-    @Test
-    public void testHeadSlowTimeMills() throws InterruptedException {
-        BlockingQueue<Runnable> blockingQueue = new LinkedBlockingQueue<>();
-        blockingQueue.add(new FutureTaskExt<>(new RequestTask(null, null, null), null));
-        TimeUnit.MILLISECONDS.sleep(10);
-        Assert.assertTrue(this.brokerController.headSlowTimeMills(blockingQueue) > 0);
-
-        blockingQueue.clear();
-        blockingQueue.add(new Runnable() {
-            @Override public void run() {
-
-            }
-        });
-        Assert.assertTrue(this.brokerController.headSlowTimeMills(blockingQueue) == 0);
-    }
-
-    @Test
-    public void testCastRunnable() {
-        Runnable runnable = new Runnable() {
-            @Override public void run() {
-
-            }
-        };
-        Assert.assertNull(BrokerFastFailure.castRunnable(runnable));
-
-        RequestTask requestTask = new RequestTask(null, null, null);
-        runnable = new FutureTaskExt<>(requestTask, null);
-
-        Assert.assertEquals(requestTask, BrokerFastFailure.castRunnable(runnable));
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/c549854f/broker/src/test/java/org/apache/rocketmq/broker/api/SendMessageTest.java
----------------------------------------------------------------------
diff --git a/broker/src/test/java/org/apache/rocketmq/broker/api/SendMessageTest.java b/broker/src/test/java/org/apache/rocketmq/broker/api/SendMessageTest.java
deleted file mode 100644
index 69e01be..0000000
--- a/broker/src/test/java/org/apache/rocketmq/broker/api/SendMessageTest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * $Id: SendMessageTest.java 1831 2013-05-16 01:39:51Z vintagewang@apache.org $
- */
-package org.apache.rocketmq.broker.api;
-
-import org.apache.rocketmq.broker.BrokerTestHarness;
-import org.apache.rocketmq.client.ClientConfig;
-import org.apache.rocketmq.client.hook.SendMessageContext;
-import org.apache.rocketmq.client.impl.CommunicationMode;
-import org.apache.rocketmq.client.impl.MQClientAPIImpl;
-import org.apache.rocketmq.client.producer.SendResult;
-import org.apache.rocketmq.client.producer.SendStatus;
-import org.apache.rocketmq.common.MixAll;
-import org.apache.rocketmq.common.message.Message;
-import org.apache.rocketmq.common.message.MessageDecoder;
-import org.apache.rocketmq.common.protocol.header.SendMessageRequestHeader;
-import org.apache.rocketmq.remoting.netty.NettyClientConfig;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class SendMessageTest extends BrokerTestHarness {
-
-    MQClientAPIImpl client = new MQClientAPIImpl(new NettyClientConfig(), null, null, new ClientConfig());
-    String topic = "UnitTestTopic";
-
-    @Before
-    @Override
-    public void startup() throws Exception {
-        super.startup();
-        client.start();
-
-    }
-
-    @After
-    @Override
-    public void shutdown() throws Exception {
-        client.shutdown();
-        super.shutdown();
-    }
-
-    @Test
-    public void testSendSingle() throws Exception {
-        Message msg = new Message(topic, "TAG1 TAG2", "100200300", "body".getBytes());
-        SendMessageRequestHeader requestHeader = new SendMessageRequestHeader();
-        requestHeader.setProducerGroup("abc");
-        requestHeader.setTopic(msg.getTopic());
-        requestHeader.setDefaultTopic(MixAll.DEFAULT_TOPIC);
-        requestHeader.setDefaultTopicQueueNums(4);
-        requestHeader.setQueueId(0);
-        requestHeader.setSysFlag(0);
-        requestHeader.setBornTimestamp(System.currentTimeMillis());
-        requestHeader.setFlag(msg.getFlag());
-        requestHeader.setProperties(MessageDecoder.messageProperties2String(msg.getProperties()));
-
-        SendResult result = client.sendMessage(brokerAddr, BROKER_NAME, msg, requestHeader, 1000 * 5,
-            CommunicationMode.SYNC, new SendMessageContext(), null);
-        assertEquals(result.getSendStatus(), SendStatus.SEND_OK);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/c549854f/broker/src/test/java/org/apache/rocketmq/broker/offset/ConsumerOffsetManagerTest.java
----------------------------------------------------------------------
diff --git a/broker/src/test/java/org/apache/rocketmq/broker/offset/ConsumerOffsetManagerTest.java b/broker/src/test/java/org/apache/rocketmq/broker/offset/ConsumerOffsetManagerTest.java
deleted file mode 100644
index 76b1b7f..0000000
--- a/broker/src/test/java/org/apache/rocketmq/broker/offset/ConsumerOffsetManagerTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * $Id: ConsumerOffsetManagerTest.java 1831 2013-05-16 01:39:51Z vintagewang@apache.org $
- */
-package org.apache.rocketmq.broker.offset;
-
-import org.apache.rocketmq.broker.BrokerTestHarness;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class ConsumerOffsetManagerTest extends BrokerTestHarness {
-
-    @Test
-    public void testFlushConsumerOffset() throws Exception {
-        ConsumerOffsetManager consumerOffsetManager = new ConsumerOffsetManager(brokerController);
-        for (int i = 0; i < 10; i++) {
-            String group = "UNIT_TEST_GROUP_" + i;
-            for (int id = 0; id < 10; id++) {
-                consumerOffsetManager.commitOffset(null, group, "TOPIC_A", id, id + 100);
-                consumerOffsetManager.commitOffset(null, group, "TOPIC_B", id, id + 100);
-                consumerOffsetManager.commitOffset(null, group, "TOPIC_C", id, id + 100);
-            }
-        }
-        consumerOffsetManager.persist();
-        consumerOffsetManager.getOffsetTable().clear();
-        for (int i = 0; i < 10; i++) {
-            String group = "UNIT_TEST_GROUP_" + i;
-            for (int id = 0; id < 10; id++) {
-                assertEquals(consumerOffsetManager.queryOffset(group, "TOPIC_A", id), -1);
-                assertEquals(consumerOffsetManager.queryOffset(group, "TOPIC_B", id), -1);
-                assertEquals(consumerOffsetManager.queryOffset(group, "TOPIC_B", id), -1);
-            }
-        }
-        consumerOffsetManager.load();
-        for (int i = 0; i < 10; i++) {
-            String group = "UNIT_TEST_GROUP_" + i;
-            for (int id = 0; id < 10; id++) {
-                assertEquals(consumerOffsetManager.queryOffset(group, "TOPIC_A", id), id + 100);
-                assertEquals(consumerOffsetManager.queryOffset(group, "TOPIC_B", id), id + 100);
-                assertEquals(consumerOffsetManager.queryOffset(group, "TOPIC_B", id), id + 100);
-            }
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/c549854f/broker/src/test/java/org/apache/rocketmq/broker/topic/TopicConfigManagerTest.java
----------------------------------------------------------------------
diff --git a/broker/src/test/java/org/apache/rocketmq/broker/topic/TopicConfigManagerTest.java b/broker/src/test/java/org/apache/rocketmq/broker/topic/TopicConfigManagerTest.java
deleted file mode 100644
index e309be7..0000000
--- a/broker/src/test/java/org/apache/rocketmq/broker/topic/TopicConfigManagerTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * $Id: TopicConfigManagerTest.java 1831 2013-05-16 01:39:51Z vintagewang@apache.org $
- */
-package org.apache.rocketmq.broker.topic;
-
-import org.apache.rocketmq.broker.BrokerTestHarness;
-import org.apache.rocketmq.common.MixAll;
-import org.apache.rocketmq.common.TopicConfig;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
-public class TopicConfigManagerTest extends BrokerTestHarness {
-    @Test
-    public void testFlushTopicConfig() throws Exception {
-        TopicConfigManager topicConfigManager = new TopicConfigManager(brokerController);
-
-        for (int i = 0; i < 10; i++) {
-            String topic = "UNITTEST-" + i;
-            TopicConfig topicConfig = topicConfigManager.createTopicInSendMessageMethod(topic, MixAll.DEFAULT_TOPIC, null, 4, 0);
-            assertNotNull(topicConfig);
-        }
-        topicConfigManager.persist();
-
-        topicConfigManager.getTopicConfigTable().clear();
-
-        for (int i = 0; i < 10; i++) {
-            String topic = "UNITTEST-" + i;
-            TopicConfig topicConfig = topicConfigManager.selectTopicConfig(topic);
-            assertNull(topicConfig);
-        }
-        topicConfigManager.load();
-        for (int i = 0; i < 10; i++) {
-            String topic = "UNITTEST-" + i;
-            TopicConfig topicConfig = topicConfigManager.selectTopicConfig(topic);
-            assertNotNull(topicConfig);
-            assertEquals(topicConfig.getTopicSysFlag(), 0);
-            assertEquals(topicConfig.getReadQueueNums(), 4);
-        }
-    }
-}


[03/28] incubator-rocketmq git commit: Remove script command in travis config file

Posted by st...@apache.org.
Remove script command in travis config file


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/df9d621b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/df9d621b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/df9d621b

Branch: refs/heads/ROCKETMQ-54
Commit: df9d621baac504ae2d7288a19a3907a3c02cd485
Parents: 0623b3c
Author: vongosling <vo...@apache.org>
Authored: Tue Jan 17 14:22:24 2017 +0800
Committer: vongosling <vo...@apache.org>
Committed: Tue Jan 17 14:22:24 2017 +0800

----------------------------------------------------------------------
 .travis.yml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/df9d621b/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index a9927e2..45b7d5d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,9 +4,9 @@ jdk:
   - oraclejdk7
   - openjdk7
 
-script:
-  - travis_retry mvn --batch-mode clean apache-rat:check
-  - travis_wait 60 mvn --batch-mode clean package findbugs:check
+#script:
+#  - travis_retry mvn --batch-mode clean apache-rat:check
+#  - travis_wait 60 mvn --batch-mode clean package findbugs:check
 
 after_success:
-  - mvn clean cobertura:cobertura coveralls:report
+  - mvn clean apache-rat:check cobertura:cobertura coveralls:report


[07/28] incubator-rocketmq git commit: polish osx platform for travis

Posted by st...@apache.org.
polish osx platform for travis


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/2cee0292
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/2cee0292
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/2cee0292

Branch: refs/heads/ROCKETMQ-54
Commit: 2cee029201a9f157208b8136693285668bfdb737
Parents: 7f33508
Author: vongosling <vo...@apache.org>
Authored: Wed Jan 18 11:02:03 2017 +0800
Committer: vongosling <vo...@apache.org>
Committed: Wed Jan 18 11:02:03 2017 +0800

----------------------------------------------------------------------
 .travis.yml | 38 +++++++++++++++++++++++++++++---------
 1 file changed, 29 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/2cee0292/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index f82c45a..c41d858 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,15 +1,35 @@
-os:
-  - linux
-  - osx
+notifications:
+  email:
+    - dev@rocketmq.incubator.apache.org
+    on_success: change
+    on_failure: always
 language: java
-jdk:
-  - oraclejdk8
-  - oraclejdk7
-  - openjdk7
 matrix:
   include:
-    - os: osx
-      osx_image: xcode8
+  # On OSX, run with default JDK only.
+  - os: osx
+  # On Linux, run with specific JDKs only.
+  - os: linux
+    env: CUSTOM_JDK="oraclejdk8"
+  - os: linux
+    env: CUSTOM_JDK="oraclejdk7"
+  - os: linux
+    env: CUSTOM_JDK="openjdk7"
+
+before_install:
+  - echo 'MAVEN_OPTS="$MAVEN_OPTS -Xmx1024m -XX:MaxPermSize=512m -XX:+BytecodeVerificationLocal"' >> ~/.mavenrc
+  - cat ~/.mavenrc
+  - if [ "$TRAVIS_OS_NAME" == "osx" ]; then export JAVA_HOME=$(/usr/libexec/java_home); fi
+  - if [ "$TRAVIS_OS_NAME" == "linux" ]; then jdk_switcher use "$CUSTOM_JDK"; fi
+#
+#os:
+#  - linux
+#  - osx
+#jdk:
+#  - oraclejdk8
+#  - oraclejdk7
+#  - openjdk7
+
 
 #script:
 #  - travis_retry mvn --batch-mode clean apache-rat:check


[14/28] incubator-rocketmq git commit: Remove check goal in jacaco plugin

Posted by st...@apache.org.
Remove check goal in jacaco plugin


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/4587775c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/4587775c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/4587775c

Branch: refs/heads/ROCKETMQ-54
Commit: 4587775c5169d8f7e4a50305cce4786f2823d5bf
Parents: 5cb7e38
Author: vongosling <vo...@apache.org>
Authored: Wed Jan 18 23:53:07 2017 +0800
Committer: vongosling <vo...@apache.org>
Committed: Wed Jan 18 23:53:07 2017 +0800

----------------------------------------------------------------------
 .travis.yml | 2 +-
 pom.xml     | 6 ------
 2 files changed, 1 insertion(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/4587775c/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index 9394f0a..dd57ba3 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -36,7 +36,7 @@ before_install:
 
 script:
   - travis_retry mvn -B clean apache-rat:check
-  - travis_retry mvn package jacoco:report coveralls:report
+  - travis_retry mvn -B package jacoco:report coveralls:report
 
 after_success:
   - mvn sonar:sonar

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/4587775c/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 2966541..8ec8170 100644
--- a/pom.xml
+++ b/pom.xml
@@ -371,12 +371,6 @@
                             <goal>report-integration</goal>
                         </goals>
                     </execution>
-                    <execution>
-                        <id>default-check</id>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                    </execution>
                 </executions>
             </plugin>
             <plugin>


[11/28] incubator-rocketmq git commit: Fix typo error

Posted by st...@apache.org.
Fix typo error


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/02f8b14c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/02f8b14c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/02f8b14c

Branch: refs/heads/ROCKETMQ-54
Commit: 02f8b14c0b1b292d240c339fe3fdaa1071b72f27
Parents: 54967c3
Author: vongosling <vo...@apache.org>
Authored: Wed Jan 18 14:40:19 2017 +0800
Committer: vongosling <vo...@apache.org>
Committed: Wed Jan 18 14:40:19 2017 +0800

----------------------------------------------------------------------
 .travis.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/02f8b14c/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index 2afd6bd..8701b48 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -35,7 +35,7 @@ before_install:
 
 
 script:
-  - travis_retry mvn -B clean apache-rat:check package jacoo:report coveralls:report
+  - travis_retry mvn -B clean apache-rat:check package jacoco:report coveralls:report
 
 after_success:
   - mvn sonar:sonar


[20/28] incubator-rocketmq git commit: [ROCKETMQ-52] Remove unnecessary stubbing

Posted by st...@apache.org.
[ROCKETMQ-52] Remove unnecessary stubbing


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/4291348e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/4291348e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/4291348e

Branch: refs/heads/ROCKETMQ-54
Commit: 4291348ef7ce4f0cd7ff596e5b0c15908e41cf08
Parents: 9d8bd59
Author: yukon <yu...@apache.org>
Authored: Thu Jan 19 15:39:43 2017 +0800
Committer: yukon <yu...@apache.org>
Committed: Thu Jan 19 15:45:19 2017 +0800

----------------------------------------------------------------------
 .../apache/rocketmq/client/consumer/DefaultMQPushConsumerTest.java | 2 --
 1 file changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/4291348e/client/src/test/java/org/apache/rocketmq/client/consumer/DefaultMQPushConsumerTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/consumer/DefaultMQPushConsumerTest.java b/client/src/test/java/org/apache/rocketmq/client/consumer/DefaultMQPushConsumerTest.java
index 7f5c874..ce8b4d3 100644
--- a/client/src/test/java/org/apache/rocketmq/client/consumer/DefaultMQPushConsumerTest.java
+++ b/client/src/test/java/org/apache/rocketmq/client/consumer/DefaultMQPushConsumerTest.java
@@ -55,7 +55,6 @@ import org.mockito.invocation.InvocationOnMock;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.mockito.stubbing.Answer;
 
-import static org.apache.rocketmq.client.producer.DefaultMQProducerTest.createTopicRoute;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyBoolean;
@@ -111,7 +110,6 @@ public class DefaultMQPushConsumerTest {
         when(mQClientFactory.findBrokerAddressInSubscribe(anyString(), anyLong(), anyBoolean())).thenReturn(new FindBrokerResult("127.0.0.1:10911", false));
         mQClientFactory.registerConsumer(consumerGroup, pushConsumerImpl);
         mQClientFactory.start();
-        when(mQClientAPIImpl.getTopicRouteInfoFromNameServer(anyString(), anyLong())).thenReturn(createTopicRoute());
     }
 
     @After


[06/28] incubator-rocketmq git commit: Use xcode8 for osx test

Posted by st...@apache.org.
Use xcode8 for osx test


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/7f33508f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/7f33508f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/7f33508f

Branch: refs/heads/ROCKETMQ-54
Commit: 7f33508fbd5fe3cfb3fe74d696db489a04297f37
Parents: 1c52953
Author: yukon <yu...@apache.org>
Authored: Wed Jan 18 00:27:56 2017 +0800
Committer: yukon <yu...@apache.org>
Committed: Wed Jan 18 00:27:56 2017 +0800

----------------------------------------------------------------------
 .travis.yml | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/7f33508f/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index 0019310..f82c45a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,6 +6,10 @@ jdk:
   - oraclejdk8
   - oraclejdk7
   - openjdk7
+matrix:
+  include:
+    - os: osx
+      osx_image: xcode8
 
 #script:
 #  - travis_retry mvn --batch-mode clean apache-rat:check


[23/28] incubator-rocketmq git commit: [ROCKETMQ-52] Use MockitoJUnitRunner with Mock

Posted by st...@apache.org.
[ROCKETMQ-52] Use MockitoJUnitRunner with Mock


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/bbcb69ec
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/bbcb69ec
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/bbcb69ec

Branch: refs/heads/ROCKETMQ-54
Commit: bbcb69ec8de00c54b9fdc1678a628751912316de
Parents: 032bb2b
Author: yukon <yu...@apache.org>
Authored: Tue Jan 17 21:37:26 2017 +0800
Committer: yukon <yu...@apache.org>
Committed: Thu Jan 19 15:45:19 2017 +0800

----------------------------------------------------------------------
 .../store/LocalFileOffsetStoreTest.java         | 19 ++++++++--------
 .../store/RemoteBrokerOffsetStoreTest.java      | 23 ++++++++++----------
 .../client/impl/MQClientAPIImplTest.java        | 19 ++++++++--------
 .../impl/factory/MQClientInstanceTest.java      |  3 ---
 4 files changed, 30 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/bbcb69ec/client/src/test/java/org/apache/rocketmq/client/consumer/store/LocalFileOffsetStoreTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/consumer/store/LocalFileOffsetStoreTest.java b/client/src/test/java/org/apache/rocketmq/client/consumer/store/LocalFileOffsetStoreTest.java
index 0a54855..0b522e6 100644
--- a/client/src/test/java/org/apache/rocketmq/client/consumer/store/LocalFileOffsetStoreTest.java
+++ b/client/src/test/java/org/apache/rocketmq/client/consumer/store/LocalFileOffsetStoreTest.java
@@ -21,25 +21,26 @@ import java.util.HashSet;
 import org.apache.rocketmq.client.ClientConfig;
 import org.apache.rocketmq.client.impl.factory.MQClientInstance;
 import org.apache.rocketmq.common.message.MessageQueue;
-import org.junit.BeforeClass;
+import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnitRunner;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.when;
 
+@RunWith(MockitoJUnitRunner.class)
 public class LocalFileOffsetStoreTest {
     @Mock
-    private static MQClientInstance mQClientFactory;
-    private static String group = "FooBarGroup";
-    private static String topic = "FooBar";
-    private static String brokerName = "DefaultBrokerName";
+    private MQClientInstance mQClientFactory;
+    private String group = "FooBarGroup";
+    private String topic = "FooBar";
+    private String brokerName = "DefaultBrokerName";
 
-    @BeforeClass
-    public static void init() {
+    @Before
+    public void init() {
         System.setProperty("rocketmq.client.localOffsetStoreDir", System.getProperty("java.io.tmpdir") + ".rocketmq_offsets");
-        mQClientFactory = Mockito.mock(MQClientInstance.class);
         String clientId = new ClientConfig().buildMQClientId() + "#TestNamespace" + System.currentTimeMillis();
         when(mQClientFactory.getClientId()).thenReturn(clientId);
     }

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/bbcb69ec/client/src/test/java/org/apache/rocketmq/client/consumer/store/RemoteBrokerOffsetStoreTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/consumer/store/RemoteBrokerOffsetStoreTest.java b/client/src/test/java/org/apache/rocketmq/client/consumer/store/RemoteBrokerOffsetStoreTest.java
index 7ecb022..a13930f 100644
--- a/client/src/test/java/org/apache/rocketmq/client/consumer/store/RemoteBrokerOffsetStoreTest.java
+++ b/client/src/test/java/org/apache/rocketmq/client/consumer/store/RemoteBrokerOffsetStoreTest.java
@@ -27,10 +27,12 @@ import org.apache.rocketmq.common.message.MessageQueue;
 import org.apache.rocketmq.common.protocol.header.QueryConsumerOffsetRequestHeader;
 import org.apache.rocketmq.common.protocol.header.UpdateConsumerOffsetRequestHeader;
 import org.apache.rocketmq.remoting.exception.RemotingException;
-import org.junit.BeforeClass;
+import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.invocation.InvocationOnMock;
+import org.mockito.junit.MockitoJUnitRunner;
 import org.mockito.stubbing.Answer;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -39,27 +41,24 @@ import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+@RunWith(MockitoJUnitRunner.class)
 public class RemoteBrokerOffsetStoreTest {
     @Mock
-    private static MQClientInstance mQClientFactory;
+    private MQClientInstance mQClientFactory;
     @Mock
-    private static MQClientAPIImpl mqClientAPI;
-    private static String group = "FooBarGroup";
-    private static String topic = "FooBar";
-    private static String brokerName = "DefaultBrokerName";
+    private MQClientAPIImpl mqClientAPI;
+    private String group = "FooBarGroup";
+    private String topic = "FooBar";
+    private String brokerName = "DefaultBrokerName";
 
-    @BeforeClass
-    public static void init() {
+    @Before
+    public void init() {
         System.setProperty("rocketmq.client.localOffsetStoreDir", System.getProperty("java.io.tmpdir") + ".rocketmq_offsets");
-        mQClientFactory = mock(MQClientInstance.class);
         String clientId = new ClientConfig().buildMQClientId() + "#TestNamespace" + System.currentTimeMillis();
         when(mQClientFactory.getClientId()).thenReturn(clientId);
         when(mQClientFactory.findBrokerAddressInAdmin(brokerName)).thenReturn(new FindBrokerResult("127.0.0.1", false));
-
-        mqClientAPI = mock(MQClientAPIImpl.class);
         when(mQClientFactory.getMQClientAPIImpl()).thenReturn(mqClientAPI);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/bbcb69ec/client/src/test/java/org/apache/rocketmq/client/impl/MQClientAPIImplTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/impl/MQClientAPIImplTest.java b/client/src/test/java/org/apache/rocketmq/client/impl/MQClientAPIImplTest.java
index cbcf560..3553738 100644
--- a/client/src/test/java/org/apache/rocketmq/client/impl/MQClientAPIImplTest.java
+++ b/client/src/test/java/org/apache/rocketmq/client/impl/MQClientAPIImplTest.java
@@ -35,13 +35,14 @@ import org.apache.rocketmq.remoting.RemotingClient;
 import org.apache.rocketmq.remoting.exception.RemotingException;
 import org.apache.rocketmq.remoting.exception.RemotingTimeoutException;
 import org.apache.rocketmq.remoting.netty.NettyClientConfig;
-import org.apache.rocketmq.remoting.netty.NettyRemotingClient;
 import org.apache.rocketmq.remoting.netty.ResponseFuture;
 import org.apache.rocketmq.remoting.protocol.RemotingCommand;
-import org.junit.BeforeClass;
+import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.invocation.InvocationOnMock;
+import org.mockito.junit.MockitoJUnitRunner;
 import org.mockito.stubbing.Answer;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -52,14 +53,14 @@ import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.mock;
 
+@RunWith(MockitoJUnitRunner.class)
 public class MQClientAPIImplTest {
-    private static MQClientAPIImpl mqClientAPI = new MQClientAPIImpl(new NettyClientConfig(), null, null, new ClientConfig());
+    private MQClientAPIImpl mqClientAPI = new MQClientAPIImpl(new NettyClientConfig(), null, null, new ClientConfig());
     @Mock
-    private static RemotingClient remotingClient;
+    private RemotingClient remotingClient;
     @Mock
-    private static DefaultMQProducerImpl defaultMQProducerImpl;
+    private DefaultMQProducerImpl defaultMQProducerImpl;
 
     private String brokerAddr = "127.0.0.1";
     private String brokerName = "DefaultBroker";
@@ -67,10 +68,8 @@ public class MQClientAPIImplTest {
     private static String topic = "FooBar";
     private Message msg = new Message("FooBar", new byte[] {});
 
-    @BeforeClass
-    public static void init() throws Exception {
-        remotingClient = mock(NettyRemotingClient.class);
-        defaultMQProducerImpl = mock(DefaultMQProducerImpl.class);
+    @Before
+    public void init() throws Exception {
         Field field = MQClientAPIImpl.class.getDeclaredField("remotingClient");
         field.setAccessible(true);
         field.set(mqClientAPI, remotingClient);

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/bbcb69ec/client/src/test/java/org/apache/rocketmq/client/impl/factory/MQClientInstanceTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/impl/factory/MQClientInstanceTest.java b/client/src/test/java/org/apache/rocketmq/client/impl/factory/MQClientInstanceTest.java
index b7b07c6..c32cdab 100644
--- a/client/src/test/java/org/apache/rocketmq/client/impl/factory/MQClientInstanceTest.java
+++ b/client/src/test/java/org/apache/rocketmq/client/impl/factory/MQClientInstanceTest.java
@@ -32,7 +32,6 @@ import org.apache.rocketmq.common.protocol.route.TopicRouteData;
 import org.apache.rocketmq.remoting.exception.RemotingException;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.InjectMocks;
 import org.mockito.junit.MockitoJUnitRunner;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -40,9 +39,7 @@ import static org.mockito.Mockito.mock;
 
 @RunWith(MockitoJUnitRunner.class)
 public class MQClientInstanceTest {
-    @InjectMocks
     private MQClientInstance mqClientInstance =  MQClientManager.getInstance().getAndCreateMQClientInstance(new ClientConfig());;
-
     private String topic = "FooBar";
     private String group = "FooBarGroup";
 


[26/28] incubator-rocketmq git commit: [ROCKETMQ-52] Add unit tests for MQClientAPIImpl

Posted by st...@apache.org.
[ROCKETMQ-52] Add unit tests for MQClientAPIImpl


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/032bb2b3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/032bb2b3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/032bb2b3

Branch: refs/heads/ROCKETMQ-54
Commit: 032bb2b32e6fd288063b70690d318628db1a6abb
Parents: ba79706
Author: yukon <yu...@apache.org>
Authored: Tue Jan 17 20:46:16 2017 +0800
Committer: yukon <yu...@apache.org>
Committed: Thu Jan 19 15:45:19 2017 +0800

----------------------------------------------------------------------
 .../client/common/ThreadLocalIndexTest.java     |   1 -
 .../store/LocalFileOffsetStoreTest.java         |   1 -
 .../store/RemoteBrokerOffsetStoreTest.java      |   1 -
 .../client/impl/MQClientAPIImplTest.java        | 236 +++++++++++++++++++
 .../impl/factory/MQClientInstanceTest.java      |   7 +-
 .../remoting/protocol/RemotingCommand.java      |   4 +-
 6 files changed, 238 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/032bb2b3/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
index 350cde7..1be93ce 100644
--- a/client/src/test/java/org/apache/rocketmq/client/common/ThreadLocalIndexTest.java
+++ b/client/src/test/java/org/apache/rocketmq/client/common/ThreadLocalIndexTest.java
@@ -21,7 +21,6 @@ import org.junit.Test;
 import static org.assertj.core.api.Assertions.assertThat;
 
 public class ThreadLocalIndexTest {
-
     @Test
     public void testGetAndIncrement() throws Exception {
         ThreadLocalIndex localIndex = new ThreadLocalIndex();

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/032bb2b3/client/src/test/java/org/apache/rocketmq/client/consumer/store/LocalFileOffsetStoreTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/consumer/store/LocalFileOffsetStoreTest.java b/client/src/test/java/org/apache/rocketmq/client/consumer/store/LocalFileOffsetStoreTest.java
index 58d99d6..0a54855 100644
--- a/client/src/test/java/org/apache/rocketmq/client/consumer/store/LocalFileOffsetStoreTest.java
+++ b/client/src/test/java/org/apache/rocketmq/client/consumer/store/LocalFileOffsetStoreTest.java
@@ -30,7 +30,6 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.when;
 
 public class LocalFileOffsetStoreTest {
-
     @Mock
     private static MQClientInstance mQClientFactory;
     private static String group = "FooBarGroup";

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/032bb2b3/client/src/test/java/org/apache/rocketmq/client/consumer/store/RemoteBrokerOffsetStoreTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/consumer/store/RemoteBrokerOffsetStoreTest.java b/client/src/test/java/org/apache/rocketmq/client/consumer/store/RemoteBrokerOffsetStoreTest.java
index 9a6a4b5..7ecb022 100644
--- a/client/src/test/java/org/apache/rocketmq/client/consumer/store/RemoteBrokerOffsetStoreTest.java
+++ b/client/src/test/java/org/apache/rocketmq/client/consumer/store/RemoteBrokerOffsetStoreTest.java
@@ -43,7 +43,6 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 public class RemoteBrokerOffsetStoreTest {
-
     @Mock
     private static MQClientInstance mQClientFactory;
     @Mock

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/032bb2b3/client/src/test/java/org/apache/rocketmq/client/impl/MQClientAPIImplTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/impl/MQClientAPIImplTest.java b/client/src/test/java/org/apache/rocketmq/client/impl/MQClientAPIImplTest.java
new file mode 100644
index 0000000..cbcf560
--- /dev/null
+++ b/client/src/test/java/org/apache/rocketmq/client/impl/MQClientAPIImplTest.java
@@ -0,0 +1,236 @@
+/*
+ * 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.impl;
+
+import java.lang.reflect.Field;
+import org.apache.rocketmq.client.ClientConfig;
+import org.apache.rocketmq.client.exception.MQBrokerException;
+import org.apache.rocketmq.client.hook.SendMessageContext;
+import org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl;
+import org.apache.rocketmq.client.producer.DefaultMQProducer;
+import org.apache.rocketmq.client.producer.SendCallback;
+import org.apache.rocketmq.client.producer.SendResult;
+import org.apache.rocketmq.client.producer.SendStatus;
+import org.apache.rocketmq.common.message.Message;
+import org.apache.rocketmq.common.message.MessageConst;
+import org.apache.rocketmq.common.protocol.ResponseCode;
+import org.apache.rocketmq.common.protocol.header.SendMessageRequestHeader;
+import org.apache.rocketmq.common.protocol.header.SendMessageResponseHeader;
+import org.apache.rocketmq.remoting.InvokeCallback;
+import org.apache.rocketmq.remoting.RemotingClient;
+import org.apache.rocketmq.remoting.exception.RemotingException;
+import org.apache.rocketmq.remoting.exception.RemotingTimeoutException;
+import org.apache.rocketmq.remoting.netty.NettyClientConfig;
+import org.apache.rocketmq.remoting.netty.NettyRemotingClient;
+import org.apache.rocketmq.remoting.netty.ResponseFuture;
+import org.apache.rocketmq.remoting.protocol.RemotingCommand;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Fail.failBecauseExceptionWasNotThrown;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+
+public class MQClientAPIImplTest {
+    private static MQClientAPIImpl mqClientAPI = new MQClientAPIImpl(new NettyClientConfig(), null, null, new ClientConfig());
+    @Mock
+    private static RemotingClient remotingClient;
+    @Mock
+    private static DefaultMQProducerImpl defaultMQProducerImpl;
+
+    private String brokerAddr = "127.0.0.1";
+    private String brokerName = "DefaultBroker";
+    private static String group = "FooBarGroup";
+    private static String topic = "FooBar";
+    private Message msg = new Message("FooBar", new byte[] {});
+
+    @BeforeClass
+    public static void init() throws Exception {
+        remotingClient = mock(NettyRemotingClient.class);
+        defaultMQProducerImpl = mock(DefaultMQProducerImpl.class);
+        Field field = MQClientAPIImpl.class.getDeclaredField("remotingClient");
+        field.setAccessible(true);
+        field.set(mqClientAPI, remotingClient);
+    }
+
+    @Test
+    public void testSendMessageOneWay_Success() throws RemotingException, InterruptedException, MQBrokerException {
+        doNothing().when(remotingClient).invokeOneway(anyString(), any(RemotingCommand.class), anyLong());
+        SendResult sendResult = mqClientAPI.sendMessage(brokerAddr, brokerName, msg, new SendMessageRequestHeader(),
+            3 * 1000, CommunicationMode.ONEWAY, new SendMessageContext(), defaultMQProducerImpl);
+        assertThat(sendResult).isNull();
+    }
+
+    @Test
+    public void testSendMessageOneWay_WithException() throws RemotingException, InterruptedException, MQBrokerException {
+        doThrow(new RemotingTimeoutException("Remoting Exception in Test")).when(remotingClient).invokeOneway(anyString(), any(RemotingCommand.class), anyLong());
+        try {
+            mqClientAPI.sendMessage(brokerAddr, brokerName, msg, new SendMessageRequestHeader(),
+                3 * 1000, CommunicationMode.ONEWAY, new SendMessageContext(), defaultMQProducerImpl);
+            failBecauseExceptionWasNotThrown(RemotingException.class);
+        } catch (RemotingException e) {
+            assertThat(e).hasMessage("Remoting Exception in Test");
+        }
+
+        doThrow(new InterruptedException("Interrupted Exception in Test")).when(remotingClient).invokeOneway(anyString(), any(RemotingCommand.class), anyLong());
+        try {
+            mqClientAPI.sendMessage(brokerAddr, brokerName, msg, new SendMessageRequestHeader(),
+                3 * 1000, CommunicationMode.ONEWAY, new SendMessageContext(), defaultMQProducerImpl);
+            failBecauseExceptionWasNotThrown(InterruptedException.class);
+        } catch (InterruptedException e) {
+            assertThat(e).hasMessage("Interrupted Exception in Test");
+        }
+    }
+
+    @Test
+    public void testSendMessageSync_Success() throws InterruptedException, RemotingException, MQBrokerException {
+        doAnswer(new Answer() {
+            @Override public Object answer(InvocationOnMock mock) throws Throwable {
+                RemotingCommand request = mock.getArgument(1);
+                return createSuccessResponse(request);
+            }
+        }).when(remotingClient).invokeSync(anyString(), any(RemotingCommand.class), anyLong());
+
+        SendMessageRequestHeader requestHeader = createSendMessageRequestHeader();
+
+        SendResult sendResult = mqClientAPI.sendMessage(brokerAddr, brokerName, msg, requestHeader,
+            3 * 1000, CommunicationMode.SYNC, new SendMessageContext(), defaultMQProducerImpl);
+
+        assertThat(sendResult.getSendStatus()).isEqualTo(SendStatus.SEND_OK);
+        assertThat(sendResult.getOffsetMsgId()).isEqualTo("123");
+        assertThat(sendResult.getQueueOffset()).isEqualTo(123L);
+        assertThat(sendResult.getMessageQueue().getQueueId()).isEqualTo(1);
+    }
+
+    @Test
+    public void testSendMessageSync_WithException() throws InterruptedException, RemotingException, MQBrokerException {
+        doAnswer(new Answer() {
+            @Override public Object answer(InvocationOnMock mock) throws Throwable {
+                RemotingCommand request = mock.getArgument(1);
+                RemotingCommand response = RemotingCommand.createResponseCommand(SendMessageResponseHeader.class);
+                response.setCode(ResponseCode.SYSTEM_ERROR);
+                response.setOpaque(request.getOpaque());
+                response.setRemark("Broker is broken.");
+                return response;
+            }
+        }).when(remotingClient).invokeSync(anyString(), any(RemotingCommand.class), anyLong());
+
+        SendMessageRequestHeader requestHeader = createSendMessageRequestHeader();
+
+        try {
+            mqClientAPI.sendMessage(brokerAddr, brokerName, msg, requestHeader,
+                3 * 1000, CommunicationMode.SYNC, new SendMessageContext(), defaultMQProducerImpl);
+            failBecauseExceptionWasNotThrown(MQBrokerException.class);
+        } catch (MQBrokerException e) {
+            assertThat(e).hasMessageContaining("Broker is broken.");
+        }
+    }
+
+    @Test
+    public void testSendMessageAsync_Success() throws RemotingException, InterruptedException, MQBrokerException {
+        doNothing().when(remotingClient).invokeAsync(anyString(), any(RemotingCommand.class), anyLong(), any(InvokeCallback.class));
+        SendResult sendResult = mqClientAPI.sendMessage(brokerAddr, brokerName, msg, new SendMessageRequestHeader(),
+            3 * 1000, CommunicationMode.ASYNC, new SendMessageContext(), defaultMQProducerImpl);
+        assertThat(sendResult).isNull();
+
+        doAnswer(new Answer() {
+            @Override public Object answer(InvocationOnMock mock) throws Throwable {
+                InvokeCallback callback = mock.getArgument(3);
+                RemotingCommand request = mock.getArgument(1);
+                ResponseFuture responseFuture = new ResponseFuture(request.getOpaque(), 3 * 1000, null, null);
+                responseFuture.setResponseCommand(createSuccessResponse(request));
+                callback.operationComplete(responseFuture);
+                return null;
+            }
+        }).when(remotingClient).invokeAsync(anyString(), any(RemotingCommand.class), anyLong(), any(InvokeCallback.class));
+        SendMessageContext sendMessageContext = new SendMessageContext();
+        sendMessageContext.setProducer(new DefaultMQProducerImpl(new DefaultMQProducer()));
+        mqClientAPI.sendMessage(brokerAddr, brokerName, msg, new SendMessageRequestHeader(), 3 * 1000, CommunicationMode.ASYNC,
+            new SendCallback() {
+                @Override public void onSuccess(SendResult sendResult) {
+                    assertThat(sendResult.getSendStatus()).isEqualTo(SendStatus.SEND_OK);
+                    assertThat(sendResult.getOffsetMsgId()).isEqualTo("123");
+                    assertThat(sendResult.getQueueOffset()).isEqualTo(123L);
+                    assertThat(sendResult.getMessageQueue().getQueueId()).isEqualTo(1);
+                }
+
+                @Override public void onException(Throwable e) {
+                }
+            },
+            null, null, 0, sendMessageContext, defaultMQProducerImpl);
+    }
+
+    @Test
+    public void testSendMessageAsync_WithException() throws RemotingException, InterruptedException, MQBrokerException {
+        doThrow(new RemotingTimeoutException("Remoting Exception in Test")).when(remotingClient)
+            .invokeAsync(anyString(), any(RemotingCommand.class), anyLong(), any(InvokeCallback.class));
+        try {
+            mqClientAPI.sendMessage(brokerAddr, brokerName, msg, new SendMessageRequestHeader(),
+                3 * 1000, CommunicationMode.ASYNC, new SendMessageContext(), defaultMQProducerImpl);
+            failBecauseExceptionWasNotThrown(RemotingException.class);
+        } catch (RemotingException e) {
+            assertThat(e).hasMessage("Remoting Exception in Test");
+        }
+
+        doThrow(new InterruptedException("Interrupted Exception in Test")).when(remotingClient)
+            .invokeAsync(anyString(), any(RemotingCommand.class), anyLong(), any(InvokeCallback.class));
+        try {
+            mqClientAPI.sendMessage(brokerAddr, brokerName, msg, new SendMessageRequestHeader(),
+                3 * 1000, CommunicationMode.ASYNC, new SendMessageContext(), defaultMQProducerImpl);
+            failBecauseExceptionWasNotThrown(InterruptedException.class);
+        } catch (InterruptedException e) {
+            assertThat(e).hasMessage("Interrupted Exception in Test");
+        }
+    }
+
+    private RemotingCommand createSuccessResponse(RemotingCommand request) {
+        RemotingCommand response = RemotingCommand.createResponseCommand(SendMessageResponseHeader.class);
+        response.setCode(ResponseCode.SUCCESS);
+        response.setOpaque(request.getOpaque());
+
+        SendMessageResponseHeader responseHeader = (SendMessageResponseHeader) response.readCustomHeader();
+        responseHeader.setMsgId("123");
+        responseHeader.setQueueId(1);
+        responseHeader.setQueueOffset(123L);
+
+        response.addExtField(MessageConst.PROPERTY_MSG_REGION, "RegionHZ");
+        response.addExtField(MessageConst.PROPERTY_TRACE_SWITCH, "true");
+        response.addExtField("queueId", String.valueOf(responseHeader.getQueueId()));
+        response.addExtField("msgId", responseHeader.getMsgId());
+        response.addExtField("queueOffset", String.valueOf(responseHeader.getQueueOffset()));
+        return response;
+    }
+
+    private SendMessageRequestHeader createSendMessageRequestHeader() {
+        SendMessageRequestHeader requestHeader = new SendMessageRequestHeader();
+        requestHeader.setBornTimestamp(System.currentTimeMillis());
+        requestHeader.setTopic(topic);
+        requestHeader.setProducerGroup(group);
+        requestHeader.setQueueId(1);
+        requestHeader.setMaxReconsumeTimes(10);
+        return requestHeader;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/032bb2b3/client/src/test/java/org/apache/rocketmq/client/impl/factory/MQClientInstanceTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/impl/factory/MQClientInstanceTest.java b/client/src/test/java/org/apache/rocketmq/client/impl/factory/MQClientInstanceTest.java
index 956cdd9..b7b07c6 100644
--- a/client/src/test/java/org/apache/rocketmq/client/impl/factory/MQClientInstanceTest.java
+++ b/client/src/test/java/org/apache/rocketmq/client/impl/factory/MQClientInstanceTest.java
@@ -22,7 +22,6 @@ import java.util.List;
 import org.apache.rocketmq.client.ClientConfig;
 import org.apache.rocketmq.client.admin.MQAdminExtInner;
 import org.apache.rocketmq.client.exception.MQBrokerException;
-import org.apache.rocketmq.client.impl.MQClientAPIImpl;
 import org.apache.rocketmq.client.impl.MQClientManager;
 import org.apache.rocketmq.client.impl.consumer.MQConsumerInner;
 import org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl;
@@ -34,7 +33,6 @@ import org.apache.rocketmq.remoting.exception.RemotingException;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
-import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -42,11 +40,8 @@ import static org.mockito.Mockito.mock;
 
 @RunWith(MockitoJUnitRunner.class)
 public class MQClientInstanceTest {
-
-    @Mock
-    private static MQClientAPIImpl mqClientAPI;
     @InjectMocks
-    private static MQClientInstance mqClientInstance =  MQClientManager.getInstance().getAndCreateMQClientInstance(new ClientConfig());;
+    private MQClientInstance mqClientInstance =  MQClientManager.getInstance().getAndCreateMQClientInstance(new ClientConfig());;
 
     private String topic = "FooBar";
     private String group = "FooBarGroup";

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/032bb2b3/remoting/src/main/java/org/apache/rocketmq/remoting/protocol/RemotingCommand.java
----------------------------------------------------------------------
diff --git a/remoting/src/main/java/org/apache/rocketmq/remoting/protocol/RemotingCommand.java b/remoting/src/main/java/org/apache/rocketmq/remoting/protocol/RemotingCommand.java
index 46ca8dd..99c13fb 100644
--- a/remoting/src/main/java/org/apache/rocketmq/remoting/protocol/RemotingCommand.java
+++ b/remoting/src/main/java/org/apache/rocketmq/remoting/protocol/RemotingCommand.java
@@ -114,9 +114,7 @@ public class RemotingCommand {
     }
 
     public static RemotingCommand createResponseCommand(Class<? extends CommandCustomHeader> classHeader) {
-        RemotingCommand cmd = createResponseCommand(RemotingSysResponseCode.SYSTEM_ERROR, "not set any response code", classHeader);
-
-        return cmd;
+        return createResponseCommand(RemotingSysResponseCode.SYSTEM_ERROR, "not set any response code", classHeader);
     }
 
     /**


[16/28] incubator-rocketmq git commit: [ROCKETMQ-52] Add unit tests for Validators and ThreadLocalIndex

Posted by st...@apache.org.
[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-54
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


[28/28] incubator-rocketmq git commit: [ROCKETMQ-54] resolve conflict

Posted by st...@apache.org.
[ROCKETMQ-54] resolve conflict


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/a06a5176
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/a06a5176
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/a06a5176

Branch: refs/heads/ROCKETMQ-54
Commit: a06a517635d9c41711644caa8eed7ac46760ea5f
Parents: 3884370 4291348
Author: stevenschew <st...@apache.org>
Authored: Thu Jan 19 20:45:32 2017 +0800
Committer: stevenschew <st...@apache.org>
Committed: Thu Jan 19 20:45:32 2017 +0800

----------------------------------------------------------------------
 .travis.yml                                     |  45 +++-
 README.md                                       |   2 +-
 .../rocketmq/broker/BrokerTestHarness.java      |  69 ------
 .../broker/api/BrokerFastFailureTest.java       |  61 -----
 .../rocketmq/broker/api/SendMessageTest.java    |  79 ------
 .../offset/ConsumerOffsetManagerTest.java       |  61 -----
 .../broker/topic/TopicConfigManagerTest.java    |  60 -----
 .../consumer/DefaultMQPullConsumerTest.java     | 152 ++++++++++++
 .../consumer/DefaultMQPushConsumerTest.java     | 178 +++++++++++++
 .../store/LocalFileOffsetStoreTest.java         |   3 +-
 .../impl/factory/MQClientInstanceTest.java      |   6 +-
 .../client/producer/DefaultMQProducerTest.java  | 248 +++++++++++++++++++
 pom.xml                                         |  76 +++++-
 13 files changed, 696 insertions(+), 344 deletions(-)
----------------------------------------------------------------------



[12/28] incubator-rocketmq git commit: Polish travis-ci for jacoco

Posted by st...@apache.org.
Polish travis-ci for jacoco


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/3e3988d6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/3e3988d6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/3e3988d6

Branch: refs/heads/ROCKETMQ-54
Commit: 3e3988d612ce128e560719230988fd06aaad3012
Parents: 02f8b14
Author: vongosling <vo...@apache.org>
Authored: Wed Jan 18 23:10:33 2017 +0800
Committer: vongosling <vo...@apache.org>
Committed: Wed Jan 18 23:10:33 2017 +0800

----------------------------------------------------------------------
 pom.xml | 48 ++++++++++++++++++++++++++++++------------------
 1 file changed, 30 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/3e3988d6/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index e9ab2ea..2966541 100644
--- a/pom.xml
+++ b/pom.xml
@@ -154,21 +154,16 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 
-        <!--maven properties -->
+        <!-- Maven properties -->
         <maven.test.skip>false</maven.test.skip>
         <maven.javadoc.skip>true</maven.javadoc.skip>
-        <!-- compiler settings properties -->
+        <!-- Compiler settings properties -->
         <maven.compiler.source>1.7</maven.compiler.source>
         <maven.compiler.target>1.7</maven.compiler.target>
 
-        <!-- BEFORE SonarQube 4.4.0 - the destination file for the code coverage report has to be set to the same value
-             in the parent pom and in each module pom. Then JaCoCo will add up information in
-             the same report, so that, it will give the cross-module code coverage. -->
+        <!-- Overwritten by the test configuration,otherwise the JaCoCo agent cannot be attached.Details see http://www.eclemma.org/jacoco/trunk/doc/prepare-agent-mojo.html -->
+        <argLine>-Xms512m -Xmx1024m</argLine>
         <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
-        <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
-        <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
-        <sonar.jacoco.itReportPath>${project.basedir}/../target/jacoco-it.exec</sonar.jacoco.itReportPath>
-        <sonar.language>java</sonar.language>
         <!-- URL of the ASF SonarQube server -->
         <sonar.host.url>https://builds.apache.org/analysis</sonar.host.url>
         <!-- Exclude all generated code -->
@@ -245,13 +240,22 @@
                 <artifactId>maven-surefire-plugin</artifactId>
                 <version>2.19.1</version>
                 <configuration>
-                    <argLine>-Xms512m -Xmx1024m</argLine>
+                    <forkCount>1</forkCount>
+                    <reuseForks>true</reuseForks>
                     <includes>
                         <include>**/*Test.java</include>
                     </includes>
                 </configuration>
             </plugin>
             <plugin>
+                <artifactId>maven-failsafe-plugin</artifactId>
+                <version>2.19.1</version>
+                <configuration>
+                    <forkCount>1</forkCount>
+                    <reuseForks>true</reuseForks>
+                </configuration>
+            </plugin>
+            <plugin>
                 <artifactId>maven-javadoc-plugin</artifactId>
                 <version>2.10.4</version>
                 <configuration>
@@ -341,30 +345,38 @@
             <plugin>
                 <groupId>org.jacoco</groupId>
                 <artifactId>jacoco-maven-plugin</artifactId>
-                <version>0.7.6.201602180812</version>
-                <configuration>
-                    <append>true</append>
-                </configuration>
+                <version>0.7.8</version>
                 <executions>
                     <execution>
-                        <id>agent-for-ut</id>
+                        <id>default-prepare-agent</id>
                         <goals>
                             <goal>prepare-agent</goal>
                         </goals>
                     </execution>
                     <execution>
-                        <id>agent-for-it</id>
+                        <id>default-prepare-agent-integration</id>
                         <goals>
                             <goal>prepare-agent-integration</goal>
                         </goals>
                     </execution>
                     <execution>
-                        <id>report</id>
-                        <phase>prepare-package</phase>
+                        <id>default-report</id>
                         <goals>
                             <goal>report</goal>
                         </goals>
                     </execution>
+                    <execution>
+                        <id>default-report-integration</id>
+                        <goals>
+                            <goal>report-integration</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>default-check</id>
+                        <goals>
+                            <goal>check</goal>
+                        </goals>
+                    </execution>
                 </executions>
             </plugin>
             <plugin>


[08/28] incubator-rocketmq git commit: Bugfix for valid yaml

Posted by st...@apache.org.
Bugfix for valid yaml


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/3daf24e8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/3daf24e8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/3daf24e8

Branch: refs/heads/ROCKETMQ-54
Commit: 3daf24e8266e0e0d334b389f0ab452566acd6b12
Parents: 2cee029
Author: vongosling <vo...@apache.org>
Authored: Wed Jan 18 11:06:38 2017 +0800
Committer: vongosling <vo...@apache.org>
Committed: Wed Jan 18 11:06:38 2017 +0800

----------------------------------------------------------------------
 .travis.yml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/3daf24e8/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index c41d858..4d33a4e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,8 +1,8 @@
 notifications:
   email:
-    - dev@rocketmq.incubator.apache.org
-    on_success: change
-    on_failure: always
+  - dev@rocketmq.incubator.apache.org
+  on_success: change
+  on_failure: always
 language: java
 matrix:
   include:


[24/28] incubator-rocketmq git commit: [ROCKETMQ-52] Add unit tests for DefaultMQPullConsumer

Posted by st...@apache.org.
[ROCKETMQ-52] Add unit tests for DefaultMQPullConsumer


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/acf9bc37
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/acf9bc37
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/acf9bc37

Branch: refs/heads/ROCKETMQ-54
Commit: acf9bc37ea987456e997259c496905e44cd71461
Parents: c549854
Author: yukon <yu...@apache.org>
Authored: Thu Jan 19 10:43:39 2017 +0800
Committer: yukon <yu...@apache.org>
Committed: Thu Jan 19 15:45:19 2017 +0800

----------------------------------------------------------------------
 .../consumer/DefaultMQPullConsumerTest.java     | 152 +++++++++++
 .../impl/producer/DefaultMQProducerTest.java    | 250 -------------------
 .../client/producer/DefaultMQProducerTest.java  | 248 ++++++++++++++++++
 3 files changed, 400 insertions(+), 250 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/acf9bc37/client/src/test/java/org/apache/rocketmq/client/consumer/DefaultMQPullConsumerTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/consumer/DefaultMQPullConsumerTest.java b/client/src/test/java/org/apache/rocketmq/client/consumer/DefaultMQPullConsumerTest.java
new file mode 100644
index 0000000..6dc4ed8
--- /dev/null
+++ b/client/src/test/java/org/apache/rocketmq/client/consumer/DefaultMQPullConsumerTest.java
@@ -0,0 +1,152 @@
+/*
+ * 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.consumer;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import org.apache.rocketmq.client.ClientConfig;
+import org.apache.rocketmq.client.impl.CommunicationMode;
+import org.apache.rocketmq.client.impl.FindBrokerResult;
+import org.apache.rocketmq.client.impl.MQClientAPIImpl;
+import org.apache.rocketmq.client.impl.MQClientManager;
+import org.apache.rocketmq.client.impl.consumer.PullAPIWrapper;
+import org.apache.rocketmq.client.impl.consumer.PullResultExt;
+import org.apache.rocketmq.client.impl.factory.MQClientInstance;
+import org.apache.rocketmq.common.message.MessageExt;
+import org.apache.rocketmq.common.message.MessageQueue;
+import org.apache.rocketmq.common.protocol.header.PullMessageRequestHeader;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.stubbing.Answer;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.nullable;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.class)
+public class DefaultMQPullConsumerTest {
+    @Spy
+    private MQClientInstance mQClientFactory = MQClientManager.getInstance().getAndCreateMQClientInstance(new ClientConfig());
+    @Mock
+    private MQClientAPIImpl mQClientAPIImpl;
+    private DefaultMQPullConsumer pullConsumer;
+    private String consumerGroup = "FooBarGroup";
+    private String topic = "FooBar";
+    private String brokerName = "BrokerA";
+
+    @Before
+    public void init() throws Exception {
+        pullConsumer = new DefaultMQPullConsumer(consumerGroup);
+        pullConsumer.setNamesrvAddr("127.0.0.1:9876");
+        pullConsumer.start();
+        PullAPIWrapper pullAPIWrapper = pullConsumer.getDefaultMQPullConsumerImpl().getPullAPIWrapper();
+        Field field = PullAPIWrapper.class.getDeclaredField("mQClientFactory");
+        field.setAccessible(true);
+        field.set(pullAPIWrapper, mQClientFactory);
+
+        field = MQClientInstance.class.getDeclaredField("mQClientAPIImpl");
+        field.setAccessible(true);
+        field.set(mQClientFactory, mQClientAPIImpl);
+
+        when(mQClientFactory.findBrokerAddressInSubscribe(anyString(), anyLong(), anyBoolean())).thenReturn(new FindBrokerResult("127.0.0.1:10911", false));
+    }
+
+    @After
+    public void terminate() {
+        pullConsumer.shutdown();
+    }
+
+    @Test
+    public void testPullMessage_Success() throws Exception {
+        doAnswer(new Answer() {
+            @Override public Object answer(InvocationOnMock mock) throws Throwable {
+                PullMessageRequestHeader requestHeader = mock.getArgument(1);
+                return createPullResult(requestHeader, PullStatus.FOUND, Collections.singletonList(new MessageExt()));
+            }
+        }).when(mQClientAPIImpl).pullMessage(anyString(), any(PullMessageRequestHeader.class), anyLong(), any(CommunicationMode.class), nullable(PullCallback.class));
+
+        MessageQueue messageQueue = new MessageQueue(topic, brokerName, 0);
+        PullResult pullResult = pullConsumer.pull(messageQueue, "*", 1024, 3);
+        assertThat(pullResult).isNotNull();
+        assertThat(pullResult.getPullStatus()).isEqualTo(PullStatus.FOUND);
+        assertThat(pullResult.getNextBeginOffset()).isEqualTo(1024 + 1);
+        assertThat(pullResult.getMinOffset()).isEqualTo(123);
+        assertThat(pullResult.getMaxOffset()).isEqualTo(2048);
+        assertThat(pullResult.getMsgFoundList()).isEqualTo(new ArrayList<>());
+    }
+
+    @Test
+    public void testPullMessage_NotFound() throws Exception{
+        doAnswer(new Answer() {
+            @Override public Object answer(InvocationOnMock mock) throws Throwable {
+                PullMessageRequestHeader requestHeader = mock.getArgument(1);
+                return createPullResult(requestHeader, PullStatus.NO_NEW_MSG, new ArrayList<MessageExt>());
+            }
+        }).when(mQClientAPIImpl).pullMessage(anyString(), any(PullMessageRequestHeader.class), anyLong(), any(CommunicationMode.class), nullable(PullCallback.class));
+
+        MessageQueue messageQueue = new MessageQueue(topic, brokerName, 0);
+        PullResult pullResult = pullConsumer.pull(messageQueue, "*", 1024, 3);
+        assertThat(pullResult.getPullStatus()).isEqualTo(PullStatus.NO_NEW_MSG);
+    }
+
+    @Test
+    public void testPullMessageAsync_Success() throws Exception {
+        doAnswer(new Answer() {
+            @Override public Object answer(InvocationOnMock mock) throws Throwable {
+                PullMessageRequestHeader requestHeader = mock.getArgument(1);
+                PullResult pullResult = createPullResult(requestHeader, PullStatus.FOUND, Collections.singletonList(new MessageExt()));
+
+                PullCallback pullCallback = mock.getArgument(4);
+                pullCallback.onSuccess(pullResult);
+                return null;
+            }
+        }).when(mQClientAPIImpl).pullMessage(anyString(), any(PullMessageRequestHeader.class), anyLong(), any(CommunicationMode.class), nullable(PullCallback.class));
+
+        MessageQueue messageQueue = new MessageQueue(topic, brokerName, 0);
+        pullConsumer.pull(messageQueue, "*", 1024, 3, new PullCallback() {
+            @Override public void onSuccess(PullResult pullResult) {
+                assertThat(pullResult).isNotNull();
+                assertThat(pullResult.getPullStatus()).isEqualTo(PullStatus.FOUND);
+                assertThat(pullResult.getNextBeginOffset()).isEqualTo(1024 + 1);
+                assertThat(pullResult.getMinOffset()).isEqualTo(123);
+                assertThat(pullResult.getMaxOffset()).isEqualTo(2048);
+                assertThat(pullResult.getMsgFoundList()).isEqualTo(new ArrayList<>());
+            }
+
+            @Override public void onException(Throwable e) {
+
+            }
+        });
+    }
+
+    private PullResultExt createPullResult(PullMessageRequestHeader requestHeader, PullStatus pullStatus, List<MessageExt> messageExtList) {
+        return new PullResultExt(pullStatus, requestHeader.getQueueOffset() + messageExtList.size(), 123, 2048, messageExtList, 0, new byte[] {});
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/acf9bc37/client/src/test/java/org/apache/rocketmq/client/impl/producer/DefaultMQProducerTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/impl/producer/DefaultMQProducerTest.java b/client/src/test/java/org/apache/rocketmq/client/impl/producer/DefaultMQProducerTest.java
deleted file mode 100644
index 5946ea8..0000000
--- a/client/src/test/java/org/apache/rocketmq/client/impl/producer/DefaultMQProducerTest.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * 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.impl.producer;
-
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.concurrent.CountDownLatch;
-import org.apache.rocketmq.client.ClientConfig;
-import org.apache.rocketmq.client.exception.MQBrokerException;
-import org.apache.rocketmq.client.exception.MQClientException;
-import org.apache.rocketmq.client.hook.SendMessageContext;
-import org.apache.rocketmq.client.hook.SendMessageHook;
-import org.apache.rocketmq.client.impl.CommunicationMode;
-import org.apache.rocketmq.client.impl.MQClientAPIImpl;
-import org.apache.rocketmq.client.impl.MQClientManager;
-import org.apache.rocketmq.client.impl.factory.MQClientInstance;
-import org.apache.rocketmq.client.producer.DefaultMQProducer;
-import org.apache.rocketmq.client.producer.SendCallback;
-import org.apache.rocketmq.client.producer.SendResult;
-import org.apache.rocketmq.client.producer.SendStatus;
-import org.apache.rocketmq.common.message.Message;
-import org.apache.rocketmq.common.protocol.header.SendMessageRequestHeader;
-import org.apache.rocketmq.common.protocol.route.BrokerData;
-import org.apache.rocketmq.common.protocol.route.QueueData;
-import org.apache.rocketmq.common.protocol.route.TopicRouteData;
-import org.apache.rocketmq.remoting.exception.RemotingException;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.Spy;
-import org.mockito.junit.MockitoJUnitRunner;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Fail.failBecauseExceptionWasNotThrown;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.nullable;
-import static org.mockito.Mockito.when;
-
-@RunWith(MockitoJUnitRunner.class)
-public class DefaultMQProducerTest {
-    @Spy
-    private MQClientInstance mQClientFactory = MQClientManager.getInstance().getAndCreateMQClientInstance(new ClientConfig());
-    @Mock
-    private MQClientAPIImpl mQClientAPIImpl;
-
-    private DefaultMQProducer producer;
-    private Message message;
-    private Message zeroMsg;
-    private String topic = "FooBar";
-    private String producerGroupPrefix = "FooBar_PID";
-
-    @Before
-    public void init() throws Exception {
-        String producerGroupTemp = producerGroupPrefix + System.currentTimeMillis();
-        producer = new DefaultMQProducer(producerGroupTemp);
-        producer.setNamesrvAddr("127.0.0.1:9876");
-        message = new Message(topic, new byte[] {'a'});
-        zeroMsg = new Message(topic, new byte[] {});
-
-        producer.start();
-
-        Field field = DefaultMQProducerImpl.class.getDeclaredField("mQClientFactory");
-        field.setAccessible(true);
-        field.set(producer.getDefaultMQProducerImpl(), mQClientFactory);
-
-        field = MQClientInstance.class.getDeclaredField("mQClientAPIImpl");
-        field.setAccessible(true);
-        field.set(mQClientFactory, mQClientAPIImpl);
-
-        producer.getDefaultMQProducerImpl().getmQClientFactory().registerProducer(producerGroupTemp, producer.getDefaultMQProducerImpl());
-
-        when(mQClientAPIImpl.sendMessage(anyString(), anyString(), any(Message.class), any(SendMessageRequestHeader.class), anyLong(), any(CommunicationMode.class),
-            nullable(SendMessageContext.class), any(DefaultMQProducerImpl.class))).thenCallRealMethod();
-        when(mQClientAPIImpl.sendMessage(anyString(), anyString(), any(Message.class), any(SendMessageRequestHeader.class), anyLong(), any(CommunicationMode.class),
-            nullable(SendCallback.class), nullable(TopicPublishInfo.class), nullable(MQClientInstance.class), anyInt(), nullable(SendMessageContext.class), any(DefaultMQProducerImpl.class)))
-            .thenReturn(createSendResult(SendStatus.SEND_OK));
-    }
-
-    @After
-    public void terminate() {
-        producer.shutdown();
-    }
-
-    @Test
-    public void testSendMessage_ZeroMessage() throws InterruptedException, RemotingException, MQBrokerException {
-        try {
-            producer.send(zeroMsg);
-            failBecauseExceptionWasNotThrown(MQClientException.class);
-        } catch (MQClientException e) {
-            assertThat(e).hasMessageContaining("message body length is zero");
-        }
-    }
-
-    @Test
-    public void testSendMessage_NoNameSrv() throws RemotingException, InterruptedException, MQBrokerException {
-        when(mQClientAPIImpl.getNameServerAddressList()).thenReturn(new ArrayList<String>());
-        try {
-            producer.send(message);
-            failBecauseExceptionWasNotThrown(MQClientException.class);
-        } catch (MQClientException e) {
-            assertThat(e).hasMessageContaining("No name server address");
-        }
-    }
-
-    @Test
-    public void testSendMessage_NoRoute() throws RemotingException, InterruptedException, MQBrokerException {
-        when(mQClientAPIImpl.getNameServerAddressList()).thenReturn(Collections.singletonList("127.0.0.1:9876"));
-        try {
-            producer.send(message);
-            failBecauseExceptionWasNotThrown(MQClientException.class);
-        } catch (MQClientException e) {
-            assertThat(e).hasMessageContaining("No route info of this topic");
-        }
-    }
-
-    @Test
-    public void testSendMessageSync_Success() throws RemotingException, InterruptedException, MQBrokerException, MQClientException {
-        when(mQClientAPIImpl.getTopicRouteInfoFromNameServer(anyString(), anyLong())).thenReturn(createTopicRoute());
-        SendResult sendResult = producer.send(message);
-
-        assertThat(sendResult.getSendStatus()).isEqualTo(SendStatus.SEND_OK);
-        assertThat(sendResult.getOffsetMsgId()).isEqualTo("123");
-        assertThat(sendResult.getQueueOffset()).isEqualTo(456L);
-    }
-
-    @Test
-    public void testSendMessageSync_SuccessWithHook() throws Throwable {
-        when(mQClientAPIImpl.getTopicRouteInfoFromNameServer(anyString(), anyLong())).thenReturn(createTopicRoute());
-        final Throwable[] assertionErrors = new Throwable[1];
-        final CountDownLatch countDownLatch = new CountDownLatch(2);
-        producer.getDefaultMQProducerImpl().registerSendMessageHook(new SendMessageHook() {
-            @Override public String hookName() {
-                return "TestHook";
-            }
-
-            @Override public void sendMessageBefore(final SendMessageContext context) {
-                assertionErrors[0] = assertInOtherThread(new Runnable() {
-                    @Override public void run() {
-                        assertThat(context.getMessage()).isEqualTo(message);
-                        assertThat(context.getProducer()).isEqualTo(producer);
-                        assertThat(context.getCommunicationMode()).isEqualTo(CommunicationMode.SYNC);
-                        assertThat(context.getSendResult()).isNull();
-                    }
-                });
-                countDownLatch.countDown();
-            }
-
-            @Override public void sendMessageAfter(final SendMessageContext context) {
-                assertionErrors[0] = assertInOtherThread(new Runnable() {
-                    @Override public void run() {
-                        assertThat(context.getMessage()).isEqualTo(message);
-                        assertThat(context.getProducer()).isEqualTo(producer.getDefaultMQProducerImpl());
-                        assertThat(context.getCommunicationMode()).isEqualTo(CommunicationMode.SYNC);
-                        assertThat(context.getSendResult()).isNotNull();
-                    }
-                });
-                countDownLatch.countDown();
-            }
-        });
-        SendResult sendResult = producer.send(message);
-
-        assertThat(sendResult.getSendStatus()).isEqualTo(SendStatus.SEND_OK);
-        assertThat(sendResult.getOffsetMsgId()).isEqualTo("123");
-        assertThat(sendResult.getQueueOffset()).isEqualTo(456L);
-
-        countDownLatch.await();
-
-        if (assertionErrors[0] != null) {
-            throw assertionErrors[0];
-        }
-    }
-
-    private TopicRouteData createTopicRoute() {
-        TopicRouteData topicRouteData = new TopicRouteData();
-
-        topicRouteData.setFilterServerTable(new HashMap<String, List<String>>());
-        List<BrokerData> brokerDataList = new ArrayList<>();
-        BrokerData brokerData = new BrokerData();
-        brokerData.setBrokerName("BrokerA");
-        brokerData.setCluster("DefaultCluster");
-        HashMap<Long, String> brokerAddrs = new HashMap<>();
-        brokerAddrs.put(0L, "127.0.0.1:10911");
-        brokerData.setBrokerAddrs(brokerAddrs);
-        brokerDataList.add(brokerData);
-        topicRouteData.setBrokerDatas(brokerDataList);
-
-        List<QueueData> queueDataList = new ArrayList<>();
-        QueueData queueData = new QueueData();
-        queueData.setBrokerName("BrokerA");
-        queueData.setPerm(6);
-        queueData.setReadQueueNums(3);
-        queueData.setWriteQueueNums(4);
-        queueData.setTopicSynFlag(0);
-        queueDataList.add(queueData);
-        topicRouteData.setQueueDatas(queueDataList);
-        return topicRouteData;
-    }
-
-    private SendResult createSendResult(SendStatus sendStatus) {
-        SendResult sendResult = new SendResult();
-        sendResult.setMsgId("123");
-        sendResult.setOffsetMsgId("123");
-        sendResult.setQueueOffset(456);
-        sendResult.setSendStatus(sendStatus);
-        sendResult.setRegionId("HZ");
-        return sendResult;
-    }
-
-    private Throwable assertInOtherThread(final Runnable runnable) {
-        final Throwable[] assertionErrors = new Throwable[1];
-        Thread thread = new Thread(new Runnable() {
-            @Override public void run() {
-                try {
-                    runnable.run();
-                } catch (AssertionError e) {
-                    assertionErrors[0] = e;
-                }
-            }
-        });
-        thread.start();
-        try {
-            thread.join();
-        } catch (InterruptedException e) {
-            assertionErrors[0] = e;
-        }
-        return assertionErrors[0];
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/acf9bc37/client/src/test/java/org/apache/rocketmq/client/producer/DefaultMQProducerTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/producer/DefaultMQProducerTest.java b/client/src/test/java/org/apache/rocketmq/client/producer/DefaultMQProducerTest.java
new file mode 100644
index 0000000..bbaff00
--- /dev/null
+++ b/client/src/test/java/org/apache/rocketmq/client/producer/DefaultMQProducerTest.java
@@ -0,0 +1,248 @@
+/*
+ * 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.producer;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import org.apache.rocketmq.client.ClientConfig;
+import org.apache.rocketmq.client.exception.MQBrokerException;
+import org.apache.rocketmq.client.exception.MQClientException;
+import org.apache.rocketmq.client.hook.SendMessageContext;
+import org.apache.rocketmq.client.hook.SendMessageHook;
+import org.apache.rocketmq.client.impl.CommunicationMode;
+import org.apache.rocketmq.client.impl.MQClientAPIImpl;
+import org.apache.rocketmq.client.impl.MQClientManager;
+import org.apache.rocketmq.client.impl.factory.MQClientInstance;
+import org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl;
+import org.apache.rocketmq.client.impl.producer.TopicPublishInfo;
+import org.apache.rocketmq.common.message.Message;
+import org.apache.rocketmq.common.protocol.header.SendMessageRequestHeader;
+import org.apache.rocketmq.common.protocol.route.BrokerData;
+import org.apache.rocketmq.common.protocol.route.QueueData;
+import org.apache.rocketmq.common.protocol.route.TopicRouteData;
+import org.apache.rocketmq.remoting.exception.RemotingException;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Fail.failBecauseExceptionWasNotThrown;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.nullable;
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.class)
+public class DefaultMQProducerTest {
+    @Spy
+    private MQClientInstance mQClientFactory = MQClientManager.getInstance().getAndCreateMQClientInstance(new ClientConfig());
+    @Mock
+    private MQClientAPIImpl mQClientAPIImpl;
+
+    private DefaultMQProducer producer;
+    private Message message;
+    private Message zeroMsg;
+    private String topic = "FooBar";
+    private String producerGroupPrefix = "FooBar_PID";
+
+    @Before
+    public void init() throws Exception {
+        String producerGroupTemp = producerGroupPrefix + System.currentTimeMillis();
+        producer = new DefaultMQProducer(producerGroupTemp);
+        producer.setNamesrvAddr("127.0.0.1:9876");
+        message = new Message(topic, new byte[] {'a'});
+        zeroMsg = new Message(topic, new byte[] {});
+
+        producer.start();
+
+        Field field = DefaultMQProducerImpl.class.getDeclaredField("mQClientFactory");
+        field.setAccessible(true);
+        field.set(producer.getDefaultMQProducerImpl(), mQClientFactory);
+
+        field = MQClientInstance.class.getDeclaredField("mQClientAPIImpl");
+        field.setAccessible(true);
+        field.set(mQClientFactory, mQClientAPIImpl);
+
+        producer.getDefaultMQProducerImpl().getmQClientFactory().registerProducer(producerGroupTemp, producer.getDefaultMQProducerImpl());
+
+        when(mQClientAPIImpl.sendMessage(anyString(), anyString(), any(Message.class), any(SendMessageRequestHeader.class), anyLong(), any(CommunicationMode.class),
+            nullable(SendMessageContext.class), any(DefaultMQProducerImpl.class))).thenCallRealMethod();
+        when(mQClientAPIImpl.sendMessage(anyString(), anyString(), any(Message.class), any(SendMessageRequestHeader.class), anyLong(), any(CommunicationMode.class),
+            nullable(SendCallback.class), nullable(TopicPublishInfo.class), nullable(MQClientInstance.class), anyInt(), nullable(SendMessageContext.class), any(DefaultMQProducerImpl.class)))
+            .thenReturn(createSendResult(SendStatus.SEND_OK));
+    }
+
+    @After
+    public void terminate() {
+        producer.shutdown();
+    }
+
+    @Test
+    public void testSendMessage_ZeroMessage() throws InterruptedException, RemotingException, MQBrokerException {
+        try {
+            producer.send(zeroMsg);
+            failBecauseExceptionWasNotThrown(MQClientException.class);
+        } catch (MQClientException e) {
+            assertThat(e).hasMessageContaining("message body length is zero");
+        }
+    }
+
+    @Test
+    public void testSendMessage_NoNameSrv() throws RemotingException, InterruptedException, MQBrokerException {
+        when(mQClientAPIImpl.getNameServerAddressList()).thenReturn(new ArrayList<String>());
+        try {
+            producer.send(message);
+            failBecauseExceptionWasNotThrown(MQClientException.class);
+        } catch (MQClientException e) {
+            assertThat(e).hasMessageContaining("No name server address");
+        }
+    }
+
+    @Test
+    public void testSendMessage_NoRoute() throws RemotingException, InterruptedException, MQBrokerException {
+        when(mQClientAPIImpl.getNameServerAddressList()).thenReturn(Collections.singletonList("127.0.0.1:9876"));
+        try {
+            producer.send(message);
+            failBecauseExceptionWasNotThrown(MQClientException.class);
+        } catch (MQClientException e) {
+            assertThat(e).hasMessageContaining("No route info of this topic");
+        }
+    }
+
+    @Test
+    public void testSendMessageSync_Success() throws RemotingException, InterruptedException, MQBrokerException, MQClientException {
+        when(mQClientAPIImpl.getTopicRouteInfoFromNameServer(anyString(), anyLong())).thenReturn(createTopicRoute());
+        SendResult sendResult = producer.send(message);
+
+        assertThat(sendResult.getSendStatus()).isEqualTo(SendStatus.SEND_OK);
+        assertThat(sendResult.getOffsetMsgId()).isEqualTo("123");
+        assertThat(sendResult.getQueueOffset()).isEqualTo(456L);
+    }
+
+    @Test
+    public void testSendMessageSync_SuccessWithHook() throws Throwable {
+        when(mQClientAPIImpl.getTopicRouteInfoFromNameServer(anyString(), anyLong())).thenReturn(createTopicRoute());
+        final Throwable[] assertionErrors = new Throwable[1];
+        final CountDownLatch countDownLatch = new CountDownLatch(2);
+        producer.getDefaultMQProducerImpl().registerSendMessageHook(new SendMessageHook() {
+            @Override public String hookName() {
+                return "TestHook";
+            }
+
+            @Override public void sendMessageBefore(final SendMessageContext context) {
+                assertionErrors[0] = assertInOtherThread(new Runnable() {
+                    @Override public void run() {
+                        assertThat(context.getMessage()).isEqualTo(message);
+                        assertThat(context.getProducer()).isEqualTo(producer);
+                        assertThat(context.getCommunicationMode()).isEqualTo(CommunicationMode.SYNC);
+                        assertThat(context.getSendResult()).isNull();
+                    }
+                });
+                countDownLatch.countDown();
+            }
+
+            @Override public void sendMessageAfter(final SendMessageContext context) {
+                assertionErrors[0] = assertInOtherThread(new Runnable() {
+                    @Override public void run() {
+                        assertThat(context.getMessage()).isEqualTo(message);
+                        assertThat(context.getProducer()).isEqualTo(producer.getDefaultMQProducerImpl());
+                        assertThat(context.getCommunicationMode()).isEqualTo(CommunicationMode.SYNC);
+                        assertThat(context.getSendResult()).isNotNull();
+                    }
+                });
+                countDownLatch.countDown();
+            }
+        });
+        SendResult sendResult = producer.send(message);
+
+        assertThat(sendResult.getSendStatus()).isEqualTo(SendStatus.SEND_OK);
+        assertThat(sendResult.getOffsetMsgId()).isEqualTo("123");
+        assertThat(sendResult.getQueueOffset()).isEqualTo(456L);
+
+        countDownLatch.await();
+
+        if (assertionErrors[0] != null) {
+            throw assertionErrors[0];
+        }
+    }
+
+    private TopicRouteData createTopicRoute() {
+        TopicRouteData topicRouteData = new TopicRouteData();
+
+        topicRouteData.setFilterServerTable(new HashMap<String, List<String>>());
+        List<BrokerData> brokerDataList = new ArrayList<>();
+        BrokerData brokerData = new BrokerData();
+        brokerData.setBrokerName("BrokerA");
+        brokerData.setCluster("DefaultCluster");
+        HashMap<Long, String> brokerAddrs = new HashMap<>();
+        brokerAddrs.put(0L, "127.0.0.1:10911");
+        brokerData.setBrokerAddrs(brokerAddrs);
+        brokerDataList.add(brokerData);
+        topicRouteData.setBrokerDatas(brokerDataList);
+
+        List<QueueData> queueDataList = new ArrayList<>();
+        QueueData queueData = new QueueData();
+        queueData.setBrokerName("BrokerA");
+        queueData.setPerm(6);
+        queueData.setReadQueueNums(3);
+        queueData.setWriteQueueNums(4);
+        queueData.setTopicSynFlag(0);
+        queueDataList.add(queueData);
+        topicRouteData.setQueueDatas(queueDataList);
+        return topicRouteData;
+    }
+
+    private SendResult createSendResult(SendStatus sendStatus) {
+        SendResult sendResult = new SendResult();
+        sendResult.setMsgId("123");
+        sendResult.setOffsetMsgId("123");
+        sendResult.setQueueOffset(456);
+        sendResult.setSendStatus(sendStatus);
+        sendResult.setRegionId("HZ");
+        return sendResult;
+    }
+
+    private Throwable assertInOtherThread(final Runnable runnable) {
+        final Throwable[] assertionErrors = new Throwable[1];
+        Thread thread = new Thread(new Runnable() {
+            @Override public void run() {
+                try {
+                    runnable.run();
+                } catch (AssertionError e) {
+                    assertionErrors[0] = e;
+                }
+            }
+        });
+        thread.start();
+        try {
+            thread.join();
+        } catch (InterruptedException e) {
+            assertionErrors[0] = e;
+        }
+        return assertionErrors[0];
+    }
+}
\ No newline at end of file


[15/28] incubator-rocketmq git commit: [ROCKETMQ-52] Add unit tests for LatencyFaultTolerance

Posted by st...@apache.org.
[ROCKETMQ-52] Add unit tests for LatencyFaultTolerance


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/e06a26ce
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/e06a26ce
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/e06a26ce

Branch: refs/heads/ROCKETMQ-54
Commit: e06a26cef72948603b54299f8a234faf468fc2c0
Parents: bbcb69e
Author: yukon <yu...@apache.org>
Authored: Tue Jan 17 22:03:07 2017 +0800
Committer: yukon <yu...@apache.org>
Committed: Thu Jan 19 15:45:19 2017 +0800

----------------------------------------------------------------------
 .../latency/LatencyFaultToleranceImplTest.java  | 67 ++++++++++++++++++++
 1 file changed, 67 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/e06a26ce/client/src/test/java/org/apache/rocketmq/client/latency/LatencyFaultToleranceImplTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/latency/LatencyFaultToleranceImplTest.java b/client/src/test/java/org/apache/rocketmq/client/latency/LatencyFaultToleranceImplTest.java
new file mode 100644
index 0000000..86690e4
--- /dev/null
+++ b/client/src/test/java/org/apache/rocketmq/client/latency/LatencyFaultToleranceImplTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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.latency;
+
+import java.util.concurrent.TimeUnit;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class LatencyFaultToleranceImplTest {
+    private LatencyFaultTolerance<String> latencyFaultTolerance;
+    private String brokerName = "BrokerA";
+    private String anotherBrokerName = "BrokerB";
+
+    @Before
+    public void init() {
+        latencyFaultTolerance = new LatencyFaultToleranceImpl();
+    }
+
+    @Test
+    public void testUpdateFaultItem() throws Exception {
+        latencyFaultTolerance.updateFaultItem(brokerName, 3000, 3000);
+        assertThat(latencyFaultTolerance.isAvailable(brokerName)).isFalse();
+        assertThat(latencyFaultTolerance.isAvailable(anotherBrokerName)).isTrue();
+    }
+
+    @Test
+    public void testIsAvailable() throws Exception {
+        latencyFaultTolerance.updateFaultItem(brokerName, 3000, 50);
+        assertThat(latencyFaultTolerance.isAvailable(brokerName)).isFalse();
+
+        TimeUnit.MILLISECONDS.sleep(70);
+        assertThat(latencyFaultTolerance.isAvailable(brokerName)).isTrue();
+    }
+
+    @Test
+    public void testRemove() throws Exception {
+        latencyFaultTolerance.updateFaultItem(brokerName, 3000, 3000);
+        assertThat(latencyFaultTolerance.isAvailable(brokerName)).isFalse();
+        latencyFaultTolerance.remove(brokerName);
+        assertThat(latencyFaultTolerance.isAvailable(brokerName)).isTrue();
+    }
+
+    @Test
+    public void testPickOneAtLeast() throws Exception {
+        latencyFaultTolerance.updateFaultItem(brokerName, 1000, 3000);
+        assertThat(latencyFaultTolerance.pickOneAtLeast()).isEqualTo(brokerName);
+
+        latencyFaultTolerance.updateFaultItem(anotherBrokerName, 1001, 3000);
+        assertThat(latencyFaultTolerance.pickOneAtLeast()).isEqualTo(brokerName);
+    }
+}
\ No newline at end of file


[19/28] incubator-rocketmq git commit: [ROCKETMQ-52] Add unit tests for DefaultMQProducer

Posted by st...@apache.org.
[ROCKETMQ-52] Add unit tests for DefaultMQProducer


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/6511bc32
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/6511bc32
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/6511bc32

Branch: refs/heads/ROCKETMQ-54
Commit: 6511bc327126fd419801741f18a3c99f87063fe9
Parents: e06a26c
Author: yukon <yu...@apache.org>
Authored: Wed Jan 18 16:59:48 2017 +0800
Committer: yukon <yu...@apache.org>
Committed: Thu Jan 19 15:45:19 2017 +0800

----------------------------------------------------------------------
 .../store/LocalFileOffsetStoreTest.java         |   3 +-
 .../impl/factory/MQClientInstanceTest.java      |   6 +-
 .../impl/producer/DefaultMQProducerTest.java    | 250 +++++++++++++++++++
 3 files changed, 255 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/6511bc32/client/src/test/java/org/apache/rocketmq/client/consumer/store/LocalFileOffsetStoreTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/consumer/store/LocalFileOffsetStoreTest.java b/client/src/test/java/org/apache/rocketmq/client/consumer/store/LocalFileOffsetStoreTest.java
index 0b522e6..bf0adcb 100644
--- a/client/src/test/java/org/apache/rocketmq/client/consumer/store/LocalFileOffsetStoreTest.java
+++ b/client/src/test/java/org/apache/rocketmq/client/consumer/store/LocalFileOffsetStoreTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.rocketmq.client.consumer.store;
 
+import java.io.File;
 import java.util.Collections;
 import java.util.HashSet;
 import org.apache.rocketmq.client.ClientConfig;
@@ -40,7 +41,7 @@ public class LocalFileOffsetStoreTest {
 
     @Before
     public void init() {
-        System.setProperty("rocketmq.client.localOffsetStoreDir", System.getProperty("java.io.tmpdir") + ".rocketmq_offsets");
+        System.setProperty("rocketmq.client.localOffsetStoreDir", System.getProperty("java.io.tmpdir") + File.separator + ".rocketmq_offsets");
         String clientId = new ClientConfig().buildMQClientId() + "#TestNamespace" + System.currentTimeMillis();
         when(mQClientFactory.getClientId()).thenReturn(clientId);
     }

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/6511bc32/client/src/test/java/org/apache/rocketmq/client/impl/factory/MQClientInstanceTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/impl/factory/MQClientInstanceTest.java b/client/src/test/java/org/apache/rocketmq/client/impl/factory/MQClientInstanceTest.java
index c32cdab..eedf0b1 100644
--- a/client/src/test/java/org/apache/rocketmq/client/impl/factory/MQClientInstanceTest.java
+++ b/client/src/test/java/org/apache/rocketmq/client/impl/factory/MQClientInstanceTest.java
@@ -39,7 +39,7 @@ import static org.mockito.Mockito.mock;
 
 @RunWith(MockitoJUnitRunner.class)
 public class MQClientInstanceTest {
-    private MQClientInstance mqClientInstance =  MQClientManager.getInstance().getAndCreateMQClientInstance(new ClientConfig());;
+    private MQClientInstance mqClientInstance =  MQClientManager.getInstance().getAndCreateMQClientInstance(new ClientConfig());
     private String topic = "FooBar";
     private String group = "FooBarGroup";
 
@@ -53,7 +53,7 @@ public class MQClientInstanceTest {
         brokerData.setBrokerName("BrokerA");
         brokerData.setCluster("DefaultCluster");
         HashMap<Long, String> brokerAddrs = new HashMap<>();
-        brokerAddrs.put(0L, "127.0.0.1");
+        brokerAddrs.put(0L, "127.0.0.1:10911");
         brokerData.setBrokerAddrs(brokerAddrs);
         brokerDataList.add(brokerData);
         topicRouteData.setBrokerDatas(brokerDataList);
@@ -61,7 +61,7 @@ public class MQClientInstanceTest {
         List<QueueData> queueDataList = new ArrayList<>();
         QueueData queueData = new QueueData();
         queueData.setBrokerName("BrokerA");
-        queueData.setPerm(2);
+        queueData.setPerm(6);
         queueData.setReadQueueNums(3);
         queueData.setWriteQueueNums(4);
         queueData.setTopicSynFlag(0);

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/6511bc32/client/src/test/java/org/apache/rocketmq/client/impl/producer/DefaultMQProducerTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/impl/producer/DefaultMQProducerTest.java b/client/src/test/java/org/apache/rocketmq/client/impl/producer/DefaultMQProducerTest.java
new file mode 100644
index 0000000..5946ea8
--- /dev/null
+++ b/client/src/test/java/org/apache/rocketmq/client/impl/producer/DefaultMQProducerTest.java
@@ -0,0 +1,250 @@
+/*
+ * 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.impl.producer;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import org.apache.rocketmq.client.ClientConfig;
+import org.apache.rocketmq.client.exception.MQBrokerException;
+import org.apache.rocketmq.client.exception.MQClientException;
+import org.apache.rocketmq.client.hook.SendMessageContext;
+import org.apache.rocketmq.client.hook.SendMessageHook;
+import org.apache.rocketmq.client.impl.CommunicationMode;
+import org.apache.rocketmq.client.impl.MQClientAPIImpl;
+import org.apache.rocketmq.client.impl.MQClientManager;
+import org.apache.rocketmq.client.impl.factory.MQClientInstance;
+import org.apache.rocketmq.client.producer.DefaultMQProducer;
+import org.apache.rocketmq.client.producer.SendCallback;
+import org.apache.rocketmq.client.producer.SendResult;
+import org.apache.rocketmq.client.producer.SendStatus;
+import org.apache.rocketmq.common.message.Message;
+import org.apache.rocketmq.common.protocol.header.SendMessageRequestHeader;
+import org.apache.rocketmq.common.protocol.route.BrokerData;
+import org.apache.rocketmq.common.protocol.route.QueueData;
+import org.apache.rocketmq.common.protocol.route.TopicRouteData;
+import org.apache.rocketmq.remoting.exception.RemotingException;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Fail.failBecauseExceptionWasNotThrown;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.nullable;
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.class)
+public class DefaultMQProducerTest {
+    @Spy
+    private MQClientInstance mQClientFactory = MQClientManager.getInstance().getAndCreateMQClientInstance(new ClientConfig());
+    @Mock
+    private MQClientAPIImpl mQClientAPIImpl;
+
+    private DefaultMQProducer producer;
+    private Message message;
+    private Message zeroMsg;
+    private String topic = "FooBar";
+    private String producerGroupPrefix = "FooBar_PID";
+
+    @Before
+    public void init() throws Exception {
+        String producerGroupTemp = producerGroupPrefix + System.currentTimeMillis();
+        producer = new DefaultMQProducer(producerGroupTemp);
+        producer.setNamesrvAddr("127.0.0.1:9876");
+        message = new Message(topic, new byte[] {'a'});
+        zeroMsg = new Message(topic, new byte[] {});
+
+        producer.start();
+
+        Field field = DefaultMQProducerImpl.class.getDeclaredField("mQClientFactory");
+        field.setAccessible(true);
+        field.set(producer.getDefaultMQProducerImpl(), mQClientFactory);
+
+        field = MQClientInstance.class.getDeclaredField("mQClientAPIImpl");
+        field.setAccessible(true);
+        field.set(mQClientFactory, mQClientAPIImpl);
+
+        producer.getDefaultMQProducerImpl().getmQClientFactory().registerProducer(producerGroupTemp, producer.getDefaultMQProducerImpl());
+
+        when(mQClientAPIImpl.sendMessage(anyString(), anyString(), any(Message.class), any(SendMessageRequestHeader.class), anyLong(), any(CommunicationMode.class),
+            nullable(SendMessageContext.class), any(DefaultMQProducerImpl.class))).thenCallRealMethod();
+        when(mQClientAPIImpl.sendMessage(anyString(), anyString(), any(Message.class), any(SendMessageRequestHeader.class), anyLong(), any(CommunicationMode.class),
+            nullable(SendCallback.class), nullable(TopicPublishInfo.class), nullable(MQClientInstance.class), anyInt(), nullable(SendMessageContext.class), any(DefaultMQProducerImpl.class)))
+            .thenReturn(createSendResult(SendStatus.SEND_OK));
+    }
+
+    @After
+    public void terminate() {
+        producer.shutdown();
+    }
+
+    @Test
+    public void testSendMessage_ZeroMessage() throws InterruptedException, RemotingException, MQBrokerException {
+        try {
+            producer.send(zeroMsg);
+            failBecauseExceptionWasNotThrown(MQClientException.class);
+        } catch (MQClientException e) {
+            assertThat(e).hasMessageContaining("message body length is zero");
+        }
+    }
+
+    @Test
+    public void testSendMessage_NoNameSrv() throws RemotingException, InterruptedException, MQBrokerException {
+        when(mQClientAPIImpl.getNameServerAddressList()).thenReturn(new ArrayList<String>());
+        try {
+            producer.send(message);
+            failBecauseExceptionWasNotThrown(MQClientException.class);
+        } catch (MQClientException e) {
+            assertThat(e).hasMessageContaining("No name server address");
+        }
+    }
+
+    @Test
+    public void testSendMessage_NoRoute() throws RemotingException, InterruptedException, MQBrokerException {
+        when(mQClientAPIImpl.getNameServerAddressList()).thenReturn(Collections.singletonList("127.0.0.1:9876"));
+        try {
+            producer.send(message);
+            failBecauseExceptionWasNotThrown(MQClientException.class);
+        } catch (MQClientException e) {
+            assertThat(e).hasMessageContaining("No route info of this topic");
+        }
+    }
+
+    @Test
+    public void testSendMessageSync_Success() throws RemotingException, InterruptedException, MQBrokerException, MQClientException {
+        when(mQClientAPIImpl.getTopicRouteInfoFromNameServer(anyString(), anyLong())).thenReturn(createTopicRoute());
+        SendResult sendResult = producer.send(message);
+
+        assertThat(sendResult.getSendStatus()).isEqualTo(SendStatus.SEND_OK);
+        assertThat(sendResult.getOffsetMsgId()).isEqualTo("123");
+        assertThat(sendResult.getQueueOffset()).isEqualTo(456L);
+    }
+
+    @Test
+    public void testSendMessageSync_SuccessWithHook() throws Throwable {
+        when(mQClientAPIImpl.getTopicRouteInfoFromNameServer(anyString(), anyLong())).thenReturn(createTopicRoute());
+        final Throwable[] assertionErrors = new Throwable[1];
+        final CountDownLatch countDownLatch = new CountDownLatch(2);
+        producer.getDefaultMQProducerImpl().registerSendMessageHook(new SendMessageHook() {
+            @Override public String hookName() {
+                return "TestHook";
+            }
+
+            @Override public void sendMessageBefore(final SendMessageContext context) {
+                assertionErrors[0] = assertInOtherThread(new Runnable() {
+                    @Override public void run() {
+                        assertThat(context.getMessage()).isEqualTo(message);
+                        assertThat(context.getProducer()).isEqualTo(producer);
+                        assertThat(context.getCommunicationMode()).isEqualTo(CommunicationMode.SYNC);
+                        assertThat(context.getSendResult()).isNull();
+                    }
+                });
+                countDownLatch.countDown();
+            }
+
+            @Override public void sendMessageAfter(final SendMessageContext context) {
+                assertionErrors[0] = assertInOtherThread(new Runnable() {
+                    @Override public void run() {
+                        assertThat(context.getMessage()).isEqualTo(message);
+                        assertThat(context.getProducer()).isEqualTo(producer.getDefaultMQProducerImpl());
+                        assertThat(context.getCommunicationMode()).isEqualTo(CommunicationMode.SYNC);
+                        assertThat(context.getSendResult()).isNotNull();
+                    }
+                });
+                countDownLatch.countDown();
+            }
+        });
+        SendResult sendResult = producer.send(message);
+
+        assertThat(sendResult.getSendStatus()).isEqualTo(SendStatus.SEND_OK);
+        assertThat(sendResult.getOffsetMsgId()).isEqualTo("123");
+        assertThat(sendResult.getQueueOffset()).isEqualTo(456L);
+
+        countDownLatch.await();
+
+        if (assertionErrors[0] != null) {
+            throw assertionErrors[0];
+        }
+    }
+
+    private TopicRouteData createTopicRoute() {
+        TopicRouteData topicRouteData = new TopicRouteData();
+
+        topicRouteData.setFilterServerTable(new HashMap<String, List<String>>());
+        List<BrokerData> brokerDataList = new ArrayList<>();
+        BrokerData brokerData = new BrokerData();
+        brokerData.setBrokerName("BrokerA");
+        brokerData.setCluster("DefaultCluster");
+        HashMap<Long, String> brokerAddrs = new HashMap<>();
+        brokerAddrs.put(0L, "127.0.0.1:10911");
+        brokerData.setBrokerAddrs(brokerAddrs);
+        brokerDataList.add(brokerData);
+        topicRouteData.setBrokerDatas(brokerDataList);
+
+        List<QueueData> queueDataList = new ArrayList<>();
+        QueueData queueData = new QueueData();
+        queueData.setBrokerName("BrokerA");
+        queueData.setPerm(6);
+        queueData.setReadQueueNums(3);
+        queueData.setWriteQueueNums(4);
+        queueData.setTopicSynFlag(0);
+        queueDataList.add(queueData);
+        topicRouteData.setQueueDatas(queueDataList);
+        return topicRouteData;
+    }
+
+    private SendResult createSendResult(SendStatus sendStatus) {
+        SendResult sendResult = new SendResult();
+        sendResult.setMsgId("123");
+        sendResult.setOffsetMsgId("123");
+        sendResult.setQueueOffset(456);
+        sendResult.setSendStatus(sendStatus);
+        sendResult.setRegionId("HZ");
+        return sendResult;
+    }
+
+    private Throwable assertInOtherThread(final Runnable runnable) {
+        final Throwable[] assertionErrors = new Throwable[1];
+        Thread thread = new Thread(new Runnable() {
+            @Override public void run() {
+                try {
+                    runnable.run();
+                } catch (AssertionError e) {
+                    assertionErrors[0] = e;
+                }
+            }
+        });
+        thread.start();
+        try {
+            thread.join();
+        } catch (InterruptedException e) {
+            assertionErrors[0] = e;
+        }
+        return assertionErrors[0];
+    }
+}
\ No newline at end of file


[18/28] incubator-rocketmq git commit: [ROCKETMQ-52] Add unit tests for LocalFileOffsetStore

Posted by st...@apache.org.
[ROCKETMQ-52] Add unit tests for LocalFileOffsetStore


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/127b163d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/127b163d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/127b163d

Branch: refs/heads/ROCKETMQ-54
Commit: 127b163dddae5bce3a33fa66d5b1f1167290a240
Parents: c99510f
Author: yukon <yu...@apache.org>
Authored: Tue Jan 17 15:15:16 2017 +0800
Committer: yukon <yu...@apache.org>
Committed: Thu Jan 19 15:45:19 2017 +0800

----------------------------------------------------------------------
 .../store/LocalFileOffsetStoreTest.java         | 74 ++++++++++++++++++++
 1 file changed, 74 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/127b163d/client/src/test/java/org/apache/rocketmq/client/consumer/store/LocalFileOffsetStoreTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/consumer/store/LocalFileOffsetStoreTest.java b/client/src/test/java/org/apache/rocketmq/client/consumer/store/LocalFileOffsetStoreTest.java
new file mode 100644
index 0000000..58d99d6
--- /dev/null
+++ b/client/src/test/java/org/apache/rocketmq/client/consumer/store/LocalFileOffsetStoreTest.java
@@ -0,0 +1,74 @@
+/*
+ * 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.consumer.store;
+
+import java.util.Collections;
+import java.util.HashSet;
+import org.apache.rocketmq.client.ClientConfig;
+import org.apache.rocketmq.client.impl.factory.MQClientInstance;
+import org.apache.rocketmq.common.message.MessageQueue;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.when;
+
+public class LocalFileOffsetStoreTest {
+
+    @Mock
+    private static MQClientInstance mQClientFactory;
+    private static String group = "FooBarGroup";
+    private static String topic = "FooBar";
+    private static String brokerName = "DefaultBrokerName";
+
+    @BeforeClass
+    public static void init() {
+        System.setProperty("rocketmq.client.localOffsetStoreDir", System.getProperty("java.io.tmpdir") + ".rocketmq_offsets");
+        mQClientFactory = Mockito.mock(MQClientInstance.class);
+        String clientId = new ClientConfig().buildMQClientId() + "#TestNamespace" + System.currentTimeMillis();
+        when(mQClientFactory.getClientId()).thenReturn(clientId);
+    }
+
+    @Test
+    public void testUpdateOffset() throws Exception {
+        OffsetStore offsetStore = new LocalFileOffsetStore(mQClientFactory, group);
+        MessageQueue messageQueue = new MessageQueue(topic, brokerName, 1);
+        offsetStore.updateOffset(messageQueue, 1024, false);
+
+        assertThat(offsetStore.readOffset(messageQueue, ReadOffsetType.READ_FROM_MEMORY)).isEqualTo(1024);
+
+        offsetStore.updateOffset(messageQueue, 1023, false);
+        assertThat(offsetStore.readOffset(messageQueue, ReadOffsetType.READ_FROM_MEMORY)).isEqualTo(1023);
+
+        offsetStore.updateOffset(messageQueue, 1022, true);
+        assertThat(offsetStore.readOffset(messageQueue, ReadOffsetType.READ_FROM_MEMORY)).isEqualTo(1023);
+    }
+
+    @Test
+    public void testReadOffset_FromStore() throws Exception {
+        OffsetStore offsetStore = new LocalFileOffsetStore(mQClientFactory, group);
+        MessageQueue messageQueue = new MessageQueue(topic, brokerName, 2);
+
+        offsetStore.updateOffset(messageQueue, 1024, false);
+        assertThat(offsetStore.readOffset(messageQueue, ReadOffsetType.READ_FROM_STORE)).isEqualTo(-1);
+
+        offsetStore.persistAll(new HashSet<>(Collections.singletonList(messageQueue)));
+        assertThat(offsetStore.readOffset(messageQueue, ReadOffsetType.READ_FROM_STORE)).isEqualTo(1024);
+    }
+}
\ No newline at end of file


[21/28] incubator-rocketmq git commit: [ROCKETMQ-52] Add unit tests for MessageQueueSelector

Posted by st...@apache.org.
[ROCKETMQ-52] Add unit tests for MessageQueueSelector


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/c99510f5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/c99510f5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/c99510f5

Branch: refs/heads/ROCKETMQ-54
Commit: c99510f57550d8fdbf36de691074187da0e8e153
Parents: edde487
Author: yukon <yu...@apache.org>
Authored: Tue Jan 17 13:28:56 2017 +0800
Committer: yukon <yu...@apache.org>
Committed: Thu Jan 19 15:45:19 2017 +0800

----------------------------------------------------------------------
 .../client/common/ThreadLocalIndexTest.java     |  2 +-
 .../selector/SelectMessageQueueByHashTest.java  | 49 ++++++++++++++++++++
 2 files changed, 50 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/c99510f5/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
index b937e45..350cde7 100644
--- a/client/src/test/java/org/apache/rocketmq/client/common/ThreadLocalIndexTest.java
+++ b/client/src/test/java/org/apache/rocketmq/client/common/ThreadLocalIndexTest.java
@@ -23,7 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 public class ThreadLocalIndexTest {
 
     @Test
-    public void getAndIncrement() throws Exception {
+    public void testGetAndIncrement() throws Exception {
         ThreadLocalIndex localIndex = new ThreadLocalIndex();
         int initialVal = localIndex.getAndIncrement();
 

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/c99510f5/client/src/test/java/org/apache/rocketmq/client/producer/selector/SelectMessageQueueByHashTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/producer/selector/SelectMessageQueueByHashTest.java b/client/src/test/java/org/apache/rocketmq/client/producer/selector/SelectMessageQueueByHashTest.java
new file mode 100644
index 0000000..64ef21d
--- /dev/null
+++ b/client/src/test/java/org/apache/rocketmq/client/producer/selector/SelectMessageQueueByHashTest.java
@@ -0,0 +1,49 @@
+/*
+ * 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.producer.selector;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.rocketmq.common.message.Message;
+import org.apache.rocketmq.common.message.MessageQueue;
+import org.junit.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class SelectMessageQueueByHashTest {
+
+    private String topic = "FooBar";
+
+    @Test
+    public void testSelect() throws Exception {
+        SelectMessageQueueByHash selector = new SelectMessageQueueByHash();
+
+        Message message = new Message(topic, new byte[] {});
+
+        List<MessageQueue> messageQueues = new ArrayList<>();
+        for (int i = 0; i < 10; i++) {
+            MessageQueue messageQueue = new MessageQueue(topic, "DefaultBroker", i);
+            messageQueues.add(messageQueue);
+        }
+
+        String orderId = "123";
+        String anotherOrderId = "234";
+        MessageQueue selected = selector.select(messageQueues, message, orderId);
+        assertThat(selector.select(messageQueues, message, anotherOrderId)).isNotEqualTo(selected);
+    }
+
+}
\ No newline at end of file


[22/28] incubator-rocketmq git commit: [ROCKETMQ-52] Add unit tests for MQClientInstance

Posted by st...@apache.org.
[ROCKETMQ-52] Add unit tests for MQClientInstance


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/ba79706f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/ba79706f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/ba79706f

Branch: refs/heads/ROCKETMQ-54
Commit: ba79706f8cf8c0d236a1da870cf0d0d53e9ad57d
Parents: 98e4631
Author: yukon <yu...@apache.org>
Authored: Tue Jan 17 17:22:15 2017 +0800
Committer: yukon <yu...@apache.org>
Committed: Thu Jan 19 15:45:19 2017 +0800

----------------------------------------------------------------------
 .../impl/factory/MQClientInstanceTest.java      | 123 +++++++++++++++++++
 1 file changed, 123 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/ba79706f/client/src/test/java/org/apache/rocketmq/client/impl/factory/MQClientInstanceTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/impl/factory/MQClientInstanceTest.java b/client/src/test/java/org/apache/rocketmq/client/impl/factory/MQClientInstanceTest.java
new file mode 100644
index 0000000..956cdd9
--- /dev/null
+++ b/client/src/test/java/org/apache/rocketmq/client/impl/factory/MQClientInstanceTest.java
@@ -0,0 +1,123 @@
+/*
+ * 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.impl.factory;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import org.apache.rocketmq.client.ClientConfig;
+import org.apache.rocketmq.client.admin.MQAdminExtInner;
+import org.apache.rocketmq.client.exception.MQBrokerException;
+import org.apache.rocketmq.client.impl.MQClientAPIImpl;
+import org.apache.rocketmq.client.impl.MQClientManager;
+import org.apache.rocketmq.client.impl.consumer.MQConsumerInner;
+import org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl;
+import org.apache.rocketmq.client.impl.producer.TopicPublishInfo;
+import org.apache.rocketmq.common.protocol.route.BrokerData;
+import org.apache.rocketmq.common.protocol.route.QueueData;
+import org.apache.rocketmq.common.protocol.route.TopicRouteData;
+import org.apache.rocketmq.remoting.exception.RemotingException;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+
+@RunWith(MockitoJUnitRunner.class)
+public class MQClientInstanceTest {
+
+    @Mock
+    private static MQClientAPIImpl mqClientAPI;
+    @InjectMocks
+    private static MQClientInstance mqClientInstance =  MQClientManager.getInstance().getAndCreateMQClientInstance(new ClientConfig());;
+
+    private String topic = "FooBar";
+    private String group = "FooBarGroup";
+
+    @Test
+    public void testTopicRouteData2TopicPublishInfo() {
+        TopicRouteData topicRouteData = new TopicRouteData();
+
+        topicRouteData.setFilterServerTable(new HashMap<String, List<String>>());
+        List<BrokerData> brokerDataList = new ArrayList<>();
+        BrokerData brokerData = new BrokerData();
+        brokerData.setBrokerName("BrokerA");
+        brokerData.setCluster("DefaultCluster");
+        HashMap<Long, String> brokerAddrs = new HashMap<>();
+        brokerAddrs.put(0L, "127.0.0.1");
+        brokerData.setBrokerAddrs(brokerAddrs);
+        brokerDataList.add(brokerData);
+        topicRouteData.setBrokerDatas(brokerDataList);
+
+        List<QueueData> queueDataList = new ArrayList<>();
+        QueueData queueData = new QueueData();
+        queueData.setBrokerName("BrokerA");
+        queueData.setPerm(2);
+        queueData.setReadQueueNums(3);
+        queueData.setWriteQueueNums(4);
+        queueData.setTopicSynFlag(0);
+        queueDataList.add(queueData);
+        topicRouteData.setQueueDatas(queueDataList);
+
+        TopicPublishInfo topicPublishInfo = MQClientInstance.topicRouteData2TopicPublishInfo(topic, topicRouteData);
+
+        assertThat(topicPublishInfo.isHaveTopicRouterInfo()).isFalse();
+        assertThat(topicPublishInfo.getMessageQueueList().size()).isEqualTo(4);
+    }
+
+    @Test
+    public void testRegisterProducer() {
+        boolean flag = mqClientInstance.registerProducer(group, mock(DefaultMQProducerImpl.class));
+        assertThat(flag).isTrue();
+
+        flag = mqClientInstance.registerProducer(group, mock(DefaultMQProducerImpl.class));
+        assertThat(flag).isFalse();
+
+        mqClientInstance.unregisterProducer(group);
+        flag = mqClientInstance.registerProducer(group, mock(DefaultMQProducerImpl.class));
+        assertThat(flag).isTrue();
+    }
+
+    @Test
+    public void testRegisterConsumer() throws RemotingException, InterruptedException, MQBrokerException {
+        boolean flag = mqClientInstance.registerConsumer(group, mock(MQConsumerInner.class));
+        assertThat(flag).isTrue();
+
+        flag = mqClientInstance.registerConsumer(group, mock(MQConsumerInner.class));
+        assertThat(flag).isFalse();
+
+        mqClientInstance.unregisterConsumer(group);
+        flag = mqClientInstance.registerConsumer(group, mock(MQConsumerInner.class));
+        assertThat(flag).isTrue();
+    }
+
+    @Test
+    public void testRegisterAdminExt() {
+        boolean flag = mqClientInstance.registerAdminExt(group, mock(MQAdminExtInner.class));
+        assertThat(flag).isTrue();
+
+        flag = mqClientInstance.registerAdminExt(group, mock(MQAdminExtInner.class));
+        assertThat(flag).isFalse();
+
+        mqClientInstance.unregisterAdminExt(group);
+        flag = mqClientInstance.registerAdminExt(group, mock(MQAdminExtInner.class));
+        assertThat(flag).isTrue();
+    }
+}
\ No newline at end of file


[25/28] incubator-rocketmq git commit: [ROCKETMQ-52] Add unit tests for RemoteBrokerOffsetStore

Posted by st...@apache.org.
[ROCKETMQ-52] Add unit tests for RemoteBrokerOffsetStore


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/98e4631a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/98e4631a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/98e4631a

Branch: refs/heads/ROCKETMQ-54
Commit: 98e4631a070417794fe75639b24319447a001d85
Parents: 127b163
Author: yukon <yu...@apache.org>
Authored: Tue Jan 17 16:15:11 2017 +0800
Committer: yukon <yu...@apache.org>
Committed: Thu Jan 19 15:45:19 2017 +0800

----------------------------------------------------------------------
 .../store/RemoteBrokerOffsetStoreTest.java      | 141 +++++++++++++++++++
 1 file changed, 141 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/98e4631a/client/src/test/java/org/apache/rocketmq/client/consumer/store/RemoteBrokerOffsetStoreTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/consumer/store/RemoteBrokerOffsetStoreTest.java b/client/src/test/java/org/apache/rocketmq/client/consumer/store/RemoteBrokerOffsetStoreTest.java
new file mode 100644
index 0000000..9a6a4b5
--- /dev/null
+++ b/client/src/test/java/org/apache/rocketmq/client/consumer/store/RemoteBrokerOffsetStoreTest.java
@@ -0,0 +1,141 @@
+/*
+ * 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.consumer.store;
+
+import java.util.Collections;
+import java.util.HashSet;
+import org.apache.rocketmq.client.ClientConfig;
+import org.apache.rocketmq.client.exception.MQBrokerException;
+import org.apache.rocketmq.client.impl.FindBrokerResult;
+import org.apache.rocketmq.client.impl.MQClientAPIImpl;
+import org.apache.rocketmq.client.impl.factory.MQClientInstance;
+import org.apache.rocketmq.common.message.MessageQueue;
+import org.apache.rocketmq.common.protocol.header.QueryConsumerOffsetRequestHeader;
+import org.apache.rocketmq.common.protocol.header.UpdateConsumerOffsetRequestHeader;
+import org.apache.rocketmq.remoting.exception.RemotingException;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public class RemoteBrokerOffsetStoreTest {
+
+    @Mock
+    private static MQClientInstance mQClientFactory;
+    @Mock
+    private static MQClientAPIImpl mqClientAPI;
+    private static String group = "FooBarGroup";
+    private static String topic = "FooBar";
+    private static String brokerName = "DefaultBrokerName";
+
+    @BeforeClass
+    public static void init() {
+        System.setProperty("rocketmq.client.localOffsetStoreDir", System.getProperty("java.io.tmpdir") + ".rocketmq_offsets");
+        mQClientFactory = mock(MQClientInstance.class);
+        String clientId = new ClientConfig().buildMQClientId() + "#TestNamespace" + System.currentTimeMillis();
+        when(mQClientFactory.getClientId()).thenReturn(clientId);
+        when(mQClientFactory.findBrokerAddressInAdmin(brokerName)).thenReturn(new FindBrokerResult("127.0.0.1", false));
+
+        mqClientAPI = mock(MQClientAPIImpl.class);
+        when(mQClientFactory.getMQClientAPIImpl()).thenReturn(mqClientAPI);
+    }
+
+    @Test
+    public void testUpdateOffset() throws Exception {
+        OffsetStore offsetStore = new RemoteBrokerOffsetStore(mQClientFactory, group);
+        MessageQueue messageQueue = new MessageQueue(topic, brokerName, 1);
+
+        offsetStore.updateOffset(messageQueue, 1024, false);
+        assertThat(offsetStore.readOffset(messageQueue, ReadOffsetType.READ_FROM_MEMORY)).isEqualTo(1024);
+
+        offsetStore.updateOffset(messageQueue, 1023, false);
+        assertThat(offsetStore.readOffset(messageQueue, ReadOffsetType.READ_FROM_MEMORY)).isEqualTo(1023);
+
+        offsetStore.updateOffset(messageQueue, 1022, true);
+        assertThat(offsetStore.readOffset(messageQueue, ReadOffsetType.READ_FROM_MEMORY)).isEqualTo(1023);
+    }
+
+    @Test
+    public void testReadOffset_WithException() throws Exception {
+        OffsetStore offsetStore = new RemoteBrokerOffsetStore(mQClientFactory, group);
+        MessageQueue messageQueue = new MessageQueue(topic, brokerName, 2);
+
+        offsetStore.updateOffset(messageQueue, 1024, false);
+
+        doThrow(new MQBrokerException(-1, ""))
+            .when(mqClientAPI).queryConsumerOffset(anyString(), any(QueryConsumerOffsetRequestHeader.class), anyLong());
+        assertThat(offsetStore.readOffset(messageQueue, ReadOffsetType.READ_FROM_STORE)).isEqualTo(-1);
+
+        doThrow(new RemotingException("", null))
+            .when(mqClientAPI).queryConsumerOffset(anyString(), any(QueryConsumerOffsetRequestHeader.class), anyLong());
+        assertThat(offsetStore.readOffset(messageQueue, ReadOffsetType.READ_FROM_STORE)).isEqualTo(-2);
+    }
+
+    @Test
+    public void testReadOffset_Success() throws Exception {
+        OffsetStore offsetStore = new RemoteBrokerOffsetStore(mQClientFactory, group);
+        final MessageQueue messageQueue = new MessageQueue(topic, brokerName, 3);
+
+        doAnswer(new Answer() {
+            @Override public Object answer(InvocationOnMock mock) throws Throwable {
+                UpdateConsumerOffsetRequestHeader updateRequestHeader = mock.getArgument(1);
+                when(mqClientAPI.queryConsumerOffset(anyString(), any(QueryConsumerOffsetRequestHeader.class), anyLong())).thenReturn(updateRequestHeader.getCommitOffset());
+                return null;
+            }
+        }).when(mqClientAPI).updateConsumerOffsetOneway(any(String.class), any(UpdateConsumerOffsetRequestHeader.class), any(Long.class));
+
+        offsetStore.updateOffset(messageQueue, 1024, false);
+        offsetStore.persist(messageQueue);
+        assertThat(offsetStore.readOffset(messageQueue, ReadOffsetType.READ_FROM_STORE)).isEqualTo(1024);
+
+        offsetStore.updateOffset(messageQueue, 1023, false);
+        offsetStore.persist(messageQueue);
+        assertThat(offsetStore.readOffset(messageQueue, ReadOffsetType.READ_FROM_STORE)).isEqualTo(1023);
+
+        offsetStore.updateOffset(messageQueue, 1022, true);
+        offsetStore.persist(messageQueue);
+        assertThat(offsetStore.readOffset(messageQueue, ReadOffsetType.READ_FROM_STORE)).isEqualTo(1023);
+
+        offsetStore.updateOffset(messageQueue, 1025, false);
+        offsetStore.persistAll(new HashSet<>(Collections.singletonList(messageQueue)));
+        assertThat(offsetStore.readOffset(messageQueue, ReadOffsetType.READ_FROM_STORE)).isEqualTo(1025);
+    }
+
+
+
+    @Test
+    public void testRemoveOffset() throws Exception {
+        OffsetStore offsetStore = new RemoteBrokerOffsetStore(mQClientFactory, group);
+        final MessageQueue messageQueue = new MessageQueue(topic, brokerName, 4);
+
+        offsetStore.updateOffset(messageQueue, 1024, false);
+        assertThat(offsetStore.readOffset(messageQueue, ReadOffsetType.READ_FROM_MEMORY)).isEqualTo(1024);
+
+        offsetStore.removeOffset(messageQueue);
+        assertThat(offsetStore.readOffset(messageQueue, ReadOffsetType.READ_FROM_MEMORY)).isEqualTo(-1);
+    }
+}
\ No newline at end of file


[04/28] incubator-rocketmq git commit: IntegrateASF sonar

Posted by st...@apache.org.
IntegrateASF sonar


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/2892a775
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/2892a775
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/2892a775

Branch: refs/heads/ROCKETMQ-54
Commit: 2892a7759f3f867cdca7214399ff121eded78970
Parents: df9d621
Author: vongosling <vo...@apache.org>
Authored: Tue Jan 17 15:18:11 2017 +0800
Committer: vongosling <vo...@apache.org>
Committed: Tue Jan 17 15:18:11 2017 +0800

----------------------------------------------------------------------
 pom.xml | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/2892a775/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index afd3d84..f189bb4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,7 +32,7 @@
     <artifactId>rocketmq-all</artifactId>
     <version>4.0.0-SNAPSHOT</version>
     <packaging>pom</packaging>
-    <name>rocketmq-all ${project.version}</name>
+    <name>Apache RocketMQ git s${project.version}</name>
     <url>http://rocketmq.incubator.apache.org/</url>
 
     <prerequisites>
@@ -42,7 +42,8 @@
     <scm>
         <url>https://git-wip-us.apache.org/repos/asf/incubator-rocketmq.git</url>
         <connection>scm:git:https://git-wip-us.apache.org/repos/asf/incubator-rocketmq.git</connection>
-        <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/incubator-rocketmq.git</developerConnection>
+        <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/incubator-rocketmq.git
+        </developerConnection>
     </scm>
 
     <mailingLists>
@@ -157,6 +158,11 @@
         <!-- compiler settings properties -->
         <maven.compiler.source>1.7</maven.compiler.source>
         <maven.compiler.target>1.7</maven.compiler.target>
+
+        <!-- URL of the ASF SonarQube server -->
+        <sonar.host.url>https://builds.apache.org/analysis</sonar.host.url>
+        <!-- Exclude all generated code -->
+        <sonar.exclusions>file:**/generated-sources/**</sonar.exclusions>
     </properties>
 
     <modules>
@@ -337,6 +343,11 @@
                 <artifactId>findbugs-maven-plugin</artifactId>
                 <version>3.0.4</version>
             </plugin>
+            <plugin>
+                <groupId>org.sonarsource.scanner.maven</groupId>
+                <artifactId>sonar-maven-plugin</artifactId>
+                <version>3.0.2</version>
+            </plugin>
         </plugins>
     </build>