You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by hu...@apache.org on 2019/07/03 14:57:39 UTC

[dubbo] branch master updated: Refactor MetricsFilterTest to use Mockito (#4398)

This is an automated email from the ASF dual-hosted git repository.

huxing pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/master by this push:
     new 4c4b931  Refactor MetricsFilterTest to use Mockito (#4398)
4c4b931 is described below

commit 4c4b931ebfbfae7aa551342cf0f48c270dfebadd
Author: Daniela Marques de Morais <da...@tuta.io>
AuthorDate: Wed Jul 3 11:57:06 2019 -0300

    Refactor MetricsFilterTest to use Mockito (#4398)
    
    * Create constants for 'hash.names' and 'hash.arguments' (#3744)
    * Fix conflicts of cherry-pick
    * Add builder class for unit test
    * Fix builder class
    * Add apache license
---
 .../dubbo/monitor/dubbo/AppResponseBuilder.java    | 55 +++++++++++++++
 .../dubbo/monitor/dubbo/MetricsFilterTest.java     | 80 ++++++++++++++--------
 2 files changed, 105 insertions(+), 30 deletions(-)

diff --git a/dubbo-monitor/dubbo-monitor-default/src/test/java/org/apache/dubbo/monitor/dubbo/AppResponseBuilder.java b/dubbo-monitor/dubbo-monitor-default/src/test/java/org/apache/dubbo/monitor/dubbo/AppResponseBuilder.java
new file mode 100644
index 0000000..737572a
--- /dev/null
+++ b/dubbo-monitor/dubbo-monitor-default/src/test/java/org/apache/dubbo/monitor/dubbo/AppResponseBuilder.java
@@ -0,0 +1,55 @@
+/*
+ * 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.dubbo.monitor.dubbo;
+
+import org.apache.dubbo.rpc.AppResponse;
+
+import java.util.Map;
+
+public class AppResponseBuilder {
+    private Object result;
+    private Throwable exception;
+    private Map<String, String> attachments;
+    private AppResponse appResponse;
+
+    private AppResponseBuilder() {
+        this.appResponse = new AppResponse();
+    }
+
+    public static AppResponseBuilder create() {
+        return new AppResponseBuilder();
+    }
+
+    public AppResponse build() {
+        return new AppResponse(this);
+    }
+
+    public AppResponseBuilder withResult(Object result) {
+        this.result = result;
+        return this;
+    }
+
+    public AppResponseBuilder withException(Throwable exception) {
+        this.exception = exception;
+        return this;
+    }
+
+    public AppResponseBuilder withAttachments(Map<String, String> attachments) {
+        this.attachments = attachments;
+        return this;
+    }
+}
diff --git a/dubbo-monitor/dubbo-monitor-default/src/test/java/org/apache/dubbo/monitor/dubbo/MetricsFilterTest.java b/dubbo-monitor/dubbo-monitor-default/src/test/java/org/apache/dubbo/monitor/dubbo/MetricsFilterTest.java
index 47b607d..c31bd4a 100644
--- a/dubbo-monitor/dubbo-monitor-default/src/test/java/org/apache/dubbo/monitor/dubbo/MetricsFilterTest.java
+++ b/dubbo-monitor/dubbo-monitor-default/src/test/java/org/apache/dubbo/monitor/dubbo/MetricsFilterTest.java
@@ -20,6 +20,7 @@ import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.utils.NetUtils;
 import org.apache.dubbo.monitor.MetricsService;
 import org.apache.dubbo.monitor.dubbo.service.DemoService;
+import org.apache.dubbo.rpc.AppResponse;
 import org.apache.dubbo.rpc.Invocation;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.Protocol;
@@ -37,8 +38,11 @@ import com.alibaba.metrics.MetricName;
 import com.alibaba.metrics.common.MetricObject;
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
+
 import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
 
 import java.util.HashMap;
 import java.util.List;
@@ -57,31 +61,32 @@ import static org.apache.dubbo.monitor.Constants.DUBBO_PROVIDER_METHOD;
 import static org.apache.dubbo.monitor.Constants.METHOD;
 import static org.apache.dubbo.monitor.Constants.SERVICE;
 
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.mock;
+
 public class MetricsFilterTest {
 
-    private final Invoker<DemoService> serviceInvoker = new Invoker<DemoService>() {
-        @Override
-        public Class<DemoService> getInterface() {
-            return DemoService.class;
-        }
+    private Invoker<DemoService> serviceInvoker;
 
-        public URL getUrl() {
-            return URL.valueOf("dubbo://" + NetUtils.getLocalHost() + ":20880/org.apache.dubbo.monitor.dubbo.service.DemoService");
-        }
+    @BeforeEach
+    void setUp() {
+        serviceInvoker = mock(Invoker.class);
 
-        @Override
-        public boolean isAvailable() {
-            return false;
-        }
+        given(serviceInvoker.isAvailable()).willReturn(false);
+        given(serviceInvoker.getInterface()).willReturn(DemoService.class);
+        given(serviceInvoker.getUrl()).willReturn(getUrl());
+        given(serviceInvoker.invoke(Mockito.any(Invocation.class))).willReturn(null);
+        doNothing().when(serviceInvoker).destroy();
+    }
 
-        public Result invoke(Invocation invocation) throws RpcException {
-            return null;
-        }
+    private URL getUrl() {
+        return URL.valueOf("dubbo://" + NetUtils.getLocalHost() + ":20880/org.apache.dubbo.monitor.dubbo.service.DemoService");
+    }
 
-        @Override
-        public void destroy() {
-        }
-    };
+    private void onInvokeReturns(AppResponse response) {
+        given(serviceInvoker.invoke(Mockito.any(Invocation.class))).willReturn(response);
+    }
 
     private final Invoker<DemoService> timeoutInvoker = new Invoker<DemoService>() {
         @Override
@@ -115,6 +120,9 @@ public class MetricsFilterTest {
         Invocation invocation = new RpcInvocation("sayName", new Class<?>[]{Integer.class}, new Object[0]);
         RpcContext.getContext().setRemoteAddress(NetUtils.getLocalHost(), 20880).setLocalAddress(NetUtils.getLocalHost(), 2345);
         RpcContext.getContext().setUrl(serviceInvoker.getUrl().addParameter(SIDE_KEY, CONSUMER_SIDE));
+        AppResponse response = AppResponseBuilder.create()
+            .build();
+        onInvokeReturns(response);
         for (int i = 0; i < 100; i++) {
             metricsFilter.invoke(serviceInvoker, invocation);
         }
@@ -140,7 +148,10 @@ public class MetricsFilterTest {
         Invocation invocation = new RpcInvocation("timeoutException", null, null);
         RpcContext.getContext().setRemoteAddress(NetUtils.getLocalHost(), 20880).setLocalAddress(NetUtils.getLocalHost(), 2345);
         RpcContext.getContext().setUrl(timeoutInvoker.getUrl().addParameter(SIDE_KEY, CONSUMER_SIDE)
-                .addParameter(TIMEOUT_KEY, 300));
+            .addParameter(TIMEOUT_KEY, 300));
+        AppResponse response = AppResponseBuilder.create()
+            .build();
+        onInvokeReturns(response);
         for (int i = 0; i < 10; i++) {
             try {
                 metricsFilter.invoke(timeoutInvoker, invocation);
@@ -170,6 +181,9 @@ public class MetricsFilterTest {
         Invocation invocation = new RpcInvocation("sayName", new Class<?>[0], new Object[0]);
         RpcContext.getContext().setRemoteAddress(NetUtils.getLocalHost(), 20880).setLocalAddress(NetUtils.getLocalHost(), 2345);
         RpcContext.getContext().setUrl(serviceInvoker.getUrl().addParameter(SIDE_KEY, PROVIDER));
+        AppResponse response = AppResponseBuilder.create()
+            .build();
+        onInvokeReturns(response);
         for (int i = 0; i < 100; i++) {
             metricsFilter.invoke(serviceInvoker, invocation);
         }
@@ -194,7 +208,10 @@ public class MetricsFilterTest {
         Invocation invocation = new RpcInvocation("sayName", new Class<?>[0], new Object[0]);
         RpcContext.getContext().setRemoteAddress(NetUtils.getLocalHost(), 20880).setLocalAddress(NetUtils.getLocalHost(), 2345);
         RpcContext.getContext().setUrl(serviceInvoker.getUrl().addParameter(SIDE_KEY, PROVIDER_SIDE)
-                .addParameter(TIMEOUT_KEY, 300));
+            .addParameter(TIMEOUT_KEY, 300));
+        AppResponse response = AppResponseBuilder.create()
+            .build();
+        onInvokeReturns(response);
         for (int i = 0; i < 50; i++) {
             try {
                 metricsFilter.invoke(serviceInvoker, invocation);
@@ -239,7 +256,10 @@ public class MetricsFilterTest {
         Invocation echoInvocation = new RpcInvocation("echo", new Class<?>[]{Integer.class}, new Integer[]{1});
         RpcContext.getContext().setRemoteAddress(NetUtils.getLocalHost(), 20880).setLocalAddress(NetUtils.getLocalHost(), 2345);
         RpcContext.getContext().setUrl(serviceInvoker.getUrl().addParameter(SIDE_KEY, PROVIDER_SIDE)
-                .addParameter(TIMEOUT_KEY, 300));
+            .addParameter(TIMEOUT_KEY, 300));
+        AppResponse response = AppResponseBuilder.create()
+            .build();
+        onInvokeReturns(response);
         for (int i = 0; i < 50; i++) {
             metricsFilter.invoke(serviceInvoker, sayNameInvocation);
             metricsFilter.invoke(serviceInvoker, echoInvocation);
@@ -282,23 +302,23 @@ public class MetricsFilterTest {
         }
 
         Assertions.assertEquals(50.0,
-                methodMetricMap.get("org.apache.dubbo.monitor.dubbo.service.DemoService.void sayName()").get("success_bucket_count"));
+            methodMetricMap.get("org.apache.dubbo.monitor.dubbo.service.DemoService.void sayName()").get("success_bucket_count"));
         Assertions.assertEquals(50.0,
-                methodMetricMap.get("org.apache.dubbo.monitor.dubbo.service.DemoService.void echo(Integer)").get("success_bucket_count"));
+            methodMetricMap.get("org.apache.dubbo.monitor.dubbo.service.DemoService.void echo(Integer)").get("success_bucket_count"));
 
         Assertions.assertEquals(50.0,
-                methodMetricMap.get("org.apache.dubbo.monitor.dubbo.service.DemoService.void sayName()").get("timeoutError_bucket_count"));
+            methodMetricMap.get("org.apache.dubbo.monitor.dubbo.service.DemoService.void sayName()").get("timeoutError_bucket_count"));
         Assertions.assertEquals(50.0,
-                methodMetricMap.get("org.apache.dubbo.monitor.dubbo.service.DemoService.void echo(Integer)").get("timeoutError_bucket_count"));
+            methodMetricMap.get("org.apache.dubbo.monitor.dubbo.service.DemoService.void echo(Integer)").get("timeoutError_bucket_count"));
 
         Assertions.assertEquals(100.0 / 15,
-                methodMetricMap.get("org.apache.dubbo.monitor.dubbo.service.DemoService.void sayName()").get("qps"));
+            methodMetricMap.get("org.apache.dubbo.monitor.dubbo.service.DemoService.void sayName()").get("qps"));
         Assertions.assertEquals(100.0 / 15,
-                methodMetricMap.get("org.apache.dubbo.monitor.dubbo.service.DemoService.void echo(Integer)").get("qps"));
+            methodMetricMap.get("org.apache.dubbo.monitor.dubbo.service.DemoService.void echo(Integer)").get("qps"));
 
         Assertions.assertEquals(50.0 / 100.0,
-                methodMetricMap.get("org.apache.dubbo.monitor.dubbo.service.DemoService.void sayName()").get("success_rate"));
+            methodMetricMap.get("org.apache.dubbo.monitor.dubbo.service.DemoService.void sayName()").get("success_rate"));
         Assertions.assertEquals(50.0 / 100.0,
-                methodMetricMap.get("org.apache.dubbo.monitor.dubbo.service.DemoService.void echo(Integer)").get("success_rate"));
+            methodMetricMap.get("org.apache.dubbo.monitor.dubbo.service.DemoService.void echo(Integer)").get("success_rate"));
     }
 }