You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2020/03/31 10:58:42 UTC

[servicecomb-java-chassis] 02/02: [SCB-1824] fix unit test random fail due to MockClasses.getMock throw NPE

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

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

commit f79d90e11021b7bd154a20c448e3773a9dd7f439
Author: liubao <bi...@qq.com>
AuthorDate: Tue Mar 31 11:11:16 2020 +0800

    [SCB-1824] fix unit test random fail due to MockClasses.getMock throw NPE
---
 ...cker.java => TestInstanceCacheCheckerMock.java} |  64 ++----------
 .../TestInstanceCacheCheckerWithoutMock.java       | 116 +++++++++++++++++++++
 2 files changed, 125 insertions(+), 55 deletions(-)

diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/diagnosis/instance/TestInstanceCacheChecker.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/diagnosis/instance/TestInstanceCacheCheckerMock.java
similarity index 83%
rename from service-registry/src/test/java/org/apache/servicecomb/serviceregistry/diagnosis/instance/TestInstanceCacheChecker.java
rename to service-registry/src/test/java/org/apache/servicecomb/serviceregistry/diagnosis/instance/TestInstanceCacheCheckerMock.java
index 01d7cca..8df0ebb 100644
--- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/diagnosis/instance/TestInstanceCacheChecker.java
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/diagnosis/instance/TestInstanceCacheCheckerMock.java
@@ -16,10 +16,7 @@
  */
 package org.apache.servicecomb.serviceregistry.diagnosis.instance;
 
-import io.vertx.core.json.Json;
-import mockit.Deencapsulation;
-import mockit.Mock;
-import mockit.MockUp;
+import java.util.ArrayList;
 
 import org.apache.servicecomb.foundation.common.Holder;
 import org.apache.servicecomb.foundation.common.testing.MockClock;
@@ -30,7 +27,6 @@ import org.apache.servicecomb.serviceregistry.api.registry.MicroserviceInstance;
 import org.apache.servicecomb.serviceregistry.api.response.FindInstancesResponse;
 import org.apache.servicecomb.serviceregistry.client.http.MicroserviceInstances;
 import org.apache.servicecomb.serviceregistry.consumer.AppManager;
-import org.apache.servicecomb.serviceregistry.consumer.MicroserviceVersionRule;
 import org.apache.servicecomb.serviceregistry.consumer.MicroserviceVersions;
 import org.apache.servicecomb.serviceregistry.definition.DefinitionConst;
 import org.apache.servicecomb.serviceregistry.diagnosis.Status;
@@ -42,12 +38,13 @@ import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
+import io.vertx.core.json.Json;
+import mockit.Deencapsulation;
+import mockit.Mock;
+import mockit.MockUp;
 
