This is an automated email from the ASF dual-hosted git repository.
iluo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
The following commit(s) were added to refs/heads/master by this push:
new 322add3 add test for monitor module (#1741)
322add3 is described below
commit 322add3243aaa92f7d56cf68377ff065326337fa
Author: Huang YunKun <[email protected]>
AuthorDate: Mon May 14 15:48:41 2018 +0800
add test for monitor module (#1741)
---
.../support/AbstractMonitorFactoryTest.java | 2 +-
.../dubbo/monitor/support/MonitorFilterTest.java | 37 ++++++++-
.../monitor/dubbo/DubboMonitorFactoryTest.java | 67 ++++++++++++++++
.../dubbo/monitor/dubbo/DubboMonitorTest.java | 83 ++++++++++++++++++-
.../dubbo/monitor/dubbo/StatisticsTest.java | 93 ++++++++++++++++++++++
5 files changed, 277 insertions(+), 5 deletions(-)
diff --git
a/dubbo-monitor/dubbo-monitor-api/src/test/java/com/alibaba/dubbo/monitor/support/AbstractMonitorFactoryTest.java
b/dubbo-monitor/dubbo-monitor-api/src/test/java/com/alibaba/dubbo/monitor/support/AbstractMonitorFactoryTest.java
index cc19f5a..64847af 100644
---
a/dubbo-monitor/dubbo-monitor-api/src/test/java/com/alibaba/dubbo/monitor/support/AbstractMonitorFactoryTest.java
+++
b/dubbo-monitor/dubbo-monitor-api/src/test/java/com/alibaba/dubbo/monitor/support/AbstractMonitorFactoryTest.java
@@ -21,7 +21,7 @@ import com.alibaba.dubbo.common.utils.NetUtils;
import com.alibaba.dubbo.monitor.Monitor;
import com.alibaba.dubbo.monitor.MonitorFactory;
-import junit.framework.Assert;
+import org.junit.Assert;
import org.junit.Test;
import java.util.List;
diff --git
a/dubbo-monitor/dubbo-monitor-api/src/test/java/com/alibaba/dubbo/monitor/support/MonitorFilterTest.java
b/dubbo-monitor/dubbo-monitor-api/src/test/java/com/alibaba/dubbo/monitor/support/MonitorFilterTest.java
index 5b8a303..3450eb4 100644
---
a/dubbo-monitor/dubbo-monitor-api/src/test/java/com/alibaba/dubbo/monitor/support/MonitorFilterTest.java
+++
b/dubbo-monitor/dubbo-monitor-api/src/test/java/com/alibaba/dubbo/monitor/support/MonitorFilterTest.java
@@ -28,15 +28,21 @@ import com.alibaba.dubbo.rpc.Result;
import com.alibaba.dubbo.rpc.RpcContext;
import com.alibaba.dubbo.rpc.RpcException;
import com.alibaba.dubbo.rpc.RpcInvocation;
-
-import junit.framework.Assert;
+import org.junit.Assert;
import org.junit.Test;
+import org.mockito.Mockito;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.List;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+
/**
* MonitorFilterTest
*/
@@ -126,6 +132,20 @@ public class MonitorFilterTest {
}
@Test
+ public void testSkipMonitorIfNotHasKey() {
+ MonitorFilter monitorFilter = new MonitorFilter();
+ MonitorFactory mockMonitorFactory = mock(MonitorFactory.class);
+ monitorFilter.setMonitorFactory(mockMonitorFactory);
+ Invocation invocation = new RpcInvocation("aaa", new Class<?>[0], new
Object[0]);
+ Invoker invoker = mock(Invoker.class);
+ given(invoker.getUrl()).willReturn(URL.valueOf("dubbo://" +
NetUtils.getLocalHost() + ":20880?" + Constants.APPLICATION_KEY + "=abc&" +
Constants.SIDE_KEY + "=" + Constants.CONSUMER_SIDE));
+
+ monitorFilter.invoke(invoker, invocation);
+
+ verify(mockMonitorFactory, never()).getMonitor(any(URL.class));
+ }
+
+ @Test
public void testGenericFilter() throws Exception {
MonitorFilter monitorFilter = new MonitorFilter();
monitorFilter.setMonitorFactory(monitorFactory);
@@ -147,4 +167,17 @@ public class MonitorFilterTest {
Assert.assertEquals(invocation, lastInvocation);
}
+ @Test
+ public void testSafeFailForMonitorCollectFail() {
+ MonitorFilter monitorFilter = new MonitorFilter();
+ MonitorFactory mockMonitorFactory = mock(MonitorFactory.class);
+ Monitor mockMonitor = mock(Monitor.class);
+ Mockito.doThrow(new
RuntimeException()).when(mockMonitor).collect(any(URL.class));
+
+ monitorFilter.setMonitorFactory(mockMonitorFactory);
+
given(mockMonitorFactory.getMonitor(any(URL.class))).willReturn(mockMonitor);
+ Invocation invocation = new RpcInvocation("aaa", new Class<?>[0], new
Object[0]);
+
+ monitorFilter.invoke(serviceInvoker, invocation);
+ }
}
diff --git
a/dubbo-monitor/dubbo-monitor-default/src/test/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitorFactoryTest.java
b/dubbo-monitor/dubbo-monitor-default/src/test/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitorFactoryTest.java
new file mode 100644
index 0000000..759a0d9
--- /dev/null
+++
b/dubbo-monitor/dubbo-monitor-default/src/test/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitorFactoryTest.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 com.alibaba.dubbo.monitor.dubbo;
+
+import com.alibaba.dubbo.common.Constants;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.monitor.Monitor;
+import com.alibaba.dubbo.rpc.Invoker;
+import com.alibaba.dubbo.rpc.ProxyFactory;
+import com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.verify;
+import static org.mockito.MockitoAnnotations.initMocks;
+
+public class DubboMonitorFactoryTest {
+ private DubboMonitorFactory dubboMonitorFactory;
+ @Mock
+ private ProxyFactory proxyFactory;
+
+ @Before
+ public void setUp() throws Exception {
+ initMocks(this);
+ this.dubboMonitorFactory = new DubboMonitorFactory();
+ this.dubboMonitorFactory.setProtocol(new DubboProtocol());
+ this.dubboMonitorFactory.setProxyFactory(proxyFactory);
+ }
+
+ @Test
+ public void testCreateMonitor() {
+ URL urlWithoutPath = URL.valueOf("http://10.10.10.11");
+ Monitor monitor = dubboMonitorFactory.createMonitor(urlWithoutPath);
+ assertThat(monitor, not(nullValue()));
+
+ URL urlWithFilterKey =
URL.valueOf("http://10.10.10.11/").addParameter(Constants.REFERENCE_FILTER_KEY,
"testFilter");
+ monitor = dubboMonitorFactory.createMonitor(urlWithFilterKey);
+
+ assertThat(monitor, not(nullValue()));
+ ArgumentCaptor<Invoker> invokerArgumentCaptor =
ArgumentCaptor.forClass(Invoker.class);
+ verify(proxyFactory,
atLeastOnce()).getProxy(invokerArgumentCaptor.capture());
+
+ Invoker invoker = invokerArgumentCaptor.getValue();
+
assertThat(invoker.getUrl().getParameter(Constants.REFERENCE_FILTER_KEY),
containsString("testFilter"));
+ }
+}
\ No newline at end of file
diff --git
a/dubbo-monitor/dubbo-monitor-default/src/test/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitorTest.java
b/dubbo-monitor/dubbo-monitor-default/src/test/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitorTest.java
index 2915419..8d5ec57 100644
---
a/dubbo-monitor/dubbo-monitor-default/src/test/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitorTest.java
+++
b/dubbo-monitor/dubbo-monitor-default/src/test/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitorTest.java
@@ -28,13 +28,25 @@ import com.alibaba.dubbo.rpc.Protocol;
import com.alibaba.dubbo.rpc.ProxyFactory;
import com.alibaba.dubbo.rpc.Result;
import com.alibaba.dubbo.rpc.RpcException;
-
-import junit.framework.Assert;
+import org.hamcrest.CustomMatcher;
+import org.junit.Assert;
import org.junit.Test;
+import org.mockito.ArgumentCaptor;
import java.util.Arrays;
import java.util.List;
+import static org.hamcrest.CoreMatchers.hasItem;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.assertThat;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
/**
* DubboMonitorTest
*/
@@ -159,4 +171,71 @@ public class DubboMonitorTest {
}
}
+ @Test
+ public void testAvailable() {
+ Invoker invoker = mock(Invoker.class);
+ MonitorService monitorService = mock(MonitorService.class);
+
+ given(invoker.isAvailable()).willReturn(true);
+
given(invoker.getUrl()).willReturn(URL.valueOf("dubbo://127.0.0.1:7070?interval=20"));
+ DubboMonitor dubboMonitor = new DubboMonitor(invoker, monitorService);
+
+ assertThat(dubboMonitor.isAvailable(), is(true));
+ verify(invoker).isAvailable();
+ }
+
+ @Test
+ public void testSum() {
+ URL statistics = new URL("dubbo", "10.20.153.11", 0)
+ .addParameter(MonitorService.APPLICATION, "morgan")
+ .addParameter(MonitorService.INTERFACE, "MemberService")
+ .addParameter(MonitorService.METHOD, "findPerson")
+ .addParameter(MonitorService.CONSUMER, "10.20.153.11")
+ .addParameter(MonitorService.SUCCESS, 1)
+ .addParameter(MonitorService.FAILURE, 0)
+ .addParameter(MonitorService.ELAPSED, 3)
+ .addParameter(MonitorService.MAX_ELAPSED, 3)
+ .addParameter(MonitorService.CONCURRENT, 1)
+ .addParameter(MonitorService.MAX_CONCURRENT, 1);
+ Invoker invoker = mock(Invoker.class);
+ MonitorService monitorService = mock(MonitorService.class);
+
+
given(invoker.getUrl()).willReturn(URL.valueOf("dubbo://127.0.0.1:7070?interval=20"));
+ DubboMonitor dubboMonitor = new DubboMonitor(invoker, monitorService);
+
+ dubboMonitor.collect(statistics);
+ dubboMonitor.collect(statistics.addParameter(MonitorService.SUCCESS,
3).addParameter(MonitorService.CONCURRENT, 2)
+ .addParameter(MonitorService.INPUT,
1).addParameter(MonitorService.OUTPUT, 2));
+ dubboMonitor.collect(statistics.addParameter(MonitorService.SUCCESS,
6).addParameter(MonitorService.ELAPSED, 2));
+
+ dubboMonitor.send();
+
+ ArgumentCaptor<URL> summaryCaptor = ArgumentCaptor.forClass(URL.class);
+ verify(monitorService, atLeastOnce()).collect(summaryCaptor.capture());
+
+ List<URL> allValues = summaryCaptor.getAllValues();
+
+ assertThat(allValues, not(nullValue()));
+ assertThat(allValues, hasItem(new CustomMatcher<URL>("Monitor count
should greater than 1") {
+ @Override
+ public boolean matches(Object item) {
+ URL url = (URL) item;
+ return
Integer.valueOf(url.getParameter(MonitorService.SUCCESS)) > 1;
+ }
+ }));
+ }
+
+ @Test
+ public void testLookUp() {
+ Invoker invoker = mock(Invoker.class);
+ MonitorService monitorService = mock(MonitorService.class);
+
+ URL queryUrl = URL.valueOf("dubbo://127.0.0.1:7070?interval=20");
+ given(invoker.getUrl()).willReturn(queryUrl);
+ DubboMonitor dubboMonitor = new DubboMonitor(invoker, monitorService);
+
+ dubboMonitor.lookup(queryUrl);
+
+ verify(monitorService).lookup(eq(queryUrl));
+ }
}
diff --git
a/dubbo-monitor/dubbo-monitor-default/src/test/java/com/alibaba/dubbo/monitor/dubbo/StatisticsTest.java
b/dubbo-monitor/dubbo-monitor-default/src/test/java/com/alibaba/dubbo/monitor/dubbo/StatisticsTest.java
new file mode 100644
index 0000000..1a644e1
--- /dev/null
+++
b/dubbo-monitor/dubbo-monitor-default/src/test/java/com/alibaba/dubbo/monitor/dubbo/StatisticsTest.java
@@ -0,0 +1,93 @@
+/*
+ * 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 com.alibaba.dubbo.monitor.dubbo;
+
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.monitor.MonitorService;
+import org.junit.Assert;
+import org.junit.Test;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.not;
+
+public class StatisticsTest {
+ @Test
+ public void testEquals() {
+ URL statistics = new URL("dubbo", "10.20.153.10", 0)
+ .addParameter(MonitorService.APPLICATION, "morgan")
+ .addParameter(MonitorService.INTERFACE, "MemberService")
+ .addParameter(MonitorService.METHOD, "findPerson")
+ .addParameter(MonitorService.CONSUMER, "10.20.153.11")
+ .addParameter(MonitorService.SUCCESS, 1)
+ .addParameter(MonitorService.FAILURE, 0)
+ .addParameter(MonitorService.ELAPSED, 3)
+ .addParameter(MonitorService.MAX_ELAPSED, 3)
+ .addParameter(MonitorService.CONCURRENT, 1)
+ .addParameter(MonitorService.MAX_CONCURRENT, 1);
+
+ Statistics statistics1 = new Statistics(statistics);
+ Statistics statistics2 = new Statistics(statistics);
+
+ Assert.assertThat(statistics1, equalTo(statistics1));
+ Assert.assertThat(statistics1, equalTo(statistics2));
+
+ statistics1.setVersion("2");
+ Assert.assertThat(statistics1, not(equalTo(statistics2)));
+ Assert.assertThat(statistics1.hashCode(),
not(equalTo(statistics2.hashCode())));
+
+ statistics1.setMethod("anotherMethod");
+ Assert.assertThat(statistics1, not(equalTo(statistics2)));
+ Assert.assertThat(statistics1.hashCode(),
not(equalTo(statistics2.hashCode())));
+
+ statistics1.setClient("anotherClient");
+ Assert.assertThat(statistics1, not(equalTo(statistics2)));
+ Assert.assertThat(statistics1.hashCode(),
not(equalTo(statistics2.hashCode())));
+ }
+
+ @Test
+ public void testToString() {
+ Statistics statistics = new Statistics(new URL("dubbo",
"10.20.153.10", 0));
+ statistics.setApplication("demo");
+ statistics.setMethod("findPerson");
+ statistics.setServer("10.20.153.10");
+ statistics.setGroup("unit-test");
+ statistics.setService("MemberService");
+ assertThat(statistics.toString(), is("dubbo://10.20.153.10"));
+
+ Statistics statisticsWithDetailInfo = new Statistics(new URL("dubbo",
"10.20.153.10", 0)
+ .addParameter(MonitorService.APPLICATION, "morgan")
+ .addParameter(MonitorService.INTERFACE, "MemberService")
+ .addParameter(MonitorService.METHOD, "findPerson")
+ .addParameter(MonitorService.CONSUMER, "10.20.153.11")
+ .addParameter(MonitorService.GROUP, "unit-test")
+ .addParameter(MonitorService.SUCCESS, 1)
+ .addParameter(MonitorService.FAILURE, 0)
+ .addParameter(MonitorService.ELAPSED, 3)
+ .addParameter(MonitorService.MAX_ELAPSED, 3)
+ .addParameter(MonitorService.CONCURRENT, 1)
+ .addParameter(MonitorService.MAX_CONCURRENT, 1));
+
+ Assert.assertThat(statisticsWithDetailInfo.getServer(),
equalTo(statistics.getServer()));
+ Assert.assertThat(statisticsWithDetailInfo.getService(),
equalTo(statistics.getService()));
+ Assert.assertThat(statisticsWithDetailInfo.getMethod(),
equalTo(statistics.getMethod()));
+
+ Assert.assertThat(statisticsWithDetailInfo.getGroup(),
equalTo(statistics.getGroup()));
+ Assert.assertThat(statisticsWithDetailInfo, not(equalTo(statistics)));
+ }
+}
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
[email protected].