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 2018/03/30 09:37:44 UTC
[incubator-servicecomb-java-chassis] branch master updated:
[SCB-443] fix randomly UT failure of TestProviderQpsFlowControlHandler
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/incubator-servicecomb-java-chassis.git
The following commit(s) were added to refs/heads/master by this push:
new 13743fe [SCB-443] fix randomly UT failure of TestProviderQpsFlowControlHandler
13743fe is described below
commit 13743fe38b44be36fefb4563507a295a536a0489
Author: yaohaishi <ya...@huawei.com>
AuthorDate: Wed Mar 28 16:09:00 2018 +0800
[SCB-443] fix randomly UT failure of TestProviderQpsFlowControlHandler
---
.../qps/TestConsumerQpsFlowControlHandler.java | 140 ++++++++---------
.../qps/TestProviderQpsFlowControlHandler.java | 173 +++++++++++----------
2 files changed, 158 insertions(+), 155 deletions(-)
diff --git a/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestConsumerQpsFlowControlHandler.java b/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestConsumerQpsFlowControlHandler.java
index 6359a7e..ea58948 100644
--- a/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestConsumerQpsFlowControlHandler.java
+++ b/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestConsumerQpsFlowControlHandler.java
@@ -17,16 +17,23 @@
package org.apache.servicecomb.qps;
+import static org.junit.Assert.assertEquals;
+
import java.util.concurrent.ConcurrentHashMap;
import org.apache.servicecomb.core.Invocation;
import org.apache.servicecomb.core.definition.OperationMeta;
import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
import org.apache.servicecomb.swagger.invocation.AsyncResponse;
+import org.apache.servicecomb.swagger.invocation.exception.CommonExceptionData;
+import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import mockit.Deencapsulation;
@@ -43,6 +50,9 @@ public class TestConsumerQpsFlowControlHandler {
OperationMeta operationMeta = Mockito.mock(OperationMeta.class);
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
@Before
public void setUP() {
ArchaiusUtils.resetConfig();
@@ -58,6 +68,13 @@ public class TestConsumerQpsFlowControlHandler {
@Test
public void testQpsController() {
+ // to avoid time influence on QpsController
+ new MockUp<System>() {
+ @Mock
+ long currentTimeMillis() {
+ return 1L;
+ }
+ };
QpsController qpsController = new QpsController("abc", 100);
Assert.assertEquals(false, qpsController.isLimitNewRequest());
@@ -66,80 +83,61 @@ public class TestConsumerQpsFlowControlHandler {
}
@Test
- public void testHandleWithException() {
- boolean validAssert;
- try {
- validAssert = true;
-
- handler.handle(invocation, asyncResp);
- } catch (Exception e) {
- validAssert = false;
- }
- Assert.assertFalse(validAssert);
- }
-
- @Test
- public void testHandle() {
- boolean validAssert;
- try {
- validAssert = true;
- String key = "svc.schema.opr";
- QpsController qpsController = new QpsController("key", 12);
- Mockito.when(invocation.getOperationMeta()).thenReturn(operationMeta);
- Mockito.when(operationMeta.getMicroserviceQualifiedName()).thenReturn(key);
- setQpsController(key, qpsController);
- new MockUp<QpsController>() {
- @Mock
- public boolean isLimitNewRequest() {
- return true;
- }
- };
-
- new MockUp<QpsControllerManager>() {
- @Mock
- protected QpsController create(String qualifiedNameKey) {
- return qpsController;
- }
- };
- handler.handle(invocation, asyncResp);
- } catch (Exception e) {
- e.printStackTrace();
- validAssert = false;
- }
- Assert.assertTrue(validAssert);
+ public void testHandle() throws Exception {
+ String key = "svc.schema.opr";
+ QpsController qpsController = new QpsController("key", 12);
+ Mockito.when(invocation.getOperationMeta()).thenReturn(operationMeta);
+ Mockito.when(operationMeta.getMicroserviceQualifiedName()).thenReturn(key);
+ setQpsController(key, qpsController);
+ new MockUp<QpsController>() {
+ @Mock
+ public boolean isLimitNewRequest() {
+ return true;
+ }
+ };
+
+ new MockUp<QpsControllerManager>() {
+ @Mock
+ protected QpsController create(String qualifiedNameKey) {
+ return qpsController;
+ }
+ };
+
+ handler.handle(invocation, asyncResp);
+
+ ArgumentCaptor<InvocationException> captor = ArgumentCaptor.forClass(InvocationException.class);
+ Mockito.verify(asyncResp).consumerFail(captor.capture());
+ InvocationException invocationException = captor.getValue();
+ assertEquals(QpsConst.TOO_MANY_REQUESTS_STATUS, invocationException.getStatus());
+ assertEquals("rejected by qps flowcontrol",
+ ((CommonExceptionData) invocationException.getErrorData()).getMessage());
}
@Test
- public void testHandleIsLimitNewRequestAsFalse() {
- boolean validAssert;
- try {
- validAssert = true;
- String key = "MicroserviceQualifiedName";
- QpsController qpsController = new QpsController("key", 12);
- Mockito.when(invocation.getOperationMeta()).thenReturn(operationMeta);
- Mockito.when(operationMeta.getMicroserviceQualifiedName()).thenReturn(key);
- setQpsController(key, qpsController);
-
- new MockUp<QpsController>() {
- @Mock
- public boolean isLimitNewRequest() {
- return false;
- }
- };
-
- new MockUp<QpsControllerManager>() {
-
- @Mock
- protected QpsController create(String qualifiedNameKey) {
- return qpsController;
- }
- };
- handler.handle(invocation, asyncResp);
- } catch (Exception e) {
- e.printStackTrace();
- validAssert = false;
- }
- Assert.assertTrue(validAssert);
+ public void testHandleIsLimitNewRequestAsFalse() throws Exception {
+ String key = "MicroserviceQualifiedName";
+ QpsController qpsController = new QpsController("key", 12);
+ Mockito.when(invocation.getOperationMeta()).thenReturn(operationMeta);
+ Mockito.when(operationMeta.getMicroserviceQualifiedName()).thenReturn(key);
+ setQpsController(key, qpsController);
+
+ new MockUp<QpsController>() {
+ @Mock
+ public boolean isLimitNewRequest() {
+ return false;
+ }
+ };
+
+ new MockUp<QpsControllerManager>() {
+
+ @Mock
+ protected QpsController create(String qualifiedNameKey) {
+ return qpsController;
+ }
+ };
+ handler.handle(invocation, asyncResp);
+
+ Mockito.verify(invocation).next(asyncResp);
}
private void setQpsController(String key, QpsController qpsController) {
diff --git a/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestProviderQpsFlowControlHandler.java b/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestProviderQpsFlowControlHandler.java
index 1bdf8a2..52cf625 100644
--- a/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestProviderQpsFlowControlHandler.java
+++ b/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestProviderQpsFlowControlHandler.java
@@ -17,17 +17,22 @@
package org.apache.servicecomb.qps;
-import static org.junit.Assert.fail;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.times;
import org.apache.servicecomb.core.Const;
import org.apache.servicecomb.core.Invocation;
import org.apache.servicecomb.core.definition.OperationMeta;
import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
import org.apache.servicecomb.swagger.invocation.AsyncResponse;
+import org.apache.servicecomb.swagger.invocation.exception.CommonExceptionData;
+import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
import org.junit.After;
-import org.junit.Assert;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import mockit.Expectations;
@@ -44,6 +49,9 @@ public class TestProviderQpsFlowControlHandler {
OperationMeta operationMeta = Mockito.mock(OperationMeta.class);
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
@Before
public void setUP() {
ArchaiusUtils.resetConfig();
@@ -71,109 +79,106 @@ public class TestProviderQpsFlowControlHandler {
result = new RuntimeException("test error");
}
};
+ mockUpSystemTime();
ProviderQpsFlowControlHandler gHandler = new ProviderQpsFlowControlHandler();
gHandler.handle(invocation, asyncResp);
Utils.updateProperty(Config.PROVIDER_LIMIT_KEY_GLOBAL, 3);
- int count = 1;
- try {
- gHandler.handle(invocation, asyncResp);
- count++;
- gHandler.handle(invocation, asyncResp);
- fail("An exception is expected!");
- } catch (Exception e) {
- Assert.assertEquals(2, count);
- Assert.assertEquals("test error", e.getMessage());
- }
+ expectedException.expect(RuntimeException.class);
+ expectedException.expectMessage("test error");
+
+ gHandler.handle(invocation, asyncResp);
+ gHandler.handle(invocation, asyncResp);
}
+
@Test
public void testQpsController() {
+ mockUpSystemTime();
QpsController qpsController = new QpsController("abc", 100);
- Assert.assertEquals(false, qpsController.isLimitNewRequest());
+ assertEquals(false, qpsController.isLimitNewRequest());
qpsController.setQpsLimit(1);
- Assert.assertEquals(true, qpsController.isLimitNewRequest());
+ assertEquals(true, qpsController.isLimitNewRequest());
}
@Test
- public void testHandleWithException() {
- boolean validAssert;
- try {
- Mockito.when(invocation.getContext(Const.SRC_MICROSERVICE)).thenReturn(null);
-
- validAssert = true;
- handler.handle(invocation, asyncResp);
- handler.handle(invocation, asyncResp);
- } catch (Exception e) {
- e.printStackTrace();
- validAssert = false;
- }
- Assert.assertTrue(validAssert);
+ public void testHandleOnSourceMicroserviceNameIsNull() throws Exception {
+ Mockito.when(invocation.getContext(Const.SRC_MICROSERVICE)).thenReturn(null);
+
+ handler.handle(invocation, asyncResp);
+ handler.handle(invocation, asyncResp);
+
+ Mockito.verify(invocation, times(2)).next(asyncResp);
}
@Test
- public void testHandle() {
- boolean validAssert;
- try {
- validAssert = true;
- Mockito.when(invocation.getContext(Const.SRC_MICROSERVICE)).thenReturn("test");
- OperationMeta mockOperationMeta = QpsControllerManagerTest.getMockOperationMeta("pojo", "server", "opr");
- Mockito.when(invocation.getOperationMeta()).thenReturn(mockOperationMeta);
-
- new MockUp<QpsController>() {
- @Mock
- public boolean isLimitNewRequest() {
- return true;
- }
- };
-
- new MockUp<QpsControllerManager>() {
-
- @Mock
- protected QpsController create(String qualifiedNameKey) {
- return new QpsController(qualifiedNameKey, 12);
- }
- };
- handler.handle(invocation, asyncResp);
- } catch (Exception e) {
- e.printStackTrace();
- validAssert = false;
- }
- Assert.assertTrue(validAssert);
+ public void testHandle() throws Exception {
+ Mockito.when(invocation.getContext(Const.SRC_MICROSERVICE)).thenReturn("test");
+ OperationMeta mockOperationMeta = QpsControllerManagerTest.getMockOperationMeta("pojo", "server", "opr");
+ Mockito.when(invocation.getOperationMeta()).thenReturn(mockOperationMeta);
+
+ new MockUp<QpsController>() {
+ @Mock
+ public boolean isLimitNewRequest() {
+ return true;
+ }
+ };
+
+ new MockUp<QpsControllerManager>() {
+
+ @Mock
+ protected QpsController create(String qualifiedNameKey) {
+ return new QpsController(qualifiedNameKey, 12);
+ }
+ };
+
+ handler.handle(invocation, asyncResp);
+
+ ArgumentCaptor<InvocationException> captor = ArgumentCaptor.forClass(InvocationException.class);
+ Mockito.verify(asyncResp).producerFail(captor.capture());
+
+ InvocationException invocationException = captor.getValue();
+ assertEquals(QpsConst.TOO_MANY_REQUESTS_STATUS, invocationException.getStatus());
+ assertEquals("rejected by qps flowcontrol",
+ ((CommonExceptionData) invocationException.getErrorData()).getMessage());
}
@Test
- public void testHandleIsLimitNewRequestAsFalse() {
- boolean validAssert;
- try {
- validAssert = true;
- Mockito.when(invocation.getContext(Const.SRC_MICROSERVICE)).thenReturn("test");
- OperationMeta mockOperationMeta = QpsControllerManagerTest
- .getMockOperationMeta("pojo", "server", "opr");
- Mockito.when(invocation.getOperationMeta()).thenReturn(mockOperationMeta);
-
- new MockUp<QpsController>() {
- @Mock
- public boolean isLimitNewRequest() {
- return false;
- }
- };
-
- new MockUp<QpsControllerManager>() {
-
- @Mock
- protected QpsController create(String qualifiedNameKey) {
- return new QpsController(qualifiedNameKey, 12);
- }
- };
- handler.handle(invocation, asyncResp);
- } catch (Exception e) {
- e.printStackTrace();
- validAssert = false;
- }
- Assert.assertTrue(validAssert);
+ public void testHandleIsLimitNewRequestAsFalse() throws Exception {
+ Mockito.when(invocation.getContext(Const.SRC_MICROSERVICE)).thenReturn("test");
+ OperationMeta mockOperationMeta = QpsControllerManagerTest
+ .getMockOperationMeta("pojo", "server", "opr");
+ Mockito.when(invocation.getOperationMeta()).thenReturn(mockOperationMeta);
+
+ new MockUp<QpsController>() {
+ @Mock
+ public boolean isLimitNewRequest() {
+ return false;
+ }
+ };
+
+ new MockUp<QpsControllerManager>() {
+
+ @Mock
+ protected QpsController create(String qualifiedNameKey) {
+ return new QpsController(qualifiedNameKey, 12);
+ }
+ };
+ handler.handle(invocation, asyncResp);
+
+ Mockito.verify(invocation).next(asyncResp);
+ }
+
+ private void mockUpSystemTime() {
+ // to avoid time influence on QpsController
+ new MockUp<System>() {
+ @Mock
+ long currentTimeMillis() {
+ return 1L;
+ }
+ };
}
}
--
To stop receiving notification emails like this one, please contact
liubao@apache.org.