-public class TestInstanceCacheChecker {
-  private static final Logger LOGGER = LoggerFactory.getLogger(TestInstanceCacheChecker.class);
+public class TestInstanceCacheCheckerMock {
+  private static final Logger LOGGER = LoggerFactory.getLogger(TestInstanceCacheCheckerWithoutMock.class);
 
   AppManager originalAppManager = RegistryUtils.getAppManager();
 
@@ -80,27 +77,7 @@ public class TestInstanceCacheChecker {
     RegistryUtils.setServiceRegistry(null);
   }
 
-  @Test
-  public void check_appManager_empty() {
-    InstanceCacheSummary instanceCacheSummary = checker.check();
-
-    Assert.assertEquals(Json.encode(expectedSummary), Json.encode(instanceCacheSummary));
-  }
-
-  @Test
-  public void check_microserviceManager_empty() {
-    try {
-      appId = "notExist";
-      RegistryUtils.getAppManager().getOrCreateMicroserviceVersions(appId, microserviceName);
-      InstanceCacheSummary instanceCacheSummary = checker.check();
-      Assert.assertEquals(Json.encode(expectedSummary), Json.encode(instanceCacheSummary));
-    } catch (Exception e) {
-      LOGGER.error("", e);
-      Assert.fail();
-    }
-  }
-
-  protected Holder<MicroserviceInstances> createFindServiceInstancesResult() {
+  private Holder<MicroserviceInstances> createFindServiceInstancesResult() {
     MicroserviceInstances microserviceInstances = new MicroserviceInstances();
     microserviceInstances.setNeedRefresh(true);
     microserviceInstances.setRevision("first");
@@ -113,7 +90,7 @@ public class TestInstanceCacheChecker {
     return findHolder;
   }
 
-  protected void registerMicroservice(String appId, String microserviceName) {
+  private void registerMicroservice(String appId, String microserviceName) {
     Microservice microservice = new Microservice();
     microservice.setAppId(appId);
     microservice.setServiceName(microserviceName);
@@ -266,27 +243,4 @@ public class TestInstanceCacheChecker {
     Assert.assertEquals(Json.encode(expectedSummary), Json.encode(instanceCacheSummary));
     Assert.assertNull(microserviceVersions.getRevision());
   }
-
-  @Test
-  public void check_StaticMicroservice() {
-    microserviceName = appId + ":" + microserviceName;
-    serviceRegistry.registerMicroserviceMappingByEndpoints(microserviceName,
-        "1",
-        Arrays.asList("rest://localhost:8080"),
-        ThirdPartyServiceForUT.class);
-
-    MicroserviceVersionRule microserviceVersionRule = RegistryUtils.getAppManager()
-        .getOrCreateMicroserviceVersionRule(appId, microserviceName, DefinitionConst.VERSION_RULE_ALL);
-    Assert.assertEquals(microserviceName, microserviceVersionRule.getLatestMicroserviceVersion().getMicroserviceName());
-
-    InstanceCacheSummary instanceCacheSummary = checker.check();
-
-    expectedSummary.setStatus(Status.NORMAL);
-
-    Assert.assertEquals(Json.encode(expectedSummary), Json.encode(instanceCacheSummary));
-  }
-
-  private interface ThirdPartyServiceForUT {
-    String sayHello(String name);
-  }
 }
diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/diagnosis/instance/TestInstanceCacheCheckerWithoutMock.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/diagnosis/instance/TestInstanceCacheCheckerWithoutMock.java
new file mode 100644
index 0000000..6edc0b2
--- /dev/null
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/diagnosis/instance/TestInstanceCacheCheckerWithoutMock.java
@@ -0,0 +1,116 @@
+/*
+ * 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.servicecomb.serviceregistry.diagnosis.instance;
+
+import java.util.Arrays;
+
+import org.apache.servicecomb.foundation.common.Holder;
+import org.apache.servicecomb.foundation.common.testing.MockClock;
+import org.apache.servicecomb.serviceregistry.RegistryUtils;
+import org.apache.servicecomb.serviceregistry.ServiceRegistry;
+import org.apache.servicecomb.serviceregistry.consumer.AppManager;
+import org.apache.servicecomb.serviceregistry.consumer.MicroserviceVersionRule;
+import org.apache.servicecomb.serviceregistry.definition.DefinitionConst;
+import org.apache.servicecomb.serviceregistry.diagnosis.Status;
+import org.apache.servicecomb.serviceregistry.registry.ServiceRegistryFactory;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.vertx.core.json.Json;
+import mockit.Deencapsulation;
+
+public class TestInstanceCacheCheckerWithoutMock {
+  private static final Logger LOGGER = LoggerFactory.getLogger(TestInstanceCacheCheckerWithoutMock.class);
+
+  AppManager originalAppManager = RegistryUtils.getAppManager();
+
+  ServiceRegistry serviceRegistry = ServiceRegistryFactory.createLocal();
+
+  InstanceCacheChecker checker;
+
+  InstanceCacheSummary expectedSummary = new InstanceCacheSummary();
+
+  String appId = "appId";
+
+  String microserviceName = "msName";
+
+  @Before
+  public void setUp() throws Exception {
+    Deencapsulation.setField(RegistryUtils.class, "appManager", new AppManager());
+
+    serviceRegistry.init();
+    RegistryUtils.setServiceRegistry(serviceRegistry);
+
+    checker = new InstanceCacheChecker(RegistryUtils.getAppManager());
+    checker.clock = new MockClock(new Holder<>(1L));
+    expectedSummary.setStatus(Status.NORMAL);
+    expectedSummary.setTimestamp(1);
+  }
+
+  @After
+  public void tearDown() throws Exception {
+    Deencapsulation.setField(RegistryUtils.class, "appManager", originalAppManager);
+    RegistryUtils.setServiceRegistry(null);
+  }
+
+  @Test
+  public void check_appManager_empty() {
+    InstanceCacheSummary instanceCacheSummary = checker.check();
+
+    Assert.assertEquals(Json.encode(expectedSummary), Json.encode(instanceCacheSummary));
+  }
+
+  @Test
+  public void check_microserviceManager_empty() {
+    try {
+      appId = "notExist";
+      RegistryUtils.getAppManager().getOrCreateMicroserviceVersions(appId, microserviceName);
+      InstanceCacheSummary instanceCacheSummary = checker.check();
+      Assert.assertEquals(Json.encode(expectedSummary), Json.encode(instanceCacheSummary));
+    } catch (Exception e) {
+      LOGGER.error("", e);
+      Assert.fail();
+    }
+  }
+
+  @Test
+  public void check_StaticMicroservice() {
+    microserviceName = appId + ":" + microserviceName;
+    serviceRegistry.registerMicroserviceMappingByEndpoints(microserviceName,
+        "1",
+        Arrays.asList("rest://localhost:8080"),
+        ThirdPartyServiceForUT.class);
+
+    MicroserviceVersionRule microserviceVersionRule = RegistryUtils.getAppManager()
+        .getOrCreateMicroserviceVersionRule(appId, microserviceName, DefinitionConst.VERSION_RULE_ALL);
+    Assert.assertEquals(microserviceName, microserviceVersionRule.getLatestMicroserviceVersion().getMicroserviceName());
+
+    InstanceCacheSummary instanceCacheSummary = checker.check();
+
+    expectedSummary.setStatus(Status.NORMAL);
+
+    Assert.assertEquals(Json.encode(expectedSummary), Json.encode(instanceCacheSummary));
+  }
+
+  private interface ThirdPartyServiceForUT {
+    String sayHello(String name);
+  }
+}