Skip to content

Commit 2727905

Browse files
authored
feat: servlet skip (#220)
* feat: servlet forbidden * feat: servlet skip
1 parent 6a78d51 commit 2727905

File tree

3 files changed

+16
-3
lines changed

3 files changed

+16
-3
lines changed

arex-instrumentation-api/src/main/java/io/arex/inst/runtime/model/ArexConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,5 @@ private ArexConstants() {}
3434
public static final String CONFIG_DEPENDENCY = "arex_replay_prepare_dependency";
3535
public static final String PREFIX = "arex-";
3636
public static final String CONFIG_VERSION = "configBatchNo";
37+
public static final String SKIP_FLAG = "arex-skip-flag";
3738
}

arex-instrumentation/servlet/arex-httpservlet/src/main/java/io/arex/inst/httpservlet/ServletAdviceHelper.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.arex.inst.httpservlet;
22

33
import io.arex.agent.bootstrap.TraceContextManager;
4+
import io.arex.agent.bootstrap.constants.ConfigConstants;
45
import io.arex.agent.bootstrap.internal.Pair;
56
import io.arex.agent.bootstrap.model.MockCategoryType;
67
import io.arex.agent.bootstrap.util.StringUtil;
@@ -100,6 +101,12 @@ public static <TRequest, TResponse> Pair<TRequest, TResponse> onServiceEnter(
100101
return null;
101102
}
102103

104+
RequestHandlerManager.preHandle(httpServletRequest, MockCategoryType.SERVLET.getName());
105+
// skip servlet if attr with arex-skip-flag
106+
if (Boolean.TRUE.equals(adapter.getAttribute(httpServletRequest, ArexConstants.SKIP_FLAG))) {
107+
return null;
108+
}
109+
103110
// 302 Redirect request
104111
String redirectRecordId = getRedirectRecordId(adapter, httpServletRequest);
105112
if (StringUtil.isNotEmpty(redirectRecordId)) {
@@ -109,7 +116,7 @@ public static <TRequest, TResponse> Pair<TRequest, TResponse> onServiceEnter(
109116
String caseId = adapter.getRequestHeader(httpServletRequest, ArexConstants.RECORD_ID);
110117
String excludeMockTemplate = adapter.getRequestHeader(httpServletRequest, ArexConstants.HEADER_EXCLUDE_MOCK);
111118
CaseEventDispatcher.onEvent(CaseEvent.ofCreateEvent(EventSource.of(caseId, excludeMockTemplate)));
112-
RequestHandlerManager.preHandle(httpServletRequest, MockCategoryType.SERVLET.getName());
119+
113120
}
114121

115122
if (ContextManager.needRecordOrReplay()) {
@@ -198,7 +205,7 @@ private static <TRequest> boolean shouldSkip(ServletAdapter<TRequest, ?> adapter
198205

199206
// Replay scene
200207
if (StringUtil.isNotEmpty(caseId)) {
201-
return Config.get().getBoolean("arex.disable.replay", false);
208+
return Config.get().getBoolean(ConfigConstants.DISABLE_REPLAY, false);
202209
}
203210

204211
String forceRecord = adapter.getRequestHeader(httpServletRequest, ArexConstants.FORCE_RECORD);

arex-instrumentation/servlet/arex-httpservlet/src/test/java/io/arex/inst/httpservlet/ServletAdviceHelperTest.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,10 @@ static Stream<Arguments> onServiceEnterCase() {
135135
Mockito.when(RecordLimiter.acquire(any())).thenReturn(true);
136136
Mockito.when(ContextManager.needRecordOrReplay()).thenReturn(true);
137137
};
138+
Runnable shouldSkip9 = () -> {
139+
Mockito.when(adapter.getRequestHeader(any(), eq(ArexConstants.RECORD_ID))).thenReturn("mock");
140+
Mockito.when(adapter.getAttribute(any(), eq(ArexConstants.SKIP_FLAG))).thenReturn(Boolean.TRUE);
141+
};
138142

139143
Predicate<Pair<?, ?>> predicate1 = Objects::isNull;
140144
Predicate<Pair<?, ?>> predicate2 = Objects::nonNull;
@@ -153,7 +157,8 @@ static Stream<Arguments> onServiceEnterCase() {
153157
arguments("shouldSkip: IgnoreUtils.ignoreOperation returns true", shouldSkip5, predicate1),
154158
arguments("shouldSkip: adapter.getRequestURI return .png", shouldSkip6, predicate1),
155159
arguments("shouldSkip: adapter.getContentType return image/", shouldSkip7, predicate1),
156-
arguments("ContextManager.needRecordOrReplay is true", shouldSkip8, predicate2)
160+
arguments("ContextManager.needRecordOrReplay is true", shouldSkip8, predicate2),
161+
arguments("shouldSkip: adapter.getAttribute returns true", shouldSkip9, predicate1)
157162
);
158163
}
159164

0 commit comments

Comments
 (0)