AFL相关 worker:测试用例生成去掉表单的资源选项,AFL去掉资源、镜像表单项
This commit is contained in:
parent
f87d5c6c4e
commit
8157f29645
@ -1,12 +1,7 @@
|
||||
package cd.casic.ci.process.engine.constant;
|
||||
|
||||
public class AFLConstant {
|
||||
/**
|
||||
* 脚本内容
|
||||
*/
|
||||
public static final String COMMAND_SCRIPT ="buildScript";
|
||||
public static final String WORK_DIR = "workDir";
|
||||
public static final String BINARY="binary";
|
||||
public static final String OUTPUT = "output";
|
||||
public static final String INPUT="input";
|
||||
|
||||
public static final String COMMAND_END="commandEnd";
|
||||
public static final String EXECUTABLE_NAME ="executableName";
|
||||
}
|
||||
|
@ -4,5 +4,4 @@ public class AFLSlotCompileConstant {
|
||||
public static final String MANAGER_ID = "managerId";
|
||||
public static final String IMAGE_NAME = "imageName";
|
||||
public static final String COMMAND_SCRIPT ="buildScript";
|
||||
public static final String COMPILE_RESULT ="compileResult";
|
||||
}
|
||||
|
@ -1,6 +1,9 @@
|
||||
package cd.casic.ci.process.engine.constant;
|
||||
|
||||
public class PipelineGlobalVariableConstant {
|
||||
/**
|
||||
* key为后缀代表除了根据key获取,不直接使用值
|
||||
* 非key后缀的值都会在某地直接使用修改请谨慎
|
||||
* */
|
||||
public class PipelineVariableConstant {
|
||||
/**
|
||||
* AFL线基础工作目录,完整的工作目录为 基础工作目录 + /PIP_${pipelineId}
|
||||
* */
|
||||
@ -11,15 +14,6 @@ public class PipelineGlobalVariableConstant {
|
||||
* 真正用于绑定AFL docker卷挂载的目录的全局变量的key,值为 基础工作目录 + /PIP_${pipelineId}
|
||||
* */
|
||||
public static final String AFL_DOCKER_WORK_DIR_KEY = "AFL_DOCKER_WORK_DIR_KEY";
|
||||
/**
|
||||
* 目标上传到工作目录下文件夹的前缀(TASK_${taskId})
|
||||
* */
|
||||
public static final String AFL_DOCKER_SLOT_COMPILE_PATH_PREFIX = "TASK_";
|
||||
/**
|
||||
* 执行插装编译节点以后输出目录,用于设置到全局变量给后续节点使用
|
||||
*
|
||||
* */
|
||||
public static final String AFL_DOCKER_SLOT_COMPILE_PATH_KEY = "AFL_DOCKER_SLOT_COMPILE_PATH_KEY";
|
||||
/**
|
||||
* 测试用例生成,ai生成或者直接文件上传的文件夹名称:SEED
|
||||
* */
|
||||
@ -30,4 +24,7 @@ public class PipelineGlobalVariableConstant {
|
||||
* AFL输出目录
|
||||
* */
|
||||
public static final String AFL_DOCKER_OUTPUT = "ai_afl";
|
||||
public static final String COMPILE_RESULT_KEY ="compileResult";
|
||||
public static final String AFL_RESOURCE_MANAGER_ID_KEY = "managerId";
|
||||
public static final String IMAGE_NAME = "IMAGE_NAME";
|
||||
}
|
@ -4,13 +4,12 @@ public class TestCaseGenerationConstant {
|
||||
/**
|
||||
* 脚本内容key
|
||||
*/
|
||||
public static final String COMMAND_SCRIPT ="buildScript";
|
||||
public static final String CASE_TYPE_KEY ="caseType";
|
||||
public static final String CASE_TYPE_AI ="AI";
|
||||
public static final String CASE_TYPE_FILE ="FILE";
|
||||
public static final String CASE_TYPE_ITEM = "TEST";
|
||||
public static final String SEED_SOURCE = "filePath";
|
||||
public static final String SEED_TARGET = "outputDir";
|
||||
public static final String ITEM_LIST = "itemList";
|
||||
public static final String MANAGER_ID = "managerId";
|
||||
public static final String BINARY_NAME="binaryName";
|
||||
|
||||
}
|
||||
|
@ -5,20 +5,15 @@ import cd.casic.ci.process.dto.req.resource.ResourceQueryReq;
|
||||
import cd.casic.ci.process.dto.resp.resource.ResourceFindResp;
|
||||
import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp;
|
||||
import cd.casic.ci.process.engine.constant.AFLSlotCompileConstant;
|
||||
import cd.casic.ci.process.engine.constant.DIYImageExecuteCommandConstant;
|
||||
import cd.casic.ci.process.engine.constant.PipelineGlobalVariableConstant;
|
||||
import cd.casic.ci.process.engine.runContext.TaskRunContext;
|
||||
import cd.casic.ci.process.engine.worker.base.DockerWorker;
|
||||
import cd.casic.ci.process.process.dataObject.machine.MachineInfo;
|
||||
import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline;
|
||||
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
|
||||
import cd.casic.ci.process.process.dataObject.target.TargetVersion;
|
||||
import cd.casic.ci.process.process.dataObject.task.PipTask;
|
||||
import cd.casic.ci.process.process.service.resource.ResourceManagerService;
|
||||
import cd.casic.ci.process.process.service.target.TargetVersionService;
|
||||
import cd.casic.ci.process.util.CryptogramUtil;
|
||||
import cd.casic.ci.process.util.SftpUploadUtil;
|
||||
import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
|
||||
import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.jcraft.jsch.*;
|
||||
@ -28,10 +23,10 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Vector;
|
||||
import java.util.*;
|
||||
|
||||
import static cd.casic.ci.process.engine.constant.PipelineVariableConstant.*;
|
||||
|
||||
|
||||
@WorkAtom(taskType = "AFL_SLOT_COMPILE")
|
||||
@Slf4j
|
||||
@ -42,10 +37,10 @@ public class AFLSlotCompileWorker extends DockerWorker {
|
||||
public void execute(TaskRunContext context) {
|
||||
PipTask task = context.getContextDef() instanceof PipTask ? ((PipTask) context.getContextDef()) : null;
|
||||
// 每一个流水线不同目录互不干扰
|
||||
String workDir = PipelineGlobalVariableConstant.AFL_DOCKER_WORK_DIR_PREFIX + task.getPipelineId();
|
||||
String workDir = AFL_DOCKER_WORK_DIR_PREFIX + task.getPipelineId();
|
||||
Map<String, Object> globalVariables = context.getGlobalVariables();
|
||||
if (!globalVariables.containsKey(workDir)) {
|
||||
globalVariables.put(PipelineGlobalVariableConstant.AFL_DOCKER_WORK_DIR_KEY,workDir);
|
||||
globalVariables.put(AFL_DOCKER_WORK_DIR_KEY,workDir);
|
||||
}
|
||||
Map<String, Object> taskProperties = task.getTaskProperties();
|
||||
String managerId = taskProperties.get(AFLSlotCompileConstant.MANAGER_ID) instanceof String ? ((String) taskProperties.get(AFLSlotCompileConstant.MANAGER_ID)) : null;
|
||||
@ -80,7 +75,7 @@ public class AFLSlotCompileWorker extends DockerWorker {
|
||||
}
|
||||
// 工作目录下的相对路径,/test 作为根路径
|
||||
// 卷挂载目录+流水线目录 + task编译目录
|
||||
String realPath = PipelineGlobalVariableConstant.AFL_VOLUME_WORK_DIR_PREFIX+File.separator+ workDir;
|
||||
String realPath = AFL_VOLUME_WORK_DIR_PREFIX+File.separator+ workDir;
|
||||
// 上传目标文件 到指定资源服务器
|
||||
try {
|
||||
append(context,"AFL编译,上传文件路径:"+realPath);
|
||||
@ -93,8 +88,8 @@ public class AFLSlotCompileWorker extends DockerWorker {
|
||||
toBadEnding();
|
||||
}
|
||||
// 执行预设命令 ,进入目录
|
||||
String allCommand = "docker run -v "+ PipelineGlobalVariableConstant.AFL_VOLUME_WORK_DIR_PREFIX +":"+PipelineGlobalVariableConstant.AFL_DOCKER_BASE_DIR+" -it "+imageName+" bash\n" +
|
||||
"cd "+PipelineGlobalVariableConstant.AFL_DOCKER_BASE_DIR+"\n"+// 进入到容器中的卷挂载目录
|
||||
String allCommand = "docker run -v "+ AFL_VOLUME_WORK_DIR_PREFIX +":"+ AFL_DOCKER_BASE_DIR+" -it "+imageName+" bash\n" +
|
||||
"cd "+ AFL_DOCKER_BASE_DIR+"\n"+// 进入到容器中的卷挂载目录
|
||||
"mkdir -p "+workDir+"\n"+
|
||||
"chmod -R o+rwx "+ workDir +"\n"+
|
||||
"cd "+workDir+"\n"+handleZipFile(fileName);
|
||||
@ -106,8 +101,27 @@ public class AFLSlotCompileWorker extends DockerWorker {
|
||||
dockerRun(allCommand,dockerInfo,context);
|
||||
// 更新全局变量
|
||||
// /test目录下当前流水线工作目录
|
||||
globalVariables.put(PipelineGlobalVariableConstant.AFL_DOCKER_WORK_DIR_KEY,workDir);
|
||||
putInCompileResult(context,realPath+File.separator+getSourceName(fileName),machineInfo);
|
||||
globalVariables.put(AFL_DOCKER_WORK_DIR_KEY,workDir);
|
||||
// 获取编译结果并存放
|
||||
List<String> compileResult = getCompileResult(context, realPath + File.separator + getSourceName(fileName), machineInfo);
|
||||
if (Objects.isNull(getGlobalVariable(context, COMPILE_RESULT_KEY))) {
|
||||
// 如果全局变量不存在则放入全局变量中
|
||||
putGlobalVariable(context,COMPILE_RESULT_KEY,compileResult);;
|
||||
}
|
||||
// 放入最近一级作用域
|
||||
putSecondStageVariable(context,COMPILE_RESULT_KEY,compileResult);
|
||||
// 放入 所选资源供测试用例生成,AFL模糊测试节点使用
|
||||
if (Objects.isNull(getGlobalVariable(context, AFL_RESOURCE_MANAGER_ID_KEY))) {
|
||||
// 如果全局变量不存在则放入全局变量中
|
||||
putGlobalVariable(context, AFL_RESOURCE_MANAGER_ID_KEY,managerId);;
|
||||
}
|
||||
putSecondStageVariable(context,AFL_RESOURCE_MANAGER_ID_KEY,managerId);
|
||||
// 放入镜像名称
|
||||
if (Objects.isNull(getGlobalVariable(context, IMAGE_NAME))) {
|
||||
// 如果全局变量不存在则放入全局变量中
|
||||
putGlobalVariable(context, IMAGE_NAME,imageName);;
|
||||
}
|
||||
putSecondStageVariable(context,IMAGE_NAME,imageName);
|
||||
}
|
||||
private String handleZipFile(String fileName){
|
||||
if (StringUtils.isEmpty(fileName)) {
|
||||
@ -134,7 +148,7 @@ public class AFLSlotCompileWorker extends DockerWorker {
|
||||
return "";
|
||||
}
|
||||
|
||||
private void putInCompileResult(TaskRunContext context,String path, PipResourceMachine machineInfo){
|
||||
private List<String> getCompileResult(TaskRunContext context, String path, PipResourceMachine machineInfo){
|
||||
String host = machineInfo.getMachineHost();
|
||||
String user = machineInfo.getUsername();
|
||||
String password = CryptogramUtil.doDecrypt(machineInfo.getPassword());
|
||||
@ -164,8 +178,10 @@ public class AFLSlotCompileWorker extends DockerWorker {
|
||||
Map<String, Object> taskProperties = context.getGlobalVariables();
|
||||
// 放入全局上下文中
|
||||
append(context,"AFL编译完毕:"+JSON.toJSONString(fileNameList));
|
||||
taskProperties.put(AFLSlotCompileConstant.COMPILE_RESULT,fileNameList);
|
||||
|
||||
return fileNameList;
|
||||
}
|
||||
return Collections.emptyList();
|
||||
}
|
||||
public String getSourceName(String fileName){
|
||||
int dotIndex = fileName.lastIndexOf(".");
|
||||
|
@ -2,10 +2,12 @@ package cd.casic.ci.process.engine.worker.afl;
|
||||
|
||||
import cd.casic.ci.process.common.WorkAtom;
|
||||
import cd.casic.ci.process.dto.req.resource.ResourceQueryReq;
|
||||
import cd.casic.ci.process.dto.resp.resource.ResourceFindResp;
|
||||
import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp;
|
||||
import cd.casic.ci.process.engine.constant.AFLConstant;
|
||||
import cd.casic.ci.process.engine.constant.AFLSlotCompileConstant;
|
||||
import cd.casic.ci.process.engine.constant.DIYImageExecuteCommandConstant;
|
||||
import cd.casic.ci.process.engine.constant.PipelineGlobalVariableConstant;
|
||||
import cd.casic.ci.process.engine.constant.PipelineVariableConstant;
|
||||
import cd.casic.ci.process.engine.runContext.TaskRunContext;
|
||||
import cd.casic.ci.process.engine.worker.base.DockerWorker;
|
||||
import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline;
|
||||
@ -20,6 +22,9 @@ import org.springframework.util.CollectionUtils;
|
||||
import java.io.File;
|
||||
import java.util.Map;
|
||||
|
||||
import static cd.casic.ci.process.engine.constant.AFLConstant.*;
|
||||
import static cd.casic.ci.process.engine.constant.PipelineVariableConstant.*;
|
||||
|
||||
@WorkAtom(taskType = "AFL")
|
||||
@Slf4j
|
||||
public class AFLWorker extends DockerWorker {
|
||||
@ -29,20 +34,25 @@ public class AFLWorker extends DockerWorker {
|
||||
public void execute(TaskRunContext context) {
|
||||
int statusCode = -1;
|
||||
Map<String, Object> localVariables = context.getLocalVariables();
|
||||
Map<String, Object> globalVariables = context.getGlobalVariables();
|
||||
if (context.getContextDef() instanceof PipTask taskDef) {
|
||||
log.info(taskDef.getTaskName());
|
||||
Map<String, Object> taskProperties = taskDef.getTaskProperties();
|
||||
String managerId = getVariableNearby(context, AFL_RESOURCE_MANAGER_ID_KEY) instanceof String ? ((String) getVariableNearby(context, AFL_RESOURCE_MANAGER_ID_KEY)) : null;
|
||||
// ssh 上传目标文件
|
||||
ResourceFindResp resourceById = resourceManagerService.findResourceById(managerId);
|
||||
if (resourceById==null) {
|
||||
append(context,"缺少资源信息,请添加编译节点");
|
||||
}
|
||||
//从taskProperties中获取资源id
|
||||
String resourceType = taskProperties.get("resourceType").toString();
|
||||
String resourceId = taskProperties.get("resourceId").toString();
|
||||
String commandEnd = taskProperties.get("commandEnd") instanceof String ? ((String) taskProperties.get("commandEnd")) : null;
|
||||
String imageName = taskProperties.get("imageName") instanceof String ? ((String) taskProperties.get("imageName")) : null;
|
||||
String executableName = taskProperties.get("executableName") instanceof String ? ((String) taskProperties.get("executableName")) : null;
|
||||
String resourceType = "docker";
|
||||
String resourceId = resourceById.getDockerId();
|
||||
String commandEnd = taskProperties.get(COMMAND_END) instanceof String ? ((String) taskProperties.get(COMMAND_END)) : null;
|
||||
String imageName = getVariableNearby(context,IMAGE_NAME) instanceof String ? ((String) getVariableNearby(context,IMAGE_NAME)) : null;
|
||||
String executableName = taskProperties.get(EXECUTABLE_NAME) instanceof String ? ((String) taskProperties.get(EXECUTABLE_NAME)) : null;
|
||||
// 代码编译目录
|
||||
String workDir = (String)globalVariables.get(PipelineGlobalVariableConstant.AFL_DOCKER_WORK_DIR_KEY);
|
||||
String workDir = (String)getGlobalVariable(context,AFL_DOCKER_WORK_DIR_KEY);
|
||||
// 入参目录
|
||||
String seedPath = (String)globalVariables.get(PipelineGlobalVariableConstant.AFL_DOCKER_SEED_PATH_KEY);
|
||||
String seedPath = (String)getGlobalVariable(context,AFL_DOCKER_SEED_PATH_KEY);
|
||||
if (StringUtils.isEmpty(seedPath) ||
|
||||
StringUtils.isEmpty(workDir) ||
|
||||
StringUtils.isEmpty(resourceId) ||
|
||||
@ -61,9 +71,8 @@ public class AFLWorker extends DockerWorker {
|
||||
append(context,"当前机器不支持docker");
|
||||
return;
|
||||
}
|
||||
String output = workDir +File.separator+ PipelineGlobalVariableConstant.AFL_DOCKER_OUTPUT;
|
||||
//
|
||||
String volumeWorkDirPath = PipelineGlobalVariableConstant.AFL_VOLUME_WORK_DIR_PREFIX;
|
||||
String output = workDir +File.separator+ AFL_DOCKER_OUTPUT;
|
||||
String volumeWorkDirPath = AFL_VOLUME_WORK_DIR_PREFIX;
|
||||
PipPipeline pipeline = (PipPipeline) getContextManager().getContext(taskDef.getPipelineId()).getContextDef();
|
||||
TargetVersion targetVersion = targetVersionService.getById(pipeline.getTargetVersionId());
|
||||
String fileName = targetVersion.getFileName();
|
||||
@ -71,10 +80,10 @@ public class AFLWorker extends DockerWorker {
|
||||
Object timeObj = taskProperties.get("runningTime");
|
||||
Double timeHours = Double.valueOf(String.valueOf(timeObj));
|
||||
String commandScript = "docker run -v "+volumeWorkDirPath+":/test -it "+imageName+" bash\n" +
|
||||
"cd " +PipelineGlobalVariableConstant.AFL_DOCKER_BASE_DIR+File.separator+workDir+ "\n"+
|
||||
"cd " + AFL_DOCKER_BASE_DIR+File.separator+workDir+ "\n"+
|
||||
cdSourceName(fileName) +
|
||||
"mkdir -p "+PipelineGlobalVariableConstant.AFL_DOCKER_BASE_DIR+File.separator+output+"\n" +
|
||||
"afl-fuzz -i "+PipelineGlobalVariableConstant.AFL_DOCKER_BASE_DIR+File.separator+seedPath+" -o "+PipelineGlobalVariableConstant.AFL_DOCKER_BASE_DIR+File.separator+output+" "+ executableName + " " +commandEnd;
|
||||
"mkdir -p "+ AFL_DOCKER_BASE_DIR+File.separator+output+"\n" +
|
||||
"afl-fuzz -i "+ AFL_DOCKER_BASE_DIR+File.separator+seedPath+" -o "+ AFL_DOCKER_BASE_DIR+File.separator+output+" "+ executableName + " " +commandEnd;
|
||||
try {
|
||||
//将节点的配置信息反编译成对象
|
||||
log.info("AFL模糊测试执行脚本:{}",commandScript);
|
||||
|
@ -3,16 +3,12 @@ package cd.casic.ci.process.engine.worker.afl;
|
||||
|
||||
import cd.casic.ci.process.common.WorkAtom;
|
||||
import cd.casic.ci.process.dto.req.resource.ResourceQueryReq;
|
||||
import cd.casic.ci.process.dto.req.testCase.TestCaseInfoReq;
|
||||
import cd.casic.ci.process.dto.resp.resource.ResourceFindResp;
|
||||
import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp;
|
||||
import cd.casic.ci.process.engine.constant.DIYImageExecuteCommandConstant;
|
||||
import cd.casic.ci.process.engine.constant.PipelineGlobalVariableConstant;
|
||||
import cd.casic.ci.process.engine.constant.PipelineVariableConstant;
|
||||
import cd.casic.ci.process.engine.constant.TestCaseGenerationConstant;
|
||||
import cd.casic.ci.process.engine.runContext.TaskRunContext;
|
||||
import cd.casic.ci.process.engine.worker.base.DockerWorker;
|
||||
import cd.casic.ci.process.engine.worker.base.SshWorker;
|
||||
import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline;
|
||||
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
|
||||
import cd.casic.ci.process.process.dataObject.task.PipTask;
|
||||
import cd.casic.ci.process.process.dataObject.testCase.TestCaseInfo;
|
||||
@ -24,13 +20,15 @@ import com.alibaba.fastjson.JSON;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import static cd.casic.ci.process.engine.constant.PipelineVariableConstant.*;
|
||||
import static cd.casic.ci.process.engine.constant.TestCaseGenerationConstant.*;
|
||||
|
||||
@WorkAtom(taskType = "TEST_CASE_GENERATION")
|
||||
@Slf4j
|
||||
public class TestCaseGenerationWorker extends DockerWorker {
|
||||
@ -40,14 +38,14 @@ public class TestCaseGenerationWorker extends DockerWorker {
|
||||
public void execute(TaskRunContext context) {
|
||||
int statusCode = -1;
|
||||
Map<String, Object> globalVariables = context.getGlobalVariables();
|
||||
String workDir = globalVariables.get(PipelineGlobalVariableConstant.AFL_DOCKER_WORK_DIR_KEY) instanceof String ? ((String) globalVariables.get(PipelineGlobalVariableConstant.AFL_DOCKER_WORK_DIR_KEY)) : null;
|
||||
String workDir = globalVariables.get(AFL_DOCKER_WORK_DIR_KEY) instanceof String ? ((String) globalVariables.get(AFL_DOCKER_WORK_DIR_KEY)) : null;
|
||||
if (context.getContextDef() instanceof PipTask taskDef) {
|
||||
String seedPath= workDir+File.separator+PipelineGlobalVariableConstant.AFL_DOCKER_SEED;
|
||||
String seedPath= workDir+File.separator+ AFL_DOCKER_SEED;
|
||||
Map<String, Object> taskProperties = taskDef.getTaskProperties();
|
||||
Object caseType = taskProperties.get(TestCaseGenerationConstant.CASE_TYPE_KEY);
|
||||
String binaryName = taskProperties.get("binaryName") instanceof String ? ((String) taskProperties.get("binaryName")) : null;
|
||||
String managerId = taskProperties.get("managerId") instanceof String ? ((String) taskProperties.get("managerId")) : null;
|
||||
Object itemListObject = taskProperties.get(TestCaseGenerationConstant.ITEM_LIST);
|
||||
Object caseType = taskProperties.get(CASE_TYPE_KEY);
|
||||
String binaryName = taskProperties.get(BINARY_NAME) instanceof String ? ((String) taskProperties.get("binaryName")) : null;
|
||||
String managerId = getVariableNearby(context, AFL_RESOURCE_MANAGER_ID_KEY) instanceof String ? ((String) getVariableNearby(context, AFL_RESOURCE_MANAGER_ID_KEY)) : null;
|
||||
Object itemListObject = taskProperties.get(ITEM_LIST);
|
||||
List<String> itemList = JSON.parseArray(JSON.toJSONString(itemListObject),String.class);
|
||||
ResourceFindResp resourceById = resourceManagerService.findResourceById(managerId);
|
||||
String machineId = resourceById.getMachineId();
|
||||
@ -65,10 +63,10 @@ public class TestCaseGenerationWorker extends DockerWorker {
|
||||
PipResourceMachine machineInfo = machineQuery.getResourceMachineList().get(0);
|
||||
DockerEndpointDo dockerInfo = dockerQuery.getDockerEndpointList().get(0);
|
||||
//如果machineId为0,则说明该节点没有配置机器,则使用开始节点的机器
|
||||
if (TestCaseGenerationConstant.CASE_TYPE_AI.equals(caseType)) {
|
||||
if (CASE_TYPE_AI.equals(caseType)) {
|
||||
// 容器内部test 目录, 获取编译后的文件
|
||||
String runScript = "docker run -v "+ PipelineGlobalVariableConstant.AFL_VOLUME_WORK_DIR_PREFIX +":"+PipelineGlobalVariableConstant.AFL_DOCKER_BASE_DIR+" -it aflplusplus bash\n" // 目前测试用例ai生成只有这个路径能跑
|
||||
+ "cd "+PipelineGlobalVariableConstant.AFL_DOCKER_BASE_DIR+"\n" +
|
||||
String runScript = "docker run -v "+ AFL_VOLUME_WORK_DIR_PREFIX +":"+ AFL_DOCKER_BASE_DIR+" -it aflplusplus bash\n" // 目前测试用例ai生成只有这个路径能跑
|
||||
+ "cd "+ AFL_DOCKER_BASE_DIR+"\n" +
|
||||
"mkdir -p "+seedPath +"\n"+
|
||||
"cd "+seedPath +"\n"+
|
||||
"PYTHONPATH=CaseGenerator/src python3 CaseGenerator/src/CaseGenerator/main.py --work-dir "+workDir+" --binary "+workDir+File.separator+binaryName+" --output-dir "+seedPath+" --count 100";
|
||||
@ -76,9 +74,9 @@ public class TestCaseGenerationWorker extends DockerWorker {
|
||||
log.info("测试用例生成-AI生成,实际执行命令:{}" , runScript);
|
||||
//获取机器
|
||||
dockerRun(runScript,dockerInfo,context);
|
||||
} else if (TestCaseGenerationConstant.CASE_TYPE_FILE.equals(caseType)){
|
||||
} else if (CASE_TYPE_FILE.equals(caseType)){
|
||||
// 文件上传
|
||||
Object filePathObj = taskProperties.get(TestCaseGenerationConstant.SEED_SOURCE);
|
||||
Object filePathObj = taskProperties.get(SEED_SOURCE);
|
||||
log.info("当前测试用例taskProperties:{}",taskProperties);
|
||||
if (Objects.isNull(filePathObj)) {
|
||||
append(context,"缺少文件");
|
||||
@ -87,7 +85,7 @@ public class TestCaseGenerationWorker extends DockerWorker {
|
||||
List<String> filePathList = JSON.parseArray(JSON.toJSONString(filePathObj),String.class);
|
||||
for (String filePath : filePathList) {
|
||||
File file = new File(filePath);
|
||||
String seedTarget = PipelineGlobalVariableConstant.AFL_VOLUME_WORK_DIR_PREFIX+File.separator+seedPath;
|
||||
String seedTarget = AFL_VOLUME_WORK_DIR_PREFIX+File.separator+seedPath;
|
||||
// 将文件上传到服务器的 目录底下
|
||||
log.info("测试用例选用上传模式,种子文件路径:{},种子上传路径:{}",filePath,seedTarget);
|
||||
append(context,"测试用例选用上传模式,种子文件路径:"+filePath+",种子上传路径:"+seedPath);
|
||||
@ -101,9 +99,9 @@ public class TestCaseGenerationWorker extends DockerWorker {
|
||||
}
|
||||
append(context,file.getName()+"上传文件成功!");
|
||||
}
|
||||
}else if (TestCaseGenerationConstant.CASE_TYPE_ITEM.equals(caseType)){
|
||||
}else if (CASE_TYPE_ITEM.equals(caseType)){
|
||||
List<TestCaseInfo> testCaseInfos = testCaseInfoService.listByIds(itemList);
|
||||
String seedTarget = PipelineGlobalVariableConstant.AFL_VOLUME_WORK_DIR_PREFIX+File.separator+seedPath;
|
||||
String seedTarget = AFL_VOLUME_WORK_DIR_PREFIX+File.separator+seedPath;
|
||||
for (TestCaseInfo testCaseInfo : testCaseInfos) {
|
||||
String testFilePath = testCaseInfo.getTestFilePath();
|
||||
if (StringUtils.isEmpty(testFilePath)) {
|
||||
@ -122,7 +120,7 @@ public class TestCaseGenerationWorker extends DockerWorker {
|
||||
}
|
||||
}
|
||||
}
|
||||
globalVariables.put(PipelineGlobalVariableConstant.AFL_DOCKER_SEED_PATH_KEY,seedPath);
|
||||
globalVariables.put(AFL_DOCKER_SEED_PATH_KEY,seedPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -106,7 +106,46 @@ public abstract class BaseWorker implements Runnable{
|
||||
}
|
||||
}
|
||||
public abstract void execute(TaskRunContext context);
|
||||
public void toBadEnding(){
|
||||
protected void toBadEnding(){
|
||||
throw new ServiceException(GlobalErrorCodeConstants.PIPELINE_ERROR.getCode(),"");
|
||||
}
|
||||
/**
|
||||
* 往全局变量中保存变量,作用域为全局
|
||||
* */
|
||||
protected void putGlobalVariable(TaskRunContext context,String key,Object value){
|
||||
Map<String, Object> globalVariables = context.getGlobalVariables();
|
||||
globalVariables.put(key,value);
|
||||
}
|
||||
/**
|
||||
* 往当前执行链路中保存变量,作用域为当前二级stage
|
||||
* */
|
||||
protected void putSecondStageVariable(TaskRunContext context,String key,Object value){
|
||||
BaseRunContext stageContext = context.getParentContext();
|
||||
Map<String, Object> localVariables = stageContext.getLocalVariables();
|
||||
localVariables.put(key,value);
|
||||
}
|
||||
protected Object getGlobalVariable(TaskRunContext context,String key){
|
||||
Map<String, Object> globalVariables = context.getGlobalVariables();
|
||||
return globalVariables.get(key);
|
||||
}
|
||||
protected Object getSecondStageVariable(TaskRunContext context,String key){
|
||||
BaseRunContext stageContext = context.getParentContext();
|
||||
Map<String, Object> localVariables = stageContext.getLocalVariables();
|
||||
return localVariables.get(key);
|
||||
}
|
||||
/**
|
||||
* 就近获取从secondStage 到pipeline 逐级获取获取到了直接返回
|
||||
* */
|
||||
protected Object getVariableNearby(TaskRunContext context,String key){
|
||||
BaseRunContext parentContext = context.getParentContext();
|
||||
Map<String, Object> localVariables = parentContext.getLocalVariables();
|
||||
Map<String, Object> globalVariables = context.getGlobalVariables();
|
||||
if (localVariables.containsKey(key)) {
|
||||
return localVariables.get(key);
|
||||
}
|
||||
if (globalVariables.containsKey(key)) {
|
||||
return globalVariables.get(key);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user