diff --git a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/ResourceManagerController.java b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/ResourceManagerController.java index d6f13cb9..0bf71a5d 100644 --- a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/ResourceManagerController.java +++ b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/ResourceManagerController.java @@ -2,10 +2,18 @@ package cd.casic.ci.api; +import cd.casic.ci.process.dto.req.resource.ResourceCreateReq; +import cd.casic.ci.process.dto.req.resource.ResourceListReq; +import cd.casic.ci.process.dto.req.resource.ResourcePageReq; +import cd.casic.ci.process.dto.req.resource.ResourceUpdateReq; +import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp; +import cd.casic.ci.process.dto.resp.resource.ResourceListResp; import cd.casic.ci.process.process.service.resource.ResourceManagerService; +import cd.casic.framework.commons.pojo.CommonResult; +import cd.casic.framework.commons.pojo.PageResult; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import jakarta.annotation.Resource; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -22,7 +30,31 @@ public class ResourceManagerController { @Resource private ResourceManagerService resourceManagerService; - + @PostMapping("/createResource") + public CommonResult createResource(@RequestBody ResourceCreateReq req){ + return CommonResult.success(resourceManagerService.createResource(req)); + } + @PostMapping("/updateResource") + public CommonResult updateResource(@RequestBody ResourceUpdateReq req){ + return CommonResult.success(resourceManagerService.updateResource(req)); + } + @GetMapping("/findResourceDetailById/{resourceId}") + public CommonResult findResourceDetailById(@PathVariable String resourceId){ + return CommonResult.success(resourceManagerService.findResourceDetailById(resourceId)); + } + @PostMapping("/list") + public CommonResult> list(@RequestBody ResourceListReq req){ + return CommonResult.success(resourceManagerService.list(req)); + } + @PostMapping("/page") + public CommonResult> page(@RequestBody ResourcePageReq req){ + return CommonResult.success(resourceManagerService.page(req)); + } + @DeleteMapping("/deleteResource/{resourceId}") + public CommonResult deleteResource(@PathVariable String resourceId){ + resourceManagerService.deleteResource(resourceId); + return CommonResult.success(); + } } diff --git a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/TestController.java b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/TestController.java index c9602ec9..65e960a5 100644 --- a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/TestController.java +++ b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/TestController.java @@ -1,6 +1,5 @@ package cd.casic.ci.api; -import cd.casic.ci.process.util.CryptogramUtil; import cd.casic.ci.process.util.SftpUploadUtil; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/constant/TestCaseAIGeneratorConstant.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/constant/TestCaseAIGeneratorConstant.java new file mode 100644 index 00000000..b2d70191 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/constant/TestCaseAIGeneratorConstant.java @@ -0,0 +1,11 @@ +package cd.casic.ci.process.constant; +/** + * AI测试用例生成url常量类 + * */ +public class TestCaseAIGeneratorConstant { + public static final String targetUpload ="/upload-target"; + public static final String taskCreate ="/create-task"; + public static final String getTaskStatus ="/query-task/"; + public static final String getTaskLog ="/task-log/"; + public static final String downloadTestCase ="/download-case/"; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/resource/ResourceListReq.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/resource/ResourceListReq.java new file mode 100644 index 00000000..0bf4c7d3 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/resource/ResourceListReq.java @@ -0,0 +1,8 @@ +package cd.casic.ci.process.dto.req.resource; + +import lombok.Data; + +@Data +public class ResourceListReq { + +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/resource/ResourcePageReq.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/resource/ResourcePageReq.java new file mode 100644 index 00000000..1d2aa4ba --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/resource/ResourcePageReq.java @@ -0,0 +1,10 @@ +package cd.casic.ci.process.dto.req.resource; + +import cd.casic.framework.commons.pojo.PageParam; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class ResourcePageReq extends PageParam { +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/resource/ResourceUpdateReq.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/resource/ResourceUpdateReq.java index a163d5af..a21cdd62 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/resource/ResourceUpdateReq.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/resource/ResourceUpdateReq.java @@ -22,4 +22,6 @@ public class ResourceUpdateReq { * docker连接端口(选填) * */ private Integer dockerPort; + + private String cloudId; } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/testCase/TestCaseAITargetUploadReq.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/testCase/TestCaseAITargetUploadReq.java new file mode 100644 index 00000000..6ee7c99f --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/testCase/TestCaseAITargetUploadReq.java @@ -0,0 +1,13 @@ +package cd.casic.ci.process.dto.req.testCase; + +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.util.zip.ZipOutputStream; + +@Data +public class TestCaseAITargetUploadReq { + private String binaryPath; + private MultipartFile file; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/testCase/TestCaseAITaskCreateReq.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/testCase/TestCaseAITaskCreateReq.java new file mode 100644 index 00000000..ca022c80 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/testCase/TestCaseAITaskCreateReq.java @@ -0,0 +1,25 @@ +package cd.casic.ci.process.dto.req.testCase; + +import lombok.Data; +/** + * { + * "model_id": "gpt-4", // 可选,模型ID,默认值为:deepseek/deepseekchat + * "api_key": "your-api-key", // 可选,API密钥 + * "api_base": "https://api.openai.com/v1", // 可选,API基础URL,默认值为: + * https://api.deepseek.com + * "binary_id": "abc123def456", // 条件可选,二进制文件ID, 如果未提供,则需要提供 + * case_format参数 + * "case_format": "png", // 条件可选,测试用例文件格式, 如果未提供,则需要提 + * 供binary_id参数 + * "custom_prompt": "", // 可选,测试用例生成任务的自定义提示词, 如:"构造 + * 尽可能小的png文件" + * "count": 10 // 可选,生成用例数量,默认10 + * } + * */ +@Data +public class TestCaseAITaskCreateReq { + private String binaryId; + private String caseFormat; + private String customPrompt; + private Integer count; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/resource/ResourceListResp.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/resource/ResourceListResp.java new file mode 100644 index 00000000..679c50b2 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/resource/ResourceListResp.java @@ -0,0 +1,38 @@ +package cd.casic.ci.process.dto.resp.resource; + +import jakarta.annotation.Resource; +import lombok.Data; + +@Data +public class ResourceListResp { + /** + * docker镜像服务器信息id + */ + private String dockerId; + + /** + * k8s服务器信息id + */ + private String k8sId; + + /** + * 机器服务器信息id + */ + private Long machineId; + + /** + * 弹性云服务器信息id + */ + private String cloudId; + + /** + * 资源名称 + */ + private String resourceName; + /** + * 资源类型ResourceConstant.RES_TYPE_* + * */ + private String resourceType; + + private String id; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/CustomCompilerWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/CustomCompilerWorker.java index 5449cb25..c0c7a3c4 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/CustomCompilerWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/CustomCompilerWorker.java @@ -11,11 +11,11 @@ import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline; 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.target.TargetVersionService; -import cd.casic.ci.process.util.CryptogramUtil; import cd.casic.ci.process.util.SftpUploadUtil; import cd.casic.framework.commons.exception.ServiceException; import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import cd.casic.module.machine.dal.dataobject.MachineInfoDO; +import cd.casic.module.machine.utils.CryptogramUtil; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -92,7 +92,7 @@ public class CustomCompilerWorker extends SshWorker { //则默认路径写死 remoteDir = "/home/casic/706/ai_test_527"; } - SftpUploadUtil.uploadFileViaSftp(resourceMachine.getHostIp(), resourceMachine.getSshPort(),resourceMachine.getUsername(), resourceMachine.getPassword(),null,file.getAbsolutePath(),remoteDir,file.getName()); + SftpUploadUtil.uploadFileViaSftp(resourceMachine.getHostIp(), resourceMachine.getSshPort(),resourceMachine.getUsername(), CryptogramUtil.doDecrypt(resourceMachine.getPassword()),null,file.getAbsolutePath(),remoteDir,file.getName()); //TODO 得改一下 statusCode = shell(resourceMachine, null,context, diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/AFLSlotCompileWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/AFLSlotCompileWorker.java index 90eaa50e..3b9247c4 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/AFLSlotCompileWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/AFLSlotCompileWorker.java @@ -13,6 +13,7 @@ import cd.casic.ci.process.process.service.target.TargetVersionService; import cd.casic.ci.process.util.SftpUploadUtil; import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo; import cd.casic.module.machine.dal.dataobject.MachineInfoDO; +import cd.casic.module.machine.utils.CryptogramUtil; import com.alibaba.fastjson.JSON; import com.jcraft.jsch.*; import jakarta.annotation.Resource; @@ -70,7 +71,7 @@ public class AFLSlotCompileWorker extends DockerWorker { append(context,"AFL编译,上传文件路径:"+realPath); SftpUploadUtil.uploadFileViaSftp( machineInfo.getHostIp() - ,machineInfo.getSshPort(),machineInfo.getUsername(), machineInfo.getPassword(),"",filePath,realPath,file.getName()); + ,machineInfo.getSshPort(),machineInfo.getUsername(), CryptogramUtil.doDecrypt(machineInfo.getPassword()),"",filePath,realPath,file.getName()); } catch (SftpUploadUtil.SftpUploadException e) { append(context,"上传文件失败,请确认资源信息是否有误:"+JSON.toJSONString(machineInfo)); log.error("上传文件报错",e); @@ -128,10 +129,10 @@ public class AFLSlotCompileWorker extends DockerWorker { "cd "+prefix+"\n"; return cmd; } - if ("gz".equals(suffix)) { + if (fileName.contains(".tar")||fileName.contains(".tar.gz")) { String cmd ="tar -zxvf "+fileName+"\n" + "chmod -R o+rwx "+prefix+"/\n"+ - "cd "+prefix+"\n"; + "cd "+fileName.replace(".tar.gz","").replace(".tar","")+"\n"; return cmd; } return ""; @@ -145,7 +146,7 @@ public class AFLSlotCompileWorker extends DockerWorker { try { JSch jsch = new JSch(); Session session = jsch.getSession(user, host, 22); - session.setPassword(machineInfo.getPassword()); + session.setPassword(CryptogramUtil.doDecrypt(machineInfo.getPassword())); session.setConfig("StrictHostKeyChecking", "no"); session.connect(); ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp"); diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/AFLWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/AFLWorker.java index fac19984..72b06a8f 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/AFLWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/AFLWorker.java @@ -115,9 +115,12 @@ public class AFLWorker extends DockerWorker { } } private String cdSourceName(String fileName){ - int dotIndex = fileName.lastIndexOf("."); - if (dotIndex!=-1) { - return "cd "+fileName.substring(0, dotIndex)+"\n"; + if (fileName.contains(".zip")||fileName.contains(".tar")||fileName.contains(".tar.gz")) { + String cdPath = fileName + .replace(".zip","") + .replace(".tar.gz","") + .replace(".tar",""); + return "cd "+cdPath+"\n"; } return ""; } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/TestCaseGenerationWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/TestCaseGenerationWorker.java index 9734e952..1f0f5ac1 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/TestCaseGenerationWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/afl/TestCaseGenerationWorker.java @@ -2,7 +2,7 @@ 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.TestCaseAITaskCreateReq; import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp; import cd.casic.ci.process.engine.runContext.TaskRunContext; import cd.casic.ci.process.engine.worker.base.DockerWorker; @@ -11,20 +11,24 @@ 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.TestCaseAIGeneratorService; import cd.casic.ci.process.process.service.testCase.TestCaseInfoService; -import cd.casic.ci.process.util.CryptogramUtil; import cd.casic.ci.process.util.SftpUploadUtil; import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo; import cd.casic.module.machine.dal.dataobject.MachineInfoDO; +import cd.casic.module.machine.utils.CryptogramUtil; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.jcraft.jsch.*; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import java.io.File; +import java.io.*; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Properties; import static cd.casic.ci.process.engine.constant.PipelineVariableConstant.*; import static cd.casic.ci.process.engine.constant.TestCaseGenerationConstant.*; @@ -36,6 +40,8 @@ public class TestCaseGenerationWorker extends DockerWorker { private TestCaseInfoService testCaseInfoService; @Resource private TargetVersionService targetVersionService; + @Resource + private TestCaseAIGeneratorService aiGeneratorService; @Override public void execute(TaskRunContext context) { int statusCode = -1; @@ -45,7 +51,6 @@ public class TestCaseGenerationWorker extends DockerWorker { String seedPath= workDir+File.separator+ AFL_DOCKER_SEED; Map taskProperties = taskDef.getTaskProperties(); 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 itemList = JSON.parseArray(JSON.toJSONString(itemListObject),String.class); @@ -55,23 +60,21 @@ public class TestCaseGenerationWorker extends DockerWorker { if (Objects.isNull(machineInfo)||Objects.isNull(dockerInfo)) { append(context,"该资源不支持docker或者ssh"); } - 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 "+imageName+" bash\n" // 目前测试用例ai生成只有这个路径能跑 - + "cd "+ AFL_DOCKER_BASE_DIR+"\n" + - "mkdir -p "+seedPath +"\n"+ - "cd "+seedPath +"\n"+ - "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); +// // 容器内部test 目录, 获取编译后的文件 +// 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="+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); + handleAIGenerator(context); } else if (CASE_TYPE_FILE.equals(caseType)){ // 文件上传 Object filePathObj = taskProperties.get(SEED_SOURCE); @@ -90,7 +93,7 @@ public class TestCaseGenerationWorker extends DockerWorker { try { SftpUploadUtil.uploadFileViaSftp( machineInfo.getHostIp() - ,Integer.valueOf(machineInfo.getSshPort()),machineInfo.getUsername(),machineInfo.getPassword(),"",filePath,seedTarget,file.getName()); + ,machineInfo.getSshPort(),machineInfo.getUsername(), CryptogramUtil.doDecrypt(machineInfo.getPassword()),"",filePath,seedTarget,file.getName()); } catch (SftpUploadUtil.SftpUploadException e) { append(context,"seed文件上传失败"); log.error("seed文件上传失败",e); @@ -111,7 +114,7 @@ public class TestCaseGenerationWorker extends DockerWorker { machineInfo.getHostIp() ,machineInfo.getSshPort() ,machineInfo.getUsername() - ,machineInfo.getPassword() + ,CryptogramUtil.doDecrypt(machineInfo.getPassword()) ,"", testFilePath,seedTarget,testCaseInfo.getFileName()); } catch (SftpUploadUtil.SftpUploadException e) { toBadEnding(); @@ -121,10 +124,122 @@ 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); + public void handleAIGenerator(TaskRunContext context){ + PipTask taskDef = context.getContextDef() instanceof PipTask ? ((PipTask) context.getContextDef()) : null; + Map taskProperties = taskDef.getTaskProperties(); + String binaryName = taskProperties.get(BINARY_NAME) instanceof String ? ((String) taskProperties.get("binaryName")) : null; + PipPipeline pipeline = (PipPipeline) getContextManager().getContext(taskDef.getPipelineId()).getContextDef(); + TargetVersion targetVersion = targetVersionService.getById(pipeline.getTargetVersionId()); + String managerId = getVariableNearby(context, AFL_RESOURCE_MANAGER_ID_KEY) instanceof String ? ((String) getVariableNearby(context, AFL_RESOURCE_MANAGER_ID_KEY)) : null; + ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(managerId); + MachineInfoDO machineInfo = resourceById.getMachineInfo(); + DockerEndpointDo dockerInfo = resourceById.getDockerInfo(); + String fileName = targetVersion.getFileName(); + if (Objects.isNull(machineInfo)||Objects.isNull(dockerInfo)) { + append(context,"该资源不支持docker或者ssh"); + } + // TODO 需要新增的项 + String prompt = "你是一个模糊测试专家,当前程序输入为文本例如 aa aaa 这种"; + Integer count = 10; + // 获取编译后的文文件的inputStream + JSch jsch = new JSch(); + Session session = null; + ChannelExec exec = null; + ChannelSftp sftp = null; + try { + session = jsch.getSession(machineInfo.getUsername(),machineInfo.getHostIp(), machineInfo.getSshPort()); + session.setPassword( CryptogramUtil.doDecrypt(machineInfo.getPassword())); + // 跳过 host key 检查 + Properties config = new Properties(); + config.put("StrictHostKeyChecking", "no"); + session.setConfig(config); + session.connect(); + sftp = (ChannelSftp) session.openChannel("sftp"); + sftp.connect(); + String workDir = (String)getGlobalVariable(context,AFL_DOCKER_WORK_DIR_KEY); + append(context,"AI测试用例生成开始上传目标文件。。。"); + String filePath = AFL_DOCKER_BASE_DIR + File.separator + workDir+File.separator+getSourceName(fileName)+File.separator+binaryName; + append(context,"读取到目标文件路径:"+filePath); + InputStream inputStream = sftp.get(filePath); + String targetUploadRes = aiGeneratorService.targetUpload("./" + binaryName, inputStream); + append(context,"上传结果:"+targetUploadRes); + String binaryId = JSON.parseObject(targetUploadRes).getString("id"); + append(context,"开始创建测试用例生成task"); + // 创建task + TestCaseAITaskCreateReq req = new TestCaseAITaskCreateReq(); + req.setBinaryId(binaryId); + req.setCustomPrompt(prompt); + req.setCount(count); + String taskCreateRes = aiGeneratorService.taskCreate(req); + String taskId = JSON.parseObject(taskCreateRes).getString("task_id"); + append(context,"创建测试用例生成task成功,开始读取task执行日志"); + while (true){ + // 获取状态及日志 + String taskStatusRes = aiGeneratorService.getTaskStatus(taskId); + String status = JSONObject.parseObject(taskStatusRes).getString("status"); + if ("success".equals(status)) { + break; + } else if("failed".equals(status)){ + toBadEnding(); + } else { + String logRes = aiGeneratorService.getTaskLog(taskId); + String logStr = JSON.parseObject(logRes).getString("log"); + append(context,logStr); + } + append(context,"task当前执行状态"+taskStatusRes); + } + append(context,"开始下载生成的测试用例文件"); + File tempFile = File.createTempFile("seed", ".zip"); + tempFile.deleteOnExit(); + FileOutputStream fos = new FileOutputStream(tempFile); + // 下载生成的种子 + aiGeneratorService.downloadTestCase(taskId,fos); + fos.close(); + append(context,"下载生成的模糊测试种子文件成功"); + + FileInputStream fis = new FileInputStream(tempFile); + // 上传种子zip到目标服务器 + String seedPath= workDir+File.separator+ AFL_DOCKER_SEED; + String seedTarget = AFL_VOLUME_WORK_DIR_PREFIX+File.separator+seedPath+File.separator+tempFile.getName(); + String seedDir = AFL_VOLUME_WORK_DIR_PREFIX+File.separator+seedPath; + append(context,"上传模糊测试种子压缩包到指定工作目录:"+seedDir); + sftp.put(fis,seedDir); + sftp.disconnect(); + append(context,"解压种子到指定工作目录"+seedDir); + String cmd = "unzip -o " + seedTarget + " -d " + seedDir; + append(context,cmd); + // 解压种子zip + exec = (ChannelExec)session.openChannel("exec"); + exec.setCommand(cmd); + + } catch (Exception e) { + append(context,"测试用例生成失败"); + }finally { + if (exec!=null) { + if (exec.isConnected()) { + exec.disconnect(); + } + } + if (sftp!=null) { + if (sftp.isConnected()) { + sftp.disconnect(); + } + } + if (session!=null) { + if (session.isConnected()) { + session.disconnect(); + } + } + + } + + } + private String getSourceName(String fileName){ + if (fileName.contains(".zip")||fileName.contains(".tar")||fileName.contains(".tar.gz")) { + return fileName + .replace(".zip","") + .replace(".tar.gz","") + .replace(".tar",""); } return ""; } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/ResourceConverter.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/ResourceConverter.java index ab56ea75..95cf091a 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/ResourceConverter.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/ResourceConverter.java @@ -1,6 +1,9 @@ package cd.casic.ci.process.process.converter; +import cd.casic.ci.process.dto.req.resource.ResourceCreateReq; +import cd.casic.ci.process.dto.req.resource.ResourceUpdateReq; import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp; +import cd.casic.ci.process.dto.resp.resource.ResourceListResp; import cd.casic.ci.process.process.dataObject.resource.PipResourceManager; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -18,4 +21,7 @@ import java.util.List; public interface ResourceConverter { ResourceConverter INSTANCE = Mappers.getMapper(ResourceConverter.class); ResourceDetailResp converter(PipResourceManager manager); + PipResourceManager converter(ResourceUpdateReq req); + PipResourceManager converter(ResourceCreateReq req); + List converter(List manager); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResourceManager.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResourceManager.java index c68e7b9e..9a7ef452 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResourceManager.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResourceManager.java @@ -41,4 +41,6 @@ public class PipResourceManager extends PipBaseElement { * 资源类型ResourceConstant.RES_TYPE_* * */ private String resourceType; + + private String state; } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflCrashesInfoServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflCrashesInfoServiceImpl.java index 20daf0ee..29ca02e6 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflCrashesInfoServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflCrashesInfoServiceImpl.java @@ -13,11 +13,11 @@ import cd.casic.ci.process.process.dataObject.aflManager.AflCrashesInfo; import cd.casic.ci.process.process.dataObject.aflManager.AflInfo; import cd.casic.ci.process.process.service.aflManager.AflCrashesInfoService; import cd.casic.ci.process.process.service.resource.ResourceManagerService; -import cd.casic.ci.process.util.CryptogramUtil; import cd.casic.ci.process.util.SftpUploadUtil; import cd.casic.framework.commons.exception.ServiceException; import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import cd.casic.module.machine.dal.dataobject.MachineInfoDO; +import cd.casic.module.machine.utils.CryptogramUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import de.danielbechler.util.Collections; @@ -79,7 +79,7 @@ public class AflCrashesInfoServiceImpl extends ServiceImpl impleme } MachineInfoDO resourceMachine = resourceById.getMachineInfo(); + resourceMachine.setPassword(CryptogramUtil.doDecrypt(resourceMachine.getPassword())); AflInfo aflInfo = SftpUploadUtil.downloadFileSftpForInputStreamAndSetAflInfo(resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(),null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/fuzzer_stats"); //在本地创建一个新文件夹,将远程文件复制一份过去 List sourceFilePaths = new ArrayList<>(); @@ -132,7 +133,7 @@ public class AflInfoServiceImpl extends ServiceImpl impleme } MachineInfoDO resourceMachine = resourceById.getMachineInfo(); - String password = resourceMachine.getPassword(); + String password = CryptogramUtil.doDecrypt(resourceMachine.getPassword()); resourceMachine.setPassword(password); AflInfo aflInfo = SftpUploadUtil.downloadFileSftpForInputStreamAndSetAflInfo(resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(),null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/fuzzer_stats"); @@ -216,7 +217,7 @@ public class AflInfoServiceImpl extends ServiceImpl impleme MachineInfoDO resourceMachine = resourceById.getMachineInfo(); //找出seed文件夹下的所有测试样例文件,计算数量 List files = SftpUploadUtil.listFilesInRemoteDirectory( - resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + "/SEED/"); + resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), CryptogramUtil.doDecrypt(resourceMachine.getPassword()), null, remoteFilePath + "PIP_" + req.getPipelineId() + "/SEED/"); if (!CollectionUtils.isEmpty(files)){ resp.setTestCaseCount(files.size()); diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflPlotInfoServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflPlotInfoServiceImpl.java index c12b02f5..73d87053 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflPlotInfoServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflPlotInfoServiceImpl.java @@ -15,6 +15,7 @@ import cd.casic.ci.process.util.SftpUploadUtil; import cd.casic.framework.commons.exception.ServiceException; import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import cd.casic.module.machine.dal.dataobject.MachineInfoDO; +import cd.casic.module.machine.utils.CryptogramUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import de.danielbechler.util.Collections; @@ -69,6 +70,7 @@ public class AflPlotInfoServiceImpl extends ServiceImpl sourceFilePaths = new ArrayList<>(); diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflSeedInfoServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflSeedInfoServiceImpl.java index 4d7e7d63..2af14d8b 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflSeedInfoServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflSeedInfoServiceImpl.java @@ -10,11 +10,11 @@ import cd.casic.ci.process.process.dao.aflManager.AflSeedInfoDao; import cd.casic.ci.process.process.dataObject.aflManager.AflSeedInfo; import cd.casic.ci.process.process.service.aflManager.AflSeedInfoService; import cd.casic.ci.process.process.service.resource.ResourceManagerService; -import cd.casic.ci.process.util.CryptogramUtil; import cd.casic.ci.process.util.SftpUploadUtil; import cd.casic.framework.commons.exception.ServiceException; import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import cd.casic.module.machine.dal.dataobject.MachineInfoDO; +import cd.casic.module.machine.utils.CryptogramUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import de.danielbechler.util.Collections; @@ -194,7 +194,7 @@ public class AflSeedInfoServiceImpl extends ServiceImpl { /** * 创建||申请 资源 * */ - void createResource(ResourceCreateReq req); - void updateResource(ResourceUpdateReq req); + String createResource(ResourceCreateReq req); + String updateResource(ResourceUpdateReq req); ResourceDetailResp findResourceDetailById(String resourceId); void deleteResource(String resourceId); + PageResult page(ResourcePageReq req); + + List list(ResourceListReq req); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/resource/impl/ResourceManagerServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/resource/impl/ResourceManagerServiceImpl.java index fb69e8d0..0148b72c 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/resource/impl/ResourceManagerServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/resource/impl/ResourceManagerServiceImpl.java @@ -2,24 +2,32 @@ package cd.casic.ci.process.process.service.resource.impl; import cd.casic.ci.process.constant.ResourceConstant; import cd.casic.ci.process.dto.req.resource.ResourceCreateReq; +import cd.casic.ci.process.dto.req.resource.ResourceListReq; +import cd.casic.ci.process.dto.req.resource.ResourcePageReq; import cd.casic.ci.process.dto.req.resource.ResourceUpdateReq; import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp; +import cd.casic.ci.process.dto.resp.resource.ResourceListResp; import cd.casic.ci.process.process.converter.ResourceConverter; import cd.casic.ci.process.process.dao.pipeline.PipResourceManagerDao; import cd.casic.ci.process.process.dataObject.resource.PipResourceManager; import cd.casic.ci.process.process.service.resource.ResourceManagerService; +import cd.casic.framework.commons.pojo.PageResult; import cd.casic.module.execute.docker.dao.DockerEndpointDao; import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo; import cd.casic.module.execute.docker.dataobject.model.DockerEndpoint; import cd.casic.module.machine.dal.dataobject.MachineInfoDO; import cd.casic.module.machine.service.MachineInfoService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.apache.cxf.resource.ResourceManager; import org.springframework.stereotype.Service; +import java.util.List; import java.util.Objects; /** @@ -42,7 +50,7 @@ public class ResourceManagerServiceImpl extends ServiceImpl page(ResourcePageReq req) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + Page page = pipResourceManagerDao.selectPage(new Page<>(req.getPageNo(), req.getPageSize()), wrapper); + List list = converter.converter(page.getRecords()); + return new PageResult<>(list, page.getTotal(), page.getCurrent(), page.getSize()); + + } + + @Override + public List list(ResourceListReq req) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + List list = pipResourceManagerDao.selectList(wrapper); + return converter.converter(list); + } } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/testCase/TestCaseAIGeneratorService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/testCase/TestCaseAIGeneratorService.java new file mode 100644 index 00000000..29946d31 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/testCase/TestCaseAIGeneratorService.java @@ -0,0 +1,22 @@ +package cd.casic.ci.process.process.service.testCase; + +import cd.casic.ci.process.dto.req.testCase.TestCaseAITargetUploadReq; +import cd.casic.ci.process.dto.req.testCase.TestCaseAITaskCreateReq; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +public interface TestCaseAIGeneratorService { + /** + * 目标文件上传 + * */ + public String targetUpload(String binaryPath, InputStream inputStream) throws IOException; + /** + * 创建测试用例生成任务 + * */ + public String taskCreate(TestCaseAITaskCreateReq req); + public String getTaskStatus(String taskId); + public String getTaskLog(String taskId); + public void downloadTestCase(String taskId, OutputStream outputStream) throws IOException; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/testCase/impl/TestCaseAIGeneratorServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/testCase/impl/TestCaseAIGeneratorServiceImpl.java new file mode 100644 index 00000000..dfea6ddc --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/testCase/impl/TestCaseAIGeneratorServiceImpl.java @@ -0,0 +1,108 @@ +package cd.casic.ci.process.process.service.testCase.impl; + +import cd.casic.ci.process.constant.TestCaseAIGeneratorConstant; +import cd.casic.ci.process.dto.req.testCase.TestCaseAITargetUploadReq; +import cd.casic.ci.process.dto.req.testCase.TestCaseAITaskCreateReq; +import cd.casic.ci.process.process.service.testCase.TestCaseAIGeneratorService; +import cd.casic.ci.process.properties.TestCaseAIProperties; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.amazonaws.util.IOUtils; +import jakarta.annotation.Resource; +import net.schmizz.sshj.transport.kex.ECDHNistP; +import org.springframework.core.io.FileSystemResource; +import org.springframework.http.*; +import org.springframework.stereotype.Service; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.util.StringUtils; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.multipart.MultipartFile; + +import java.io.*; +import java.util.HashMap; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + +@Service +public class TestCaseAIGeneratorServiceImpl implements TestCaseAIGeneratorService { + @Resource + private TestCaseAIProperties properties; + @Resource + private RestTemplate restTemplate; + + + @Override + public String targetUpload(String binaryPath, InputStream inputStream) throws IOException { + File tempFile = File.createTempFile("target", ".zip"); + tempFile.deleteOnExit(); + FileOutputStream fos = new FileOutputStream(tempFile); + ZipOutputStream zos = new ZipOutputStream(fos); + ZipEntry entry = new ZipEntry(tempFile.getName()); + zos.putNextEntry(entry); + IOUtils.copy(inputStream,zos); + zos.closeEntry(); + zos.close(); + inputStream.close(); + FileSystemResource fsr = new FileSystemResource(tempFile); + String url = properties.getBaseUrl()+ TestCaseAIGeneratorConstant.targetUpload; + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.MULTIPART_FORM_DATA); + MultiValueMap body = new LinkedMultiValueMap<>(); + body.add("file",fsr); + body.add("binary_path",binaryPath); + HttpEntity> entity = new HttpEntity<>(body,headers); + ResponseEntity exchange = restTemplate.exchange(url, HttpMethod.POST, entity, String.class, new HashMap<>()); + return exchange.getBody(); + } + + @Override + public String taskCreate(TestCaseAITaskCreateReq req) { + if (StringUtils.hasLength(req.getBinaryId()) &&StringUtils.hasLength(req.getCaseFormat())) { + return ""; + } + JSONObject jsonObject = new JSONObject(); + jsonObject.put("binary_id",req.getBinaryId()); + jsonObject.put("count",req.getCount()); + jsonObject.put("custom_prompt",req.getCustomPrompt()); + jsonObject.put("case_format",req.getCaseFormat()); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + HttpEntity entity = new HttpEntity<>(JSON.toJSONString(jsonObject),headers); + String url = properties.getBaseUrl() + TestCaseAIGeneratorConstant.taskCreate; + ResponseEntity exchange = restTemplate.exchange(url, HttpMethod.POST, entity, String.class, new HashMap<>()); + return exchange.getBody(); + } + + @Override + public String getTaskStatus(String taskId) { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + HttpEntity entity = new HttpEntity<>("{}",headers); + String url = properties.getBaseUrl() + TestCaseAIGeneratorConstant.getTaskStatus+taskId; + ResponseEntity exchange = restTemplate.exchange(url, HttpMethod.GET, entity, String.class, new HashMap<>()); + return exchange.getBody(); + } + + @Override + public String getTaskLog(String taskId) { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + HttpEntity entity = new HttpEntity<>("{}",headers); + String url = properties.getBaseUrl() + TestCaseAIGeneratorConstant.getTaskLog+taskId; + ResponseEntity exchange = restTemplate.exchange(url, HttpMethod.GET, entity, String.class, new HashMap<>()); + return exchange.getBody(); + } + + @Override + public void downloadTestCase(String taskId, OutputStream outputStream) throws IOException { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + HttpEntity entity = new HttpEntity<>("{}",headers); + String url = properties.getBaseUrl() + TestCaseAIGeneratorConstant.downloadTestCase+taskId; + ResponseEntity exchange = restTemplate.exchange(url, HttpMethod.GET, entity, byte[].class, new HashMap<>()); + outputStream.write(exchange.getBody()); + } + +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/properties/TestCaseAIProperties.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/properties/TestCaseAIProperties.java new file mode 100644 index 00000000..bf8952dd --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/properties/TestCaseAIProperties.java @@ -0,0 +1,12 @@ +package cd.casic.ci.process.properties; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@ConfigurationProperties(prefix = "test-case.ai") +@Component +@Data +public class TestCaseAIProperties { + private String baseUrl; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/SshCommand.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/SshCommand.java index da813f6f..e87476ed 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/SshCommand.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/SshCommand.java @@ -4,6 +4,7 @@ package cd.casic.ci.process.ssh; import cd.casic.ci.process.constant.CommandConstant; import cd.casic.ci.process.util.ChannelShellUtil; import cd.casic.module.machine.dal.dataobject.MachineInfoDO; +import cd.casic.module.machine.utils.CryptogramUtil; import cn.hutool.extra.ssh.JschUtil; import com.jcraft.jsch.ChannelShell; import com.jcraft.jsch.JSchException; @@ -58,7 +59,7 @@ public class SshCommand implements SshClient { */ public SshCommand(MachineInfoDO machine) throws JSchException { // 根据用户名,主机ip,端口获取一个Session对象 - String decrypt = machine.getPassword(); + String decrypt = CryptogramUtil.doDecrypt(machine.getPassword()); this.session = JschUtil.createSession(machine.getHostIp(), machine.getSshPort(), machine.getUsername(), decrypt); this.session.setConfig("PreferredAuthentications", "password"); this.session.setConfig("StrictHostKeyChecking", "no"); diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/WinRMHelper.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/WinRMHelper.java index c9e5314a..41cbeb85 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/WinRMHelper.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/ssh/WinRMHelper.java @@ -1,7 +1,7 @@ package cd.casic.ci.process.ssh; -import cd.casic.ci.process.util.CryptogramUtil; import cd.casic.module.machine.dal.dataobject.MachineInfoDO; +import cd.casic.module.machine.utils.CryptogramUtil; import io.cloudsoft.winrm4j.client.WinRmClientContext; import io.cloudsoft.winrm4j.winrm.WinRmTool; import io.cloudsoft.winrm4j.winrm.WinRmToolResponse; @@ -35,7 +35,7 @@ public class WinRMHelper { public WinRMHelper(MachineInfoDO machineInfo) { this.ip = machineInfo.getHostIp(); this.username = machineInfo.getUsername(); - this.password = machineInfo.getPassword(); + this.password = CryptogramUtil.doDecrypt(machineInfo.getPassword()); } public int execute(final String command, ExecCallback execCallback) { diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/util/CryptogramUtil.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/util/CryptogramUtil.java deleted file mode 100644 index 9784584e..00000000 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/util/CryptogramUtil.java +++ /dev/null @@ -1,175 +0,0 @@ -package cd.casic.ci.process.util; - - -// ... 省略 package 和 import ... -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.digests.SM3Digest; -import org.bouncycastle.crypto.engines.SM2Engine; -import org.bouncycastle.crypto.engines.SM4Engine; -import org.bouncycastle.crypto.generators.SM2KeyPairGenerator; -import org.bouncycastle.crypto.macs.HMac; -import org.bouncycastle.crypto.modes.CBCBlockCipher; -import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher; -import org.bouncycastle.crypto.params.*; -import org.bouncycastle.crypto.signers.SM2Signer; -import org.bouncycastle.jce.provider.BouncyCastleProvider; -import org.bouncycastle.util.encoders.Hex; - -import java.nio.charset.StandardCharsets; -import java.security.*; -import java.security.spec.ECGenParameterSpec; - -public class CryptogramUtil { - - static { - Security.addProvider(new BouncyCastleProvider()); - } - - /** - * SM2 公钥加密 - */ - public static String doSm2Encrypt(String str) { - try { - byte[] data = str.getBytes(StandardCharsets.UTF_8); - ECPublicKeyParameters pubKey = getSm2PublicKey(Keypair.PUBLIC_KEY); - SM2Engine engine = new SM2Engine(); - engine.init(true, pubKey); - byte[] enc = engine.processBlock(data, 0, data.length); - return Hex.toHexString(enc); - } catch (Exception e) { - throw new RuntimeException("SM2加密失败", e); - } - } - - /** - * SM2 私钥解密 - */ - public static String doSm2Decrypt(String str) { - try { - byte[] enc = Hex.decode(str); - ECPrivateKeyParameters priKey = getSm2PrivateKey(Keypair.PRIVATE_KEY); - SM2Engine engine = new SM2Engine(); - engine.init(false, priKey); - byte[] dec = engine.processBlock(enc, 0, enc.length); - return new String(dec, StandardCharsets.UTF_8); - } catch (Exception e) { - // 解密失败返回原文 - return str; - } - } - - /** - * SM4 CBC 加密 - */ - public static String doEncrypt(String str) { - try { - byte[] key = Hex.decode(Keypair.KEY); - byte[] iv = Hex.decode(Keypair.IV); - PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new CBCBlockCipher(new SM4Engine())); - cipher.init(true, new ParametersWithIV(new KeyParameter(key), iv)); - byte[] input = str.getBytes(StandardCharsets.UTF_8); - byte[] output = new byte[cipher.getOutputSize(input.length)]; - int len = cipher.processBytes(input, 0, input.length, output, 0); - len += cipher.doFinal(output, len); - return Hex.toHexString(output, 0, len); - } catch (Exception e) { - throw new RuntimeException("SM4加密失败", e); - } - } - - /** - * SM4 CBC 解密 - */ - public static String doDecrypt(String str) { - try { - byte[] key = Hex.decode(Keypair.KEY); - byte[] iv = Hex.decode(Keypair.IV); - PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new CBCBlockCipher(new SM4Engine())); - cipher.init(false, new ParametersWithIV(new KeyParameter(key), iv)); - byte[] input = Hex.decode(str); - byte[] output = new byte[cipher.getOutputSize(input.length)]; - int len = cipher.processBytes(input, 0, input.length, output, 0); - len += cipher.doFinal(output, len); - return new String(output, 0, len, StandardCharsets.UTF_8); - } catch (Exception e) { - // 解密失败返回原文 - return str; - } - } - - /** - * SM2 签名 - */ - public static String doSignature(String str) { - try { - ECPrivateKeyParameters priKey = getSm2PrivateKey(Keypair.PRIVATE_KEY); - SM2Signer signer = new SM2Signer(); - signer.init(true, priKey); - byte[] msg = str.getBytes(StandardCharsets.UTF_8); - signer.update(msg, 0, msg.length); - byte[] sig = signer.generateSignature(); - return Hex.toHexString(sig); - } catch (Exception e) { - throw new RuntimeException("SM2签名失败", e); - } - } - - /** - * SM2 验签 - */ - public static boolean doVerifySignature(String originalStr, String str) { - try { - ECPublicKeyParameters pubKey = getSm2PublicKey(Keypair.PUBLIC_KEY); - SM2Signer signer = new SM2Signer(); - signer.init(false, pubKey); - byte[] msg = originalStr.getBytes(StandardCharsets.UTF_8); - signer.update(msg, 0, msg.length); - byte[] sig = Hex.decode(str); - return signer.verifySignature(sig); - } catch (Exception e) { - return false; - } - } - - /** - * SM3 哈希 - */ - public static String doHashValue(String str) { - try { - SM3Digest digest = new SM3Digest(); - byte[] msg = str.getBytes(StandardCharsets.UTF_8); - digest.update(msg, 0, msg.length); - byte[] hash = new byte[digest.getDigestSize()]; - digest.doFinal(hash, 0); - return Hex.toHexString(hash); - } catch (Exception e) { - throw new RuntimeException("SM3哈希失败", e); - } - } - - // ====== 工具方法 ====== - - // 获取SM2公钥参数 - private static ECPublicKeyParameters getSm2PublicKey(String hex) { - org.bouncycastle.jce.spec.ECParameterSpec ecSpec = org.bouncycastle.jce.ECNamedCurveTable.getParameterSpec("sm2p256v1"); - org.bouncycastle.math.ec.ECPoint q = ecSpec.getCurve().decodePoint(Hex.decode(hex)); - return new ECPublicKeyParameters(q, new ECDomainParameters(ecSpec.getCurve(), ecSpec.getG(), ecSpec.getN())); - } - - // 获取SM2私钥参数 - private static ECPrivateKeyParameters getSm2PrivateKey(String hex) { - org.bouncycastle.jce.spec.ECParameterSpec ecSpec = org.bouncycastle.jce.ECNamedCurveTable.getParameterSpec("sm2p256v1"); - return new ECPrivateKeyParameters(new java.math.BigInteger(hex, 16), new ECDomainParameters(ecSpec.getCurve(), ecSpec.getG(), ecSpec.getN())); - } - - private static class Keypair { - // 公钥(未压缩点,hex字符串,前缀04) - public static final String PUBLIC_KEY = "04298364ec840088475eae92a591e01284d1abefcda348b47eb324bb521bb03b0b2a5bc393f6b71dabb8f15c99a0050818b56b23f31743b93df9cf8948f15ddb54"; - // 私钥(hex字符串) - public static final String PRIVATE_KEY = "3037723d47292171677ec8bd7dc9af696c7472bc5f251b2cec07e65fdef22e25"; - // SM4密钥(16字节,128位,hex字符串) - public static final String KEY = "0123456789abcdeffedcba9876543210"; - // SM4 IV(16字节,hex字符串) - public static final String IV = "fedcba98765432100123456789abcdef"; - } -} diff --git a/ops-server/src/main/resources/application-local.yaml b/ops-server/src/main/resources/application-local.yaml index 8367ac09..bf73121b 100644 --- a/ops-server/src/main/resources/application-local.yaml +++ b/ops-server/src/main/resources/application-local.yaml @@ -181,4 +181,6 @@ shuimu: username: admin grant-type: password client-id: client - +test-case: + ai: + base-url: http://175.6.27.252:8000/api/v1 diff --git a/ops-server/src/test/java/cd/casic/server/DockerTest.java b/ops-server/src/test/java/cd/casic/server/DockerTest.java index 66f4f3ff..c5df6aa8 100644 --- a/ops-server/src/test/java/cd/casic/server/DockerTest.java +++ b/ops-server/src/test/java/cd/casic/server/DockerTest.java @@ -1,5 +1,5 @@ package cd.casic.server; -import cd.casic.ci.process.util.CryptogramUtil; +import cd.casic.module.machine.utils.CryptogramUtil; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.command.CreateContainerResponse; import com.github.dockerjava.api.command.ExecCreateCmdResponse; diff --git a/ops-server/src/test/java/cd/casic/server/SftpTest.java b/ops-server/src/test/java/cd/casic/server/SftpTest.java index 7ef747c0..f2e423f1 100644 --- a/ops-server/src/test/java/cd/casic/server/SftpTest.java +++ b/ops-server/src/test/java/cd/casic/server/SftpTest.java @@ -1,6 +1,5 @@ package cd.casic.server; -import cd.casic.ci.process.util.CryptogramUtil; import cd.casic.ci.process.util.SftpUploadUtil; import com.jcraft.jsch.*; import jakarta.annotation.Resource; @@ -17,18 +16,17 @@ import java.util.Vector; @ActiveProfiles("local") public class SftpTest { - @Test public void test02(){ System.out.println("Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 5.4.0-150-generic x86_64)\r\n\r\n * Documentation: https://help.ubuntu.com\r\n * Management: https://landscape.canonical.com\r\n * Support: https://ubuntu.com/pro\r\n\r\n扩展安全维护(ESM)Infrastructure 未启用。\r\n\r\n0 更新可以立即应用。\r\n\r\n240 个额外的安全更新可以通过 ESM Infra 来获取安装。\r\n可通过以下途径了解如何启用 ESM Infra:for Ubuntu 18.04 at\r\nhttps://ubuntu.com/18-04\r\n\r\n*** System restart required ***\r\nLast login: Thu May 29 18:59:48 2025 from 223.104.132.96\r\r\necho \"自定义镜像执行命令\"\r\n\r\nhnidc@hnidc-PowerEdge-R740:~$ echo \"自定义镜像执行命令\"\r\n自定义镜像执行命令\r\nhnidc@hnidc-PowerEdge-R740:~$ \r\nhnidc@hnidc-PowerEdge-R740:~$ cd /home/casic/706\r\nhnidc@hnidc-PowerEdge-R740:/home/casic/706$ \r\nhnidc@hnidc-PowerEdge-R740:/home/casic/706$ docker run -v $PWD/yunqi/:/test -it \r aflplusplus/aflplusplus bash\r\n\r\ncd /test\r\n\r\n\u001b[?2004h[AFL++ c7cedbd6d37d] /AFLplusplus # \r\n\u001b[?2004l\r\u001b[?2004h[AFL++ c7cedbd6d37d] /AFLplusplus # cd /test\r\n\u001b[?2004l\r\u001b[?2004h[AFL++ c7cedbd6d37d] /test # \r\n\u001b[?2004l\r\u001b[?2004h[AFL++ c7cedbd6d37d] /test # \r\u001b[K[AFL++ c7cedbd6d37d] /test # afl-fuzz -i case -o ai_afl -t 3000 -Q ./CaseGenerato\ror/testdata/libpng/libpng/pngfix @@\r\n\u001b[?2004l\r\u001b[1;92m[+] \u001b[0mEnabled environment variable AFL_SKIP_CPUFREQ with value 1\u001b[0m\r\n\u001b[1;92m[+] \u001b[0mEnabled environment variable AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES with value 1\u001b[0m\r\n\u001b[1;92m[+] \u001b[0mEnabled environment variable AFL_TRY_AFFINITY with value 1\u001b[0m\r\n\u001b[0;36mafl-fuzz++4.09a\u001b[0m based on afl by Michal Zalewski and a large online community\r\n\u001b[1;92m[+] \u001b[0mAFL++ is maintained by Marc \"van Hauser\" Heuse, Dominik Maier, Andrea Fioraldi and Heiko \"hexcoder\" Eißfeldt\u001b[0m\r\n\u001b[1;92m[+] \u001b[0mAFL++ is open source, get it at https://github.com/AFLplusplus/AFLplusplus\u001b[0m\r\n\u001b[1;92m[+] \u001b[0mNOTE: AFL++ >= v3 has changed defaults and behaviours - see README.md\u001b[0m\r\n\u001b[1;92m[+] \u001b[0mNo -M/-S set, autoconfiguring for \"-S default\"\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mGetting to work...\u001b[0m\r\n\u001b[1;92m[+] \u001b[0mUsing exponential power schedule (FAST)\u001b[0m\r\n\u001b[1;92m[+] \u001b[0mEnabled testcache with 50 MB\u001b[0m\r\n\u001b[1;92m[+] \u001b[0mGenerating fuzz data with a length of min=1 max=1048576\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mChecking core_pattern...\u001b[0m\r\n\u001b[1;92m[+] \u001b[0mYou have 80 CPU cores and 4 runnable tasks (utilization: 5%).\u001b[0m\r\n\u001b[1;92m[+] \u001b[0mTry parallel jobs - see /usr/local/share/doc/afl/fuzzing_in_depth.md#c-using-multiple-cores\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mSetting up output directories...\u001b[0m\r\n\u001b[1;92m[+] \u001b[0mOutput directory exists but deemed OK to reuse.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mDeleting old session data...\u001b[0m\r\n\u001b[1;92m[+] \u001b[0mOutput dir cleanup successful.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mChecking CPU core loadout...\u001b[0m\r\n\u001b[1;92m[+] \u001b[0mFound a free CPU core, try binding to #0.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mScanning 'case'...\u001b[0m\r\n\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mTest case 'case/case_31_valid_png' is too big (2.12 MB, limit is 1.00 MB), partial reading\u001b[0m\r\n\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mTest case 'case/case_62_valid_png' is too big (1.20 MB, limit is 1.00 MB), partial reading\u001b[0m\r\n\u001b[1;92m[+] \u001b[0mLoaded a total of 100 seeds.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mCreating hard links for all input files...\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mValidating target binary...\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mNo auto-generated dictionary tokens to reuse.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000000,time:0,execs:0,orig:case_100_crc_error_png'...\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mSpinning up the fork server...\u001b[0m\r\n\u001b[1;92m[+] \u001b[0mAll right - fork server is up.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mTarget map size: 65536\u001b[0m\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 23182 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000001,time:0,execs:0,orig:case_10_zlib_error_png'...\u001b[0m\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 1759 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000002,time:0,execs:0,orig:case_11_valid_png'...\u001b[0m\r\n\r\nexit\r\n\r\n\r\n\u001b[1;90m len = 223268, map size = 987, exec speed = 151063 us, hash = 3c4265c898f340c7\r\n\u001b[0m\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000003,time:0,execs:0,orig:case_12_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1613 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000004,time:0,execs:0,orig:case_13_zlib_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 786 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000005,time:0,execs:0,orig:case_14_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10354 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000006,time:0,execs:0,orig:case_15_zlib_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 785 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000007,time:0,execs:0,orig:case_16_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10243 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000008,time:0,execs:0,orig:case_17_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10335 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000009,time:0,execs:0,orig:case_18_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1319 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000010,time:0,execs:0,orig:case_19_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10356 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000011,time:0,execs:0,orig:case_1_valid_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 38047, map size = 889, exec speed = 26912 us, hash = 3d4a8f21f437bf86\r\n\u001b[0m\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000012,time:0,execs:0,orig:case_20_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1327 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000013,time:0,execs:0,orig:case_21_zlib_error_png'...\u001b[0m\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 802 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000014,time:0,execs:0,orig:case_22_valid_png'...\u001b[0m\r\n\u001b[1;90m len = 139863, map size = 534, exec speed = 679 us, hash = cb63e0ac702eb436\r\n\u001b[0m\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000015,time:0,execs:0,orig:case_23_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1349 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000016,time:0,execs:0,orig:case_24_invalid_size_png'...\u001b[0m\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1351 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000017,time:0,execs:0,orig:case_25_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10341 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000018,time:0,execs:0,orig:case_26_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1341 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000019,time:0,execs:0,orig:case_27_zlib_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 791 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000020,time:0,execs:0,orig:case_28_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10307 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000021,time:0,execs:0,orig:case_29_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10267 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000022,time:0,execs:0,orig:case_2_valid_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 374356, map size = 531, exec speed = 782 us, hash = 18c980e731eba575\r\n\u001b[0m\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000023,time:0,execs:0,orig:case_30_zlib_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 798 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000024,time:0,execs:0,orig:case_31_valid_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 1048576, map size = 776, exec speed = 121010 us, hash = 3a42e2b54338ea28\r\n\u001b[0m\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000025,time:0,execs:0,orig:case_32_zlib_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 810 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000026,time:0,execs:0,orig:case_33_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1339 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000027,time:0,execs:0,orig:case_34_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10312 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000028,time:0,execs:0,orig:case_35_invalid_size_png'...\u001b[0m\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1335 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000029,time:0,execs:0,orig:case_36_zlib_error_png'...\u001b[0m\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 804 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000030,time:0,execs:0,orig:case_37_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10328 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000031,time:0,execs:0,orig:case_38_zlib_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 794 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000032,time:0,execs:0,orig:case_39_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1338 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000033,time:0,execs:0,orig:case_3_zlib_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 798 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000034,time:0,execs:0,orig:case_40_valid_png'...\u001b[0m\r\n\u001b[1;90m len = 7055, map size = 795, exec speed = 1075 us, hash = 5ff7786d2d6f0eaf\r\n\u001b[0m\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000035,time:0,execs:0,orig:case_41_zlib_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 804 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000036,time:0,execs:0,orig:case_42_valid_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 17522, map size = 531, exec speed = 584 us, hash = 18c980e731eba575\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000037,time:0,execs:0,orig:case_43_zlib_error_png'...\u001b[0m\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 793 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000038,time:0,execs:0,orig:case_44_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1356 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000039,time:0,execs:0,orig:case_45_zlib_error_png'...\u001b[0m\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 800 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000040,time:0,execs:0,orig:case_46_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1364 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000041,time:0,execs:0,orig:case_47_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10379 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000042,time:0,execs:0,orig:case_48_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10361 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000043,time:0,execs:0,orig:case_49_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10398 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000044,time:0,execs:0,orig:case_4_zlib_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 802 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000045,time:0,execs:0,orig:case_50_zlib_error_png'...\u001b[0m\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 799 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000046,time:0,execs:0,orig:case_51_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1322 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000047,time:0,execs:0,orig:case_52_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1335 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000048,time:0,execs:0,orig:case_53_zlib_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 800 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000049,time:0,execs:0,orig:case_54_invalid_size_png'...\u001b[0m\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1334 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000050,time:0,execs:0,orig:case_55_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10382 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000051,time:0,execs:0,orig:case_56_zlib_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 804 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000052,time:0,execs:0,orig:case_57_zlib_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 793 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000053,time:0,execs:0,orig:case_58_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1342 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000054,time:0,execs:0,orig:case_59_valid_png'...\u001b[0m\r\n\u001b[1;90m len = 382707, map size = 531, exec speed = 775 us, hash = 18c980e731eba575\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000055,time:0,execs:0,orig:case_5_valid_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 18523, map size = 890, exec speed = 13155 us, hash = 1d648eac62241924\r\n\u001b[0m\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000056,time:0,execs:0,orig:case_60_valid_png'...\u001b[0m\r\n\u001b[1;90m len = 13868, map size = 531, exec speed = 598 us, hash = 78e91e36b17b8856\r\n\u001b[0m\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000057,time:0,execs:0,orig:case_61_zlib_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 798 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000058,time:0,execs:0,orig:case_62_valid_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 1048576, map size = 775, exec speed = 121467 us, hash = 1a2825879c459294\r\n\u001b[0m\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000059,time:0,execs:0,orig:case_63_valid_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 70168, map size = 907, exec speed = 46574 us, hash = b0863e927e65d0b7\r\n\u001b[0m\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000060,time:0,execs:0,orig:case_64_valid_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 442042, map size = 531, exec speed = 789 us, hash = 18c980e731eba575\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000061,time:0,execs:0,orig:case_65_zlib_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 823 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000062,time:0,execs:0,orig:case_66_valid_png'...\u001b[0m\r\n\u001b[1;90m len = 193, map size = 1093, exec speed = 862 us, hash = 17a1ea291e671a6f\r\n\u001b[0m\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000063,time:0,execs:0,orig:case_67_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10339 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000064,time:0,execs:0,orig:case_68_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10282 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000065,time:0,execs:0,orig:case_69_zlib_error_png'...\u001b[0m\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 807 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000066,time:0,execs:0,orig:case_6_zlib_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 792 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000067,time:0,execs:0,orig:case_70_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1347 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000068,time:0,execs:0,orig:case_71_invalid_size_png'...\u001b[0m\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1347 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000069,time:0,execs:0,orig:case_72_valid_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 2056, map size = 1093, exec speed = 2226 us, hash = 14b424733e03838a\r\n\u001b[0m\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000070,time:0,execs:0,orig:case_73_valid_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 240177, map size = 909, exec speed = 159500 us, hash = dad5d2994c5a49d0\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000071,time:0,execs:0,orig:case_74_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10246 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000072,time:0,execs:0,orig:case_75_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10236 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000073,time:0,execs:0,orig:case_76_zlib_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 798 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000074,time:0,execs:0,orig:case_77_valid_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 355377, map size = 786, exec speed = 1307 us, hash = 415b9968c1ffd3d4\r\n\u001b[0m\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000075,time:0,execs:0,orig:case_78_valid_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 236538, map size = 911, exec speed = 157292 us, hash = fea8db6efa986c2c\r\n\u001b[0m\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000076,time:0,execs:0,orig:case_79_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1337 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000077,time:0,execs:0,orig:case_7_zlib_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 803 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000078,time:0,execs:0,orig:case_80_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1336 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000079,time:0,execs:0,orig:case_81_zlib_error_png'...\u001b[0m\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 796 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000080,time:0,execs:0,orig:case_82_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10344 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000081,time:0,execs:0,orig:case_83_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1343 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000082,time:0,execs:0,orig:case_84_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10284 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000083,time:0,execs:0,orig:case_85_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1337 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000084,time:0,execs:0,orig:case_86_valid_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 92733, map size = 531, exec speed = 631 us, hash = d119490928bfffee\r\n\u001b[0m\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000085,time:0,execs:0,orig:case_87_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10275 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000086,time:0,execs:0,orig:case_88_zlib_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 797 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000087,time:0,execs:0,orig:case_89_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1337 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000088,time:0,execs:0,orig:case_8_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1351 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000089,time:0,execs:0,orig:case_90_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1341 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000090,time:0,execs:0,orig:case_91_valid_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 24449, map size = 531, exec speed = 592 us, hash = 78e91e36b17b8856\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000091,time:0,execs:0,orig:case_92_valid_png'...\u001b[0m\r\n\u001b[1;90m len = 357617, map size = 784, exec speed = 1217 us, hash = fc3e41b717ba7be5\r\n\u001b[0m\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000092,time:0,execs:0,orig:case_93_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1353 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000093,time:0,execs:0,orig:case_94_zlib_error_png'...\u001b[0m\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 836 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000094,time:0,execs:0,orig:case_95_valid_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 366441, map size = 531, exec speed = 777 us, hash = d119490928bfffee\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000095,time:0,execs:0,orig:case_96_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1369 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000096,time:0,execs:0,orig:case_97_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1333 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000097,time:0,execs:0,orig:case_98_zlib_error_png'...\u001b[0m\r\n\u001b[1;90m len = 3172, map size = 856, exec speed = 796 us, hash = 51b1f8a5f4e7d2c5\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000098,time:0,execs:0,orig:case_99_crc_error_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 12420, map size = 1106, exec speed = 10241 us, hash = f503321530a3e9aa\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;94m[*] \u001b[0mAttempting dry run with 'id:000099,time:0,execs:0,orig:case_9_invalid_size_png'...\u001b[0m\r\n\r\n\u001b[1;90m len = 852, map size = 1151, exec speed = 1341 us, hash = 948e7f699c6c9b4c\r\n\u001b[0m\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mNo new instrumentation output, test case may be useless.\u001b[0m\r\n\u001b[1;92m[+] \u001b[0mAll test cases processed.\u001b[0m\r\n\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0m\u001b[1;91mSome test cases are huge (1.00 MB) - see /usr/local/share/doc/afl/fuzzing_in_depth.md#i-improve-the-speed\u001b[0m\r\n\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0m\u001b[1;91mSome test cases look useless. Consider using a smaller set.\u001b[0m\r\n\u001b[1;93m[!] \u001b[1;97mWARNING: \u001b[0mYou have lots of input files; try starting small.\u001b[0m\r\n\u001b[1;92m[+] \u001b[0mHere are some useful stats:\r\n\r\n\u001b[1;90m Test case count : \u001b[0m13 favored, 0 variable, 80 ignored, 100 total\r\n\u001b[1;90m Bitmap range : \u001b[0m531 to 1151 bits (average: 969.05 bits)\r\n\u001b[1;90m Exec timing : \u001b[0m584 to 159k us (average: 11.1k us)\r\n\u001b[0m\r\n\u001b[1;94m[*] \u001b[0m-t option specified. We'll use an exec timeout of 3000 ms.\u001b[0m\r\n\u001b[1;92m[+] \u001b[0mAll set and ready to roll!\u001b[0m\r\n\r\n\u001b[H\u001b[2J\u001b[?25l\u001b[H\r\n \u001b[1;93mAFL \u001b[1;96m++4.09a\u001b[1;94m {default} \u001b[1;92m(...aseGenerator/testdata/libpng/libpng/pngfix) \u001b[1;95m[fast]\r\n\u001b[1;90m┌─\u001b[0;36m process timing \u001b[1;90m────────────────────────────────────┬─\u001b[0;36m overall results \u001b[1;90m────┐\r\n│ run time : \u001b[0m0 days, 0 hrs, 0 min, 0 sec \u001b[1;90m│ cycles done : \u001b[0;35m0 \u001b[1;90m│\r\n│ last new find : \u001b[0mnone seen yet \u001b[1;90m│ corpus count : \u001b[0m100 \u001b[1;90m│\r\n│last saved crash : \u001b[0mnone seen yet \u001b[1;90m│saved crashes : \u001b[0m0 \u001b[1;90m│\r\n│ last saved hang : \u001b[0mnone seen yet \u001b[1;90m│ saved hangs : \u001b[0m0 \u001b[1;90m│\r\n├─\u001b[0;36m cycle progress \u001b[1;90m─────────────────────┬─\u001b[0;36m map coverage\u001b[1;90m┴──────────────────────┤\r\n│ now processing : \u001b[0m62.0 (62.0%) \u001b[1;90m│ map density : \u001b[0m1.67% / 2.23% \u001b[1;90m│\r\n│ runs timed out : \u001b[0m0 (0.00%) \u001b[1;90m│ count coverage : \u001b[0m1.51 bits/tuple \u001b[1;90m│\r\n├─\u001b[0;36m stage progress \u001b[1;90m─────────────────────┼─\u001b[0;36m findings in depth \u001b[1;90m─────────────────┤\r\n│ now trying : \u001b[0mtrim 16/16 \u001b[1;90m│ favored items : \u001b[0m13 (13.00%) \u001b[1;90m│\r\n│ stage execs : \u001b[0m0/12 (0.00%) \u001b[1;90m│ new edges on : \u001b[0m15 (15.00%) \u001b[1;90m│\r\n│ total execs : \u001b[0m701 \u001b[1;90m│ total crashes : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n│ exec speed : \u001b[0m701k/sec \u001b[1;90m│ total tmouts : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n├─\u001b[0;36m fuzzing strategy yields \u001b[1;90m────────────┴─────────────┬─\u001b[0;36m item geometry \u001b[1;90m───────┤\r\n│ bit flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ levels : \u001b[0m1 \u001b[1;90m│\r\n│ byte flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pending : \u001b[0m20 \u001b[1;90m│\r\n│ arithmetics : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pend fav : \u001b[0m10 \u001b[1;90m│\r\n│ known ints : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ own finds : \u001b[0m0 \u001b[1;90m│\r\n│ dictionary : \u001b[0mn/a \u001b[1;90m│ imported : \u001b[0m0 \u001b[1;90m│\r\n│havoc/splice : \u001b[0m0/0, 0/0 \u001b[1;90m│ stability : \u001b[0m100.00% \u001b[1;90m│\r\n│py/custom/rq : \u001b[0munused, unused, unused, unused \u001b[1;90m├───────────────────────┘\r\n│ trim/eff : \u001b[0mn/a, disabled \u001b[1;90m│ \u001b[1;90m[cpu000:\u001b[1;92m 3%\u001b[1;90m]\r\u001b[0m\r\n\u001b[1;90m└─\u001b[0;36m strategy:\u001b[1;95m explore \u001b[1;90m──────────\u001b[0;36m state:\u001b[1;95m started :-) \u001b[1;90m──┘\u001b[0m\r\n\u001b[H\r\n \u001b[1;93mAFL \u001b[1;96m++4.09a\u001b[1;94m {default} \u001b[1;92m(...aseGenerator/testdata/libpng/libpng/pngfix) \u001b[1;95m[fast]\r\n\u001b[1;90m┌─\u001b[0;36m process timing \u001b[1;90m────────────────────────────────────┬─\u001b[0;36m overall results \u001b[1;90m────┐\r\n│ run time : \u001b[0m0 days, 0 hrs, 0 min, 2 sec \u001b[1;90m│ cycles done : \u001b[0;35m0 \u001b[1;90m│\r\n│ last new find : \u001b[0m0 days, 0 hrs, 0 min, 0 sec \u001b[1;90m│ corpus count : \u001b[0m137 \u001b[1;90m│\r\n│last saved crash : \u001b[0mnone seen yet \u001b[1;90m│saved crashes : \u001b[0m0 \u001b[1;90m│\r\n│ last saved hang : \u001b[0mnone seen yet \u001b[1;90m│ saved hangs : \u001b[0m0 \u001b[1;90m│\r\n├─\u001b[0;36m cycle progress \u001b[1;90m─────────────────────┬─\u001b[0;36m map coverage\u001b[1;90m┴──────────────────────┤\r\n│ now processing : \u001b[0m36.0 (26.3%) \u001b[1;90m│ map density : \u001b[0m0.81% / 2.31% \u001b[1;90m│\r\n│ runs timed out : \u001b[0m0 (0.00%) \u001b[1;90m│ count coverage : \u001b[0m1.57 bits/tuple \u001b[1;90m│\r\n├─\u001b[0;36m stage progress \u001b[1;90m─────────────────────┼─\u001b[0;36m findings in depth \u001b[1;90m─────────────────┤\r\n│ now trying : \u001b[0mhavoc \u001b[1;90m│ favored items : \u001b[0m13 (9.49%) \u001b[1;90m│\r\n│ stage execs : \u001b[0m3583/3584 (99.97%) \u001b[1;90m│ new edges on : \u001b[0m39 (28.47%) \u001b[1;90m│\r\n│ total execs : \u001b[0m4660 \u001b[1;90m│ total crashes : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n│ exec speed : \u001b[0m1758/sec \u001b[1;90m│ total tmouts : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n├─\u001b[0;36m fuzzing strategy yields \u001b[1;90m────────────┴─────────────┬─\u001b[0;36m item geometry \u001b[1;90m───────┤\r\n│ bit flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ levels : \u001b[0m2 \u001b[1;90m│\r\n│ byte flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pending : \u001b[0m56 \u001b[1;90m│\r\n│ arithmetics : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pend fav : \u001b[0m9 \u001b[1;90m│\r\n│ known ints : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ own finds : \u001b[0m37 \u001b[1;90m│\r\n│ dictionary : \u001b[0mn/a \u001b[1;90m│ imported : \u001b[0m0 \u001b[1;90m│\r\n│havoc/splice : \u001b[0m0/0, 0/0 \u001b[1;90m│ stability : \u001b[0m100.00% \u001b[1;90m│\r\n│py/custom/rq : \u001b[0munused, unused, unused, unused \u001b[1;90m├───────────────────────┘\r\n│ trim/eff : \u001b[0m98.66%/117, disabled \u001b[1;90m│ \u001b[1;90m[cpu000:\u001b[1;92m 5%\u001b[1;90m]\r\u001b[0m\r\n\u001b[1;90m└─\u001b[0;36m strategy:\u001b[1;95m explore \u001b[1;90m──────────\u001b[0;36m state:\u001b[1;95m started :-) \u001b[1;90m──┘\u001b[0m\r\n\u001b[H\r\n \u001b[1;93mAFL \u001b[1;96m++4.09a\u001b[1;94m {default} \u001b[1;92m(...aseGenerator/testdata/libpng/libpng/pngfix) \u001b[1;95m[fast]\r\n\u001b[1;90m┌─\u001b[0;36m process timing \u001b[1;90m────────────────────────────────────┬─\u001b[0;36m overall results \u001b[1;90m────┐\r\n│ run time : \u001b[0m0 days, 0 hrs, 0 min, 2 sec \u001b[1;90m│ cycles done : \u001b[0;35m0 \u001b[1;90m│\r\n│ last new find : \u001b[0m0 days, 0 hrs, 0 min, 0 sec \u001b[1;90m│ corpus count : \u001b[0m137 \u001b[1;90m│\r\n│last saved crash : \u001b[0mnone seen yet \u001b[1;90m│saved crashes : \u001b[0m0 \u001b[1;90m│\r\n│ last saved hang : \u001b[0mnone seen yet \u001b[1;90m│ saved hangs : \u001b[0m0 \u001b[1;90m│\r\n├─\u001b[0;36m cycle progress \u001b[1;90m─────────────────────┬─\u001b[0;36m map coverage\u001b[1;90m┴──────────────────────┤\r\n│ now processing : \u001b[0m36.0 (26.3%) \u001b[1;90m│ map density : \u001b[0m0.81% / 2.31% \u001b[1;90m│\r\n│ runs timed out : \u001b[0m0 (0.00%) \u001b[1;90m│ count coverage : \u001b[0m1.57 bits/tuple \u001b[1;90m│\r\n├─\u001b[0;36m stage progress \u001b[1;90m─────────────────────┼─\u001b[0;36m findings in depth \u001b[1;90m─────────────────┤\r\n│ now trying : \u001b[0msplice 11 \u001b[1;90m│ favored items : \u001b[0m13 (9.49%) \u001b[1;90m│\r\n│ stage execs : \u001b[0m13/14 (92.86%) \u001b[1;90m│ new edges on : \u001b[0m39 (28.47%) \u001b[1;90m│\r\n│ total execs : \u001b[0m4814 \u001b[1;90m│ total crashes : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n│ exec speed : \u001b[0m1696/sec \u001b[1;90m│ total tmouts : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n├─\u001b[0;36m fuzzing strategy yields \u001b[1;90m────────────┴─────────────┬─\u001b[0;36m item geometry \u001b[1;90m───────┤\r\n│ bit flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ levels : \u001b[0m2 \u001b[1;90m│\r\n│ byte flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pending : \u001b[0m56 \u001b[1;90m│\r\n│ arithmetics : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pend fav : \u001b[0m9 \u001b[1;90m│\r\n│ known ints : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ own finds : \u001b[0m37 \u001b[1;90m│\r\n│ dictionary : \u001b[0mn/a \u001b[1;90m│ imported : \u001b[0m0 \u001b[1;90m│\r\n│havoc/splice : \u001b[0m37/3584, 0/140 \u001b[1;90m│ stability : \u001b[0m100.00% \u001b[1;90m│\r\n│py/custom/rq : \u001b[0munused, unused, unused, unused \u001b[1;90m├───────────────────────┘\r\n│ trim/eff : \u001b[0m98.66%/117, disabled \u001b[1;90m│ \u001b[1;90m[cpu000:\u001b[1;92m 3%\u001b[1;90m]\r\u001b[0m\r\n\u001b[1;90m└─\u001b[0;36m strategy:\u001b[1;95m explore \u001b[1;90m──────────\u001b[0;36m state:\u001b[1;95m started :-) \u001b[1;90m──┘\u001b[0m\r\n\u001b[H\r\n \u001b[1;93mAFL \u001b[1;96m++4.09a\u001b[1;94m {default} \u001b[1;92m(...aseGenerator/testdata/libpng/libpng/pngfix) \u001b[1;95m[fast]\r\n\u001b[1;90m┌─\u001b[0;36m process timing \u001b[1;90m────────────────────────────────────┬─\u001b[0;36m overall results \u001b[1;90m────┐\r\n│ run time : \u001b[0m0 days, 0 hrs, 0 min, 2 sec \u001b[1;90m│ cycles done : \u001b[0;35m0 \u001b[1;90m│\r\n│ last new find : \u001b[0m0 days, 0 hrs, 0 min, 0 sec \u001b[1;90m│ corpus count : \u001b[0m139 \u001b[1;90m│\r\n│last saved crash : \u001b[0mnone seen yet \u001b[1;90m│saved crashes : \u001b[0m0 \u001b[1;90m│\r\n│ last saved hang : \u001b[0mnone seen yet \u001b[1;90m│ saved hangs : \u001b[0m0 \u001b[1;90m│\r\n├─\u001b[0;36m cycle progress \u001b[1;90m─────────────────────┬─\u001b[0;36m map coverage\u001b[1;90m┴──────────────────────┤\r\n│ now processing : \u001b[0m107.0 (77.0%) \u001b[1;90m│ map density : \u001b[0m0.79% / 2.31% \u001b[1;90m│\r\n│ runs timed out : \u001b[0m0 (0.00%) \u001b[1;90m│ count coverage : \u001b[0m1.58 bits/tuple \u001b[1;90m│\r\n├─\u001b[0;36m stage progress \u001b[1;90m─────────────────────┼─\u001b[0;36m findings in depth \u001b[1;90m─────────────────┤\r\n│ now trying : \u001b[0mhavoc \u001b[1;90m│ favored items : \u001b[0m35 (25.18%) \u001b[1;90m│\r\n│ stage execs : \u001b[0m99/224 (44.20%) \u001b[1;90m│ new edges on : \u001b[0m39 (28.06%) \u001b[1;90m│\r\n│ total execs : \u001b[0m5148 \u001b[1;90m│ total crashes : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n│ exec speed : \u001b[0m1685/sec \u001b[1;90m│ total tmouts : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n├─\u001b[0;36m fuzzing strategy yields \u001b[1;90m────────────┴─────────────┬─\u001b[0;36m item geometry \u001b[1;90m───────┤\r\n│ bit flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ levels : \u001b[0m3 \u001b[1;90m│\r\n│ byte flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pending : \u001b[0m55 \u001b[1;90m│\r\n│ arithmetics : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pend fav : \u001b[0m28 \u001b[1;90m│\r\n│ known ints : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ own finds : \u001b[0m39 \u001b[1;90m│\r\n│ dictionary : \u001b[0mn/a \u001b[1;90m│ imported : \u001b[0m0 \u001b[1;90m│\r\n│havoc/splice : \u001b[0m38/3734, 0/210 \u001b[1;90m│ stability : \u001b[0m100.00% \u001b[1;90m│\r\n│py/custom/rq : \u001b[0munused, unused, unused, unused \u001b[1;90m├───────────────────────┘\r\n│ trim/eff : \u001b[0m98.31%/131, disabled \u001b[1;90m│ \u001b[1;90m[cpu000:\u001b[1;92m 2%\u001b[1;90m]\r\u001b[0m\r\n\u001b[1;90m└─\u001b[0;36m strategy:\u001b[1;95m explore \u001b[1;90m──────────\u001b[0;36m state:\u001b[1;95m started :-) \u001b[1;90m──┘\u001b[0m\r\n\u001b[H\r\n \u001b[1;93mAFL \u001b[1;96m++4.09a\u001b[1;94m {default} \u001b[1;92m(...aseGenerator/testdata/libpng/libpng/pngfix) \u001b[1;95m[fast]\r\n\u001b[1;90m┌─\u001b[0;36m process timing \u001b[1;90m────────────────────────────────────┬─\u001b[0;36m overall results \u001b[1;90m────┐\r\n│ run time : \u001b[0m0 days, 0 hrs, 0 min, 2 sec \u001b[1;90m│ cycles done : \u001b[0;35m0 \u001b[1;90m│\r\n│ last new find : \u001b[0m0 days, 0 hrs, 0 min, 0 sec \u001b[1;90m│ corpus count : \u001b[0m139 \u001b[1;90m│\r\n│last saved crash : \u001b[0mnone seen yet \u001b[1;90m│saved crashes : \u001b[0m0 \u001b[1;90m│\r\n│ last saved hang : \u001b[0mnone seen yet \u001b[1;90m│ saved hangs : \u001b[0m0 \u001b[1;90m│\r\n├─\u001b[0;36m cycle progress \u001b[1;90m─────────────────────┬─\u001b[0;36m map coverage\u001b[1;90m┴──────────────────────┤\r\n│ now processing : \u001b[0m107.0 (77.0%) \u001b[1;90m│ map density : \u001b[0m0.79% / 2.31% \u001b[1;90m│\r\n│ runs timed out : \u001b[0m0 (0.00%) \u001b[1;90m│ count coverage : \u001b[0m1.58 bits/tuple \u001b[1;90m│\r\n├─\u001b[0;36m stage progress \u001b[1;90m─────────────────────┼─\u001b[0;36m findings in depth \u001b[1;90m─────────────────┤\r\n│ now trying : \u001b[0msplice 12 \u001b[1;90m│ favored items : \u001b[0m35 (25.18%) \u001b[1;90m│\r\n│ stage execs : \u001b[0m13/14 (92.86%) \u001b[1;90m│ new edges on : \u001b[0m39 (28.06%) \u001b[1;90m│\r\n│ total execs : \u001b[0m5440 \u001b[1;90m│ total crashes : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n│ exec speed : \u001b[0m1668/sec \u001b[1;90m│ total tmouts : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n├─\u001b[0;36m fuzzing strategy yields \u001b[1;90m────────────┴─────────────┬─\u001b[0;36m item geometry \u001b[1;90m───────┤\r\n│ bit flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ levels : \u001b[0m3 \u001b[1;90m│\r\n│ byte flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pending : \u001b[0m55 \u001b[1;90m│\r\n│ arithmetics : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pend fav : \u001b[0m28 \u001b[1;90m│\r\n│ known ints : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ own finds : \u001b[0m39 \u001b[1;90m│\r\n│ dictionary : \u001b[0mn/a \u001b[1;90m│ imported : \u001b[0m0 \u001b[1;90m│\r\n│havoc/splice : \u001b[0m39/3958, 0/364 \u001b[1;90m│ stability : \u001b[0m100.00% \u001b[1;90m│\r\n│py/custom/rq : \u001b[0munused, unused, unused, unused \u001b[1;90m├───────────────────────┘\r\n│ trim/eff : \u001b[0m98.31%/131, disabled \u001b[1;90m│ \u001b[1;90m[cpu000:\u001b[1;92m 3%\u001b[1;90m]\r\u001b[0m\r\n\u001b[1;90m└─\u001b[0;36m strategy:\u001b[1;95m explore \u001b[1;90m──────────\u001b[0;36m state:\u001b[1;95m started :-) \u001b[1;90m──┘\u001b[0m\r\n\u001b[H\r\n \u001b[1;93mAFL \u001b[1;96m++4.09a\u001b[1;94m {default} \u001b[1;92m(...aseGenerator/testdata/libpng/libpng/pngfix) \u001b[1;95m[fast]\r\n\u001b[1;90m┌─\u001b[0;36m process timing \u001b[1;90m────────────────────────────────────┬─\u001b[0;36m overall results \u001b[1;90m────┐\r\n│ run time : \u001b[0m0 days, 0 hrs, 0 min, 3 sec \u001b[1;90m│ cycles done : \u001b[0;35m0 \u001b[1;90m│\r\n│ last new find : \u001b[0m0 days, 0 hrs, 0 min, 0 sec \u001b[1;90m│ corpus count : \u001b[0m140 \u001b[1;90m│\r\n│last saved crash : \u001b[0mnone seen yet \u001b[1;90m│saved crashes : \u001b[0m0 \u001b[1;90m│\r\n│ last saved hang : \u001b[0mnone seen yet \u001b[1;90m│ saved hangs : \u001b[0m0 \u001b[1;90m│\r\n├─\u001b[0;36m cycle progress \u001b[1;90m─────────────────────┬─\u001b[0;36m map coverage\u001b[1;90m┴──────────────────────┤\r\n│ now processing : \u001b[0m34.0 (24.3%) \u001b[1;90m│ map density : \u001b[0m1.21% / 2.31% \u001b[1;90m│\r\n│ runs timed out : \u001b[0m0 (0.00%) \u001b[1;90m│ count coverage : \u001b[0m1.59 bits/tuple \u001b[1;90m│\r\n├─\u001b[0;36m stage progress \u001b[1;90m─────────────────────┼─\u001b[0;36m findings in depth \u001b[1;90m─────────────────┤\r\n│ now trying : \u001b[0mtrim 16/16 \u001b[1;90m│ favored items : \u001b[0m34 (24.29%) \u001b[1;90m│\r\n│ stage execs : \u001b[0m9/118 (7.63%) \u001b[1;90m│ new edges on : \u001b[0m39 (27.86%) \u001b[1;90m│\r\n│ total execs : \u001b[0m5763 \u001b[1;90m│ total crashes : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n│ exec speed : \u001b[0m1655/sec \u001b[1;90m│ total tmouts : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n├─\u001b[0;36m fuzzing strategy yields \u001b[1;90m────────────┴─────────────┬─\u001b[0;36m item geometry \u001b[1;90m───────┤\r\n│ bit flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ levels : \u001b[0m3 \u001b[1;90m│\r\n│ byte flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pending : \u001b[0m53 \u001b[1;90m│\r\n│ arithmetics : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pend fav : \u001b[0m25 \u001b[1;90m│\r\n│ known ints : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ own finds : \u001b[0m40 \u001b[1;90m│\r\n│ dictionary : \u001b[0mn/a \u001b[1;90m│ imported : \u001b[0m0 \u001b[1;90m│\r\n│havoc/splice : \u001b[0m39/4070, 1/434 \u001b[1;90m│ stability : \u001b[0m100.00% \u001b[1;90m│\r\n│py/custom/rq : \u001b[0munused, unused, unused, unused \u001b[1;90m├───────────────────────┘\r\n│ trim/eff : \u001b[0m98.66%/279, disabled \u001b[1;90m│ \u001b[1;90m[cpu000:\u001b[1;92m 2%\u001b[1;90m]\r\u001b[0m\r\n\u001b[1;90m└─\u001b[0;36m strategy:\u001b[1;95m explore \u001b[1;90m──────────\u001b[0;36m state:\u001b[1;95m started :-) \u001b[1;90m──┘\u001b[0m\r\n\u001b[H\r\n \u001b[1;93mAFL \u001b[1;96m++4.09a\u001b[1;94m {default} \u001b[1;92m(...aseGenerator/testdata/libpng/libpng/pngfix) \u001b[1;95m[fast]\r\n\u001b[1;90m┌─\u001b[0;36m process timing \u001b[1;90m────────────────────────────────────┬─\u001b[0;36m overall results \u001b[1;90m────┐\r\n│ run time : \u001b[0m0 days, 0 hrs, 0 min, 3 sec \u001b[1;90m│ cycles done : \u001b[0;35m0 \u001b[1;90m│\r\n│ last new find : \u001b[0m0 days, 0 hrs, 0 min, 0 sec \u001b[1;90m│ corpus count : \u001b[0m140 \u001b[1;90m│\r\n│last saved crash : \u001b[0mnone seen yet \u001b[1;90m│saved crashes : \u001b[0m0 \u001b[1;90m│\r\n│ last saved hang : \u001b[0mnone seen yet \u001b[1;90m│ saved hangs : \u001b[0m0 \u001b[1;90m│\r\n├─\u001b[0;36m cycle progress \u001b[1;90m─────────────────────┬─\u001b[0;36m map coverage\u001b[1;90m┴──────────────────────┤\r\n│ now processing : \u001b[0m34.0 (24.3%) \u001b[1;90m│ map density : \u001b[0m1.21% / 2.31% \u001b[1;90m│\r\n│ runs timed out : \u001b[0m0 (0.00%) \u001b[1;90m│ count coverage : \u001b[0m1.59 bits/tuple \u001b[1;90m│\r\n├─\u001b[0;36m stage progress \u001b[1;90m─────────────────────┼─\u001b[0;36m findings in depth \u001b[1;90m─────────────────┤\r\n│ now trying : \u001b[0mtrim 8/8 \u001b[1;90m│ favored items : \u001b[0m34 (24.29%) \u001b[1;90m│\r\n│ stage execs : \u001b[0m156/236 (66.10%) \u001b[1;90m│ new edges on : \u001b[0m39 (27.86%) \u001b[1;90m│\r\n│ total execs : \u001b[0m6027 \u001b[1;90m│ total crashes : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n│ exec speed : \u001b[0m1630/sec \u001b[1;90m│ total tmouts : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n├─\u001b[0;36m fuzzing strategy yields \u001b[1;90m────────────┴─────────────┬─\u001b[0;36m item geometry \u001b[1;90m───────┤\r\n│ bit flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ levels : \u001b[0m3 \u001b[1;90m│\r\n│ byte flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pending : \u001b[0m53 \u001b[1;90m│\r\n│ arithmetics : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pend fav : \u001b[0m25 \u001b[1;90m│\r\n│ known ints : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ own finds : \u001b[0m40 \u001b[1;90m│\r\n│ dictionary : \u001b[0mn/a \u001b[1;90m│ imported : \u001b[0m0 \u001b[1;90m│\r\n│havoc/splice : \u001b[0m39/4070, 1/434 \u001b[1;90m│ stability : \u001b[0m100.00% \u001b[1;90m│\r\n│py/custom/rq : \u001b[0munused, unused, unused, unused \u001b[1;90m├───────────────────────┘\r\n│ trim/eff : \u001b[0m98.66%/543, disabled \u001b[1;90m│ \u001b[1;90m[cpu000:\u001b[1;92m 3%\u001b[1;90m]\r\u001b[0m\r\n\u001b[1;90m└─\u001b[0;36m strategy:\u001b[1;95m explore \u001b[1;90m──────────\u001b[0;36m state:\u001b[1;95m started :-) \u001b[1;90m──┘\u001b[0m\r\n\u001b[H\r\n \u001b[1;93mAFL \u001b[1;96m++4.09a\u001b[1;94m {default} \u001b[1;92m(...aseGenerator/testdata/libpng/libpng/pngfix) \u001b[1;95m[fast]\r\n\u001b[1;90m┌─\u001b[0;36m process timing \u001b[1;90m────────────────────────────────────┬─\u001b[0;36m overall results \u001b[1;90m────┐\r\n│ run time : \u001b[0m0 days, 0 hrs, 0 min, 3 sec \u001b[1;90m│ cycles done : \u001b[0;35m0 \u001b[1;90m│\r\n│ last new find : \u001b[0m0 days, 0 hrs, 0 min, 0 sec \u001b[1;90m│ corpus count : \u001b[0m140 \u001b[1;90m│\r\n│last saved crash : \u001b[0mnone seen yet \u001b[1;90m│saved crashes : \u001b[0m0 \u001b[1;90m│\r\n│ last saved hang : \u001b[0mnone seen yet \u001b[1;90m│ saved hangs : \u001b[0m0 \u001b[1;90m│\r\n├─\u001b[0;36m cycle progress \u001b[1;90m─────────────────────┬─\u001b[0;36m map coverage\u001b[1;90m┴──────────────────────┤\r\n│ now processing : \u001b[0m34.0 (24.3%) \u001b[1;90m│ map density : \u001b[0m1.21% / 2.31% \u001b[1;90m│\r\n│ runs timed out : \u001b[0m0 (0.00%) \u001b[1;90m│ count coverage : \u001b[0m1.59 bits/tuple \u001b[1;90m│\r\n├─\u001b[0;36m stage progress \u001b[1;90m─────────────────────┼─\u001b[0;36m findings in depth \u001b[1;90m─────────────────┤\r\n│ now trying : \u001b[0mtrim 4/4 \u001b[1;90m│ favored items : \u001b[0m34 (24.29%) \u001b[1;90m│\r\n│ stage execs : \u001b[0m197/470 (41.91%) \u001b[1;90m│ new edges on : \u001b[0m39 (27.86%) \u001b[1;90m│\r\n│ total execs : \u001b[0m6303 \u001b[1;90m│ total crashes : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n│ exec speed : \u001b[0m1605/sec \u001b[1;90m│ total tmouts : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n├─\u001b[0;36m fuzzing strategy yields \u001b[1;90m────────────┴─────────────┬─\u001b[0;36m item geometry \u001b[1;90m───────┤\r\n│ bit flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ levels : \u001b[0m3 \u001b[1;90m│\r\n│ byte flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pending : \u001b[0m53 \u001b[1;90m│\r\n│ arithmetics : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pend fav : \u001b[0m25 \u001b[1;90m│\r\n│ known ints : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ own finds : \u001b[0m40 \u001b[1;90m│\r\n│ dictionary : \u001b[0mn/a \u001b[1;90m│ imported : \u001b[0m0 \u001b[1;90m│\r\n│havoc/splice : \u001b[0m39/4070, 1/434 \u001b[1;90m│ stability : \u001b[0m100.00% \u001b[1;90m│\r\n│py/custom/rq : \u001b[0munused, unused, unused, unused \u001b[1;90m├───────────────────────┘\r\n│ trim/eff : \u001b[0m98.66%/819, disabled \u001b[1;90m│ \u001b[1;90m[cpu000:\u001b[1;92m 5%\u001b[1;90m]\r\u001b[0m\r\n\u001b[1;90m└─\u001b[0;36m strategy:\u001b[1;95m explore \u001b[1;90m──────────\u001b[0;36m state:\u001b[1;95m started :-) \u001b[1;90m──┘\u001b[0m\r\n\u001b[H\r\n \u001b[1;93mAFL \u001b[1;96m++4.09a\u001b[1;94m {default} \u001b[1;92m(...aseGenerator/testdata/libpng/libpng/pngfix) \u001b[1;95m[fast]\r\n\u001b[1;90m┌─\u001b[0;36m process timing \u001b[1;90m────────────────────────────────────┬─\u001b[0;36m overall results \u001b[1;90m────┐\r\n│ run time : \u001b[0m0 days, 0 hrs, 0 min, 3 sec \u001b[1;90m│ cycles done : \u001b[0;35m0 \u001b[1;90m│\r\n│ last new find : \u001b[0m0 days, 0 hrs, 0 min, 0 sec \u001b[1;90m│ corpus count : \u001b[0m140 \u001b[1;90m│\r\n│last saved crash : \u001b[0mnone seen yet \u001b[1;90m│saved crashes : \u001b[0m0 \u001b[1;90m│\r\n│ last saved hang : \u001b[0mnone seen yet \u001b[1;90m│ saved hangs : \u001b[0m0 \u001b[1;90m│\r\n├─\u001b[0;36m cycle progress \u001b[1;90m─────────────────────┬─\u001b[0;36m map coverage\u001b[1;90m┴──────────────────────┤\r\n│ now processing : \u001b[0m34.0 (24.3%) \u001b[1;90m│ map density : \u001b[0m1.21% / 2.31% \u001b[1;90m│\r\n│ runs timed out : \u001b[0m0 (0.00%) \u001b[1;90m│ count coverage : \u001b[0m1.59 bits/tuple \u001b[1;90m│\r\n├─\u001b[0;36m stage progress \u001b[1;90m─────────────────────┼─\u001b[0;36m findings in depth \u001b[1;90m─────────────────┤\r\n│ now trying : \u001b[0mtrim 4/4 \u001b[1;90m│ favored items : \u001b[0m34 (24.29%) \u001b[1;90m│\r\n│ stage execs : \u001b[0m453/470 (96.38%) \u001b[1;90m│ new edges on : \u001b[0m39 (27.86%) \u001b[1;90m│\r\n│ total execs : \u001b[0m6559 \u001b[1;90m│ total crashes : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n│ exec speed : \u001b[0m1582/sec \u001b[1;90m│ total tmouts : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n├─\u001b[0;36m fuzzing strategy yields \u001b[1;90m────────────┴─────────────┬─\u001b[0;36m item geometry \u001b[1;90m───────┤\r\n│ bit flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ levels : \u001b[0m3 \u001b[1;90m│\r\n│ byte flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pending : \u001b[0m53 \u001b[1;90m│\r\n│ arithmetics : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pend fav : \u001b[0m25 \u001b[1;90m│\r\n│ known ints : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ own finds : \u001b[0m40 \u001b[1;90m│\r\n│ dictionary : \u001b[0mn/a \u001b[1;90m│ imported : \u001b[0m0 \u001b[1;90m│\r\n│havoc/splice : \u001b[0m39/4070, 1/434 \u001b[1;90m│ stability : \u001b[0m100.00% \u001b[1;90m│\r\n│py/custom/rq : \u001b[0munused, unused, unused, unused \u001b[1;90m├───────────────────────┘\r\n│ trim/eff : \u001b[0m98.66%/1075, disabled \u001b[1;90m│ \u001b[1;90m[cpu000:\u001b[1;92m 1%\u001b[1;90m]\r\u001b[0m\r\n\u001b[1;90m└─\u001b[0;36m strategy:\u001b[1;95m explore \u001b[1;90m──────────\u001b[0;36m state:\u001b[1;95m started :-) \u001b[1;90m──┘\u001b[0m\r\n\u001b[H\r\n \u001b[1;93mAFL \u001b[1;96m++4.09a\u001b[1;94m {default} \u001b[1;92m(...aseGenerator/testdata/libpng/libpng/pngfix) \u001b[1;95m[fast]\r\n\u001b[1;90m┌─\u001b[0;36m process timing \u001b[1;90m────────────────────────────────────┬─\u001b[0;36m overall results \u001b[1;90m────┐\r\n│ run time : \u001b[0m0 days, 0 hrs, 0 min, 3 sec \u001b[1;90m│ cycles done : \u001b[0;35m0 \u001b[1;90m│\r\n│ last new find : \u001b[0m0 days, 0 hrs, 0 min, 0 sec \u001b[1;90m│ corpus count : \u001b[0m141 \u001b[1;90m│\r\n│last saved crash : \u001b[0mnone seen yet \u001b[1;90m│saved crashes : \u001b[0m0 \u001b[1;90m│\r\n│ last saved hang : \u001b[0mnone seen yet \u001b[1;90m│ saved hangs : \u001b[0m0 \u001b[1;90m│\r\n├─\u001b[0;36m cycle progress \u001b[1;90m─────────────────────┬─\u001b[0;36m map coverage\u001b[1;90m┴──────────────────────┤\r\n│ now processing : \u001b[0m34.0 (24.1%) \u001b[1;90m│ map density : \u001b[0m1.21% / 2.32% \u001b[1;90m│\r\n│ runs timed out : \u001b[0m0 (0.00%) \u001b[1;90m│ count coverage : \u001b[0m1.59 bits/tuple \u001b[1;90m│\r\n├─\u001b[0;36m stage progress \u001b[1;90m─────────────────────┼─\u001b[0;36m findings in depth \u001b[1;90m─────────────────┤\r\n│ now trying : \u001b[0mhavoc \u001b[1;90m│ favored items : \u001b[0m34 (24.11%) \u001b[1;90m│\r\n│ stage execs : \u001b[0m217/300 (72.33%) \u001b[1;90m│ new edges on : \u001b[0m40 (28.37%) \u001b[1;90m│\r\n│ total execs : \u001b[0m6799 \u001b[1;90m│ total crashes : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n│ exec speed : \u001b[0m1554/sec \u001b[1;90m│ total tmouts : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n├─\u001b[0;36m fuzzing strategy yields \u001b[1;90m────────────┴─────────────┬─\u001b[0;36m item geometry \u001b[1;90m───────┤\r\n│ bit flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ levels : \u001b[0m3 \u001b[1;90m│\r\n│ byte flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pending : \u001b[0m54 \u001b[1;90m│\r\n│ arithmetics : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pend fav : \u001b[0m25 \u001b[1;90m│\r\n│ known ints : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ own finds : \u001b[0m41 \u001b[1;90m│\r\n│ dictionary : \u001b[0mn/a \u001b[1;90m│ imported : \u001b[0m0 \u001b[1;90m│\r\n│havoc/splice : \u001b[0m39/4070, 1/434 \u001b[1;90m│ stability : \u001b[0m100.00% \u001b[1;90m│\r\n│py/custom/rq : \u001b[0munused, unused, unused, unused \u001b[1;90m├───────────────────────┘\r\n│ trim/eff : \u001b[0m91.14%/1090, disabled \u001b[1;90m│ \u001b[1;90m[cpu000:\u001b[1;92m 5%\u001b[1;90m]\r\u001b[0m\r\n\u001b[1;90m└─\u001b[0;36m strategy:\u001b[1;95m explore \u001b[1;90m──────────\u001b[0;36m state:\u001b[1;95m started :-) \u001b[1;90m──┘\u001b[0m\r\n\u001b[H\r\n \u001b[1;93mAFL \u001b[1;96m++4.09a\u001b[1;94m {default} \u001b[1;92m(...aseGenerator/testdata/libpng/libpng/pngfix) \u001b[1;95m[fast]\r\n\u001b[1;90m┌─\u001b[0;36m process timing \u001b[1;90m────────────────────────────────────┬─\u001b[0;36m overall results \u001b[1;90m────┐\r\n│ run time : \u001b[0m0 days, 0 hrs, 0 min, 4 sec \u001b[1;90m│ cycles done : \u001b[0;35m0 \u001b[1;90m│\r\n│ last new find : \u001b[0m0 days, 0 hrs, 0 min, 0 sec \u001b[1;90m│ corpus count : \u001b[0m141 \u001b[1;90m│\r\n│last saved crash : \u001b[0mnone seen yet \u001b[1;90m│saved crashes : \u001b[0m0 \u001b[1;90m│\r\n│ last saved hang : \u001b[0mnone seen yet \u001b[1;90m│ saved hangs : \u001b[0m0 \u001b[1;90m│\r\n├─\u001b[0;36m cycle progress \u001b[1;90m─────────────────────┬─\u001b[0;36m map coverage\u001b[1;90m┴──────────────────────┤\r\n│ now processing : \u001b[0m34.0 (24.1%) \u001b[1;90m│ map density : \u001b[0m1.21% / 2.32% \u001b[1;90m│\r\n│ runs timed out : \u001b[0m0 (0.00%) \u001b[1;90m│ count coverage : \u001b[0m1.59 bits/tuple \u001b[1;90m│\r\n├─\u001b[0;36m stage progress \u001b[1;90m─────────────────────┼─\u001b[0;36m findings in depth \u001b[1;90m─────────────────┤\r\n│ now trying : \u001b[0msplice 2 \u001b[1;90m│ favored items : \u001b[0m34 (24.11%) \u001b[1;90m│\r\n│ stage execs : \u001b[0m17/18 (94.44%) \u001b[1;90m│ new edges on : \u001b[0m40 (28.37%) \u001b[1;90m│\r\n│ total execs : \u001b[0m6917 \u001b[1;90m│ total crashes : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n│ exec speed : \u001b[0m199.3/sec \u001b[1;90m│ total tmouts : \u001b[0m0 (0 saved) \u001b[1;90m│\r\n├─\u001b[0;36m fuzzing strategy yields \u001b[1;90m────────────┴─────────────┬─\u001b[0;36m item geometry \u001b[1;90m───────┤\r\n│ bit flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ levels : \u001b[0m3 \u001b[1;90m│\r\n│ byte flips : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pending : \u001b[0m54 \u001b[1;90m│\r\n│ arithmetics : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ pend fav : \u001b[0m25 \u001b[1;90m│\r\n│ known ints : \u001b[0mdisabled (default, enable with -D) \u001b[1;90m│ own finds : \u001b[0m41 \u001b[1;90m│\r\n│ dictionary : \u001b[0mn/a \u001b[1;90m│ imported : \u001b[0m0 \u001b[1;90m│\r\n│havoc/splice : \u001b[0m40/4370, 1/452 \u001b[1;90m│ stability : \u001b[0m100.00% \u001b[1;90m│\r\n│py/custom/rq : \u001b[0munused, unused, unused, unused \u001b[1;90m├───────────────────────┘\r\n│ trim/eff : \u001b[0m91.14%/1090, disabled \u001b[1;90m│ \u001b[1;90m[cpu000:\u001b[1;92m 3%\u001b[1;90m]\r\u001b[0m\r\n\u001b[1;90m└─\u001b[0;36m strategy:\u001b[1;95m explore \u001b[1;90m──────────\u001b[0;36m state:\u001b[1;95m started :-) \u001b[1;90m──┘\u001b[0m\r\n"); } - @Test - public void test03(){ - System.out.println(CryptogramUtil.doEncrypt("hnidc0628cn!@#lld")); - } +// @Test +// public void test03(){ +// System.out.println(CryptogramUtil.doEncrypt("hnidc0628cn!@#lld")); +// } @Test public void ssh(){ - System.out.println(CryptogramUtil.doDecrypt("b44a50e0cfb98f81c8c003330780c835923c2e5caa1738d61e27ee541be54e2e")); +// System.out.println(CryptogramUtil.doDecrypt("b44a50e0cfb98f81c8c003330780c835923c2e5caa1738d61e27ee541be54e2e")); } @Test public void getFileList(){ diff --git a/ops-server/src/test/java/cd/casic/server/TestCaseAIGeneratorTest.java b/ops-server/src/test/java/cd/casic/server/TestCaseAIGeneratorTest.java new file mode 100644 index 00000000..eb12aef2 --- /dev/null +++ b/ops-server/src/test/java/cd/casic/server/TestCaseAIGeneratorTest.java @@ -0,0 +1,66 @@ +package cd.casic.server; + +import cd.casic.ci.process.constant.TestCaseAIGeneratorConstant; +import cd.casic.ci.process.dto.req.testCase.TestCaseAITaskCreateReq; +import cd.casic.ci.process.process.service.testCase.TestCaseAIGeneratorService; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.core.io.ClassPathResource; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.web.WebAppConfiguration; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + + +@SpringBootTest(classes = {OpsServerApplication.class}) +@ActiveProfiles("local") +@Slf4j +@WebAppConfiguration +public class TestCaseAIGeneratorTest { + @Resource + private TestCaseAIGeneratorService service; + + @Test + public void targetUpload() throws IOException { + //{"success":true,"msg":"","id":"8711fd176b686eebcc4e3f49bdde1a18"} + ClassPathResource classPathResource = new ClassPathResource("static/pcre2test"); + String s = service.targetUpload("./pcre2test", classPathResource.getInputStream()); + System.out.println(s); + } + @Test + public void taskCreate(){ + // {"success":true,"msg":"","task_id":"7c5d7df0-68d5-4935-aae7-00287976ae44"} +// {"success":true,"msg":"","task_id":"a70f92e9-9b8c-4be3-974f-8b0efa253237"} + TestCaseAITaskCreateReq req = new TestCaseAITaskCreateReq(); + req.setBinaryId("8711fd176b686eebcc4e3f49bdde1a18"); + req.setCustomPrompt("你是一个模糊测试专家,当前程序输入为文本例如 aa aaa 这种"); + req.setCount(10); + String s = service.taskCreate(req); + System.out.println(s); + } + @Test + public void getTaskStatus(){ +// {"success":true,"msg":"","task_id":"7c5d7df0-68d5-4935-aae7-00287976ae44","status":"success"} + String taskStatus = service.getTaskStatus("1e6e9694-5ae2-425e-ad80-9af266d33bea"); + System.out.println(taskStatus); + } + @Test + public void getTaskLog(){ +// {"success":true,"msg":"","log":"智能体初始化中...\n"} + String taskLog = service.getTaskLog("1e6e9694-5ae2-425e-ad80-9af266d33bea"); + System.out.println(taskLog); + } + @Test + public void downloadSeed() throws IOException { + File tempFile = File.createTempFile("seed", ".zip"); + FileOutputStream fos = new FileOutputStream(tempFile); + service.downloadTestCase("1e6e9694-5ae2-425e-ad80-9af266d33bea",fos); + tempFile.deleteOnExit(); + fos.close(); + System.out.println(); + } +} diff --git a/ops-server/src/test/java/cd/casic/server/ZipFileTest.java b/ops-server/src/test/java/cd/casic/server/ZipFileTest.java index c79110e6..ab2ea76e 100644 --- a/ops-server/src/test/java/cd/casic/server/ZipFileTest.java +++ b/ops-server/src/test/java/cd/casic/server/ZipFileTest.java @@ -1,7 +1,6 @@ package cd.casic.server; import cd.casic.ci.process.properties.TargetFileUploadProperties; -import cd.casic.ci.process.util.CryptogramUtil; import cd.casic.ci.process.util.SftpUploadUtil; import com.jcraft.jsch.*; import jakarta.annotation.Resource;