blob: ebc8cd13b3b39ec8b80d4881e4d8e8352ed4978d [file] [log] [blame]
/*
* 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.faultinjection;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.servicecomb.core.Invocation;
import org.apache.servicecomb.core.Transport;
import org.apache.servicecomb.core.definition.OperationMeta;
import org.apache.servicecomb.foundation.common.Holder;
import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
import org.apache.servicecomb.foundation.vertx.VertxUtils;
import org.apache.servicecomb.swagger.invocation.AsyncResponse;
import org.apache.servicecomb.swagger.invocation.Response;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.Assertions;
import org.mockito.InjectMocks;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import io.vertx.core.Vertx;
/**
* Tests the fault injection handler functionality.
*/
public class TestFaultInjectHandler {
FaultInjectionHandler handler;
Invocation invocation;
AsyncResponse asyncResp;
OperationMeta operationMeta;
private Transport transport;
Response response;
boolean isDelay;
boolean isAbort;
@InjectMocks
AbortFault abortFault;
@InjectMocks
DelayFault delayFault;
AsyncResponse ar = new AsyncResponse() {
@Override
public void handle(Response resp) {
response = resp;
}
};
@Before
public void setUp() {
ArchaiusUtils.resetConfig();
handler = new FaultInjectionHandler();
invocation = Mockito.mock(Invocation.class);
asyncResp = Mockito.mock(AsyncResponse.class);
operationMeta = Mockito.mock(OperationMeta.class);
transport = Mockito.mock(Transport.class);
MockitoAnnotations.openMocks(this);
}
@After
public void tearDown() {
handler = null;
invocation = null;
asyncResp = null;
operationMeta = null;
transport = null;
ArchaiusUtils.resetConfig();
}
@AfterClass
public static void classTeardown() {
VertxUtils.blockCloseVertxByName("faultinjectionTest");
}
/**
* Tests the fault injection handler functionality with default values for
* highway transport.
*/
@Test
public void testFaultInjectHandlerHighwayWithDefaultCfg() throws Exception {
Mockito.when(invocation.getMicroserviceQualifiedName()).thenReturn("MicroserviceQualifiedName1");
Mockito.when(invocation.getTransport()).thenReturn(transport);
Mockito.when(transport.getName()).thenReturn("highway");
Mockito.when(invocation.getOperationName()).thenReturn("sayHello");
Mockito.when(invocation.getSchemaId()).thenReturn("sayHelloSchema");
Mockito.when(invocation.getMicroserviceName()).thenReturn("hello");
List<Fault> faultInjectionFeatureList = Arrays.asList(abortFault, delayFault);
handler.setFaultFeature(faultInjectionFeatureList);
handler.handle(invocation, asyncResp);
AtomicLong count = FaultInjectionUtil.getOperMetTotalReq("highwayMicroserviceQualifiedName1");
Assertions.assertEquals(2, count.get());
}
/**
* Tests the fault injection handler functionality with default values for rest
* transport.
*/
@Test
public void testFaultInjectHandlerRestWithDefaultCfg() throws Exception {
Mockito.when(invocation.getMicroserviceQualifiedName()).thenReturn("MicroserviceQualifiedName2");
Mockito.when(invocation.getTransport()).thenReturn(transport);
Mockito.when(transport.getName()).thenReturn("rest");
Mockito.when(invocation.getOperationName()).thenReturn("sayHello");
Mockito.when(invocation.getSchemaId()).thenReturn("sayHelloSchema");
Mockito.when(invocation.getMicroserviceName()).thenReturn("hello");
List<Fault> faultInjectionFeatureList = Arrays.asList(delayFault, abortFault);
handler.setFaultFeature(faultInjectionFeatureList);
handler.handle(invocation, asyncResp);
AtomicLong count = FaultInjectionUtil.getOperMetTotalReq("restMicroserviceQualifiedName2");
Assertions.assertEquals(2, count.get());
}
/**
* Tests the fault injection handler functionality with global configuration
* with delay/abort condition.
*/
@Test
public void testFaultInjectHandlerConfigChangeGlobal() throws Exception {
System.setProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.fixedDelay", "5");
System.setProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.percent", "10");
System.setProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.abort.percent", "10");
System.setProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.abort.httpStatus", "421");
Mockito.when(invocation.getMicroserviceQualifiedName()).thenReturn("MicroserviceQualifiedName3");
Mockito.when(invocation.getTransport()).thenReturn(transport);
Mockito.when(transport.getName()).thenReturn("rest");
Mockito.when(invocation.getOperationName()).thenReturn("sayHello");
Mockito.when(invocation.getSchemaId()).thenReturn("sayHelloSchema");
Mockito.when(invocation.getMicroserviceName()).thenReturn("hello");
List<Fault> faultInjectionFeatureList = Arrays.asList(abortFault);
handler.setFaultFeature(faultInjectionFeatureList);
handler.handle(invocation, ar -> {
//this case no delay/no abort so reponse is null, it should not enter this in this block.
isDelay = true;
isAbort = true;
});
Assertions.assertFalse(isDelay);
Assertions.assertFalse(isAbort);
System.getProperties()
.remove("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.fixedDelay");
System.getProperties().remove("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.percent");
System.getProperties().remove("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.abort.percent");
System.getProperties()
.remove("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.abort.httpStatus");
AtomicLong count = FaultInjectionUtil.getOperMetTotalReq("restMicroserviceQualifiedName3");
Assertions.assertEquals(2, count.get());
}
/**
* Tests the fault injection handler functionality with service level configuration
* with delay/abort condition.
*/
@Test
public void testFaultInjectHandlerServiceCfgSuccess() throws Exception {
System.setProperty("servicecomb.governance.Consumer.carts.policy.fault.protocols.rest.delay.fixedDelay", "1");
System.setProperty("servicecomb.governance.Consumer.carts.policy.fault.protocols.rest.delay.percent", "10");
System.setProperty("servicecomb.governance.Consumer.carts.policy.fault.protocols.rest.abort.percent", "10");
System.setProperty("servicecomb.governance.Consumer.carts.policy.fault.protocols.rest.abort.httpStatus", "421");
Mockito.when(invocation.getMicroserviceQualifiedName()).thenReturn("MicroserviceQualifiedName4");
Mockito.when(invocation.getTransport()).thenReturn(transport);
Mockito.when(transport.getName()).thenReturn("rest");
Mockito.when(invocation.getOperationName()).thenReturn("sayHello");
Mockito.when(invocation.getSchemaId()).thenReturn("sayHelloSchema");
Mockito.when(invocation.getMicroserviceName()).thenReturn("carts");
List<Fault> faultInjectionFeatureList = Arrays.asList(abortFault, delayFault);
handler.setFaultFeature(faultInjectionFeatureList);
handler.handle(invocation, ar -> {
//this case no delay/no abort so reponse is null, it should not enter this in this block.
isDelay = true;
isAbort = true;
});
Assertions.assertFalse(isDelay);
Assertions.assertFalse(isAbort);
System.getProperties().remove("servicecomb.governance.Consumer.carts.policy.fault.protocols.rest.delay.fixedDelay");
System.getProperties().remove("servicecomb.governance.Consumer.carts.policy.fault.protocols.rest.delay.percent");
System.getProperties().remove("servicecomb.governance.Consumer.carts.policy.fault.protocols.rest.abort.percent");
System.getProperties().remove("servicecomb.governance.Consumer.carts.policy.fault.protocols.rest.abort.httpStatus");
AtomicLong count = FaultInjectionUtil.getOperMetTotalReq("restMicroserviceQualifiedName4");
Assertions.assertEquals(2, count.get());
}
/**
* Tests the fault injection handler functionality with schema level configuration
* with delay/abort condition.
*/
@Test
public void testFaultInjectHandlerSchemaCfgSuccess() throws Exception {
System.setProperty(
"servicecomb.governance.Consumer.carts.schemas.testSchema.policy.fault.protocols.rest.delay.fixedDelay",
"1");
System.setProperty(
"servicecomb.governance.Consumer.carts.schemas.testSchema.policy.fault.protocols.rest.delay.percent",
"10");
System.setProperty(
"servicecomb.governance.Consumer.carts.schemas.testSchema.policy.fault.protocols.rest.abort.percent",
"10");
System.setProperty(
"servicecomb.governance.Consumer.carts.schemas.testSchema.policy.fault.protocols.rest.abort.httpStatus",
"421");
Mockito.when(invocation.getMicroserviceQualifiedName()).thenReturn("MicroserviceQualifiedName5");
Mockito.when(invocation.getTransport()).thenReturn(transport);
Mockito.when(transport.getName()).thenReturn("rest");
Mockito.when(invocation.getOperationName()).thenReturn("sayHello");
Mockito.when(invocation.getSchemaId()).thenReturn("testSchema");
Mockito.when(invocation.getMicroserviceName()).thenReturn("carts");
List<Fault> faultInjectionFeatureList = Arrays.asList(abortFault, delayFault);
handler.setFaultFeature(faultInjectionFeatureList);
handler.handle(invocation, ar -> {
//this case no delay/no abort so reponse is null, it should not enter this in this block.
isDelay = true;
isAbort = true;
});
Assertions.assertFalse(isDelay);
Assertions.assertFalse(isAbort);
System.getProperties()
.remove(
"servicecomb.governance.Consumer.carts.schemas.testSchema.policy.fault.protocols.rest.delay.fixedDelay");
System.getProperties()
.remove("servicecomb.governance.Consumer.carts.schemas.testSchema.policy.fault.protocols.rest.delay.percent");
System.getProperties()
.remove("servicecomb.governance.Consumer.carts.schemas.testSchema.policy.fault.protocols.rest.abort.percent");
System.getProperties()
.remove(
"servicecomb.governance.Consumer.carts.schemas.testSchema.policy.fault.protocols.rest.abort.httpStatus");
AtomicLong count = FaultInjectionUtil.getOperMetTotalReq("restMicroserviceQualifiedName5");
Assertions.assertEquals(2, count.get());
}
/**
* Tests the fault injection handler functionality with operation level configuration
* with delay/abort condition.
*/
@Test
public void testFaultInjectHandlerOperationCfgSuccess() throws Exception {
System.setProperty(
"servicecomb.governance.Consumer.carts.schemas.testSchema.operations.sayHi.policy.fault.protocols.rest.delay.fixedDelay",
"1");
System.setProperty(
"servicecomb.governance.Consumer.carts.schemas.testSchema.operations.sayHi.policy.fault.protocols.rest.delay.percent",
"10");
System.setProperty(
"servicecomb.governance.Consumer.carts.schemas.testSchema.operations.sayHi.policy.fault.protocols.rest.abort.percent",
"10");
System.setProperty(
"servicecomb.governance.Consumer.carts.schemas.testSchema.operations.sayHi.policy.fault.protocols.rest.abort.httpStatus",
"421");
Mockito.when(invocation.getMicroserviceQualifiedName()).thenReturn("MicroserviceQualifiedName6");
Mockito.when(invocation.getTransport()).thenReturn(transport);
Mockito.when(transport.getName()).thenReturn("rest");
Mockito.when(invocation.getOperationName()).thenReturn("sayHi");
Mockito.when(invocation.getSchemaId()).thenReturn("testSchema");
Mockito.when(invocation.getMicroserviceName()).thenReturn("carts");
List<Fault> faultInjectionFeatureList = Arrays.asList(abortFault, delayFault);
handler.setFaultFeature(faultInjectionFeatureList);
handler.handle(invocation, ar -> {
//this case no delay/no abort so reponse is null, it should not enter this in this block.
isDelay = true;
isAbort = true;
});
Assertions.assertFalse(isDelay);
Assertions.assertFalse(isAbort);
System.getProperties()
.remove(
"servicecomb.governance.Consumer.carts.schemas.testSchema.operations.sayHi.policy.fault.protocols.rest.delay.fixedDelay");
System.getProperties()
.remove(
"servicecomb.governance.Consumer.carts.schemas.testSchema.operations.sayHi.policy.fault.protocols.rest.delay.percent");
System.getProperties()
.remove(
"servicecomb.governance.Consumer.carts.schemas.testSchema.operations.sayHi.policy.fault.protocols.rest.abort.percent");
System.getProperties()
.remove(
"servicecomb.governance.Consumer.carts.schemas.testSchema.operations.sayHi.policy.fault.protocols.rest.abort.httpStatus");
AtomicLong count = FaultInjectionUtil.getOperMetTotalReq("restMicroserviceQualifiedName6");
Assertions.assertEquals(2, count.get());
}
/**
* Tests the fault injection handler functionality with configuration change event for global level config.
*/
@Test
public void testFaultInjectHandlerConfigChangeEvent1() throws Exception {
System.setProperty(
"servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.fixedDelay",
"1");
System.setProperty(
"servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.percent",
"100");
System.setProperty(
"servicecomb.governance.Consumer._global.policy.fault.protocols.rest.abort.percent",
"100");
System.setProperty(
"servicecomb.governance.Consumer._global.policy.fault.protocols.rest.abort.httpStatus",
"420");
Mockito.when(invocation.getMicroserviceQualifiedName()).thenReturn("MicroserviceQualifiedName7");
Mockito.when(invocation.getTransport()).thenReturn(transport);
Mockito.when(transport.getName()).thenReturn("rest");
Mockito.when(invocation.getOperationName()).thenReturn("sayBye1");
Mockito.when(invocation.getSchemaId()).thenReturn("testSchema1");
Mockito.when(invocation.getMicroserviceName()).thenReturn("carts1");
boolean validAssert;
List<Fault> faultInjectionFeatureList = Arrays.asList(delayFault, abortFault);
handler.setFaultFeature(faultInjectionFeatureList);
try {
validAssert = true;
handler.handle(invocation, ar);
} catch (Exception e) {
validAssert = false;
}
Assertions.assertTrue(validAssert);
ArchaiusUtils
.setProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.fixedDelay", 500);
ArchaiusUtils
.setProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.abort.httpStatus", 421);
Holder<Boolean> isAsserted = new Holder<>(false);
handler.handle(invocation, ar -> {
isAsserted.value = true;
Assertions.assertTrue(response.isFailed());
});
Assertions.assertTrue(isAsserted.value);
System.getProperties()
.remove(
"servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.fixedDelay");
System.getProperties()
.remove(
"servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.percent");
System.getProperties()
.remove(
"servicecomb.governance.Consumer._global.policy.fault.protocols.rest.abort.percent");
System.getProperties()
.remove(
"servicecomb.governance.Consumer._global.policy.fault.protocols.rest.abort.httpStatus");
AtomicLong count = FaultInjectionUtil.getOperMetTotalReq("restMicroserviceQualifiedName7");
Assertions.assertEquals(3, count.get());
}
/**
* Tests the fault injection handler functionality with configuration change event for operation level config.
*/
@Test
public void testFaultInjectHandlerConfigChangeEvent2() throws Exception {
System.setProperty(
"servicecomb.governance.Consumer.carts2.schemas.testSchema2.operations.sayBye2.policy.fault.protocols.rest.delay.fixedDelay",
"1");
System.setProperty(
"servicecomb.governance.Consumer.carts2.schemas.testSchema2.operations.sayBye2.policy.fault.protocols.rest.delay.percent",
"100");
System.setProperty(
"servicecomb.governance.Consumer.carts2.schemas.testSchema2.operations.sayBye2.policy.fault.protocols.rest.abort.percent",
"100");
System.setProperty(
"servicecomb.governance.Consumer.carts2.schemas.testSchema2.operations.sayBye2.policy.fault.protocols.rest.abort.httpStatus",
"420");
Mockito.when(invocation.getMicroserviceQualifiedName()).thenReturn("MicroserviceQualifiedName8");
Mockito.when(invocation.getTransport()).thenReturn(transport);
Mockito.when(transport.getName()).thenReturn("rest");
Mockito.when(invocation.getOperationName()).thenReturn("sayBye2");
Mockito.when(invocation.getSchemaId()).thenReturn("testSchema2");
Mockito.when(invocation.getMicroserviceName()).thenReturn("carts2");
boolean validAssert;
long timeOld = System.currentTimeMillis();
List<Fault> faultInjectionFeatureList = Arrays.asList(delayFault, abortFault);
handler.setFaultFeature(faultInjectionFeatureList);
try {
validAssert = true;
handler.handle(invocation, ar);
} catch (Exception e) {
validAssert = false;
}
Assertions.assertTrue(validAssert);
ArchaiusUtils.setProperty(
"servicecomb.governance.Consumer.carts2.schemas.testSchema2.operations.sayBye2.policy.fault.protocols.rest.delay.fixedDelay",
500);
Holder<Boolean> isAsserted = new Holder<>(false);
handler.handle(invocation, ar -> {
//check whether error code return
isAsserted.value = true;
Assertions.assertEquals(420, response.getStatusCode());
Assertions.assertTrue(response.isFailed());
long timeNow = System.currentTimeMillis();
//if really time delay is added it should be greater than 5s.
Assertions.assertTrue((timeNow - timeOld) >= 500);
});
Assertions.assertTrue(isAsserted.value);
System.getProperties()
.remove(
"servicecomb.governance.Consumer.carts2.schemas.testSchema2.operations.sayBye2.policy.fault.protocols.rest.delay.fixedDelay");
System.getProperties()
.remove(
"servicecomb.governance.Consumer.carts2.schemas.testSchema2.operations.sayBye2.policy.fault.protocols.rest.delay.percent");
System.getProperties()
.remove(
"servicecomb.governance.Consumer.carts2.schemas.testSchema2.operations.sayBye2.policy.fault.protocols.rest.abort.percent");
System.getProperties()
.remove(
"servicecomb.governance.Consumer.carts2.schemas.testSchema2.operations.sayBye2.policy.fault.protocols.rest.abort.httpStatus");
AtomicLong count = FaultInjectionUtil.getOperMetTotalReq("restMicroserviceQualifiedName8");
Assertions.assertEquals(3, count.get());
}
/**
* Tests the fault injection handler functionality with configuration change event for schema level config.
*/
@Test
public void testFaultInjectHandlerConfigChangeEvent3() throws Exception {
System.setProperty(
"servicecomb.governance.Consumer.carts3.schemas.testSchema3.policy.fault.protocols.rest.delay.fixedDelay",
"1");
System.setProperty(
"servicecomb.governance.Consumer.carts3.schemas.testSchema3.policy.fault.protocols.rest.delay.percent",
"100");
System.setProperty(
"servicecomb.governance.Consumer.carts3.schemas.testSchema3.policy.fault.protocols.rest.abort.percent",
"100");
System.setProperty(
"servicecomb.governance.Consumer.carts3.schemas.testSchema3.policy.fault.protocols.rest.abort.httpStatus",
"421");
Mockito.when(invocation.getMicroserviceQualifiedName()).thenReturn("MicroserviceQualifiedName9");
Mockito.when(invocation.getTransport()).thenReturn(transport);
Mockito.when(transport.getName()).thenReturn("rest");
Mockito.when(invocation.getOperationName()).thenReturn("sayBye3");
Mockito.when(invocation.getSchemaId()).thenReturn("testSchema3");
Mockito.when(invocation.getMicroserviceName()).thenReturn("carts3");
boolean validAssert;
long timeOld = System.currentTimeMillis();
List<Fault> faultInjectionFeatureList = Arrays.asList(delayFault, abortFault);
handler.setFaultFeature(faultInjectionFeatureList);
try {
validAssert = true;
handler.handle(invocation, ar);
} catch (Exception e) {
validAssert = false;
}
Assertions.assertTrue(validAssert);
ArchaiusUtils.setProperty(
"servicecomb.governance.Consumer.carts3.schemas.testSchema3.policy.fault.protocols.rest.delay.fixedDelay",
500);
Holder<Boolean> isAsserted = new Holder<>(false);
handler.handle(invocation, ar -> {
//check whether error code return, defaut is 421.
isAsserted.value = true;
Assertions.assertEquals(421, response.getStatusCode());
Assertions.assertTrue(response.isFailed());
long timeNow = System.currentTimeMillis();
//if really time delay is added it should be greater than 5s.
Assertions.assertTrue((timeNow - timeOld) >= 500);
});
Assertions.assertTrue(isAsserted.value);
System.getProperties()
.remove(
"servicecomb.governance.Consumer.carts3.schemas.testSchema3.policy.fault.protocols.rest.delay.fixedDelay");
System.getProperties()
.remove("servicecomb.governance.Consumer.carts3.schemas.testSchema3.policy.fault.protocols.rest.delay.percent");
System.getProperties()
.remove("servicecomb.governance.Consumer.carts3.schemas.testSchema3.policy.fault.protocols.rest.abort.percent");
System.getProperties()
.remove(
"servicecomb.governance.Consumer.carts3.schemas.testSchema3.policy.fault.protocols.rest.abort.httpStatus");
AtomicLong count = FaultInjectionUtil.getOperMetTotalReq("restMicroserviceQualifiedName9");
Assertions.assertEquals(3, count.get());
}
/**
* Tests the fault injection handler functionality with configuration change event for service level config.
*/
@Test
public void testFaultInjectHandlerConfigChangeEvent4() throws Exception {
System.setProperty("servicecomb.governance.Consumer.carts4.policy.fault.protocols.rest.delay.fixedDelay", "1");
System.setProperty(
"servicecomb.governance.Consumer.carts4.policy.fault.protocols.rest.delay.percent",
"100");
System.setProperty(
"servicecomb.governance.Consumer.carts4.policy.fault.protocols.rest.abort.percent",
"100");
System.setProperty(
"servicecomb.governance.Consumer.carts4.policy.fault.protocols.rest.abort.httpStatus",
"421");
Mockito.when(invocation.getMicroserviceQualifiedName()).thenReturn("MicroserviceQualifiedName10");
Mockito.when(invocation.getTransport()).thenReturn(transport);
Mockito.when(transport.getName()).thenReturn("rest");
Mockito.when(invocation.getOperationName()).thenReturn("sayBye4");
Mockito.when(invocation.getSchemaId()).thenReturn("testSchema4");
Mockito.when(invocation.getMicroserviceName()).thenReturn("carts4");
boolean validAssert;
long timeOld = System.currentTimeMillis();
List<Fault> faultInjectionFeatureList = Arrays.asList(delayFault, abortFault);
handler.setFaultFeature(faultInjectionFeatureList);
try {
validAssert = true;
handler.handle(invocation, ar);
} catch (Exception e) {
validAssert = false;
}
Assertions.assertTrue(validAssert);
ArchaiusUtils
.setProperty("servicecomb.governance.Consumer.carts4.policy.fault.protocols.rest.delay.fixedDelay", 500);
Holder<Boolean> isAsserted = new Holder<>(false);
handler.handle(invocation, ar -> {
//check whether error code return,
isAsserted.value = true;
Assertions.assertEquals(421, response.getStatusCode());
Assertions.assertTrue(response.isFailed());
long timeNow = System.currentTimeMillis();
//if really time delay is added it should be greater than 5s.
Assertions.assertTrue((timeNow - timeOld) >= 500);
});
Assertions.assertTrue(isAsserted.value);
System.getProperties()
.remove("servicecomb.governance.Consumer.carts4.policy.fault.protocols.rest.delay.fixedDelay");
System.getProperties()
.remove("servicecomb.governance.Consumer.carts4.policy.fault.protocols.rest.delay.percent");
System.getProperties()
.remove("servicecomb.governance.Consumer.carts4.policy.fault.protocols.rest.abort.percent");
System.getProperties()
.remove("servicecomb.governance.Consumer.carts4.policy.fault.protocols.rest.abort.httpStatus");
AtomicLong count = FaultInjectionUtil.getOperMetTotalReq("restMicroserviceQualifiedName10");
Assertions.assertEquals(3, count.get());
}
/**
* Tests the fault injection handler functionality with configuration change event for service level config.
*/
@Test
public void testFaultInjectHandlerConfigChangeEvent5() throws Exception {
System.setProperty(
"servicecomb.governance.Consumer.carts5.policy.fault.protocols.rest.delay.percent",
"100");
System.setProperty(
"servicecomb.governance.Consumer.carts5.policy.fault.protocols.rest.delay.fixedDelay",
"10");
System.setProperty(
"servicecomb.governance.Consumer.carts5.policy.fault.protocols.rest.abort.percent",
"100");
System.setProperty(
"servicecomb.governance.Consumer.carts5.policy.fault.protocols.rest.abort.httpStatus",
"500");
Mockito.when(invocation.getMicroserviceQualifiedName()).thenReturn("MicroserviceQualifiedName11");
Mockito.when(invocation.getTransport()).thenReturn(transport);
Mockito.when(transport.getName()).thenReturn("rest");
Mockito.when(invocation.getOperationName()).thenReturn("sayBye4");
Mockito.when(invocation.getSchemaId()).thenReturn("testSchema4");
Mockito.when(invocation.getMicroserviceName()).thenReturn("carts5");
boolean validAssert;
List<Fault> faultInjectionFeatureList = Arrays.asList(delayFault, abortFault);
handler.setFaultFeature(faultInjectionFeatureList);
try {
validAssert = true;
handler.handle(invocation, ar);
} catch (Exception e) {
validAssert = false;
}
Assertions.assertTrue(validAssert);
ArchaiusUtils
.setProperty("servicecomb.governance.Consumer.carts5.policy.fault.protocols.rest.abort.httpStatus", "420");
Holder<Boolean> isAsserted = new Holder<>(false);
handler.handle(invocation, ar -> {
isAsserted.value = true;
Assertions.assertTrue(response.isFailed());
Assertions.assertEquals(500, response.getStatusCode());
Assertions.assertEquals(420, ar.getStatusCode());
});
Assertions.assertTrue(isAsserted.value);
System.getProperties()
.remove("servicecomb.governance.Consumer.carts5.policy.fault.protocols.rest.delay.fixedDelay");
System.getProperties()
.remove("servicecomb.governance.Consumer.carts5.policy.fault.protocols.rest.delay.percent");
System.getProperties()
.remove("servicecomb.governance.Consumer.carts5.policy.fault.protocols.rest.abort.percent");
System.getProperties()
.remove("servicecomb.governance.Consumer.carts5.policy.fault.protocols.rest.abort.httpStatus");
AtomicLong count = FaultInjectionUtil.getOperMetTotalReq("restMicroserviceQualifiedName11");
Assertions.assertEquals(3, count.get());
}
/**
* Tests the fault injection handler functionality with configuration change event for service level config.
*/
@Test
public void testFaultInjectHandlerConfigChangeEvent6() {
System.setProperty("servicecomb.governance.Consumer.carts6.policy.fault.protocols.rest.delay.fixedDelay", "1000");
System.setProperty(
"servicecomb.governance.Consumer.carts6.policy.fault.protocols.rest.delay.percent",
"100");
Mockito.when(invocation.getMicroserviceQualifiedName()).thenReturn("MicroserviceQualifiedName12");
Mockito.when(invocation.getTransport()).thenReturn(transport);
Mockito.when(transport.getName()).thenReturn("rest");
Mockito.when(invocation.getOperationName()).thenReturn("sayBye4");
Mockito.when(invocation.getSchemaId()).thenReturn("testSchema4");
Mockito.when(invocation.getMicroserviceName()).thenReturn("carts6");
DelayFault delayFault = new DelayFault();
FaultParam faultParam = new FaultParam(3);
Vertx vertx = VertxUtils.getOrCreateVertxByName("faultinjectionTest", null);
faultParam.setVertx(vertx);
delayFault.injectFault(invocation, faultParam, ar);
System.getProperties()
.remove("servicecomb.governance.Consumer.carts6.policy.fault.protocols.rest.delay.fixedDelay");
System.getProperties()
.remove("servicecomb.governance.Consumer.carts6.policy.fault.protocols.rest.delay.percent");
AtomicLong count = FaultInjectionUtil.getOperMetTotalReq("restMicroserviceQualifiedName12");
Assertions.assertEquals(1, count.get());
}
}