use of com.alibaba.csp.sentinel.node.ClusterNode in project Sentinel by alibaba.
the class SentinelAnnotationQuarkusAdapterTest method testFallbackWithNoParams.
@Test
public void testFallbackWithNoParams() throws Exception {
assertThat(fooService.fooWithFallback(1)).isEqualTo("Hello for 1");
String resourceName = "apiFooWithFallback";
ClusterNode cn = ClusterBuilderSlot.getClusterNode(resourceName);
assertThat(cn).isNotNull();
assertThat(cn.passQps()).isPositive();
// Fallback should be ignored for this.
try {
fooService.fooWithFallback(5758);
fail("should not reach here");
} catch (IllegalAccessException e) {
assertThat(cn.exceptionQps()).isZero();
}
// Fallback should take effect.
assertThat(fooService.fooWithFallback(5763)).isEqualTo("eee...");
assertThat(cn.exceptionQps()).isPositive();
assertThat(cn.blockQps()).isZero();
FlowRuleManager.loadRules(Collections.singletonList(new FlowRule(resourceName).setCount(0)));
// Fallback should not take effect for BlockException, as blockHandler is configured.
assertThat(fooService.fooWithFallback(2221)).isEqualTo("Oops, 2221");
assertThat(cn.blockQps()).isPositive();
}
use of com.alibaba.csp.sentinel.node.ClusterNode in project Sentinel by alibaba.
the class SentinelAnnotationQuarkusAdapterTest method testDefaultFallbackWithSingleParam.
@Test
public void testDefaultFallbackWithSingleParam() {
assertThat(fooService.anotherFoo(1)).isEqualTo("Hello for 1");
String resourceName = "apiAnotherFooWithDefaultFallback";
ClusterNode cn = ClusterBuilderSlot.getClusterNode(resourceName);
assertThat(cn).isNotNull();
assertThat(cn.passQps()).isPositive();
// Default fallback should take effect.
assertThat(fooService.anotherFoo(5758)).isEqualTo(FooUtil.FALLBACK_DEFAULT_RESULT);
assertThat(cn.exceptionQps()).isPositive();
assertThat(cn.blockQps()).isZero();
FlowRuleManager.loadRules(Collections.singletonList(new FlowRule(resourceName).setCount(0)));
// Default fallback should also take effect for BlockException.
assertThat(fooService.anotherFoo(5758)).isEqualTo(FooUtil.FALLBACK_DEFAULT_RESULT);
assertThat(cn.blockQps()).isPositive();
}
use of com.alibaba.csp.sentinel.node.ClusterNode in project Sentinel by alibaba.
the class SentinelJaxRsQuarkusAdapterTest method testUrlPathParam.
@Test
public void testUrlPathParam() {
String url = "/test/hello/{name}";
String resourceName = "GET:" + url;
String url1 = "/test/hello/abc";
Response response1 = given().get(url1);
response1.then().statusCode(200).body(equalTo("Hello abc !"));
String url2 = "/test/hello/def";
Response response2 = given().get(url2);
response2.then().statusCode(200).body(equalTo("Hello def !"));
ClusterNode cn = ClusterBuilderSlot.getClusterNode(resourceName);
assertNotNull(cn);
assertEquals(2, cn.passQps(), 0.01);
assertNull(ClusterBuilderSlot.getClusterNode("GET:" + url1));
assertNull(ClusterBuilderSlot.getClusterNode("GET:" + url2));
}
use of com.alibaba.csp.sentinel.node.ClusterNode in project Sentinel by alibaba.
the class SentinelJaxRsQuarkusAdapterTest method testExceptionMapper.
@Test
public void testExceptionMapper() {
String url = "/test/ex";
String resourceName = "GET:" + url;
Response response = given().get(url);
response.then().statusCode(javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).body(equalTo("test exception mapper"));
ClusterNode cn = ClusterBuilderSlot.getClusterNode(resourceName);
assertNotNull(cn);
}
use of com.alibaba.csp.sentinel.node.ClusterNode in project Sentinel by alibaba.
the class SentinelJaxRsQuarkusAdapterTest method testCustomRequestOriginParser.
@Test
public void testCustomRequestOriginParser() {
String url = "/test/hello";
String resourceName = "GET:" + url;
String limitOrigin = "appB";
final String headerName = "X-APP";
configureRulesFor(resourceName, 0, limitOrigin);
SentinelJaxRsConfig.setRequestOriginParser(new RequestOriginParser() {
@Override
public String parseOrigin(ContainerRequestContext request) {
String origin = request.getHeaderString(headerName);
return origin != null ? origin : "";
}
});
Response response = given().header(headerName, "appA").get(url);
response.then().statusCode(200).body(equalTo(HELLO_STR));
Response blockedResp = given().header(headerName, "appB").get(url);
blockedResp.then().statusCode(javax.ws.rs.core.Response.Status.TOO_MANY_REQUESTS.getStatusCode()).body(equalTo("Blocked by Sentinel (flow limiting)"));
ClusterNode cn = ClusterBuilderSlot.getClusterNode(resourceName);
assertNotNull(cn);
assertEquals(1, cn.passQps(), 0.01);
assertEquals(1, cn.blockQps(), 0.01);
}
Aggregations