Skip to content

Commit 9570fd4

Browse files
committed
feat: exclude compare module for sonar
1 parent a7259a3 commit 9570fd4

File tree

12 files changed

+152
-44
lines changed

12 files changed

+152
-44
lines changed

arex-instrumentation-api/src/main/java/io/arex/inst/runtime/log/LogManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public static void setContextMap(Map<String, String> contextMap) {
9595

9696
public static void info(ArexContext currentContext, String title, String message) {
9797
String logMessage = buildMessage(buildTitle(title), message);
98-
if (useExtensionLog()) {
98+
if (useExtensionLog() && currentContext != null) {
9999
for (Logger extensionLogger : EXTENSION_LOGGER_LIST) {
100100
extensionLogger.addTag(currentContext.getCaseId(), currentContext.getReplayId());
101101
extensionLogger.info(logMessage);

arex-instrumentation-api/src/main/java/io/arex/inst/runtime/util/DatabaseUtils.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import io.arex.agent.bootstrap.util.StringUtil;
55
import io.arex.agent.thirdparty.util.sqlparser.JSqlParserUtil;
66
import io.arex.agent.thirdparty.util.sqlparser.TableSchema;
7-
import io.arex.inst.runtime.config.Config;
87
import io.arex.inst.runtime.model.ArexConstants;
98

109
import java.util.*;
@@ -89,9 +88,5 @@ private static String regenerateOperationName(TableSchema tableSchema, String or
8988
.append(originOperationName)
9089
.toString();
9190
}
92-
93-
public static boolean disableSqlParse() {
94-
return Config.get().getBoolean(ArexConstants.DISABLE_SQL_PARSE, Boolean.getBoolean(ArexConstants.DISABLE_SQL_PARSE));
95-
}
9691
}
9792

arex-instrumentation-api/src/test/java/io/arex/inst/runtime/model/QueryAllMockerDTOTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ void setFieldNames() {
5151

5252
@Test
5353
void getCategoryTypes() {
54-
assertNotNull(queryAllMockerDTO.getCategoryTypes());
54+
assertNull(queryAllMockerDTO.getCategoryTypes());
5555
}
5656

5757
@Test

arex-instrumentation-api/src/test/java/io/arex/inst/runtime/serializer/SerializerTest.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -193,13 +193,10 @@ void serializeWithType() throws Throwable {
193193
@Test
194194
void deserializeWithType() throws Throwable {
195195
// null json
196-
// assertNull(Serializer.deserializeWithType(null));
197-
//
198-
// // throw exception
199-
// Mockito.when(jacksonSerializerWithType.deserialize("test", Object.class)).thenThrow(new RuntimeException());
200-
// assertDoesNotThrow(() -> Serializer.deserializeWithType("test"));
201-
String groupName = "[\"agg-hotel-common\"]";
202-
List<String> list = Serializer.deserialize(groupName, List.class);
203-
System.out.println(list.contains("agg-hotel-common"));
196+
assertNull(Serializer.deserializeWithType(null));
197+
198+
// throw exception
199+
Mockito.when(jacksonSerializerWithType.deserialize("test", Object.class)).thenThrow(new RuntimeException());
200+
assertDoesNotThrow(() -> Serializer.deserializeWithType("test"));
204201
}
205202
}

arex-instrumentation-api/src/test/java/io/arex/inst/runtime/util/DatabaseUtilsTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.junit.jupiter.api.BeforeAll;
88
import org.junit.jupiter.params.ParameterizedTest;
99
import org.junit.jupiter.params.provider.Arguments;
10+
import org.junit.jupiter.params.provider.CsvSource;
1011
import org.junit.jupiter.params.provider.MethodSource;
1112
import org.mockito.Mockito;
1213

@@ -84,4 +85,25 @@ static Stream<Arguments> regenerateOperationNameCase() {
8485
arguments("database1", "@", "wrong sql", needRegenerateMocker, predicate1)
8586
);
8687
}
88+
89+
@ParameterizedTest
90+
@CsvSource(value ={
91+
"query, database, database",
92+
"'', null, ''",
93+
"query, null, query",
94+
"database@table, null, database",
95+
}, nullValues={"null"})
96+
void parseDbName(String source, String strip, String expect) {
97+
assertEquals(expect, DatabaseUtils.parseDbName(source, strip));
98+
}
99+
100+
@ParameterizedTest
101+
@CsvSource(value ={
102+
"''",
103+
"query",
104+
"table2@select@operation1;db2@table3",
105+
}, nullValues={"null"})
106+
void parseDbName(String source) {
107+
assertNotNull(DatabaseUtils.parseTableNames(source));
108+
}
87109
}

arex-instrumentation-api/src/test/java/io/arex/inst/runtime/util/MockUtilsTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import io.arex.inst.runtime.context.ContextManager;
1212
import io.arex.inst.runtime.listener.EventProcessorTest.TestGsonSerializer;
1313
import io.arex.inst.runtime.listener.EventProcessorTest.TestJacksonSerializable;
14+
import io.arex.inst.runtime.log.LogManager;
1415
import io.arex.inst.runtime.match.ReplayMatcher;
1516
import io.arex.inst.runtime.model.ArexConstants;
1617
import io.arex.inst.runtime.model.QueryAllMockerDTO;
@@ -206,6 +207,7 @@ void queryMockers() {
206207

207208
@Test
208209
void saveReplayCompareResult() {
210+
Mockito.mockStatic(LogManager.class);
209211
configBuilder.enableDebug(true);
210212
configBuilder.build();
211213
assertDoesNotThrow(() -> MockUtils.saveReplayCompareResult(null, new ArrayList<>()));

arex-instrumentation-api/src/test/java/io/arex/inst/runtime/util/ReplayUtilTest.java

Lines changed: 89 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,50 +3,64 @@
33
import io.arex.agent.bootstrap.model.ArexMocker;
44
import io.arex.agent.bootstrap.model.MockCategoryType;
55
import io.arex.agent.bootstrap.model.Mocker;
6+
import io.arex.agent.thirdparty.util.CompressUtil;
67
import io.arex.inst.runtime.config.Config;
78
import io.arex.inst.runtime.context.ArexContext;
89
import io.arex.inst.runtime.context.ContextManager;
10+
import io.arex.inst.runtime.model.ArexConstants;
911
import io.arex.inst.runtime.model.MergeDTO;
12+
import io.arex.inst.runtime.model.ReplayCompareResultDTO;
1013
import io.arex.inst.runtime.serializer.Serializer;
1114
import org.junit.jupiter.api.AfterAll;
1215
import org.junit.jupiter.api.BeforeAll;
16+
import org.junit.jupiter.api.Test;
1317
import org.junit.jupiter.params.ParameterizedTest;
1418
import org.junit.jupiter.params.provider.Arguments;
1519
import org.junit.jupiter.params.provider.MethodSource;
1620
import org.mockito.Mockito;
1721

1822
import java.util.ArrayList;
23+
import java.util.Collections;
1924
import java.util.HashMap;
2025
import java.util.List;
2126
import java.util.Map;
27+
import java.util.concurrent.LinkedBlockingQueue;
2228
import java.util.stream.Stream;
2329

2430
import static org.junit.jupiter.api.Assertions.*;
2531
import static org.junit.jupiter.params.provider.Arguments.arguments;
2632
import static org.mockito.ArgumentMatchers.any;
27-
import static org.mockito.ArgumentMatchers.anyString;
33+
import static org.mockito.ArgumentMatchers.eq;
2834

2935
class ReplayUtilTest {
3036

3137
static ArexMocker requestMocker;
38+
static ArexContext context;
3239

3340
@BeforeAll
3441
static void setUp() {
3542
Mockito.mockStatic(MockUtils.class);
3643
Mockito.mockStatic(ContextManager.class);
44+
Mockito.when(ContextManager.needReplay()).thenReturn(true);
45+
context = Mockito.mock(ArexContext.class);
46+
Mockito.when(ContextManager.currentContext()).thenReturn(context);
3747
Mockito.mockStatic(Config.class);
38-
Mockito.when(Config.get()).thenReturn(Mockito.mock(Config.class));
48+
Config config = Mockito.mock(Config.class);
49+
Mockito.when(Config.get()).thenReturn(config);
50+
Mockito.when(config.isEnableDebug()).thenReturn(true);
3951
requestMocker = new ArexMocker(MockCategoryType.DYNAMIC_CLASS);
4052
requestMocker.setOperationName("mock");
4153
requestMocker.setTargetRequest(new Mocker.Target());
4254
requestMocker.setTargetResponse(new Mocker.Target());
4355
Mockito.when(MockUtils.create(any(), any())).thenReturn(requestMocker);
4456
Mockito.mockStatic(Serializer.class);
57+
Mockito.mockStatic(CompressUtil.class);
4558
}
4659

4760
@AfterAll
4861
static void tearDown() {
4962
requestMocker = null;
63+
context = null;
5064
Mockito.clearAllCaches();
5165
}
5266

@@ -58,31 +72,93 @@ void queryMockers(Runnable mocker) {
5872
}
5973

6074
static Stream<Arguments> queryMockersCase() {
75+
List<Mocker> recordMockerList = new ArrayList<>();
76+
recordMockerList.add(requestMocker);
77+
6178
Runnable emptyMocker = () -> {};
6279
Runnable mocker1 = () -> {
63-
Mockito.when(ContextManager.needReplay()).thenReturn(true);
64-
ArexContext context = Mockito.mock(ArexContext.class);
65-
Mockito.when(ContextManager.currentContext()).thenReturn(context);
6680
Map<Integer, List<Mocker>> cachedReplayResultMap = new HashMap<>();
6781
Mockito.when(context.getCachedReplayResultMap()).thenReturn(cachedReplayResultMap);
6882
};
6983
Runnable mocker2 = () -> {
7084
Mockito.when(MockUtils.checkResponseMocker(any())).thenReturn(true);
71-
requestMocker.getTargetResponse().setBody("mock");
72-
Mockito.when(MockUtils.executeReplay(any(), any())).thenReturn(requestMocker);
85+
requestMocker.setRequest("mock");
86+
requestMocker.setResponse("mock");
87+
ArexMocker databaseMocker = new ArexMocker(MockCategoryType.DATABASE);
88+
databaseMocker.setOperationName("databse@table@select@query");
89+
databaseMocker.setTargetRequest(new Mocker.Target());
90+
databaseMocker.getTargetRequest().setBody("mock");
91+
databaseMocker.setTargetResponse(new Mocker.Target());
92+
recordMockerList.add(databaseMocker);
93+
ArexMocker databaseMocker2 = new ArexMocker(MockCategoryType.DATABASE);
94+
databaseMocker2.setOperationName("databse@table@select@query");
95+
databaseMocker2.setTargetRequest(new Mocker.Target());
96+
databaseMocker2.getTargetRequest().setBody("mock");
97+
databaseMocker2.setTargetResponse(new Mocker.Target());
98+
recordMockerList.add(databaseMocker2);
99+
ArexMocker databaseMocker3 = new ArexMocker(MockCategoryType.DATABASE);
100+
databaseMocker3.setOperationName("databse@table@select@query");
101+
databaseMocker3.setTargetRequest(new Mocker.Target());
102+
databaseMocker3.getTargetRequest().setBody("mock");
103+
databaseMocker3.setTargetResponse(new Mocker.Target());
104+
databaseMocker3.setCreationTime(System.currentTimeMillis() - 1000);
105+
recordMockerList.add(databaseMocker3);
106+
Mockito.when(MockUtils.queryMockers(any())).thenReturn(recordMockerList);
107+
Mockito.when(Serializer.deserialize(any(), eq(ArexConstants.MOCKER_TARGET_TYPE))).thenReturn(new Mocker.Target());
73108
};
74109
Runnable mocker3 = () -> {
75-
List<MergeDTO> mergeReplayList = new ArrayList<>();
76-
MergeDTO mergeDTO = new MergeDTO();
77-
mergeDTO.setMethodRequestTypeHash(1);
78-
mergeReplayList.add(mergeDTO);
79-
Mockito.when(Serializer.deserialize(anyString(), anyString())).thenReturn(mergeReplayList);
110+
requestMocker.setOperationName("arex.mergeRecord");
111+
Mockito.when(Serializer.deserialize(any(), eq(ArexConstants.MERGE_TYPE))).thenReturn(null);
112+
};
113+
List<MergeDTO> mergeReplayList = new ArrayList<>();
114+
MergeDTO mergeDTO = new MergeDTO();
115+
mergeReplayList.add(mergeDTO);
116+
Runnable mocker4 = () -> {
117+
Mockito.when(Serializer.deserialize(any(), eq(ArexConstants.MERGE_TYPE))).thenReturn(mergeReplayList);
118+
};
119+
Runnable mocker5 = () -> {
120+
mergeDTO.setCategory(MockCategoryType.DYNAMIC_CLASS.getName());
80121
};
81122
return Stream.of(
82123
arguments(emptyMocker),
83124
arguments(mocker1),
84125
arguments(mocker2),
85-
arguments(mocker3)
126+
arguments(mocker3),
127+
arguments(mocker4),
128+
arguments(mocker5)
86129
);
87130
}
131+
132+
@Test
133+
void saveReplayCompareResult() {
134+
assertDoesNotThrow(ReplayUtil::saveReplayCompareResult);
135+
// replayCompareResultQueue is empty
136+
Mockito.when(context.isReplay()).thenReturn(true);
137+
LinkedBlockingQueue<ReplayCompareResultDTO> replayCompareResultQueue = new LinkedBlockingQueue<>();
138+
Mockito.when(context.getReplayCompareResultQueue()).thenReturn(replayCompareResultQueue);
139+
assertDoesNotThrow(ReplayUtil::saveReplayCompareResult);
140+
// saveReplayCompareResult
141+
replayCompareResultQueue.offer(new ReplayCompareResultDTO());
142+
Mockito.when(context.getReplayCompareResultQueue()).thenReturn(replayCompareResultQueue);
143+
Map<Integer, List<Mocker>> cachedReplayResultMap = new HashMap<>();
144+
cachedReplayResultMap.put(1, Collections.singletonList(requestMocker));
145+
Mockito.when(context.getCachedReplayResultMap()).thenReturn(cachedReplayResultMap);
146+
assertDoesNotThrow(ReplayUtil::saveReplayCompareResult);
147+
}
148+
149+
@Test
150+
void saveRemainCompareResult() {
151+
assertDoesNotThrow(() -> ReplayUtil.saveRemainCompareResult(null));
152+
153+
Mockito.when(context.getReplayCompareResultQueue()).thenReturn(new LinkedBlockingQueue<>());
154+
Map<Integer, List<Mocker>> cachedReplayResultMap = new HashMap<>();
155+
ArexMocker databaseMocker = new ArexMocker(MockCategoryType.DATABASE);
156+
databaseMocker.setOperationName("databse@table@select@query");
157+
databaseMocker.setTargetRequest(new Mocker.Target());
158+
databaseMocker.getTargetRequest().setBody("mock");
159+
databaseMocker.setTargetResponse(new Mocker.Target());
160+
cachedReplayResultMap.put(1, Collections.singletonList(databaseMocker));
161+
Mockito.when(context.getCachedReplayResultMap()).thenReturn(cachedReplayResultMap);
162+
assertDoesNotThrow(() -> ReplayUtil.saveRemainCompareResult(context));
163+
}
88164
}

arex-instrumentation-foundation/src/main/java/io/arex/foundation/services/DataCollectorService.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,6 @@ private BiFunction<HttpClientResponse, Throwable, HttpClientResponse> queryAllMo
223223

224224
@Override
225225
public void saveReplayCompareResult(String postData) {
226-
System.out.println("arex.saveReplayCompareResult: " + postData);
227226
AsyncHttpClientUtil.postAsyncWithZstdJson(batchSaveReplayResult, postData, null)
228227
.whenComplete(saveReplayCompareConsumer(postData));
229228
}

arex-instrumentation-foundation/src/test/java/io/arex/foundation/config/ConfigManagerTest.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import io.arex.inst.runtime.model.DynamicClassEntity;
99
import io.arex.inst.runtime.model.DynamicClassStatusEnum;
1010
import java.lang.reflect.Constructor;
11-
import java.lang.reflect.InvocationTargetException;
1211
import java.lang.reflect.Method;
1312
import java.time.LocalDate;
1413
import java.time.LocalTime;
@@ -316,4 +315,15 @@ void appendCoveragePackages() throws Exception {
316315
appendCoveragePackages.invoke(configManager, "com.a.b");
317316
assertEquals("com.a.b", System.getProperty(ConfigConstants.COVERAGE_PACKAGES));
318317
}
318+
319+
@Test
320+
void setCompareConfiguration() {
321+
assertDoesNotThrow(() -> configManager.setCompareConfiguration(null));
322+
ConfigQueryResponse.CompareConfiguration compareConfiguration = new ConfigQueryResponse.CompareConfiguration();
323+
List<ConfigQueryResponse.ConfigComparisonExclusions> comparisonExclusions = new ArrayList<>();
324+
ConfigQueryResponse.ConfigComparisonExclusions exclusion = new ConfigQueryResponse.ConfigComparisonExclusions();
325+
comparisonExclusions.add(exclusion);
326+
compareConfiguration.setComparisonExclusions(comparisonExclusions);
327+
assertDoesNotThrow(() -> configManager.setCompareConfiguration(compareConfiguration));
328+
}
319329
}

arex-instrumentation-foundation/src/test/java/io/arex/foundation/services/DataCollectorServiceTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static org.junit.jupiter.api.Assertions.*;
44
import static org.mockito.ArgumentMatchers.any;
55
import static org.mockito.ArgumentMatchers.anyString;
6+
import static org.mockito.ArgumentMatchers.eq;
67

78
import io.arex.agent.bootstrap.model.ArexMocker;
89
import io.arex.agent.bootstrap.model.MockStrategyEnum;
@@ -19,7 +20,10 @@
1920
import java.util.Collections;
2021
import java.util.concurrent.CompletableFuture;
2122

23+
import io.arex.inst.runtime.log.LogManager;
24+
import io.arex.inst.runtime.model.ArexConstants;
2225
import io.arex.inst.runtime.model.QueryAllMockerDTO;
26+
import io.arex.inst.runtime.model.ReplayCompareResultDTO;
2327
import io.arex.inst.runtime.serializer.Serializer;
2428
import io.arex.inst.runtime.util.CaseManager;
2529
import org.junit.jupiter.api.AfterAll;
@@ -37,6 +41,7 @@ static void setUp() {
3741
Mockito.mockStatic(ContextManager.class);
3842
Mockito.mockStatic(Serializer.class);
3943
caseManagerMocked = Mockito.mockStatic(CaseManager.class);
44+
Mockito.mockStatic(LogManager.class);
4045
}
4146

4247
@AfterAll
@@ -137,4 +142,18 @@ void queryAll() {
137142
void order() {
138143
assertEquals(0, DataCollectorService.INSTANCE.order());
139144
}
145+
146+
@Test
147+
void saveReplayCompareResult() {
148+
Mockito.when(AsyncHttpClientUtil.postAsyncWithZstdJson(anyString(), anyString(), any()))
149+
.thenReturn(CompletableFuture.completedFuture(null));
150+
assertDoesNotThrow(() -> DataCollectorService.INSTANCE.saveReplayCompareResult("mock"));
151+
// exception
152+
CompletableFuture<HttpClientResponse> mockException = new CompletableFuture<>();
153+
mockException.completeExceptionally(new RuntimeException("mock exception"));
154+
Mockito.when(AsyncHttpClientUtil.postAsyncWithZstdJson(anyString(), any(), any())).thenReturn(mockException);
155+
Mockito.when(Serializer.deserialize(any(), eq(ArexConstants.REPLAY_COMPARE_TYPE))).
156+
thenReturn(Collections.singletonList(new ReplayCompareResultDTO()));
157+
assertDoesNotThrow(() -> DataCollectorService.INSTANCE.saveReplayCompareResult("mock"));
158+
}
140159
}

arex-third-party/src/main/java/io/arex/agent/thirdparty/util/CompressUtil.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
import java.io.InputStream;
1212
import java.nio.charset.Charset;
1313
import java.nio.charset.StandardCharsets;
14-
import java.util.Arrays;
15-
import java.util.Base64;
1614

1715
/**
1816
* Compress/decompress util
@@ -82,16 +80,4 @@ public static String zstdDecompress(byte[] bytes, Charset charsetName) {
8280
public static String zstdDecompress(byte[] bytes) {
8381
return zstdDecompress(new ByteArrayInputStream(bytes), StandardCharsets.UTF_8);
8482
}
85-
86-
public static void main(String[] args) {
87-
// String original = "hello world";
88-
// byte[] compressed = zstdCompress(original, StandardCharsets.UTF_8);
89-
// System.out.println("compressed: " + new String(compressed, StandardCharsets.UTF_8));
90-
91-
String compressStr = "KLUv/QBY7QcAVlA0IkBpnQPJ3kIW0P5pC12ZhU4ZJcQ2QFhQmFrViUQV4qooalwpACsALAAKKTwIvkn5ic95ruc+CgkePN1zIzVoSZmhHZefK3FP5z0bCHenHJh4I4cGgCAH0w4lacnrjopYhaRPo61OgHsuwyY+V1vYgrjnNo8Xz3VwT4eA4RQLqr+qhnvcZiQed+vXE6qngVkWaSNe5dBYSxjeCSKe+AYMq3omDMKUxSmKC9Uj2CxDugWM6tfSso7brKVVKFs87oZFsDk6PgSlzAIMes1gOunC3TcQAFgOsQXAyYAsgLsApMBmBZIAnMC4UgY6UHeTkYEKGUDmaJ534xYTCg==";
92-
byte[] compressBytes = Base64.getDecoder().decode(compressStr);
93-
String decompressed = zstdDecompress(compressBytes);
94-
// String decompressed = zstdDecompress(compressStr.getBytes(StandardCharsets.ISO_8859_1));
95-
System.out.println("decompressed: " + decompressed);
96-
}
9783
}

pom.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@
8282
**/constants/**,
8383
**/thirdparty/**,
8484
**/integrationtest/**,
85+
**/compare/**,
8586
**/*Instrumentation.java,
8687
**/JJWTGenerator.java
8788
</sonar.exclusions>
@@ -103,6 +104,7 @@
103104
**/wrapper/**,
104105
**/thirdparty/**,
105106
**/integrationtest/**,
107+
**/compare/**,
106108
**/RedisCommandBuilderImpl.java,
107109
**/HttpResponseWrapper.java,
108110
**/RFutureWrapper.java

0 commit comments

Comments
 (0)