Skip to content

Commit 46e5f8b

Browse files
htynknbeiwei30
authored andcommitted
add test for monitor module (apache#1741)
1 parent 2ff0fcb commit 46e5f8b

File tree

5 files changed

+277
-5
lines changed

5 files changed

+277
-5
lines changed

dubbo-monitor/dubbo-monitor-api/src/test/java/com/alibaba/dubbo/monitor/support/AbstractMonitorFactoryTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import com.alibaba.dubbo.monitor.Monitor;
2222
import com.alibaba.dubbo.monitor.MonitorFactory;
2323

24-
import junit.framework.Assert;
24+
import org.junit.Assert;
2525
import org.junit.Test;
2626

2727
import java.util.List;

dubbo-monitor/dubbo-monitor-api/src/test/java/com/alibaba/dubbo/monitor/support/MonitorFilterTest.java

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,21 @@
2828
import com.alibaba.dubbo.rpc.RpcContext;
2929
import com.alibaba.dubbo.rpc.RpcException;
3030
import com.alibaba.dubbo.rpc.RpcInvocation;
31-
32-
import junit.framework.Assert;
31+
import org.junit.Assert;
3332
import org.junit.Test;
33+
import org.mockito.Mockito;
3434

3535
import java.io.UnsupportedEncodingException;
3636
import java.net.URLEncoder;
3737
import java.util.Arrays;
3838
import java.util.List;
3939

40+
import static org.mockito.ArgumentMatchers.any;
41+
import static org.mockito.BDDMockito.given;
42+
import static org.mockito.Mockito.mock;
43+
import static org.mockito.Mockito.never;
44+
import static org.mockito.Mockito.verify;
45+
4046
/**
4147
* MonitorFilterTest
4248
*/
@@ -125,6 +131,20 @@ public void testFilter() throws Exception {
125131
Assert.assertEquals(invocation, lastInvocation);
126132
}
127133

134+
@Test
135+
public void testSkipMonitorIfNotHasKey() {
136+
MonitorFilter monitorFilter = new MonitorFilter();
137+
MonitorFactory mockMonitorFactory = mock(MonitorFactory.class);
138+
monitorFilter.setMonitorFactory(mockMonitorFactory);
139+
Invocation invocation = new RpcInvocation("aaa", new Class<?>[0], new Object[0]);
140+
Invoker invoker = mock(Invoker.class);
141+
given(invoker.getUrl()).willReturn(URL.valueOf("dubbo://" + NetUtils.getLocalHost() + ":20880?" + Constants.APPLICATION_KEY + "=abc&" + Constants.SIDE_KEY + "=" + Constants.CONSUMER_SIDE));
142+
143+
monitorFilter.invoke(invoker, invocation);
144+
145+
verify(mockMonitorFactory, never()).getMonitor(any(URL.class));
146+
}
147+
128148
@Test
129149
public void testGenericFilter() throws Exception {
130150
MonitorFilter monitorFilter = new MonitorFilter();
@@ -147,4 +167,17 @@ public void testGenericFilter() throws Exception {
147167
Assert.assertEquals(invocation, lastInvocation);
148168
}
149169

170+
@Test
171+
public void testSafeFailForMonitorCollectFail() {
172+
MonitorFilter monitorFilter = new MonitorFilter();
173+
MonitorFactory mockMonitorFactory = mock(MonitorFactory.class);
174+
Monitor mockMonitor = mock(Monitor.class);
175+
Mockito.doThrow(new RuntimeException()).when(mockMonitor).collect(any(URL.class));
176+
177+
monitorFilter.setMonitorFactory(mockMonitorFactory);
178+
given(mockMonitorFactory.getMonitor(any(URL.class))).willReturn(mockMonitor);
179+
Invocation invocation = new RpcInvocation("aaa", new Class<?>[0], new Object[0]);
180+
181+
monitorFilter.invoke(serviceInvoker, invocation);
182+
}
150183
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
package com.alibaba.dubbo.monitor.dubbo;
18+
19+
import com.alibaba.dubbo.common.Constants;
20+
import com.alibaba.dubbo.common.URL;
21+
import com.alibaba.dubbo.monitor.Monitor;
22+
import com.alibaba.dubbo.rpc.Invoker;
23+
import com.alibaba.dubbo.rpc.ProxyFactory;
24+
import com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol;
25+
import org.junit.Before;
26+
import org.junit.Test;
27+
import org.mockito.ArgumentCaptor;
28+
import org.mockito.Mock;
29+
30+
import static org.hamcrest.CoreMatchers.containsString;
31+
import static org.hamcrest.CoreMatchers.nullValue;
32+
import static org.hamcrest.Matchers.not;
33+
import static org.junit.Assert.assertThat;
34+
import static org.mockito.Mockito.atLeastOnce;
35+
import static org.mockito.Mockito.verify;
36+
import static org.mockito.MockitoAnnotations.initMocks;
37+
38+
public class DubboMonitorFactoryTest {
39+
private DubboMonitorFactory dubboMonitorFactory;
40+
@Mock
41+
private ProxyFactory proxyFactory;
42+
43+
@Before
44+
public void setUp() throws Exception {
45+
initMocks(this);
46+
this.dubboMonitorFactory = new DubboMonitorFactory();
47+
this.dubboMonitorFactory.setProtocol(new DubboProtocol());
48+
this.dubboMonitorFactory.setProxyFactory(proxyFactory);
49+
}
50+
51+
@Test
52+
public void testCreateMonitor() {
53+
URL urlWithoutPath = URL.valueOf("http://10.10.10.11");
54+
Monitor monitor = dubboMonitorFactory.createMonitor(urlWithoutPath);
55+
assertThat(monitor, not(nullValue()));
56+
57+
URL urlWithFilterKey = URL.valueOf("http://10.10.10.11/").addParameter(Constants.REFERENCE_FILTER_KEY, "testFilter");
58+
monitor = dubboMonitorFactory.createMonitor(urlWithFilterKey);
59+
60+
assertThat(monitor, not(nullValue()));
61+
ArgumentCaptor<Invoker> invokerArgumentCaptor = ArgumentCaptor.forClass(Invoker.class);
62+
verify(proxyFactory, atLeastOnce()).getProxy(invokerArgumentCaptor.capture());
63+
64+
Invoker invoker = invokerArgumentCaptor.getValue();
65+
assertThat(invoker.getUrl().getParameter(Constants.REFERENCE_FILTER_KEY), containsString("testFilter"));
66+
}
67+
}

dubbo-monitor/dubbo-monitor-default/src/test/java/com/alibaba/dubbo/monitor/dubbo/DubboMonitorTest.java

Lines changed: 81 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,25 @@
2828
import com.alibaba.dubbo.rpc.ProxyFactory;
2929
import com.alibaba.dubbo.rpc.Result;
3030
import com.alibaba.dubbo.rpc.RpcException;
31-
32-
import junit.framework.Assert;
31+
import org.hamcrest.CustomMatcher;
32+
import org.junit.Assert;
3333
import org.junit.Test;
34+
import org.mockito.ArgumentCaptor;
3435

3536
import java.util.Arrays;
3637
import java.util.List;
3738

39+
import static org.hamcrest.CoreMatchers.hasItem;
40+
import static org.hamcrest.CoreMatchers.is;
41+
import static org.hamcrest.CoreMatchers.nullValue;
42+
import static org.hamcrest.Matchers.not;
43+
import static org.junit.Assert.assertThat;
44+
import static org.mockito.ArgumentMatchers.eq;
45+
import static org.mockito.BDDMockito.given;
46+
import static org.mockito.Mockito.atLeastOnce;
47+
import static org.mockito.Mockito.mock;
48+
import static org.mockito.Mockito.verify;
49+
3850
/**
3951
* DubboMonitorTest
4052
*/
@@ -159,4 +171,71 @@ public void testMonitorFactory() throws Exception {
159171
}
160172
}
161173

174+
@Test
175+
public void testAvailable() {
176+
Invoker invoker = mock(Invoker.class);
177+
MonitorService monitorService = mock(MonitorService.class);
178+
179+
given(invoker.isAvailable()).willReturn(true);
180+
given(invoker.getUrl()).willReturn(URL.valueOf("dubbo://127.0.0.1:7070?interval=20"));
181+
DubboMonitor dubboMonitor = new DubboMonitor(invoker, monitorService);
182+
183+
assertThat(dubboMonitor.isAvailable(), is(true));
184+
verify(invoker).isAvailable();
185+
}
186+
187+
@Test
188+
public void testSum() {
189+
URL statistics = new URL("dubbo", "10.20.153.11", 0)
190+
.addParameter(MonitorService.APPLICATION, "morgan")
191+
.addParameter(MonitorService.INTERFACE, "MemberService")
192+
.addParameter(MonitorService.METHOD, "findPerson")
193+
.addParameter(MonitorService.CONSUMER, "10.20.153.11")
194+
.addParameter(MonitorService.SUCCESS, 1)
195+
.addParameter(MonitorService.FAILURE, 0)
196+
.addParameter(MonitorService.ELAPSED, 3)
197+
.addParameter(MonitorService.MAX_ELAPSED, 3)
198+
.addParameter(MonitorService.CONCURRENT, 1)
199+
.addParameter(MonitorService.MAX_CONCURRENT, 1);
200+
Invoker invoker = mock(Invoker.class);
201+
MonitorService monitorService = mock(MonitorService.class);
202+
203+
given(invoker.getUrl()).willReturn(URL.valueOf("dubbo://127.0.0.1:7070?interval=20"));
204+
DubboMonitor dubboMonitor = new DubboMonitor(invoker, monitorService);
205+
206+
dubboMonitor.collect(statistics);
207+
dubboMonitor.collect(statistics.addParameter(MonitorService.SUCCESS, 3).addParameter(MonitorService.CONCURRENT, 2)
208+
.addParameter(MonitorService.INPUT, 1).addParameter(MonitorService.OUTPUT, 2));
209+
dubboMonitor.collect(statistics.addParameter(MonitorService.SUCCESS, 6).addParameter(MonitorService.ELAPSED, 2));
210+
211+
dubboMonitor.send();
212+
213+
ArgumentCaptor<URL> summaryCaptor = ArgumentCaptor.forClass(URL.class);
214+
verify(monitorService, atLeastOnce()).collect(summaryCaptor.capture());
215+
216+
List<URL> allValues = summaryCaptor.getAllValues();
217+
218+
assertThat(allValues, not(nullValue()));
219+
assertThat(allValues, hasItem(new CustomMatcher<URL>("Monitor count should greater than 1") {
220+
@Override
221+
public boolean matches(Object item) {
222+
URL url = (URL) item;
223+
return Integer.valueOf(url.getParameter(MonitorService.SUCCESS)) > 1;
224+
}
225+
}));
226+
}
227+
228+
@Test
229+
public void testLookUp() {
230+
Invoker invoker = mock(Invoker.class);
231+
MonitorService monitorService = mock(MonitorService.class);
232+
233+
URL queryUrl = URL.valueOf("dubbo://127.0.0.1:7070?interval=20");
234+
given(invoker.getUrl()).willReturn(queryUrl);
235+
DubboMonitor dubboMonitor = new DubboMonitor(invoker, monitorService);
236+
237+
dubboMonitor.lookup(queryUrl);
238+
239+
verify(monitorService).lookup(eq(queryUrl));
240+
}
162241
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
package com.alibaba.dubbo.monitor.dubbo;
18+
19+
import com.alibaba.dubbo.common.URL;
20+
import com.alibaba.dubbo.monitor.MonitorService;
21+
import org.junit.Assert;
22+
import org.junit.Test;
23+
24+
import static org.hamcrest.MatcherAssert.assertThat;
25+
import static org.hamcrest.Matchers.equalTo;
26+
import static org.hamcrest.Matchers.is;
27+
import static org.hamcrest.Matchers.not;
28+
29+
public class StatisticsTest {
30+
@Test
31+
public void testEquals() {
32+
URL statistics = new URL("dubbo", "10.20.153.10", 0)
33+
.addParameter(MonitorService.APPLICATION, "morgan")
34+
.addParameter(MonitorService.INTERFACE, "MemberService")
35+
.addParameter(MonitorService.METHOD, "findPerson")
36+
.addParameter(MonitorService.CONSUMER, "10.20.153.11")
37+
.addParameter(MonitorService.SUCCESS, 1)
38+
.addParameter(MonitorService.FAILURE, 0)
39+
.addParameter(MonitorService.ELAPSED, 3)
40+
.addParameter(MonitorService.MAX_ELAPSED, 3)
41+
.addParameter(MonitorService.CONCURRENT, 1)
42+
.addParameter(MonitorService.MAX_CONCURRENT, 1);
43+
44+
Statistics statistics1 = new Statistics(statistics);
45+
Statistics statistics2 = new Statistics(statistics);
46+
47+
Assert.assertThat(statistics1, equalTo(statistics1));
48+
Assert.assertThat(statistics1, equalTo(statistics2));
49+
50+
statistics1.setVersion("2");
51+
Assert.assertThat(statistics1, not(equalTo(statistics2)));
52+
Assert.assertThat(statistics1.hashCode(), not(equalTo(statistics2.hashCode())));
53+
54+
statistics1.setMethod("anotherMethod");
55+
Assert.assertThat(statistics1, not(equalTo(statistics2)));
56+
Assert.assertThat(statistics1.hashCode(), not(equalTo(statistics2.hashCode())));
57+
58+
statistics1.setClient("anotherClient");
59+
Assert.assertThat(statistics1, not(equalTo(statistics2)));
60+
Assert.assertThat(statistics1.hashCode(), not(equalTo(statistics2.hashCode())));
61+
}
62+
63+
@Test
64+
public void testToString() {
65+
Statistics statistics = new Statistics(new URL("dubbo", "10.20.153.10", 0));
66+
statistics.setApplication("demo");
67+
statistics.setMethod("findPerson");
68+
statistics.setServer("10.20.153.10");
69+
statistics.setGroup("unit-test");
70+
statistics.setService("MemberService");
71+
assertThat(statistics.toString(), is("dubbo://10.20.153.10"));
72+
73+
Statistics statisticsWithDetailInfo = new Statistics(new URL("dubbo", "10.20.153.10", 0)
74+
.addParameter(MonitorService.APPLICATION, "morgan")
75+
.addParameter(MonitorService.INTERFACE, "MemberService")
76+
.addParameter(MonitorService.METHOD, "findPerson")
77+
.addParameter(MonitorService.CONSUMER, "10.20.153.11")
78+
.addParameter(MonitorService.GROUP, "unit-test")
79+
.addParameter(MonitorService.SUCCESS, 1)
80+
.addParameter(MonitorService.FAILURE, 0)
81+
.addParameter(MonitorService.ELAPSED, 3)
82+
.addParameter(MonitorService.MAX_ELAPSED, 3)
83+
.addParameter(MonitorService.CONCURRENT, 1)
84+
.addParameter(MonitorService.MAX_CONCURRENT, 1));
85+
86+
Assert.assertThat(statisticsWithDetailInfo.getServer(), equalTo(statistics.getServer()));
87+
Assert.assertThat(statisticsWithDetailInfo.getService(), equalTo(statistics.getService()));
88+
Assert.assertThat(statisticsWithDetailInfo.getMethod(), equalTo(statistics.getMethod()));
89+
90+
Assert.assertThat(statisticsWithDetailInfo.getGroup(), equalTo(statistics.getGroup()));
91+
Assert.assertThat(statisticsWithDetailInfo, not(equalTo(statistics)));
92+
}
93+
}

0 commit comments

Comments
 (0)