You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2018/02/26 13:33:48 UTC

[incubator-servicecomb-java-chassis] 07/07: SCB-327 improve test case and fix pr comment

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

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git

commit f55177e19f9a907c5e14cf372c78e8d2217c44b2
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Sun Feb 25 10:40:50 2018 +0800

    SCB-327 improve test case and fix pr comment
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 .../foundation/common/event/TestEventBus.java      |  26 ++-
 .../metrics/health/TestHealthCheckerManager.java   |  76 +++++++--
 .../foundation/metrics/publish/TestMetricNode.java |  39 ++++-
 .../metrics/publish/TestMetricsLoader.java         |  17 +-
 .../core/publish/HealthCheckerPublisher.java       |   5 +-
 .../metrics/core/TestHealthCheckerPublisher.java   |  14 +-
 .../metrics/core/TestMetricsPublisher.java         |   4 +-
 ...EventAndRunner.java => TestMonitorManager.java} | 181 +++++++++++++++------
 8 files changed, 275 insertions(+), 87 deletions(-)

diff --git a/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/event/TestEventBus.java b/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/event/TestEventBus.java
index d404508..5def0ad 100644
--- a/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/event/TestEventBus.java
+++ b/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/event/TestEventBus.java
@@ -28,7 +28,31 @@ import org.junit.Test;
 public class TestEventBus {
 
   @Test
-  public void test() throws InterruptedException {
+  public void checkEventReceivedAndProcessed() {
+    AtomicBoolean eventReceived = new AtomicBoolean(false);
+
+    EventListener<String> listener = new EventListener<String>() {
+      @Override
+      public Class<String> getEventClass() {
+        return String.class;
+      }
+
+      @Override
+      public void process(String data) {
+        eventReceived.set(true);
+      }
+    };
+
+    EventBus.getInstance().registerEventListener(listener);
+
+    EventBus.getInstance().triggerEvent("xxx");
+    await().atMost(1, TimeUnit.SECONDS)
+        .until(eventReceived::get);
+    Assert.assertTrue(eventReceived.get());
+  }
+
+  @Test
+  public void checkEventCanNotReceivedAfterUnregister() throws InterruptedException {
     AtomicBoolean eventReceived = new AtomicBoolean(false);
 
     EventListener<String> listener = new EventListener<String>() {
diff --git a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/health/TestHealthCheckerManager.java b/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/health/TestHealthCheckerManager.java
index bcc3a35..c8474ee 100644
--- a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/health/TestHealthCheckerManager.java
+++ b/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/health/TestHealthCheckerManager.java
@@ -24,26 +24,72 @@ import org.junit.Test;
 
 public class TestHealthCheckerManager {
 
-  @Test
-  public void testRegistry() {
-    HealthCheckerManager.getInstance().register(new HealthChecker() {
-      @Override
-      public String getName() {
-        return "test";
-      }
-
-      @Override
-      public HealthCheckResult check() {
-        return new HealthCheckResult(false, "bad", "bad call");
-      }
-    });
+  private HealthChecker good = new HealthChecker() {
+    @Override
+    public String getName() {
+      return "testBad";
+    }
+
+    @Override
+    public HealthCheckResult check() {
+      return new HealthCheckResult(false, "bad", "bad component");
+    }
+  };
+
+  private HealthChecker bad = new HealthChecker() {
+    @Override
+    public String getName() {
+      return "testGood";
+    }
+
+    @Override
+    public HealthCheckResult check() {
+      return new HealthCheckResult(true, "good", "good component");
+    }
+  };
 
+  private void reset() {
+    HealthCheckerManager.getInstance().unregister(good.getName());
+    HealthCheckerManager.getInstance().unregister(bad.getName());
+  }
+
+  @Test
+  public void checkResultCount() {
+    reset();
     Map<String, HealthCheckResult> results = HealthCheckerManager.getInstance().check();
+    Assert.assertEquals(0, results.size());
+
+    reset();
+    HealthCheckerManager.getInstance().register(good);
+    results = HealthCheckerManager.getInstance().check();
     Assert.assertEquals(1, results.size());
 
-    HealthCheckResult result = HealthCheckerManager.getInstance().check().get("test");
+    reset();
+    HealthCheckerManager.getInstance().register(good);
+    HealthCheckerManager.getInstance().register(bad);
+    results = HealthCheckerManager.getInstance().check();
+    Assert.assertEquals(2, results.size());
+  }
+
+  @Test
+  public void checkGoodResult() {
+    reset();
+    HealthCheckerManager.getInstance().register(good);
+    HealthCheckerManager.getInstance().register(bad);
+    HealthCheckResult result = HealthCheckerManager.getInstance().check().get("testGood");
+    Assert.assertEquals(true, result.isHealthy());
+    Assert.assertEquals("good", result.getInformation());
+    Assert.assertEquals("good component", result.getExtraData());
+  }
+
+  @Test
+  public void checkBadResult() {
+    reset();
+    HealthCheckerManager.getInstance().register(good);
+    HealthCheckerManager.getInstance().register(bad);
+    HealthCheckResult result = HealthCheckerManager.getInstance().check().get("testBad");
     Assert.assertEquals(false, result.isHealthy());
     Assert.assertEquals("bad", result.getInformation());
-    Assert.assertEquals("bad call", result.getExtraData());
+    Assert.assertEquals("bad component", result.getExtraData());
   }
 }
diff --git a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/publish/TestMetricNode.java b/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/publish/TestMetricNode.java
index 7468030..8601137 100644
--- a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/publish/TestMetricNode.java
+++ b/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/publish/TestMetricNode.java
@@ -22,11 +22,14 @@ import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 import org.junit.Assert;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 public class TestMetricNode {
-  @Test
-  public void test() {
+  private static MetricsLoader loader;
+
+  @BeforeClass
+  public static void steup() {
     Map<String, Double> metrics = new HashMap<>();
     metrics.put("X(K1=1,K2=2,K3=3,unit=SECONDS,statistic=A)", 100.0);
     metrics.put("X(K1=1,K2=2,K3=30000,unit=SECONDS,statistic=AA)", 110.0);
@@ -39,30 +42,48 @@ public class TestMetricNode {
     metrics.put("Y(K1=100,K2=200,K3=300)", 700.0);
     metrics.put("Y(K1=1000,K2=2000,K3=3000)", 800.0);
 
-    MetricsLoader loader = new MetricsLoader(metrics);
+    loader = new MetricsLoader(metrics);
+  }
+
+  @Test
+  public void checkNodeMetricCount() {
     MetricNode node = loader.getMetricTree("X", "K1");
     MetricNode node_k1 = node.getChildrenNode("1");
-
-    //check metrics list
     Assert.assertEquals(3, node_k1.getMetricCount());
+  }
 
-    //check getFirstMatchMetricValue with single Tag
+  @Test
+  public void checkGetFirstMatchMetricValueWithSingleTag() {
+    MetricNode node = loader.getMetricTree("X", "K1");
+    MetricNode node_k1 = node.getChildrenNode("1");
     Assert.assertEquals(100, node_k1.getFirstMatchMetricValue("K2", "2"), 0);
     Assert.assertEquals(100 * 1000, node_k1.getFirstMatchMetricValue(TimeUnit.MILLISECONDS, "K2", "2"), 0);
     Assert.assertEquals(100 * 1000, node_k1.getFirstMatchMetricValue(TimeUnit.MILLISECONDS, "K2", "2"), 0);
+  }
 
-    //check getFirstMatchMetricValue with multi Tag
+  @Test
+  public void checkGetFirstMatchMetricValueWithMultiTag() {
+    MetricNode node = loader.getMetricTree("X", "K1");
+    MetricNode node_k1 = node.getChildrenNode("1");
     Assert.assertEquals(200, node_k1.getFirstMatchMetricValue("K3", "30", "K2", "20"), 0);
     Assert.assertEquals(200 * 1000, node_k1.getFirstMatchMetricValue(TimeUnit.MILLISECONDS, "K3", "30", "K2", "20"), 0);
     Assert.assertEquals(110.0, node_k1.getFirstMatchMetricValue("K2", "2", "K3", "30000"), 0);
     Assert
         .assertEquals(110 * 1000, node_k1.getFirstMatchMetricValue(TimeUnit.MILLISECONDS, "K2", "2", "K3", "30000"), 0);
+  }
 
-    //check direct get statistic value
+  @Test
+  public void checkGetMatchStatisticMetricValue() {
+    MetricNode node = loader.getMetricTree("X", "K1");
+    MetricNode node_k1 = node.getChildrenNode("1");
     Assert.assertEquals(100, node_k1.getMatchStatisticMetricValue("A"), 0);
     Assert.assertEquals(100 * 1000, node_k1.getMatchStatisticMetricValue(TimeUnit.MILLISECONDS, "A"), 0);
+  }
 
-    //check generate new MetricNode from existed MetricNode
+  @Test
+  public void checkGenerateMetricNodeFromExistedNode() {
+    MetricNode node = loader.getMetricTree("X", "K1");
+    MetricNode node_k1 = node.getChildrenNode("1");
     MetricNode newNode = new MetricNode(node_k1.getMetrics(), "K2", "K3");
     Assert.assertEquals(1, newNode.getChildrenNode("2").getChildrenNode("3").getMetricCount(), 0);
   }
diff --git a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/publish/TestMetricsLoader.java b/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/publish/TestMetricsLoader.java
index b650819..917d9e5 100644
--- a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/publish/TestMetricsLoader.java
+++ b/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/publish/TestMetricsLoader.java
@@ -21,11 +21,14 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.junit.Assert;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 public class TestMetricsLoader {
-  @Test
-  public void test() {
+  private static MetricsLoader loader;
+
+  @BeforeClass
+  public static void setup() {
     Map<String, Double> metrics = new HashMap<>();
     metrics.put("X(K1=1,K2=2,K3=3)", 100.0);
     metrics.put("X(K1=1,K2=20,K3=30)", 200.0);
@@ -37,8 +40,16 @@ public class TestMetricsLoader {
     metrics.put("Y(K1=100,K2=200,K3=300)", 700.0);
     metrics.put("Y(K1=1000,K2=2000,K3=3000)", 800.0);
 
-    MetricsLoader loader = new MetricsLoader(metrics);
+    loader = new MetricsLoader(metrics);
+  }
+
+  @Test
+  public void checkFirstMatchMetricValue() {
     Assert.assertEquals(200.0, loader.getFirstMatchMetricValue("X", "K3", "30"), 0);
+  }
+
+  @Test
+  public void checkGetChildrenCount() {
     MetricNode node = loader.getMetricTree("X", "K1");
     Assert.assertEquals(2, node.getChildrenCount());
   }
diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/HealthCheckerPublisher.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/HealthCheckerPublisher.java
index 17679a3..fba4f44 100644
--- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/HealthCheckerPublisher.java
+++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/HealthCheckerPublisher.java
@@ -17,12 +17,9 @@
 
 package org.apache.servicecomb.metrics.core.publish;
 
-import java.util.List;
 import java.util.Map;
 
-import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
 import org.apache.servicecomb.foundation.metrics.health.HealthCheckResult;
-import org.apache.servicecomb.foundation.metrics.health.HealthChecker;
 import org.apache.servicecomb.foundation.metrics.health.HealthCheckerManager;
 import org.apache.servicecomb.provider.rest.common.RestSchema;
 import org.springframework.web.bind.annotation.CrossOrigin;
@@ -44,7 +41,7 @@ public class HealthCheckerPublisher {
     return true;
   }
 
-  @RequestMapping(path = "/detail", method = RequestMethod.GET)
+  @RequestMapping(path = "/details", method = RequestMethod.GET)
   @CrossOrigin
   public Map<String, HealthCheckResult> checkHealthDetails() {
     return HealthCheckerManager.getInstance().check();
diff --git a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestHealthCheckerPublisher.java b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestHealthCheckerPublisher.java
index 037d3cd..613b252 100644
--- a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestHealthCheckerPublisher.java
+++ b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestHealthCheckerPublisher.java
@@ -24,12 +24,13 @@ import org.apache.servicecomb.foundation.metrics.health.HealthChecker;
 import org.apache.servicecomb.foundation.metrics.health.HealthCheckerManager;
 import org.apache.servicecomb.metrics.core.publish.HealthCheckerPublisher;
 import org.junit.Assert;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 public class TestHealthCheckerPublisher {
 
-  @Test
-  public void test() {
+  @BeforeClass
+  public static void setup() {
     HealthCheckerManager.getInstance().register(new HealthChecker() {
       @Override
       public String getName() {
@@ -53,13 +54,18 @@ public class TestHealthCheckerPublisher {
         return new HealthCheckResult(false, "info2", "extra data 2");
       }
     });
+  }
 
+  @Test
+  public void checkHealth() {
     HealthCheckerPublisher publisher = new HealthCheckerPublisher();
-
     Assert.assertEquals(false, publisher.checkHealth());
+  }
 
+  @Test
+  public void checkHealthDetails() {
+    HealthCheckerPublisher publisher = new HealthCheckerPublisher();
     Map<String, HealthCheckResult> content = publisher.checkHealthDetails();
-
     Assert.assertEquals(true, content.get("test").isHealthy());
     Assert.assertEquals("info", content.get("test").getInformation());
     Assert.assertEquals("extra data", content.get("test").getExtraData());
diff --git a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMetricsPublisher.java b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMetricsPublisher.java
index c310dd6..a38a0a9 100644
--- a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMetricsPublisher.java
+++ b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMetricsPublisher.java
@@ -25,7 +25,9 @@ import org.junit.Test;
 
 public class TestMetricsPublisher {
   @Test
-  public void test() {
+  public void testMeasure() {
+    System.getProperties().setProperty(MetricsConfig.METRICS_WINDOW_TIME, "2000");
+
     MetricsPublisher publisher = new MetricsPublisher();
     Map<String, Double> metrics = publisher.measure();
     //10 jvm metrics get
diff --git a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestEventAndRunner.java b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMonitorManager.java
similarity index 64%
rename from metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestEventAndRunner.java
rename to metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMonitorManager.java
index 88efd35..3f9e714 100644
--- a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestEventAndRunner.java
+++ b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestMonitorManager.java
@@ -29,13 +29,17 @@ import org.apache.servicecomb.foundation.metrics.publish.MetricNode;
 import org.apache.servicecomb.foundation.metrics.publish.MetricsLoader;
 import org.apache.servicecomb.swagger.invocation.InvocationType;
 import org.junit.Assert;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
-public class TestEventAndRunner {
+public class TestMonitorManager {
 
-  @Test
-  public void test() throws InterruptedException {
-    //init
+  private static MetricsLoader currentWindowMetricsLoader;
+
+  private static MetricsLoader nextWindowMetricsLoader;
+
+  @BeforeClass
+  public static void setup() throws InterruptedException {
     System.getProperties().setProperty(MetricsConfig.METRICS_WINDOW_TIME, "2000");
 
     //==========================================================================
@@ -74,19 +78,35 @@ public class TestEventAndRunner {
     //fun4 is a PRODUCER call only started and no processing start and finished
     EventBus.getInstance().triggerEvent(new InvocationStartedEvent("fun4", InvocationType.PRODUCER, System.nanoTime()));
 
-    //==========================================================================
-
     Map<String, Double> metrics = MonitorManager.getInstance().measure();
-    MetricsLoader loader = new MetricsLoader(metrics);
-    MetricNode node = loader
+    currentWindowMetricsLoader = new MetricsLoader(metrics);
+
+    //sim at lease one window time
+    Thread.sleep(2000);
+
+    metrics = MonitorManager.getInstance().measure();
+    nextWindowMetricsLoader = new MetricsLoader(metrics);
+  }
+
+  @Test
+  public void checkFun1WaitInQueue() {
+    MetricNode node = currentWindowMetricsLoader
         .getMetricTree(MetricsConst.SERVICECOMB_INVOCATION, MetricsConst.TAG_OPERATION, MetricsConst.TAG_ROLE,
             MetricsConst.TAG_STAGE);
-    //checkHealth ProducerMetrics
-    //fun1
     MetricNode node1_queue = node.getChildrenNode("fun1")
         .getChildrenNode(String.valueOf(InvocationType.PRODUCER).toLowerCase())
         .getChildrenNode(MetricsConst.STAGE_QUEUE);
     Assert.assertEquals(0, node1_queue.getMatchStatisticMetricValue("waitInQueue"), 0);
+  }
+
+  @Test
+  public void checkFun1Latency() {
+    MetricNode node = currentWindowMetricsLoader
+        .getMetricTree(MetricsConst.SERVICECOMB_INVOCATION, MetricsConst.TAG_OPERATION, MetricsConst.TAG_ROLE,
+            MetricsConst.TAG_STAGE);
+    MetricNode node1_queue = node.getChildrenNode("fun1")
+        .getChildrenNode(String.valueOf(InvocationType.PRODUCER).toLowerCase())
+        .getChildrenNode(MetricsConst.STAGE_QUEUE);
     MetricNode node1_queue_status = new MetricNode(node1_queue.getMetrics(), MetricsConst.TAG_STATUS);
     Assert.assertEquals(200,
         node1_queue_status.getChildrenNode("200").getMatchStatisticMetricValue(TimeUnit.MILLISECONDS, "latency"), 0);
@@ -110,75 +130,136 @@ public class TestEventAndRunner {
         node1_whole_status.getChildrenNode("200").getMatchStatisticMetricValue(TimeUnit.MILLISECONDS, "latency"), 0);
     Assert.assertEquals(700,
         node1_whole_status.getChildrenNode("500").getMatchStatisticMetricValue(TimeUnit.MILLISECONDS, "latency"), 0);
-    Assert.assertEquals(2, node1_whole_status.getChildrenNode("200").getMatchStatisticMetricValue("count"), 0);
-    Assert.assertEquals(1, node1_whole_status.getChildrenNode("500").getMatchStatisticMetricValue("count"), 0);
-
-    //checkHealth ConsumerMetrics
-    //fun2
-    MetricNode node2_whole = node.getChildrenNode("fun2")
-        .getChildrenNode(String.valueOf(InvocationType.CONSUMER).toLowerCase())
-        .getChildrenNode(MetricsConst.STAGE_TOTAL);
-    MetricNode node2_whole_status = new MetricNode(node2_whole.getMetrics(), MetricsConst.TAG_STATUS);
-    Assert.assertEquals(300,
-        node2_whole_status.getChildrenNode("200").getMatchStatisticMetricValue(TimeUnit.MILLISECONDS, "latency"), 0);
-    Assert.assertEquals(1, node2_whole_status.getChildrenNode("200").getMatchStatisticMetricValue("count"), 0);
-
-    //fun3
-    MetricNode node3_queue = node.getChildrenNode("fun3")
-        .getChildrenNode(String.valueOf(InvocationType.PRODUCER).toLowerCase())
-        .getChildrenNode(MetricsConst.STAGE_QUEUE);
-    Assert.assertEquals(0, node3_queue.getMatchStatisticMetricValue("waitInQueue"), 0);
+  }
 
-    //fun4
-    MetricNode node4_queue = node.getChildrenNode("fun4")
+  @Test
+  public void checkFun1Count() {
+    MetricNode node = currentWindowMetricsLoader
+        .getMetricTree(MetricsConst.SERVICECOMB_INVOCATION, MetricsConst.TAG_OPERATION, MetricsConst.TAG_ROLE,
+            MetricsConst.TAG_STAGE);
+    MetricNode node1_whole = node.getChildrenNode("fun1")
         .getChildrenNode(String.valueOf(InvocationType.PRODUCER).toLowerCase())
-        .getChildrenNode(MetricsConst.STAGE_QUEUE);
-    Assert.assertEquals(1, node4_queue.getMatchStatisticMetricValue("waitInQueue"), 0);
-
-    //sim at lease one window time
-    Thread.sleep(2000);
+        .getChildrenNode(MetricsConst.STAGE_TOTAL);
+    MetricNode node1_whole_status = new MetricNode(node1_whole.getMetrics(), MetricsConst.TAG_STATUS);
+    Assert.assertEquals(2, node1_whole_status.getChildrenNode("200").getMatchStatisticMetricValue("count"), 0);
+    Assert.assertEquals(1, node1_whole_status.getChildrenNode("500").getMatchStatisticMetricValue("count"), 0);
+  }
 
-    metrics = MonitorManager.getInstance().measure();
-    loader = new MetricsLoader(metrics);
-    node = loader
+  @Test
+  public void checkFun1Max() {
+    MetricNode node = nextWindowMetricsLoader
         .getMetricTree(MetricsConst.SERVICECOMB_INVOCATION, MetricsConst.TAG_OPERATION, MetricsConst.TAG_ROLE,
             MetricsConst.TAG_STAGE);
-
-    node1_queue = node.getChildrenNode("fun1").getChildrenNode(String.valueOf(InvocationType.PRODUCER).toLowerCase())
+    MetricNode node1_queue = node.getChildrenNode("fun1")
+        .getChildrenNode(String.valueOf(InvocationType.PRODUCER).toLowerCase())
         .getChildrenNode(MetricsConst.STAGE_QUEUE);
-    node1_queue_status = new MetricNode(node1_queue.getMetrics(), MetricsConst.TAG_STATUS);
+    MetricNode node1_queue_status = new MetricNode(node1_queue.getMetrics(), MetricsConst.TAG_STATUS);
     Assert.assertEquals(300,
         node1_queue_status.getChildrenNode("200").getMatchStatisticMetricValue(TimeUnit.MILLISECONDS, "max"), 0);
     Assert.assertEquals(300,
         node1_queue_status.getChildrenNode("500").getMatchStatisticMetricValue(TimeUnit.MILLISECONDS, "max"), 0);
 
-    node1_exec = node.getChildrenNode("fun1").getChildrenNode(String.valueOf(InvocationType.PRODUCER).toLowerCase())
+    MetricNode node1_exec = node.getChildrenNode("fun1")
+        .getChildrenNode(String.valueOf(InvocationType.PRODUCER).toLowerCase())
         .getChildrenNode(MetricsConst.STAGE_EXECUTION);
-    node1_exec_status = new MetricNode(node1_exec.getMetrics(), MetricsConst.TAG_STATUS);
+    MetricNode node1_exec_status = new MetricNode(node1_exec.getMetrics(), MetricsConst.TAG_STATUS);
     Assert.assertEquals(400,
         node1_exec_status.getChildrenNode("200").getMatchStatisticMetricValue(TimeUnit.MILLISECONDS, "max"), 0);
     Assert.assertEquals(400,
         node1_exec_status.getChildrenNode("500").getMatchStatisticMetricValue(TimeUnit.MILLISECONDS, "max"), 0);
 
-    node1_whole = node.getChildrenNode("fun1").getChildrenNode(String.valueOf(InvocationType.PRODUCER).toLowerCase())
+    MetricNode node1_whole = node.getChildrenNode("fun1")
+        .getChildrenNode(String.valueOf(InvocationType.PRODUCER).toLowerCase())
         .getChildrenNode(MetricsConst.STAGE_TOTAL);
-    node1_whole_status = new MetricNode(node1_whole.getMetrics(), MetricsConst.TAG_STATUS);
+    MetricNode node1_whole_status = new MetricNode(node1_whole.getMetrics(), MetricsConst.TAG_STATUS);
     Assert.assertEquals(700,
         node1_whole_status.getChildrenNode("200").getMatchStatisticMetricValue(TimeUnit.MILLISECONDS, "max"), 0);
     Assert.assertEquals(700,
         node1_whole_status.getChildrenNode("500").getMatchStatisticMetricValue(TimeUnit.MILLISECONDS, "max"), 0);
+  }
 
+  @Test
+  public void checkFun1Tps() {
+    MetricNode node = nextWindowMetricsLoader
+        .getMetricTree(MetricsConst.SERVICECOMB_INVOCATION, MetricsConst.TAG_OPERATION, MetricsConst.TAG_ROLE,
+            MetricsConst.TAG_STAGE);
+    MetricNode node1_whole = node.getChildrenNode("fun1")
+        .getChildrenNode(String.valueOf(InvocationType.PRODUCER).toLowerCase())
+        .getChildrenNode(MetricsConst.STAGE_TOTAL);
+    MetricNode node1_whole_status = new MetricNode(node1_whole.getMetrics(), MetricsConst.TAG_STATUS);
     Assert.assertEquals(1, node1_whole_status.getChildrenNode("200").getMatchStatisticMetricValue("tps"), 0);
     Assert.assertEquals(0.5, node1_whole_status.getChildrenNode("500").getMatchStatisticMetricValue("tps"), 0);
+  }
 
-    //checkHealth ConsumerMetrics
-    //fun2
-    node2_whole = node.getChildrenNode("fun2").getChildrenNode(String.valueOf(InvocationType.CONSUMER).toLowerCase())
+  @Test
+  public void checkFun2Latency() {
+    MetricNode node = currentWindowMetricsLoader
+        .getMetricTree(MetricsConst.SERVICECOMB_INVOCATION, MetricsConst.TAG_OPERATION, MetricsConst.TAG_ROLE,
+            MetricsConst.TAG_STAGE);
+    MetricNode node2_whole = node.getChildrenNode("fun2")
+        .getChildrenNode(String.valueOf(InvocationType.CONSUMER).toLowerCase())
         .getChildrenNode(MetricsConst.STAGE_TOTAL);
-    node2_whole_status = new MetricNode(node2_whole.getMetrics(), MetricsConst.TAG_STATUS);
+    MetricNode node2_whole_status = new MetricNode(node2_whole.getMetrics(), MetricsConst.TAG_STATUS);
     Assert.assertEquals(300,
-        node2_whole_status.getChildrenNode("200").getMatchStatisticMetricValue(TimeUnit.MILLISECONDS, "max"), 0);
+        node2_whole_status.getChildrenNode("200").getMatchStatisticMetricValue(TimeUnit.MILLISECONDS, "latency"), 0);
+  }
+
+  @Test
+  public void checkFun2Count() {
+    MetricNode node = currentWindowMetricsLoader
+        .getMetricTree(MetricsConst.SERVICECOMB_INVOCATION, MetricsConst.TAG_OPERATION, MetricsConst.TAG_ROLE,
+            MetricsConst.TAG_STAGE);
+    MetricNode node2_whole = node.getChildrenNode("fun2")
+        .getChildrenNode(String.valueOf(InvocationType.CONSUMER).toLowerCase())
+        .getChildrenNode(MetricsConst.STAGE_TOTAL);
+    MetricNode node2_whole_status = new MetricNode(node2_whole.getMetrics(), MetricsConst.TAG_STATUS);
+    Assert.assertEquals(1, node2_whole_status.getChildrenNode("200").getMatchStatisticMetricValue("count"), 0);
+  }
 
+  @Test
+  public void checkFun2Tps() {
+    MetricNode node = nextWindowMetricsLoader
+        .getMetricTree(MetricsConst.SERVICECOMB_INVOCATION, MetricsConst.TAG_OPERATION, MetricsConst.TAG_ROLE,
+            MetricsConst.TAG_STAGE);
+    MetricNode node2_whole = node.getChildrenNode("fun2")
+        .getChildrenNode(String.valueOf(InvocationType.CONSUMER).toLowerCase())
+        .getChildrenNode(MetricsConst.STAGE_TOTAL);
+    MetricNode node2_whole_status = new MetricNode(node2_whole.getMetrics(), MetricsConst.TAG_STATUS);
     Assert.assertEquals(0.5, node2_whole_status.getChildrenNode("200").getMatchStatisticMetricValue("tps"), 0);
   }
+
+  @Test
+  public void checkFun2Max() {
+    MetricNode node = nextWindowMetricsLoader
+        .getMetricTree(MetricsConst.SERVICECOMB_INVOCATION, MetricsConst.TAG_OPERATION, MetricsConst.TAG_ROLE,
+            MetricsConst.TAG_STAGE);
+    MetricNode node2_whole = node.getChildrenNode("fun2")
+        .getChildrenNode(String.valueOf(InvocationType.CONSUMER).toLowerCase())
+        .getChildrenNode(MetricsConst.STAGE_TOTAL);
+    MetricNode node2_whole_status = new MetricNode(node2_whole.getMetrics(), MetricsConst.TAG_STATUS);
+    Assert.assertEquals(300,
+        node2_whole_status.getChildrenNode("200").getMatchStatisticMetricValue(TimeUnit.MILLISECONDS, "max"), 0);
+  }
+
+  @Test
+  public void checkFun3WaitInQueue() {
+    MetricNode node = currentWindowMetricsLoader
+        .getMetricTree(MetricsConst.SERVICECOMB_INVOCATION, MetricsConst.TAG_OPERATION, MetricsConst.TAG_ROLE,
+            MetricsConst.TAG_STAGE);
+    MetricNode node3_queue = node.getChildrenNode("fun3")
+        .getChildrenNode(String.valueOf(InvocationType.PRODUCER).toLowerCase())
+        .getChildrenNode(MetricsConst.STAGE_QUEUE);
+    Assert.assertEquals(0, node3_queue.getMatchStatisticMetricValue("waitInQueue"), 0);
+  }
+
+  @Test
+  public void checkFun4WaitInQueue() {
+    MetricNode node = currentWindowMetricsLoader
+        .getMetricTree(MetricsConst.SERVICECOMB_INVOCATION, MetricsConst.TAG_OPERATION, MetricsConst.TAG_ROLE,
+            MetricsConst.TAG_STAGE);
+    MetricNode node4_queue = node.getChildrenNode("fun4")
+        .getChildrenNode(String.valueOf(InvocationType.PRODUCER).toLowerCase())
+        .getChildrenNode(MetricsConst.STAGE_QUEUE);
+    Assert.assertEquals(1, node4_queue.getMatchStatisticMetricValue("waitInQueue"), 0);
+  }
 }
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
ningjiang@apache.org.