Skip to content

Commit

Permalink
feat: Compatible with replayResult interface logic
Browse files Browse the repository at this point in the history
  • Loading branch information
pangdayuan1 committed Sep 2, 2024
1 parent 8fb923d commit 8e84e19
Show file tree
Hide file tree
Showing 16 changed files with 262 additions and 52 deletions.
4 changes: 2 additions & 2 deletions arex-schedule-web-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@
<parent>
<artifactId>arex-schedule-parent</artifactId>
<groupId>com.arextest</groupId>
<version>1.2.17</version>
<version>1.2.18</version>
</parent>

<profiles>
Expand Down Expand Up @@ -338,5 +338,5 @@
</properties>
</profile>
</profiles>
<version>1.2.17</version>
<version>1.2.18</version>
</project>
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.arextest.schedule.client;

import static com.arextest.schedule.common.CommonConstant.URL;
import static org.springframework.http.HttpHeaders.CONTENT_TYPE;

import com.arextest.schedule.utils.SSLUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
Expand Down Expand Up @@ -74,6 +75,7 @@ public final class HttpWepServiceApiClient {

@Autowired(required = false)
private List<ClientHttpRequestInterceptor> clientHttpRequestInterceptors;
private static final String ZSTD_JSON_CONTENT_TYPE = "application/zstd-json;charset=UTF-8";

@PostConstruct
private void initTemplate() {
Expand Down Expand Up @@ -250,6 +252,21 @@ public <TRequest, TResponse> ResponseEntity<TResponse> retryJsonPost(String url,
}
}

public <TRequest, TResponse> TResponse retryZstdJsonPost(String url, TRequest request,
Class<TResponse> responseType) {
Map<String, String> headers = Maps.newHashMapWithExpectedSize(1);
headers.put(HttpHeaders.CONTENT_TYPE, ZSTD_JSON_CONTENT_TYPE);

try {
return retryTemplate.execute(retryCallback -> {
retryCallback.setAttribute(URL, url);
return restTemplate.postForObject(url, wrapJsonContentType(request, headers), responseType);
});
} catch (Exception e) {
return null;
}
}

@SuppressWarnings("unchecked")
private <TRequest> HttpEntity<TRequest> wrapJsonContentType(TRequest request) {
HttpEntity<TRequest> httpJsonEntity;
Expand All @@ -271,7 +288,9 @@ private <TRequest> HttpEntity<TRequest> wrapJsonContentType(TRequest request,
httpJsonEntity = (HttpEntity<TRequest>) request;
} else {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
if (!extraHeaders.containsKey(CONTENT_TYPE)) {
headers.setContentType(MediaType.APPLICATION_JSON);
}
headers.setAll(extraHeaders);
httpJsonEntity = new HttpEntity<>(request, headers);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public ZstdJacksonMessageConverter() {

@Override
protected boolean supports(Class<?> clazz) {
return true;
return !(clazz == byte[].class || clazz.isPrimitive());
}

@Override
Expand All @@ -41,6 +41,6 @@ protected Object readInternal(Class<?> clazz, HttpInputMessage inputMessage) thr
@Override
protected void writeInternal(Object o, HttpOutputMessage outputMessage) throws IOException,
HttpMessageNotWritableException {
zstdJacksonSerializer.serializeTo(o, outputMessage.getBody());
outputMessage.getBody().write(zstdJacksonSerializer.serialize(o));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,20 @@ public static <T> T byteToObject(byte[] bytes, Class<T> tClass) {
return null;
}

public static <T> T jsonStringToObject(String string, Class<T> tClass) {
try {
return objectMapper.readValue(string, tClass);
} catch (IOException e) {
LOGGER.error("jsonStringToObject error:{}", e.getMessage(), e);
}
return null;
}

public static String objectToJsonString(Object value) {
try {
return objectMapper.writeValueAsString(value);
} catch (IOException e) {
LOGGER.error("byteToObject error:{}", e.getMessage(), e);
LOGGER.error("objectToJsonString error:{}", e.getMessage(), e);
}
return StringUtils.EMPTY;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.arextest.schedule.comparer;

import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;

/**
Expand All @@ -11,6 +12,18 @@
public class CategoryComparisonHolder {

private String categoryName;
// Need to match the comparison relationship
private List<CompareItem> record;
private List<CompareItem> replayResult;

private boolean needMatch;
// not need to match the comparison relationship
private CompareResultItem compareResultItem;

@Data
@AllArgsConstructor
public static class CompareResultItem {
CompareItem recordItem;
CompareItem replayItem;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.arextest.diff.sdk.CompareSDK;
import com.arextest.model.mock.MockCategoryType;
import com.arextest.schedule.comparer.CategoryComparisonHolder;
import com.arextest.schedule.comparer.CategoryComparisonHolder.CompareResultItem;
import com.arextest.schedule.comparer.CompareConfigService;
import com.arextest.schedule.comparer.CompareItem;
import com.arextest.schedule.comparer.CompareService;
Expand Down Expand Up @@ -162,10 +163,39 @@ public List<ReplayCompareResult> doContentCompare(ReplayActionCaseItem caseItem,
}

/**
* compare recording and replay data. 1. record and replay data through compareKey.
* compare recording and replay data.
*/
private List<ReplayCompareResult> compareReplayResult(CategoryComparisonHolder bindHolder,
ReplayActionCaseItem caseItem, ComparisonInterfaceConfig operationConfig) {
if (bindHolder.isNeedMatch()) {
return matchCompareReplayResults(bindHolder, caseItem, operationConfig);
}

return getReplayCompareResults(bindHolder, caseItem, operationConfig);
}

private List<ReplayCompareResult> getReplayCompareResults(CategoryComparisonHolder bindHolder,
ReplayActionCaseItem caseItem, ComparisonInterfaceConfig operationConfig) {
CompareResultItem item = bindHolder.getCompareResultItem();
if (item == null) {
return Collections.emptyList();
}

List<ReplayCompareResult> compareResults = new ArrayList<>();
compareResults.add(compareRecordAndResult(operationConfig, caseItem, bindHolder.getCategoryName(),
item.getReplayItem(), item.getRecordItem()));
return compareResults;
}

/**
* record and replay data through compareKey.
* @param bindHolder
* @param caseItem
* @param operationConfig
* @return
*/
private List<ReplayCompareResult> matchCompareReplayResults(CategoryComparisonHolder bindHolder,
ReplayActionCaseItem caseItem, ComparisonInterfaceConfig operationConfig) {
List<ReplayCompareResult> compareResults = new ArrayList<>();
List<CompareItem> recordResults = bindHolder.getRecord();
List<CompareItem> replayResults = bindHolder.getReplayResult();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import com.arextest.model.mock.AREXMocker;
import com.arextest.model.mock.MockCategoryType;
import com.arextest.model.mock.Mocker.Target;
import com.arextest.model.replay.CompareRelationResult;
import com.arextest.schedule.common.JsonUtils;
import com.arextest.schedule.comparer.CompareItem;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
Expand All @@ -18,7 +20,7 @@
* @since 2021/11/23
*/
@Component
final class PrepareCompareItemBuilder {
public class PrepareCompareItemBuilder {

CompareItem build(AREXMocker instance) {
MockCategoryType categoryType = instance.getCategoryType();
Expand All @@ -36,14 +38,18 @@ CompareItem build(AREXMocker instance) {
compareKey = null;
entryPointCategory = true;
} else if (Objects.equals(categoryType.getName(), MockCategoryType.DATABASE.getName())) {
body = this.buildAttributes(instance.getTargetRequest()).toString();
body = buildAttributes(instance.getTargetRequest()).toString();
} else {
body = Objects.isNull(instance.getTargetRequest()) ? null
: instance.getTargetRequest().getBody();
}
return new CompareItemImpl(operationKey, body, compareKey, createTime, entryPointCategory);
}

public CompareItem build(CompareRelationResult result, boolean recordCompareItem) {
return new CompareItemImpl(result, recordCompareItem);
}

private String operationName(MockCategoryType categoryType, Target target, String operationName) {
if (Objects.equals(categoryType, MockCategoryType.DATABASE)) {
// The "@" in the operationName of DATABASE indicates that the SQL statement has been parsed and returned directly.
Expand All @@ -55,7 +61,7 @@ private String operationName(MockCategoryType categoryType, Target target, Strin
return operationName;
}

private ObjectNode buildAttributes(Target target) {
private static ObjectNode buildAttributes(Target target) {
ObjectNode obj = JsonNodeFactory.instance.objectNode();
if (target == null) {
return obj;
Expand Down Expand Up @@ -91,6 +97,35 @@ private CompareItemImpl(String compareOperation, String compareMessage, String c
this(compareOperation, compareMessage, null, compareKey, createTime, entryPointCategory);
}

public CompareItemImpl(CompareRelationResult result, boolean recordCompareItem) {
this.compareOperation = result.getOperationName();
this.compareService = null;
this.compareKey = null;
this.entryPointCategory = result.getCategoryType().isEntryPoint();

String message = recordCompareItem ? result.getRecordMessage() : result.getReplayMessage();
this.compareMessage = processMessage(result, message);
this.createTime = recordCompareItem ? result.getRecordTime() : result.getReplayTime();
}

private String processMessage(CompareRelationResult result, String message) {
if (StringUtils.isBlank(message)) {
return message;
}
if (MockCategoryType.DATABASE.equals(result.getCategoryType())) {
Target target = JsonUtils.jsonStringToObject(message, Target.class);
if (target != null) {
message = buildAttributes(target).toString();
}
} else if (MockCategoryType.Q_MESSAGE_PRODUCER.equals(result.getCategoryType())) {
Target target = JsonUtils.jsonStringToObject(message, Target.class);
if (target != null) {
message = target.getBody();
}
}
return message;
}

private CompareItemImpl(String compareOperation, String compareMessage, String compareService,
String compareKey,
long createTime, boolean entryPointCategory) {
Expand Down
Loading

0 comments on commit 8e84e19

Please sign in to comment.