diff --git a/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/config/Config.java b/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/config/Config.java index 9c2f279b6..a445779af 100644 --- a/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/config/Config.java +++ b/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/config/Config.java @@ -6,6 +6,7 @@ import io.arex.inst.runtime.context.RecordLimiter; import io.arex.inst.runtime.listener.EventProcessor; import io.arex.inst.runtime.model.DynamicClassEntity; +import io.arex.inst.runtime.model.RecordRuleEntity; import java.util.ArrayList; import java.util.Collections; @@ -24,10 +25,11 @@ public class Config { static void update(boolean enableDebug, String serviceName, List dynamicClassList, Map properties, Set excludeServiceOperations, - int dubboStreamReplayThreshold, int recordRate) { + int dubboStreamReplayThreshold, int recordRate, + List recordRuleList, boolean existUrlParamRule, boolean existBodyParamRule) { INSTANCE = new Config(enableDebug, serviceName, dynamicClassList, properties, - excludeServiceOperations, - dubboStreamReplayThreshold, recordRate); + excludeServiceOperations, dubboStreamReplayThreshold, recordRate, + recordRuleList, existUrlParamRule, existBodyParamRule); } public static Config get() { @@ -46,10 +48,14 @@ public static Config get() { private final String recordVersion; private final Set includeServiceOperations; private final String[] coveragePackages; + private final List recordRuleList; + private final boolean existUrlParamRule; + private final boolean existBodyParamRule; Config(boolean enableDebug, String serviceName, List dynamicClassList, Map properties, - Set excludeServiceOperations, int dubboStreamReplayThreshold, int recordRate) { + Set excludeServiceOperations, int dubboStreamReplayThreshold, int recordRate, + List recordRuleList, boolean existUrlParamRule, boolean existBodyParamRule) { this.enableDebug = enableDebug; this.serviceName = serviceName; this.dynamicClassList = dynamicClassList; @@ -60,6 +66,9 @@ public static Config get() { this.recordVersion = properties.get("arex.agent.version"); this.includeServiceOperations = StringUtil.splitToSet(properties.get("includeServiceOperations"), ','); this.coveragePackages = StringUtil.split(properties.get(ConfigConstants.COVERAGE_PACKAGES), ','); + this.recordRuleList = recordRuleList; + this.existUrlParamRule = existUrlParamRule; + this.existBodyParamRule = existBodyParamRule; buildDynamicClassInfo(); } @@ -187,6 +196,18 @@ public boolean isLocalStorage() { return STORAGE_MODE.equalsIgnoreCase(getString(STORAGE_SERVICE_MODE)); } + public List getRecordRuleList() { + return recordRuleList; + } + + public boolean isExistUrlParamRule() { + return existUrlParamRule; + } + + public boolean isExistBodyParamRule() { + return existBodyParamRule; + } + /** * Conditions for determining invalid recording configuration:
* 1. rate <= 0
diff --git a/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/config/ConfigBuilder.java b/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/config/ConfigBuilder.java index edcfbfa53..89e93281b 100644 --- a/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/config/ConfigBuilder.java +++ b/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/config/ConfigBuilder.java @@ -1,6 +1,7 @@ package io.arex.inst.runtime.config; import io.arex.inst.runtime.model.DynamicClassEntity; +import io.arex.inst.runtime.model.RecordRuleEntity; import java.util.*; @@ -12,6 +13,9 @@ public class ConfigBuilder { private Set excludeServiceOperations; private int dubboStreamReplayThreshold; private int recordRate; + private List recordRuleList; + private boolean existUrlParamRule; + private boolean existBodyParamRule; public static ConfigBuilder create(String serviceName) { return new ConfigBuilder(serviceName); @@ -69,8 +73,23 @@ public ConfigBuilder recordRate(int recordRate) { return this; } + public ConfigBuilder recordRuleList(List recordRuleList) { + this.recordRuleList = recordRuleList; + return this; + } + + public ConfigBuilder existUrlParamRule(boolean existUrlParamRule) { + this.existUrlParamRule = existUrlParamRule; + return this; + } + + public ConfigBuilder existBodyParamRule(boolean existBodyParamRule) { + this.existBodyParamRule = existBodyParamRule; + return this; + } + public void build() { Config.update(enableDebug, serviceName, dynamicClassList, Collections.unmodifiableMap(new HashMap<>(properties)), - excludeServiceOperations, dubboStreamReplayThreshold, recordRate); + excludeServiceOperations, dubboStreamReplayThreshold, recordRate, recordRuleList, existUrlParamRule, existBodyParamRule); } } diff --git a/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/model/ParamRuleEntity.java b/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/model/ParamRuleEntity.java new file mode 100644 index 000000000..5314ab582 --- /dev/null +++ b/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/model/ParamRuleEntity.java @@ -0,0 +1,51 @@ +package io.arex.inst.runtime.model; + +import java.util.List; + +public class ParamRuleEntity { + private String id; + private String appId; + private String urlRuleId; + private String paramType; + private List valueRuleEntityList; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getUrlRuleId() { + return urlRuleId; + } + + public void setUrlRuleId(String urlRuleId) { + this.urlRuleId = urlRuleId; + } + + public String getParamType() { + return paramType; + } + + public void setParamType(String paramType) { + this.paramType = paramType; + } + + public List getValueRuleEntityList() { + return valueRuleEntityList; + } + + public void setValueRuleEntityList(List valueRuleEntityList) { + this.valueRuleEntityList = valueRuleEntityList; + } +} diff --git a/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/model/RecordRuleEntity.java b/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/model/RecordRuleEntity.java new file mode 100644 index 000000000..e0917c3fe --- /dev/null +++ b/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/model/RecordRuleEntity.java @@ -0,0 +1,42 @@ +package io.arex.inst.runtime.model; + +import java.util.List; + +public class RecordRuleEntity { + private String id; + private String appId; + private String httpPath; + private List paramRuleEntityList; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getHttpPath() { + return httpPath; + } + + public void setHttpPath(String httpPath) { + this.httpPath = httpPath; + } + + public List getParamRuleEntityList() { + return paramRuleEntityList; + } + + public void setParamRuleEntityList(List paramRuleEntityList) { + this.paramRuleEntityList = paramRuleEntityList; + } +} diff --git a/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/model/ValueRuleEntity.java b/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/model/ValueRuleEntity.java new file mode 100644 index 000000000..0211b0d7c --- /dev/null +++ b/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/model/ValueRuleEntity.java @@ -0,0 +1,22 @@ +package io.arex.inst.runtime.model; + +public class ValueRuleEntity { + private String key; + private String value; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/util/IgnoreUtils.java b/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/util/IgnoreUtils.java index 19c518856..5a55d6c57 100644 --- a/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/util/IgnoreUtils.java +++ b/arex-instrumentation-api/src/main/java/io/arex/inst/runtime/util/IgnoreUtils.java @@ -18,6 +18,9 @@ public class IgnoreUtils { */ private static final Set INVALID_OPERATION_HASH_CACHE = new ConcurrentHashSet<>(); + public static final String PARAM_TYPE_QUERY_STRING = "QUERY_STRING"; + public static final String PARAM_TYPE_JSON_BODY = "JSON_BODY"; + public static boolean ignoreMockResult(String serviceKey, String operationKey) { if (StringUtil.isEmpty(serviceKey)) { return false; diff --git a/arex-instrumentation-api/src/test/java/io/arex/inst/runtime/config/ConfigTest.java b/arex-instrumentation-api/src/test/java/io/arex/inst/runtime/config/ConfigTest.java index f4717cf61..8822f84ee 100644 --- a/arex-instrumentation-api/src/test/java/io/arex/inst/runtime/config/ConfigTest.java +++ b/arex-instrumentation-api/src/test/java/io/arex/inst/runtime/config/ConfigTest.java @@ -6,10 +6,12 @@ import io.arex.inst.runtime.listener.EventProcessor; import io.arex.inst.runtime.model.ArexConstants; import io.arex.inst.runtime.model.DynamicClassEntity; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; +import java.util.*; + +import io.arex.inst.runtime.model.ParamRuleEntity; +import io.arex.inst.runtime.model.RecordRuleEntity; +import io.arex.inst.runtime.util.IgnoreUtils; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -139,4 +141,40 @@ void buildCoveragePackages() { assertEquals(1, Config.get().getCoveragePackages().length); assertEquals("io.arex.inst", Config.get().getCoveragePackages()[0]); } + + @Test + void testBuildRecordRule() { + ConfigBuilder.create("mock").recordRuleList(null).build(); + assertNull(Config.get().getRecordRuleList()); + + ConfigBuilder config = ConfigBuilder.create("mock"); + List recordRuleList = new ArrayList<>(); + recordRuleList.add(getRecordRuleEntity()); + config.recordRuleList(recordRuleList).build(); + Assertions.assertEquals(1, Config.get().getRecordRuleList().size()); + } + + private RecordRuleEntity getRecordRuleEntity() { + RecordRuleEntity recordRule = new RecordRuleEntity(); + recordRule.setId("mock-record-rule-id"); + recordRule.setAppId("mock"); + recordRule.setHttpPath("/unitTestHttpPath"); + return recordRule; + } + + @Test + void testBuildExistUrlParamRule() { + ConfigBuilder.create("mock").build(); + assertFalse(Config.get().isExistUrlParamRule()); + ConfigBuilder.create("mock").existUrlParamRule(true).build(); + assertTrue(Config.get().isExistUrlParamRule()); + } + + @Test + void testBuildExistBodyParamRule() { + ConfigBuilder.create("mock").build(); + assertFalse(Config.get().isExistBodyParamRule()); + ConfigBuilder.create("mock").existBodyParamRule(true).build(); + assertTrue(Config.get().isExistBodyParamRule()); + } } diff --git a/arex-instrumentation-foundation/src/main/java/io/arex/foundation/config/ConfigManager.java b/arex-instrumentation-foundation/src/main/java/io/arex/foundation/config/ConfigManager.java index 4bc40322f..6e88cb772 100644 --- a/arex-instrumentation-foundation/src/main/java/io/arex/foundation/config/ConfigManager.java +++ b/arex-instrumentation-foundation/src/main/java/io/arex/foundation/config/ConfigManager.java @@ -6,16 +6,15 @@ import io.arex.agent.bootstrap.util.StringUtil; import io.arex.foundation.logger.AgentLogger; import io.arex.foundation.logger.AgentLoggerFactory; -import io.arex.foundation.model.ConfigQueryResponse.DynamicClassConfiguration; -import io.arex.foundation.model.ConfigQueryResponse.ResponseBody; -import io.arex.foundation.model.ConfigQueryResponse.ServiceCollectConfig; +import io.arex.foundation.model.ConfigQueryResponse.*; import io.arex.agent.bootstrap.util.CollectionUtil; import io.arex.inst.runtime.config.Config; import io.arex.inst.runtime.config.ConfigBuilder; import io.arex.inst.runtime.config.listener.ConfigListener; -import io.arex.inst.runtime.model.DynamicClassEntity; -import io.arex.inst.runtime.model.DynamicClassStatusEnum; +import io.arex.inst.runtime.model.*; import io.arex.agent.bootstrap.util.ServiceLoader; +import io.arex.inst.runtime.util.IgnoreUtils; + import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; @@ -31,6 +30,7 @@ import java.util.stream.Stream; import static io.arex.agent.bootstrap.constants.ConfigConstants.*; +import static java.util.stream.Collectors.toList; public class ConfigManager { @@ -64,6 +64,9 @@ public class ConfigManager { private List listeners = new ArrayList<>(); private Map extendField; private int bufferSize; + private List recordRuleEntityList = new ArrayList<>(); + private boolean existUrlParamRule = false; + private boolean existBodyParamRule = false; private ConfigManager() { init(); @@ -149,6 +152,85 @@ public Set getResetClassSet() { return resetClassSet; } + public List getRecordRuleList() { + return recordRuleEntityList; + } + + public void setExistUrlParamRule(boolean existUrlParamRule) { + this.existUrlParamRule = existUrlParamRule; + } + + public boolean isExistUrlParamRule() { + return existUrlParamRule; + } + + public void setExistBodyParamRule(boolean existBodyParamRule) { + this.existBodyParamRule = existBodyParamRule; + } + + public boolean isExistBodyParamRule() { + return existBodyParamRule; + } + + public void setRecordRuleEntityList(List configurationList) { + this.recordRuleEntityList = parseRecordRuleEntityList(configurationList); + } + + private List parseRecordRuleEntityList(List configurationList) { + if (CollectionUtil.isEmpty(configurationList)) { + return new ArrayList<>(); + } + + return configurationList.stream() + .map(recordUrlConfiguration -> { + RecordRuleEntity entity = new RecordRuleEntity(); + entity.setId(recordUrlConfiguration.getId()); + entity.setAppId(recordUrlConfiguration.getAppId()); + entity.setHttpPath(recordUrlConfiguration.getHttpPath()); + entity.setParamRuleEntityList(parseParamRuleEntityList(recordUrlConfiguration.getParamRuleList())); + return entity; + }) + .collect(toList()); + } + + private List parseParamRuleEntityList(List paramRuleList) { + if (CollectionUtil.isEmpty(paramRuleList)) { + return new ArrayList<>(); + } + + return paramRuleList.stream() + .map(paramRule -> { + ParamRuleEntity entity = new ParamRuleEntity(); + entity.setId(paramRule.getId()); + entity.setAppId(paramRule.getAppId()); + entity.setUrlRuleId(paramRule.getUrlRuleId()); + entity.setParamType(paramRule.getParamType()); + if (IgnoreUtils.PARAM_TYPE_QUERY_STRING.equals(paramRule.getParamType())) { + existUrlParamRule = true; + } + if (IgnoreUtils.PARAM_TYPE_JSON_BODY.equals(paramRule.getParamType())) { + existBodyParamRule = true; + } + entity.setValueRuleEntityList(parseValueRuleEntityList(paramRule.getValueRuleList())); + return entity; + }) + .collect(toList()); + } + + private List parseValueRuleEntityList(List valueRuleList) { + if (CollectionUtil.isEmpty(valueRuleList)) { + return new ArrayList<>(); + } + return valueRuleList.stream() + .map(valueRule -> { + ValueRuleEntity entity = new ValueRuleEntity(); + entity.setKey(valueRule.getKey()); + entity.setValue(valueRule.getValue()); + return entity; + }) + .collect(toList()); + } + public List getDynamicClassList() { return dynamicClassList; } @@ -356,6 +438,7 @@ public void updateConfigFromService(ResponseBody serviceConfig) { setAgentEnabled(serviceConfig.isAgentEnabled()); setExtendField(serviceConfig.getExtendField()); setMessage(serviceConfig.getMessage()); + setRecordRuleEntityList(serviceConfig.getRecordUrlConfigurationList()); updateRuntimeConfig(); } @@ -385,6 +468,9 @@ private void updateRuntimeConfig() { .excludeServiceOperations(getExcludeServiceOperations()) .dubboStreamReplayThreshold(getDubboStreamReplayThreshold()) .recordRate(getRecordRate()) + .recordRuleList(getRecordRuleList()) + .existUrlParamRule(isExistUrlParamRule()) + .existBodyParamRule(isExistBodyParamRule()) .build(); publish(Config.get()); } diff --git a/arex-instrumentation-foundation/src/main/java/io/arex/foundation/model/ConfigQueryResponse.java b/arex-instrumentation-foundation/src/main/java/io/arex/foundation/model/ConfigQueryResponse.java index c4a54c318..bba9a906c 100644 --- a/arex-instrumentation-foundation/src/main/java/io/arex/foundation/model/ConfigQueryResponse.java +++ b/arex-instrumentation-foundation/src/main/java/io/arex/foundation/model/ConfigQueryResponse.java @@ -63,6 +63,7 @@ public static class ResponseBody { private List dynamicClassConfigurationList; private boolean agentEnabled; private Map extendField; + private List recordUrlConfigurationList; public ServiceCollectConfig getServiceCollectConfiguration() { return serviceCollectConfiguration; @@ -113,6 +114,15 @@ public Map getExtendField() { public void setExtendField(Map extendField) { this.extendField = extendField; } + + public List getRecordUrlConfigurationList() { + return recordUrlConfigurationList; + } + + public void setRecordUrlConfigurationList(List recordUrlConfigurationList) { + this.recordUrlConfigurationList = recordUrlConfigurationList; + } + } public static class ServiceCollectConfig { @@ -221,4 +231,117 @@ public void setKeyFormula(String keyFormula) { this.keyFormula = keyFormula; } } + + public static class RecordUrlConfiguration { + private String id; + private String appId; + private String httpPath; + private List paramRuleList; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getHttpPath() { + return httpPath; + } + + public void setHttpPath(String httpPath) { + this.httpPath = httpPath; + } + + public List getParamRuleList() { + return paramRuleList; + } + + public void setParamRuleList(List paramRuleList) { + this.paramRuleList = paramRuleList; + } + } + + public static class ParamRule { + private String id; + private String appId; + private String urlRuleId; + /** + * Parameter type enumeration: + * QUERY_STRING: http request URL parameters + * JSON_BODY: http request body parameters in JSON format + */ + private String paramType; + private List valueRuleList; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getUrlRuleId() { + return urlRuleId; + } + + public void setUrlRuleId(String urlRuleId) { + this.urlRuleId = urlRuleId; + } + + public String getParamType() { + return paramType; + } + + public void setParamType(String paramType) { + this.paramType = paramType; + } + + public List getValueRuleList() { + return valueRuleList; + } + + public void setValueRuleList(List valueRuleList) { + this.valueRuleList = valueRuleList; + } + } + + public static class ValueRule { + private String key; + private String value; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } } diff --git a/arex-instrumentation-foundation/src/test/java/io/arex/foundation/config/ConfigManagerTest.java b/arex-instrumentation-foundation/src/test/java/io/arex/foundation/config/ConfigManagerTest.java index 72499d737..d9014622d 100644 --- a/arex-instrumentation-foundation/src/test/java/io/arex/foundation/config/ConfigManagerTest.java +++ b/arex-instrumentation-foundation/src/test/java/io/arex/foundation/config/ConfigManagerTest.java @@ -4,9 +4,13 @@ import io.arex.agent.bootstrap.util.StringUtil; import io.arex.foundation.model.ConfigQueryResponse; import io.arex.foundation.model.ConfigQueryResponse.DynamicClassConfiguration; +import io.arex.foundation.model.ConfigQueryResponse.ParamRule; +import io.arex.foundation.model.ConfigQueryResponse.RecordUrlConfiguration; +import io.arex.foundation.model.ConfigQueryResponse.ValueRule; import io.arex.inst.runtime.model.ArexConstants; import io.arex.inst.runtime.model.DynamicClassEntity; import io.arex.inst.runtime.model.DynamicClassStatusEnum; +import io.arex.inst.runtime.util.IgnoreUtils; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -92,6 +96,108 @@ void setExcludeServiceOperations() { assertFalse(configManager.getExcludeServiceOperations().isEmpty()); } + private RecordUrlConfiguration getRecordUrlConfig() { + RecordUrlConfiguration recordUrlConfig = new RecordUrlConfiguration(); + recordUrlConfig.setId("mock-record-rule-id"); + recordUrlConfig.setAppId("unit-test-service"); + recordUrlConfig.setHttpPath("/unitTestHttpPath"); + return recordUrlConfig; + } + + @Test + void setRecordRule() { + configManager.setExistUrlParamRule(false); + configManager.setExistBodyParamRule(false); + configManager.setRecordRuleEntityList(new ArrayList<>()); + + // record rule size = 0 + assertEquals(0, configManager.getRecordRuleList().size()); + assertFalse(configManager.isExistUrlParamRule()); + assertFalse(configManager.isExistBodyParamRule()); + + // record rule size = 1 + List recordRuleConfigList = new ArrayList<>(); + RecordUrlConfiguration recordUrlConfig = getRecordUrlConfig(); + recordRuleConfigList.add(recordUrlConfig); + configManager.setRecordRuleEntityList(recordRuleConfigList); + assertEquals(1, configManager.getRecordRuleList().size()); + assertFalse(configManager.isExistUrlParamRule()); + assertFalse(configManager.isExistBodyParamRule()); + } + + private ParamRule getUrlParamRule() { + ParamRule paramRule = new ParamRule(); + paramRule.setId("mock-param-rule-id"); + paramRule.setAppId("unit-test-service"); + paramRule.setUrlRuleId("mock-record-rule-id"); + paramRule.setParamType(IgnoreUtils.PARAM_TYPE_QUERY_STRING); + List valueRuleList = new ArrayList<>(); + valueRuleList.add(getValueRule()); + paramRule.setValueRuleList(valueRuleList); + return paramRule; + } + + private ParamRule getBodyParamRule() { + ParamRule paramRule = new ParamRule(); + paramRule.setId("mock-param-rule-id"); + paramRule.setAppId("unit-test-service"); + paramRule.setUrlRuleId("mock-record-rule-id"); + paramRule.setParamType(IgnoreUtils.PARAM_TYPE_JSON_BODY); + List valueRuleList = new ArrayList<>(); + valueRuleList.add(getValueRule()); + paramRule.setValueRuleList(valueRuleList); + return paramRule; + } + + private ValueRule getValueRule() { + ValueRule valueRule = new ValueRule(); + valueRule.setKey("key"); + valueRule.setValue("value"); + return valueRule; + } + + @Test + void setUrlParamRule() { + configManager.setExistUrlParamRule(false); + configManager.setExistBodyParamRule(false); + configManager.setRecordRuleEntityList(new ArrayList<>()); + + assertFalse(configManager.isExistUrlParamRule()); + assertFalse(configManager.isExistBodyParamRule()); + + // url param rule size = 1 + List recordRuleConfigList = new ArrayList<>(); + RecordUrlConfiguration recordUrlConfig = getRecordUrlConfig(); + List paramRuleList = new ArrayList<>(); + paramRuleList.add(getUrlParamRule()); + recordUrlConfig.setParamRuleList(paramRuleList); + recordRuleConfigList.add(recordUrlConfig); + configManager.setRecordRuleEntityList(recordRuleConfigList); + assertTrue(configManager.isExistUrlParamRule()); + assertFalse(configManager.isExistBodyParamRule()); + } + + @Test + void setBodyParamRule() { + configManager.setExistUrlParamRule(false); + configManager.setExistBodyParamRule(false); + configManager.setRecordRuleEntityList(new ArrayList<>()); + + assertFalse(configManager.isExistUrlParamRule()); + assertFalse(configManager.isExistBodyParamRule()); + + // url param rule size = 1 + List recordRuleConfigList = new ArrayList<>(); + RecordUrlConfiguration recordUrlConfig = getRecordUrlConfig(); + List paramRuleList = new ArrayList<>(); + paramRuleList.add(getBodyParamRule()); + recordUrlConfig.setParamRuleList(paramRuleList); + recordRuleConfigList.add(recordUrlConfig); + configManager.setRecordRuleEntityList(recordRuleConfigList); + assertFalse(configManager.isExistUrlParamRule()); + assertTrue(configManager.isExistBodyParamRule()); + } + @Test void replaceConfigFromService() { ConfigQueryResponse.ResponseBody serviceConfig = new ConfigQueryResponse.ResponseBody(); diff --git a/arex-instrumentation-foundation/src/test/java/io/arex/foundation/services/ConfigServiceTest.java b/arex-instrumentation-foundation/src/test/java/io/arex/foundation/services/ConfigServiceTest.java index e80adfb0b..af225d9b1 100644 --- a/arex-instrumentation-foundation/src/test/java/io/arex/foundation/services/ConfigServiceTest.java +++ b/arex-instrumentation-foundation/src/test/java/io/arex/foundation/services/ConfigServiceTest.java @@ -14,6 +14,7 @@ import io.arex.foundation.model.AgentStatusRequest; import io.arex.foundation.model.ConfigQueryRequest; import io.arex.foundation.model.ConfigQueryResponse; +import io.arex.foundation.model.ConfigQueryResponse.RecordUrlConfiguration; import io.arex.foundation.model.ConfigQueryResponse.ResponseBody; import io.arex.foundation.model.ConfigQueryResponse.ServiceCollectConfig; import io.arex.foundation.model.HttpClientResponse; @@ -21,9 +22,7 @@ import io.arex.foundation.util.NetUtils; import io.arex.foundation.util.httpclient.AsyncHttpClientUtil; import java.time.DayOfWeek; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.Map; +import java.util.*; import java.util.concurrent.CompletableFuture; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -132,6 +131,18 @@ void loadAgentConfig() throws Throwable { assertEquals(DELAY_MINUTES, ConfigService.INSTANCE.loadAgentConfig(null)); assertTrue(ConfigManager.INSTANCE.inWorkingTime() && ConfigManager.INSTANCE.getRecordRate() > 0); assertEquals(AgentStatusEnum.WORKING, ConfigService.INSTANCE.getAgentStatus()); + + // record rule size = 0 + assertEquals(0, ConfigManager.INSTANCE.getRecordRuleList().size()); + List recordRuleConfigList = new ArrayList<>(); + RecordUrlConfiguration recordUrlConfig = new RecordUrlConfiguration(); + recordRuleConfigList.add(recordUrlConfig); + responseBody.setRecordUrlConfigurationList(recordRuleConfigList); + configQueryResponse.setBody(responseBody); + response = CompletableFuture.completedFuture(new HttpClientResponse(200, null, JacksonSerializer.INSTANCE.serialize(configQueryResponse))); + ahc.when(() -> AsyncHttpClientUtil.postAsyncWithJson(anyString(), anyString(), eq(null))).thenReturn(response); + assertEquals(DELAY_MINUTES, ConfigService.INSTANCE.loadAgentConfig(null)); + assertEquals(1, ConfigManager.INSTANCE.getRecordRuleList().size()); } }