migrate edge-core to mockito (#3313)
diff --git a/edge/edge-core/pom.xml b/edge/edge-core/pom.xml
index 03d5f90..e5892ff 100644
--- a/edge/edge-core/pom.xml
+++ b/edge/edge-core/pom.xml
@@ -62,8 +62,8 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.jmockit</groupId>
- <artifactId>jmockit</artifactId>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-inline</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/URLMappedEdgeDispatcher.java b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/URLMappedEdgeDispatcher.java
index 3cff759..baac1b2 100644
--- a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/URLMappedEdgeDispatcher.java
+++ b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/URLMappedEdgeDispatcher.java
@@ -20,6 +20,7 @@
import java.util.HashMap;
import java.util.Map;
+import com.google.common.annotations.VisibleForTesting;
import io.vertx.ext.web.handler.PlatformHandler;
import org.apache.servicecomb.transport.rest.vertx.RestBodyHandler;
import org.slf4j.Logger;
@@ -57,6 +58,11 @@
}
}
+ @VisibleForTesting
+ public Map<String, URLMappedConfigurationItem> getConfigurations() {
+ return configurations;
+ }
+
@Override
public int getOrder() {
return DynamicPropertyFactory.getInstance().getIntProperty(KEY_ORDER, 30_000).get();
diff --git a/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestAbstractEdgeDispatcher.java b/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestAbstractEdgeDispatcher.java
index dc67268..06275aa 100644
--- a/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestAbstractEdgeDispatcher.java
+++ b/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestAbstractEdgeDispatcher.java
@@ -17,9 +17,6 @@
package org.apache.servicecomb.edge.core;
-import java.util.HashMap;
-import java.util.Map;
-
import org.apache.servicecomb.foundation.test.scaffolding.exception.RuntimeExceptionWithoutStackTrace;
import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
import org.junit.Test;
@@ -27,11 +24,7 @@
import io.vertx.core.http.HttpServerResponse;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.RoutingContext;
-import mockit.Expectations;
-import mockit.Mock;
-import mockit.MockUp;
-import mockit.Mocked;
-import org.junit.jupiter.api.Assertions;
+import org.mockito.Mockito;
public class TestAbstractEdgeDispatcher {
static class AbstractEdgeDispatcherForTest extends AbstractEdgeDispatcher {
@@ -46,51 +39,25 @@
}
@Test
- public void onFailure(@Mocked RoutingContext context) {
- Map<String, Object> map = new HashMap<>();
- HttpServerResponse response = new MockUp<HttpServerResponse>() {
- @Mock
- HttpServerResponse setStatusCode(int statusCode) {
- map.put("code", statusCode);
- return null;
- }
+ public void onFailure() {
+ RoutingContext context = Mockito.mock(RoutingContext.class);
- @Mock
- HttpServerResponse setStatusMessage(String statusMessage) {
- map.put("msg", statusMessage);
- return null;
- }
- }.getMockInstance();
+ HttpServerResponse response = Mockito.mock(HttpServerResponse.class);
- new Expectations() {
- {
- context.failure();
- returns(new RuntimeExceptionWithoutStackTrace("failed"), null);
- context.response();
- result = response;
- }
- };
+ Mockito.when(context.response()).thenReturn(response);
+ Mockito.when(context.failure()).thenReturn(new RuntimeExceptionWithoutStackTrace("failed"));
AbstractEdgeDispatcherForTest dispatcher = new AbstractEdgeDispatcherForTest();
dispatcher.onFailure(context);
- Assertions.assertEquals(502, map.get("code"));
- Assertions.assertEquals("Bad Gateway", map.get("msg"));
+ Mockito.verify(response).setStatusMessage("Bad Gateway");
+ Mockito.verify(response).setStatusCode(502);
- new Expectations() {
- {
- context.failure();
- returns(new InvocationException(401, "unauthorized", "unauthorized"),
- new InvocationException(401, "unauthorized", "unauthorized"));
- context.response();
- result = response;
- }
- };
+ Mockito.when(context.failure()).thenReturn(new InvocationException(401, "unauthorized", "unauthorized"));
dispatcher = new AbstractEdgeDispatcherForTest();
dispatcher.onFailure(context);
-
- Assertions.assertEquals(401, map.get("code"));
- Assertions.assertEquals("unauthorized", map.get("msg"));
+ Mockito.verify(response).setStatusMessage("unauthorized");
+ Mockito.verify(response).setStatusCode(401);
}
}
diff --git a/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestDefaultEdgeDispatcher.java b/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestDefaultEdgeDispatcher.java
index e367a3d..ff1aa62 100644
--- a/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestDefaultEdgeDispatcher.java
+++ b/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestDefaultEdgeDispatcher.java
@@ -20,21 +20,22 @@
import static org.apache.servicecomb.edge.core.DefaultEdgeDispatcher.MICROSERVICE_NAME;
import static org.apache.servicecomb.edge.core.DefaultEdgeDispatcher.VERSION;
-import org.apache.servicecomb.core.SCBEngine;
+import io.vertx.core.Context;
+import io.vertx.core.Vertx;
+import io.vertx.core.buffer.Buffer;
+import io.vertx.ext.web.RequestBody;
import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import io.vertx.core.Handler;
import io.vertx.core.http.HttpServerRequest;
import io.vertx.ext.web.Route;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.RoutingContext;
-import mockit.Deencapsulation;
-import mockit.Expectations;
-import mockit.Mocked;
import org.junit.jupiter.api.Assertions;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
public class TestDefaultEdgeDispatcher {
@Before
@@ -49,45 +50,42 @@
@Test
@SuppressWarnings("unchecked")
- public void testOnRequest(@Mocked Router router, @Mocked Route route
- , @Mocked RoutingContext context
- , @Mocked HttpServerRequest requst
- , @Mocked EdgeInvocation invocation) {
+ public void testOnRequest() {
DefaultEdgeDispatcher dispatcher = new DefaultEdgeDispatcher() {
@Override
protected boolean isFilterChainEnabled() {
return false;
}
};
-
- new Expectations(SCBEngine.class) {
- {
- router.routeWithRegex(dispatcher.generateRouteRegex("api", true));
- result = route;
- route.handler((Handler<RoutingContext>) any);
- result = route;
- route.failureHandler((Handler<RoutingContext>) any);
- result = route;
- context.pathParam(MICROSERVICE_NAME);
- result = "testService";
- context.pathParam(VERSION);
- result = "v1";
- context.request();
- result = requst;
- requst.path();
- result = "/api/testService/v1/hello";
- invocation.setVersionRule("1.0.0.0-2.0.0.0");
- invocation.init("testService", context, "/testService/v1/hello",
- Deencapsulation.getField(dispatcher, "httpServerFilters"));
- invocation.edgeInvoke();
- }
- };
+ Router router = Mockito.mock(Router.class);
+ Route route = Mockito.mock(Route.class);
+ RoutingContext context = Mockito.mock(RoutingContext.class);
+ EdgeInvocation invocation = Mockito.mock(EdgeInvocation.class);
+ dispatcher = Mockito.spy(dispatcher);
+ HttpServerRequest request = Mockito.mock(HttpServerRequest.class);
+ Mockito.when(router.routeWithRegex(dispatcher.generateRouteRegex("api", true))).thenReturn(route);
+ Mockito.when(route.handler(Mockito.any())).thenReturn(route);
+ Mockito.when(route.failureHandler(Mockito.any())).thenReturn(route);
+ RequestBody body = Mockito.mock(RequestBody.class);
+ Mockito.when(context.body()).thenReturn(body);
+ Mockito.when(body.buffer()).thenReturn(Mockito.mock(Buffer.class));
+ Mockito.when(context.pathParam(MICROSERVICE_NAME)).thenReturn("testService");
+ Mockito.when(context.pathParam(VERSION)).thenReturn("v1");
+ Mockito.when(context.request()).thenReturn(request);
+ Mockito.when(request.path()).thenReturn("/api/testService/v1/hello");
+ Mockito.when(dispatcher.createEdgeInvocation()).thenReturn(invocation);
+ invocation.setVersionRule("2.0.0+");
+ invocation.init("serviceName", context, "/c/d/e", dispatcher.getHttpServerFilters());
+ Mockito.doNothing().when(invocation).edgeInvoke();
dispatcher.init(router);
Assertions.assertFalse(dispatcher.enabled());
Assertions.assertEquals(Utils.findActualPath("/api/test", 1), "/test");
Assertions.assertEquals(dispatcher.getOrder(), 20000);
- dispatcher.onRequest(context);
- // assert done in expectations.
+ try (MockedStatic<Vertx> vertxMockedStatic = Mockito.mockStatic(Vertx.class)) {
+ vertxMockedStatic.when(Vertx::currentContext).thenReturn(Mockito.mock(Context.class));
+ dispatcher.onRequest(context);
+ // assert done in expectations.
+ }
}
}
diff --git a/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestURLMappedEdgeDispatcher.java b/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestURLMappedEdgeDispatcher.java
index 1995768..c68f83e 100644
--- a/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestURLMappedEdgeDispatcher.java
+++ b/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestURLMappedEdgeDispatcher.java
@@ -19,6 +19,10 @@
import java.util.Map;
+import io.vertx.core.Context;
+import io.vertx.core.Vertx;
+import io.vertx.core.buffer.Buffer;
+import io.vertx.ext.web.RequestBody;
import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
import org.apache.servicecomb.transport.rest.vertx.RestBodyHandler;
import org.junit.After;
@@ -27,10 +31,9 @@
import io.vertx.core.http.HttpServerRequest;
import io.vertx.ext.web.RoutingContext;
-import mockit.Deencapsulation;
-import mockit.Expectations;
-import mockit.Mocked;
import org.junit.jupiter.api.Assertions;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
public class TestURLMappedEdgeDispatcher {
@Before
@@ -43,30 +46,24 @@
}
@Test
- public void testConfigurations(@Mocked RoutingContext context
- , @Mocked HttpServerRequest requst
- , @Mocked EdgeInvocation invocation) {
+ public void testConfigurations() {
ArchaiusUtils.setProperty("servicecomb.http.dispatcher.edge.url.enabled", true);
URLMappedEdgeDispatcher dispatcher = new URLMappedEdgeDispatcher();
- Map<String, URLMappedConfigurationItem> items = Deencapsulation
- .getField(dispatcher, "configurations");
+ Map<String, URLMappedConfigurationItem> items = dispatcher.getConfigurations();
Assertions.assertEquals(items.size(), 0);
- new Expectations() {
- {
- context.get(RestBodyHandler.BYPASS_BODY_HANDLER);
- result = Boolean.TRUE;
- context.next();
- }
- };
+ RoutingContext context = Mockito.mock(RoutingContext.class);
+ HttpServerRequest request = Mockito.mock(HttpServerRequest.class);
+ EdgeInvocation invocation = Mockito.mock(EdgeInvocation.class);
+ Mockito.when(context.get(RestBodyHandler.BYPASS_BODY_HANDLER)).thenReturn(Boolean.TRUE);
dispatcher.onRequest(context);
ArchaiusUtils.setProperty("servicecomb.http.dispatcher.edge.url.mappings.service1.path", "/a/b/c/.*");
ArchaiusUtils.setProperty("servicecomb.http.dispatcher.edge.url.mappings.service1.microserviceName", "serviceName");
ArchaiusUtils.setProperty("servicecomb.http.dispatcher.edge.url.mappings.service1.prefixSegmentCount", 2);
ArchaiusUtils.setProperty("servicecomb.http.dispatcher.edge.url.mappings.service1.versionRule", "2.0.0+");
- items = Deencapsulation.getField(dispatcher, "configurations");
+ items = dispatcher.getConfigurations();
Assertions.assertEquals(items.size(), 1);
URLMappedConfigurationItem item = items.get("service1");
Assertions.assertEquals(item.getMicroserviceName(), "serviceName");
@@ -76,7 +73,7 @@
ArchaiusUtils.setProperty("servicecomb.http.dispatcher.edge.url.mappings.service2.versionRule", "2.0.0+");
ArchaiusUtils.setProperty("servicecomb.http.dispatcher.edge.url.mappings.service3.path", "/b/c/d/.*");
- items = Deencapsulation.getField(dispatcher, "configurations");
+ items = dispatcher.getConfigurations();
Assertions.assertEquals(items.size(), 1);
item = items.get("service1");
Assertions.assertEquals(item.getMicroserviceName(), "serviceName");
@@ -85,23 +82,21 @@
Assertions.assertEquals(item.getVersionRule(), "2.0.0+");
URLMappedConfigurationItem finalItem = item;
- new Expectations() {
- {
- context.get(RestBodyHandler.BYPASS_BODY_HANDLER);
- result = Boolean.FALSE;
- context.get(URLMappedEdgeDispatcher.CONFIGURATION_ITEM);
- result = finalItem;
-
- context.request();
- result = requst;
- requst.path();
- result = "/a/b/c/d/e";
- invocation.setVersionRule("2.0.0+");
- invocation.init("serviceName", context, "/c/d/e",
- Deencapsulation.getField(dispatcher, "httpServerFilters"));
- invocation.edgeInvoke();
- }
- };
- dispatcher.onRequest(context);
+ try (MockedStatic<Vertx> vertxMockedStatic = Mockito.mockStatic(Vertx.class)) {
+ vertxMockedStatic.when(Vertx::currentContext).thenReturn(Mockito.mock(Context.class));
+ dispatcher = Mockito.spy(dispatcher);
+ RequestBody body = Mockito.mock(RequestBody.class);
+ Mockito.when(context.body()).thenReturn(body);
+ Mockito.when(body.buffer()).thenReturn(Mockito.mock(Buffer.class));
+ Mockito.when(context.get(RestBodyHandler.BYPASS_BODY_HANDLER)).thenReturn(Boolean.FALSE);
+ Mockito.when(context.get(URLMappedEdgeDispatcher.CONFIGURATION_ITEM)).thenReturn(finalItem);
+ Mockito.when(context.request()).thenReturn(request);
+ Mockito.when(request.path()).thenReturn("/a/b/c/d/e");
+ Mockito.when(dispatcher.createEdgeInvocation()).thenReturn(invocation);
+ invocation.setVersionRule("2.0.0+");
+ invocation.init("serviceName", context, "/c/d/e", dispatcher.getHttpServerFilters());
+ Mockito.doNothing().when(invocation).edgeInvoke();
+ dispatcher.onRequest(context);
+ }
}
}
diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/AbstractVertxHttpDispatcher.java b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/AbstractVertxHttpDispatcher.java
index d87d4f2..372fbe1 100644
--- a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/AbstractVertxHttpDispatcher.java
+++ b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/AbstractVertxHttpDispatcher.java
@@ -19,6 +19,7 @@
import java.util.List;
+import com.google.common.annotations.VisibleForTesting;
import org.apache.servicecomb.common.rest.UploadConfig;
import org.apache.servicecomb.common.rest.filter.HttpServerFilter;
import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
@@ -32,6 +33,11 @@
protected List<HttpServerFilter> httpServerFilters = SPIServiceUtils.getSortedService(HttpServerFilter.class);
+ @VisibleForTesting
+ public List<HttpServerFilter> getHttpServerFilters() {
+ return httpServerFilters;
+ }
+
protected BodyHandler createBodyHandler() {
RestBodyHandler bodyHandler = new RestBodyHandler();