Skip to content

Feat/send scene #215

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
May 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion arex-storage-config/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
<parent>
<artifactId>arex-storage-service</artifactId>
<groupId>com.arextest</groupId>
<version>1.1.35</version>
<version>1.1.36</version>
</parent>

<properties>
Expand Down
2 changes: 1 addition & 1 deletion arex-storage-model/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<parent>
<artifactId>arex-storage-service</artifactId>
<groupId>com.arextest</groupId>
<version>1.1.35</version>
<version>1.1.36</version>
</parent>

<profiles>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public final class MockAttributeNames {
public static final String MESSAGE_ID = "messageId";
public static final String SUBJECT = "subject";
public static final String FORCE_RECORD = "arex-force-record";
public static final String SCHEDULE_PARAM = "arex-schedule-replay";

private MockAttributeNames() {
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.arextest.model.replay;

/**
* Sent from schedule -> Target Service Agent -> Storage
* Used to identify the use case of test case sent by schedule
*/
public enum CaseSendScene {
/**
* normal cases
*/
NORMAL,
/**
* extra cases like de-noise and config recover
*/
EXTRA,

/**
* normal cases in mixed replay
*/
MIXED_NORMAL;
}
2 changes: 1 addition & 1 deletion arex-storage-web-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@
<parent>
<artifactId>arex-storage-service</artifactId>
<groupId>com.arextest</groupId>
<version>1.1.35</version>
<version>1.1.36</version>
</parent>

<profiles>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.arextest.storage.service.handler.mocker.coverage;

import com.arextest.model.replay.CaseSendScene;
import com.arextest.model.constants.MockAttributeNames;
import com.arextest.model.mock.MockCategoryType;
import com.arextest.model.mock.Mocker;
Expand Down Expand Up @@ -46,45 +47,64 @@ public MockCategoryType getMockCategoryType() {

/**
* if is auto pined Case: update path
* <p>
* if is new case: if it has same path key: replace old case else: store
*/
@Override
public void handleOnRecordSaving(Mocker coverageMocker) {
ScenePoolProvider scenePoolProvider;
Runnable task;
String appId = coverageMocker.getAppId();
Optional<Target> targetRequest = Optional.ofNullable(coverageMocker.getTargetRequest());

if (StringUtils.isEmpty(coverageMocker.getOperationName())
|| coverageMocker.getOperationName().equals(INVALID_SCENE_KEY)
|| StringUtils.isEmpty(appId)) {
LOGGER.warn("CoverageMockerHandler got invalid case, operationName is empty, recordId:{}",
coverageMocker.getRecordId());
if (!validate(coverageMocker) || skipTask(coverageMocker)) {
return;
}

// force record data insert to coverage mocker
Target targetRequest = coverageMocker.getTargetRequest();
if (targetRequest != null &&
Boolean.parseBoolean(targetRequest.attributeAsString(MockAttributeNames.FORCE_RECORD))) {
mockSourceEditionService.add(ProviderNames.DEFAULT, coverageMocker);
LOGGER.info("CoverageMockerHandler received force record case, recordId: {}, pathKey: {}",
coverageMocker.getRecordId(), coverageMocker.getOperationName());
return;
}
// passed by schedule
String scheduleSendScene = targetRequest
.map(i -> i.attributeAsString(MockAttributeNames.SCHEDULE_PARAM))
.orElse(null);

// if replayId is empty, meaning this coverage mocker is received during record phase
if (StringUtils.isEmpty(coverageMocker.getReplayId()) && handlerSwitch.allowRecordTask(appId)) {
scenePoolProvider = scenePoolFactory.getProvider(ScenePoolFactory.RECORDING_SCENE_POOL);
task = new RecordTask(scenePoolProvider, coverageMocker);
coverageHandleDelayedPool.schedule(task, 5, TimeUnit.SECONDS);
} else if (handlerSwitch.allowReplayTask(appId)) {

} else if (CaseSendScene.MIXED_NORMAL.name().equals(scheduleSendScene) &&
handlerSwitch.allowReplayTask(appId)) {
scenePoolProvider = scenePoolFactory.getProvider(ScenePoolFactory.REPLAY_SCENE_POOL);
task = new ReplayTask(scenePoolProvider, coverageMocker);
coverageHandleDelayedPool.schedule(task, 1, TimeUnit.SECONDS);
}
}

private boolean skipTask(Mocker coverageMocker) {
boolean forceRecord = Optional.ofNullable(coverageMocker.getTargetRequest())
.map(i -> Boolean.parseBoolean(i.attributeAsString(MockAttributeNames.FORCE_RECORD)))
.orElse(false);

// force record data insert to RollingCoverageMocker, skip the scene pool
if (forceRecord) {
mockSourceEditionService.add(ProviderNames.DEFAULT, coverageMocker);
LOGGER.info("CoverageMockerHandler received force record case, recordId: {}, pathKey: {}",
coverageMocker.getRecordId(), coverageMocker.getOperationName());
return true;
}
return false;
}

private static boolean validate(Mocker coverageMocker) {
boolean checkResult = StringUtils.isNotEmpty(coverageMocker.getOperationName())
&& StringUtils.isNotEmpty(coverageMocker.getAppId())
&& !coverageMocker.getOperationName().equals(INVALID_SCENE_KEY);
if (!checkResult) {
LOGGER.warn("CoverageMockerHandler got invalid case, sceneKey is empty, recordId:{}",
coverageMocker.getRecordId());
}
return checkResult;
}

@Override
public boolean isContinue() {
return false;
Expand Down Expand Up @@ -150,7 +170,7 @@ public void run() {
String appId = coverageMocker.getAppId();
String sceneKey = coverageMocker.getOperationName();
String recordId = coverageMocker.getRecordId();
String op = NEW_SCENE_OP;
String op = EXISTING_SCENE_OP;
MDCTracer.addAppId(appId);
MDCTracer.addRecordId(recordId);

Expand All @@ -160,7 +180,7 @@ public void run() {
LOGGER.info("CoverageMockerHandler received existing case, recordId: {}, pathKey: {}",
coverageMocker.getRecordId(), coverageMocker.getOperationName());
} else {
op = EXISTING_SCENE_OP;
op = NEW_SCENE_OP;
// new scene: extend mocker expiration and insert scene
Scene scene = convert(coverageMocker);

Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -427,5 +427,5 @@
<url>https://github.com/arextest/arex-storage</url>
</scm>
<url>https://github.com/arextest/arex-storage</url>
<version>1.1.35</version>
<version>1.1.36</version>
</project>