AFL编译节点,变量放入上下文规则变更

sasttokenredis过期时间写死为1天
sast项目id更换
测试用例生成worker 二进制文件自动拼接项目文件夹前缀
This commit is contained in:
even 2025-07-01 11:15:34 +08:00
parent 8eb34198a5
commit 046c03ec68
7 changed files with 37 additions and 20 deletions

View File

@ -18,7 +18,7 @@ public class PipHistoryController {
@Resource
PipelineHistoryService pipelineHistoryService;
@GetMapping("/getLogById")
public CommonResult<PipTaskLog> getLogById(String id){
public CommonResult<PipTaskLog> getLogById(@RequestParam String id){
PipTaskLog byId = taskLogService.getById(id);
return CommonResult.success(byId);
}

View File

@ -104,23 +104,23 @@ public class AFLSlotCompileWorker extends DockerWorker {
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))) {
// 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))) {
// 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);;
}
// if (Objects.isNull(getGlobalVariable(context, IMAGE_NAME))) {
// // 如果全局变量不存在则放入全局变量中
putGlobalVariable(context, IMAGE_NAME,imageName);
// }
putSecondStageVariable(context,IMAGE_NAME,imageName);
}
private String handleZipFile(String fileName){

View File

@ -5,13 +5,14 @@ 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.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.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.dataObject.testCase.TestCaseInfo;
import cd.casic.ci.process.process.service.target.TargetVersionService;
import cd.casic.ci.process.process.service.testCase.TestCaseInfoService;
import cd.casic.ci.process.util.CryptogramUtil;
import cd.casic.ci.process.util.SftpUploadUtil;
@ -34,6 +35,8 @@ import static cd.casic.ci.process.engine.constant.TestCaseGenerationConstant.*;
public class TestCaseGenerationWorker extends DockerWorker {
@Resource
private TestCaseInfoService testCaseInfoService;
@Resource
private TargetVersionService targetVersionService;
@Override
public void execute(TaskRunContext context) {
int statusCode = -1;
@ -62,16 +65,21 @@ public class TestCaseGenerationWorker extends DockerWorker {
TaskResourceFindResp dockerQuery = resourceManagerService.findResourceListByType(req);
PipResourceMachine machineInfo = machineQuery.getResourceMachineList().get(0);
DockerEndpointDo dockerInfo = dockerQuery.getDockerEndpointList().get(0);
PipPipeline pipeline = (PipPipeline) getContextManager().getContext(taskDef.getPipelineId()).getContextDef();
TargetVersion targetVersion = targetVersionService.getById(pipeline.getTargetVersionId());
String fileName = targetVersion.getFileName();
String imageName = getVariableNearby(context,IMAGE_NAME) instanceof String ? ((String) getVariableNearby(context,IMAGE_NAME)) : null;
//如果machineId为0则说明该节点没有配置机器则使用开始节点的机器
if (CASE_TYPE_AI.equals(caseType)) {
// 容器内部test 目录, 获取编译后的文件
String runScript = "docker run -v "+ AFL_VOLUME_WORK_DIR_PREFIX +":"+ AFL_DOCKER_BASE_DIR+" -it aflplusplus bash\n" // 目前测试用例ai生成只有这个路径能跑
String runScript = "docker run -v "+ AFL_VOLUME_WORK_DIR_PREFIX +":"+ AFL_DOCKER_BASE_DIR+" -it "+imageName+" 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";
"PYTHONPATH="+AFL_DOCKER_BASE_DIR+File.separator+"CaseGenerator/src python3 "+AFL_DOCKER_BASE_DIR+File.separator+"CaseGenerator/src/CaseGenerator/main.py --work-dir "+workDir+" --binary "+workDir+File.separator+getSourceName(fileName)+File.separator+binaryName+" --output-dir "+seedPath+" --count 100";
//将节点的配置信息反编译成对象
log.info("测试用例生成-AI生成实际执行命令:{}" , runScript);
append(context,"测试用例生成-AI生成实际执行命令:"+runScript);
//获取机器
dockerRun(runScript,dockerInfo,context);
} else if (CASE_TYPE_FILE.equals(caseType)){
@ -123,4 +131,11 @@ public class TestCaseGenerationWorker extends DockerWorker {
globalVariables.put(AFL_DOCKER_SEED_PATH_KEY,seedPath);
}
}
public String getSourceName(String fileName){
int dotIndex = fileName.lastIndexOf(".");
if (dotIndex!=-1) {
return fileName.substring(0, dotIndex);
}
return "";
}
}

View File

@ -102,9 +102,10 @@ public class SastWorker extends BaseWorker {
}
}
private JSONObject getReportJSON(String applicationId,String model,TaskRunContext context){
String reqJSON = "{\"mode\":\"DETAILS\",\"contacts\":\"admin@clouditera.com\",\"reportType\":\"APPLICATION\",\"format\":\"JSON\",\"projectId\":\"8a863857-bab3-40d9-a79a-2cb6617a9dd3\",\"applicationIds\":[\"9e3e55d6-6d28-4fd1-adc2-15b6cf0702db\"],\"bugLevels\":[\"DEADLY\",\"SEVERITY\",\"POOR_RISK\",\"LOW_RISK\"],\"audRiskLevels\":[\"WAITING\",\"IGNORE\",\"HIGH\",\"MEDIUM\",\"LOW\",\"NONE\"],\"applicationScope\":\"ALL\"}";
String reqJSON = "{\"mode\":\"DETAILS\",\"contacts\":\"admin@clouditera.com\",\"reportType\":\"APPLICATION\",\"format\":\"JSON\",\"projectId\":\"9e57b627-2297-4bbf-a08a-92ff7d6b719d\",\"applicationIds\":[\"9e3e55d6-6d28-4fd1-adc2-15b6cf0702db\"],\"bugLevels\":[\"DEADLY\",\"SEVERITY\",\"POOR_RISK\",\"LOW_RISK\"],\"audRiskLevels\":[\"WAITING\",\"IGNORE\",\"HIGH\",\"MEDIUM\",\"LOW\",\"NONE\"],\"applicationScope\":\"ALL\"}";
SastReportCreateReq sastReportCreateReq = JSON.parseObject(reqJSON, SastReportCreateReq.class);
sastReportCreateReq.setMode(model);
sastReportCreateReq.setProjectId("8a863857-bab3-40d9-a79a-2cb6617a9dd3");
sastReportCreateReq.setFormat(SastConstant.REPORT_FORMAT_JSON);
sastReportCreateReq.setApplicationIds(Collections.singletonList(applicationId));
log.info("获取JSON报告请求参数{}",JSON.toJSONString(sastReportCreateReq));
@ -136,6 +137,7 @@ public class SastWorker extends BaseWorker {
String reqJSON = "{\"mode\":\"DETAILS\",\"contacts\":\"admin@clouditera.com\",\"reportType\":\"APPLICATION\",\"format\":\"JSON\",\"projectId\":\"8a863857-bab3-40d9-a79a-2cb6617a9dd3\",\"applicationIds\":[\"9e3e55d6-6d28-4fd1-adc2-15b6cf0702db\"],\"bugLevels\":[\"DEADLY\",\"SEVERITY\",\"POOR_RISK\",\"LOW_RISK\"],\"audRiskLevels\":[\"WAITING\",\"IGNORE\",\"HIGH\",\"MEDIUM\",\"LOW\",\"NONE\"],\"applicationScope\":\"ALL\"}";
SastReportCreateReq sastReportCreateReq = JSON.parseObject(reqJSON, SastReportCreateReq.class);
sastReportCreateReq.setMode(model);
sastReportCreateReq.setProjectId("8a863857-bab3-40d9-a79a-2cb6617a9dd3");
sastReportCreateReq.setFormat(SastConstant.REPORT_FORMAT_PDF);
sastReportCreateReq.setApplicationIds(Collections.singletonList(applicationId));
log.info("获取报告请求参数{}",JSON.toJSONString(sastReportCreateReq));

View File

@ -78,7 +78,7 @@ public class SastServiceImpl implements SastService {
if (StringUtils.isEmpty(token)) {
SastTokenResp tokenRemote = getTokenRemote();
String accessToken = tokenRemote.getAccessToken();
redisTemplateUtils.set(REDIS_SAST_TOKEN_KEY,accessToken,tokenRemote.getExpiresIn());
redisTemplateUtils.set(REDIS_SAST_TOKEN_KEY,accessToken,12*60*60);
token = accessToken;
}
}

View File

@ -70,10 +70,10 @@ spring:
# Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
data:
redis:
# host: 127.0.0.1 # 地址
# port: 16379 # 端口
host: 192.168.1.120 # 地址
port: 6379 # 端口
host: 127.0.0.1 # 地址
port: 16379 # 端口
# host: 192.168.1.120 # 地址
# port: 6379 # 端口
database: 0 # 数据库索引
# password: dev # 密码,建议生产环境开启

View File

@ -33,7 +33,7 @@ public class SftpTest {
}
@Test
public void test03(){
System.out.println(CryptogramUtil.doEncrypt("hnidc0327cn!@#xhh"));
System.out.println(CryptogramUtil.doEncrypt("hnidc0628cn!@#lld"));
}
@Test
public void ssh(){