From 2b2fdaa21151e9ce6e71da2b7a8fa25aa1ccf664 Mon Sep 17 00:00:00 2001 From: even <827656971@qq.com> Date: Mon, 21 Jul 2025 15:35:05 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B5=84=E6=BA=90=E7=AE=A1=E7=90=86=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E4=BF=AE=E6=94=B9=EF=BC=8C=E5=BD=B1=E5=93=8D=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dependencies/pom.xml | 6 +- .../dataobject/dto/DockerEndpointDo.java | 3 +- .../cd/casic/ci/api/DockerController.java | 4 - .../cd/casic/ci/api/MachineController.java | 22 - .../ci/api/ResourceManagerController.java | 81 +-- modules/module-ci-process-biz/pom.xml | 4 + .../ci/process/constant/ResourceConstant.java | 33 + .../dto/req/machine/MachineInfoReq.java | 24 - .../dto/req/resource/ResourceCreateReq.java | 24 + .../process/dto/req/resource/ResourceReq.java | 3 +- .../dto/req/resource/ResourceUpdateReq.java | 25 + .../dto/resp/machine/MachineInfoResp.java | 38 -- .../dto/resp/resource/ResourceDetailResp.java | 40 ++ .../dto/resp/resource/ResourceFindResp.java | 68 -- .../dto/resp/resource/ResourceResp.java | 60 -- .../taskResource/TaskResourceFindResp.java | 21 - .../impl/MemoryPostHandlerManager.java | 2 +- .../engine/worker/CustomCompilerWorker.java | 15 +- .../worker/DIYImageExecuteCommandWorker.java | 12 +- .../worker/afl/AFLSlotCompileWorker.java | 34 +- .../process/engine/worker/afl/AFLWorker.java | 25 +- .../worker/afl/TestCaseGenerationWorker.java | 32 +- .../engine/worker/base/BaseWorker.java | 11 - .../process/engine/worker/base/SshWorker.java | 10 +- .../worker/target/TargetSourceCodeWorker.java | 3 - .../ci/process/enums/MachineSystemEnum.java | 10 +- .../process/converter/MachineConverter.java | 24 - .../process/converter/ResourceConverter.java | 10 +- .../process/dao/machine/MachineInfoDao.java | 15 - .../PipResourceDockerEndpointDao.java | 14 - .../dao/pipeline/PipResourceMachineDao.java | 14 - .../dataObject/machine/MachineInfo.java | 84 --- .../resource/PipResourceMachine.java | 70 --- .../resource/PipResourceManager.java | 6 +- .../impl/AflCrashesInfoServiceImpl.java | 52 +- .../aflManager/impl/AflInfoServiceImpl.java | 38 +- .../impl/AflPlotInfoServiceImpl.java | 28 +- .../impl/AflSeedInfoServiceImpl.java | 26 +- .../process/service/docker/DockerService.java | 1 - .../docker/impl/DockerServiceImpl.java | 50 +- .../service/machine/MachineInfoService.java | 20 - .../machine/impl/MachineInfoServiceImpl.java | 45 -- .../resource/ResourceManagerService.java | 34 +- .../impl/ResourceManagerServiceImpl.java | 438 +++---------- .../target/impl/TargetManagerServiceImpl.java | 4 + .../ci/process/ssh/SshClientFactory.java | 6 +- .../cd/casic/ci/process/ssh/SshCommand.java | 10 +- .../cd/casic/ci/process/ssh/WinRMHelper.java | 9 +- ops-server/pom.xml | 5 + .../src/main/resources/application-local.yaml | 10 +- .../java/cd/casic/server/ResourceTest.java | 591 +++++++++--------- .../test/java/cd/casic/server/SftpTest.java | 15 +- .../java/cd/casic/server/ZipFileTest.java | 1 - 53 files changed, 675 insertions(+), 1555 deletions(-) delete mode 100644 modules/module-ci-process-api/src/main/java/cd/casic/ci/api/MachineController.java create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/constant/ResourceConstant.java delete mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/machine/MachineInfoReq.java create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/resource/ResourceCreateReq.java create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/resource/ResourceUpdateReq.java delete mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/machine/MachineInfoResp.java create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/resource/ResourceDetailResp.java delete mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/resource/ResourceFindResp.java delete mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/resource/ResourceResp.java delete mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/taskResource/TaskResourceFindResp.java delete mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/MachineConverter.java delete mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dao/machine/MachineInfoDao.java delete mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dao/pipeline/PipResourceDockerEndpointDao.java delete mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dao/pipeline/PipResourceMachineDao.java delete mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/machine/MachineInfo.java delete mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResourceMachine.java delete mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/machine/MachineInfoService.java delete mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/machine/impl/MachineInfoServiceImpl.java diff --git a/dependencies/pom.xml b/dependencies/pom.xml index 5f9e9155..0215100e 100644 --- a/dependencies/pom.xml +++ b/dependencies/pom.xml @@ -238,7 +238,11 @@ module-ci-commons ${revision} - + + cd.casic.boot + module-ci-machine + ${revision} + cd.casic.boot module-ci-environment diff --git a/modules/module-ci-execute/src/main/java/cd/casic/module/execute/docker/dataobject/dto/DockerEndpointDo.java b/modules/module-ci-execute/src/main/java/cd/casic/module/execute/docker/dataobject/dto/DockerEndpointDo.java index 51c6626a..f7a81763 100644 --- a/modules/module-ci-execute/src/main/java/cd/casic/module/execute/docker/dataobject/dto/DockerEndpointDo.java +++ b/modules/module-ci-execute/src/main/java/cd/casic/module/execute/docker/dataobject/dto/DockerEndpointDo.java @@ -2,6 +2,7 @@ package cd.casic.module.execute.docker.dataobject.dto; import cd.casic.framework.commons.dataobject.BaseDO; import cd.casic.module.execute.docker.dataobject.model.DockerEndpoint; +import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -22,7 +23,7 @@ import java.time.LocalDateTime; @EqualsAndHashCode(callSuper = true) public class DockerEndpointDo extends BaseDO { - @TableId + @TableId(type = IdType.ASSIGN_ID) private String id; private String name; diff --git a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/DockerController.java b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/DockerController.java index 899a3c59..55469e45 100644 --- a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/DockerController.java +++ b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/DockerController.java @@ -15,10 +15,6 @@ import java.util.List; public class DockerController { @Resource private DockerService dockerService; - @GetMapping("/imageNameListByResourceDetailId/{resourceDetailId}") - public CommonResult> imageList(@PathVariable String resourceDetailId){ - return CommonResult.success(dockerService.imageNameList(resourceDetailId)); - } @GetMapping("/imageListByResourceId/{resourceId}") public CommonResult> imageListByResourceId(@PathVariable String resourceId){ return CommonResult.success(dockerService.imageListByResourceId(resourceId)); diff --git a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/MachineController.java b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/MachineController.java deleted file mode 100644 index 4a2c632c..00000000 --- a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/MachineController.java +++ /dev/null @@ -1,22 +0,0 @@ -package cd.casic.ci.api; - -import cd.casic.ci.process.process.dataObject.machine.MachineInfo; -import cd.casic.ci.process.process.service.machine.MachineInfoService; -import cd.casic.framework.commons.pojo.CommonResult; -import jakarta.annotation.Resource; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -@RestController -@RequestMapping("/machineInfo") -public class MachineController { - @Resource - private MachineInfoService machineInfoService; - @GetMapping("/list") - public CommonResult> list(){ - return CommonResult.success(machineInfoService.list()); - } -} 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 30cebc4c..d6f13cb9 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 @@ -1,19 +1,9 @@ package cd.casic.ci.api; -import cd.casic.ci.process.dto.req.resource.ResourceQueryReq; -import cd.casic.ci.process.dto.req.resource.ResourceReq; -import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; -import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp; -import cd.casic.ci.process.process.dataObject.base.BaseIdReq; + import cd.casic.ci.process.process.service.resource.ResourceManagerService; -import cd.casic.framework.commons.pojo.CommonResult; -import cd.casic.framework.commons.pojo.PageResult; import jakarta.annotation.Resource; -import jakarta.validation.Valid; -import org.jetbrains.annotations.NotNull; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -33,75 +23,6 @@ public class ResourceManagerController { @Resource private ResourceManagerService resourceManagerService; - @PostMapping(path="/createResource") - public CommonResult createResource(@RequestBody @Valid ResourceReq resourceReq){ - String resourceId = resourceManagerService.createResource(resourceReq); - - return CommonResult.success(resourceId); - } - - - @PostMapping(path="/deleteResource") - public CommonResult deleteResource(@RequestBody @Valid BaseIdReq req){ - - resourceManagerService.deleteResource(req.getId()); - - return CommonResult.success(); - } - - @PostMapping(path="/findResourceList") - public CommonResult> findResourceList(@RequestBody @Valid ResourceQueryReq req){ - - List ResourceFindRespList = resourceManagerService.findResourceList(req); - - return CommonResult.success(ResourceFindRespList); - } - - - - @PostMapping(path="/updateResource") - public CommonResult updateResource(@RequestBody @NotNull @Valid ResourceReq resourceReq){ - - resourceManagerService.updateResource(resourceReq); - - return CommonResult.success(); - } - - - @PostMapping(path="/findResourcePage") - public CommonResult> findResourcePage(@RequestBody @NotNull @Valid ResourceQueryReq req){ - - PageResult respPage = resourceManagerService.findResourcePage(req); - return CommonResult.success(respPage); - } - - - @PostMapping(path="/findResourceById") - public CommonResult findResourceById(@RequestBody @Valid BaseIdReq req){ - - ResourceFindResp resp = resourceManagerService.findResourceById(req.getId()); - - return CommonResult.success(resp); - } - - - @PostMapping(path="/findResourceListByType") - public CommonResult findResourceListByType(@RequestBody @Valid ResourceQueryReq req){ - - TaskResourceFindResp ResourceFindResp = resourceManagerService.findResourceListByType(req); - - return CommonResult.success(ResourceFindResp); - } - - - - @PostMapping(path="/findResourceListForObjectByType") - public CommonResult findResourceListForObjectByType(@RequestBody @Valid ResourceQueryReq req){ - - List resp = resourceManagerService.findResourceListForObjectByType(req); - - return CommonResult.success(resp); - } } diff --git a/modules/module-ci-process-biz/pom.xml b/modules/module-ci-process-biz/pom.xml index 2cec1377..be8e4523 100644 --- a/modules/module-ci-process-biz/pom.xml +++ b/modules/module-ci-process-biz/pom.xml @@ -98,6 +98,10 @@ cd.casic.boot module-ci-execute + + cd.casic.boot + module-ci-machine + diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/constant/ResourceConstant.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/constant/ResourceConstant.java new file mode 100644 index 00000000..7c93706e --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/constant/ResourceConstant.java @@ -0,0 +1,33 @@ +package cd.casic.ci.process.constant; + +public class ResourceConstant { + /** + * 云资源 + * */ + public static final String RES_TYPE_CLOUD="RES_TYPE_CLOUD"; + /** + * 自定义资源 + * */ + public static final String RES_TYPE_CUSTOM="RES_TYPE_CUSTOM"; + /** + * 待申请 + * */ + public static final String RES_STATE_WAIT_APPLY="RES_STATE_WAIT_APPLY"; + /** + * 待申请 + * */ + public static final String RES_STATE_APPLY_ING="RES_STATE_APPLY_ING"; + /** + * 待销毁 + * */ + public static final String RES_STATE_WAIT_DESTROY="RES_STATE_WAIT_DESTROY"; + /** + * 不可用 + * */ + public static final String RES_STATE_DISABLE="RES_STATE_DISABLE"; + /** + * 可用 + * */ + public static final String RES_STATE_ENABLE="RES_STATE_ENABLE"; + +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/machine/MachineInfoReq.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/machine/MachineInfoReq.java deleted file mode 100644 index 3944cb04..00000000 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/machine/MachineInfoReq.java +++ /dev/null @@ -1,24 +0,0 @@ -package cd.casic.ci.process.dto.req.machine; - -import lombok.Data; - -@Data -public class MachineInfoReq { - - /** - * 主机ip - */ - private String machineHost; - - /** - * 机器名称 - */ - private String machineName; - - /** - * 机器状态 1有效 2无效 - */ - private String machineStatus; - - -} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/resource/ResourceCreateReq.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/resource/ResourceCreateReq.java new file mode 100644 index 00000000..fa574047 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/resource/ResourceCreateReq.java @@ -0,0 +1,24 @@ +package cd.casic.ci.process.dto.req.resource; + +import lombok.Data; + +@Data +public class ResourceCreateReq { + /** + * 资源名称 + * */ + private String resourceName; + /** + * 资源类型ResourceConstant.RES_TYPE_* + * */ + private String resourceType; + /** + * 资源类型 RES_TYPE_CUSTOM 必填 + * */ + private Long machineInfoId; + /** + * docker连接端口(选填) + * */ + private Integer dockerPort; + +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/resource/ResourceReq.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/resource/ResourceReq.java index c2239d17..c36b5a40 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/resource/ResourceReq.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/resource/ResourceReq.java @@ -2,7 +2,6 @@ package cd.casic.ci.process.dto.req.resource; import cd.casic.ci.process.process.dataObject.resource.PipResourceCloud; import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S; -import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo; import lombok.Data; @@ -34,7 +33,7 @@ public class ResourceReq { */ private String resourceName; - private PipResourceMachine resourceMachine; +// private PipResourceMachine resourceMachine; private DockerEndpointDo dockerEndpoint; 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 new file mode 100644 index 00000000..a163d5af --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/resource/ResourceUpdateReq.java @@ -0,0 +1,25 @@ +package cd.casic.ci.process.dto.req.resource; + +import lombok.Data; + +@Data +public class ResourceUpdateReq { + private String id; + /** + * 资源名称 + * */ + private String resourceName; + /** + * 资源类型ResourceConstant.RES_TYPE_* + * */ + private String resourceType; + + /** + * 资源类型 RES_TYPE_CUSTOM 必填 + * */ + private Long machineInfoId; + /** + * docker连接端口(选填) + * */ + private Integer dockerPort; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/machine/MachineInfoResp.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/machine/MachineInfoResp.java deleted file mode 100644 index b5b6172e..00000000 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/machine/MachineInfoResp.java +++ /dev/null @@ -1,38 +0,0 @@ -package cd.casic.ci.process.dto.resp.machine; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import lombok.Data; - -@Data -public class MachineInfoResp { - /** - * 机器描述 - */ - private String description; - /** - * id - */ - @TableId(type = IdType.ASSIGN_ID) - private String id; - - /** - * 主机ip - */ - private String machineHost; - - /** - * 机器名称 - */ - private String machineName; - - /** - * 机器状态 1有效 2无效 - */ - private String machineStatus; - - /** - * 机器唯一标识 - */ - private String machineTag; -} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/resource/ResourceDetailResp.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/resource/ResourceDetailResp.java new file mode 100644 index 00000000..6148ca0e --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/resource/ResourceDetailResp.java @@ -0,0 +1,40 @@ +package cd.casic.ci.process.dto.resp.resource; + +import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo; +import cd.casic.module.machine.dal.dataobject.MachineInfoDO; +import lombok.Data; + +@Data +public class ResourceDetailResp { + /** + * 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 MachineInfoDO machineInfo; + private DockerEndpointDo dockerInfo; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/resource/ResourceFindResp.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/resource/ResourceFindResp.java deleted file mode 100644 index 2f7c18f1..00000000 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/resource/ResourceFindResp.java +++ /dev/null @@ -1,68 +0,0 @@ -package cd.casic.ci.process.dto.resp.resource; - -import cd.casic.ci.process.process.dataObject.resource.PipResourceCloud; -import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S; -import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; -import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo; -import lombok.Data; - -@Data -public class ResourceFindResp { - /** - * 主键id - */ - private String id; - - /** - * docker镜像服务器信息id - */ - private String dockerId; - - /** - * k8s服务器信息id - */ - private String k8sId; - - /** - * 机器服务器信息id - */ - private String machineId; - - /** - * 弹性云服务器信息id - */ - private String cloudId; - - /** - * 资源名称 - */ - private String resourceName; - - //创建人id - private String creator; - - //创建人姓名 - private String creatorName; - - //最后修改人id - private String updater; - - //最后修改人姓名 - private String updaterName; - - //备注 - private String remark; - - //机器信息 - private PipResourceMachine resourceMachine; - - //镜像信息 - private DockerEndpointDo dockerEndpoint; - - //k8s信息 - private PipResourceK8S pipResourceK8S; - - //弹性云信息 - private PipResourceCloud pipResourceCloud; - -} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/resource/ResourceResp.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/resource/ResourceResp.java deleted file mode 100644 index 7b215cb7..00000000 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/resource/ResourceResp.java +++ /dev/null @@ -1,60 +0,0 @@ -package cd.casic.ci.process.dto.resp.resource; - -import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S; -import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; -import cd.casic.ci.process.process.dataObject.resource.PipelineDockerEndpoint; -import lombok.Data; - -@Data -public class ResourceResp { - /** - * 主键id - */ - private String id; - - /** - * docker镜像服务器信息id - */ - private String dockerId; - - /** - * k8s服务器信息id - */ - private String k8sId; - - /** - * 机器服务器信息id - */ - private String machineId; - - /** - * 弹性云服务器信息id - */ - private String cloudId; - - /** - * 资源名称 - */ - private String resourceName; - - //创建人id - private String creator; - - //创建人姓名 - private String creatorName; - - //最后修改人id - private String updater; - - //最后修改人姓名 - private String updaterName; - - private String remark; - - private PipResourceMachine resourceMachine; - - private PipelineDockerEndpoint dockerEndpoint; - - private PipResourceK8S pipResourceK8S; - -} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/taskResource/TaskResourceFindResp.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/taskResource/TaskResourceFindResp.java deleted file mode 100644 index 2845ffc6..00000000 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/taskResource/TaskResourceFindResp.java +++ /dev/null @@ -1,21 +0,0 @@ -package cd.casic.ci.process.dto.resp.taskResource; - -import cd.casic.ci.process.process.dataObject.resource.PipResourceCloud; -import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S; -import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; -import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo; -import lombok.Data; - -import java.util.List; - -@Data -public class TaskResourceFindResp { - private List resourceMachineList; - - private List dockerEndpointList; - - private List resourceK8SList; - - private List resourceCloudList; - -} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/impl/MemoryPostHandlerManager.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/impl/MemoryPostHandlerManager.java index bc63083a..0a8f34ca 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/impl/MemoryPostHandlerManager.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/manager/impl/MemoryPostHandlerManager.java @@ -18,7 +18,7 @@ public class MemoryPostHandlerManager implements PostHandlerManager { private final ConcurrentHashMap> handlerMap = new ConcurrentHashMap<>(); @Override public void registerPostHandler(ExecuteTaskPostHandler handler) { - if (handler==null|| StringUtils.isNotEmpty(handler.getPipelineId())) { + if (handler==null|| StringUtils.isEmpty(handler.getPipelineId())) { throw new ServiceException(GlobalErrorCodeConstants.PIPELINE_ERROR.getCode(),"注册后置处理器失败"); } List orDefault = handlerMap.getOrDefault(handler.getPipelineId(), new CopyOnWriteArrayList<>()); 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 e93ce5fd..5449cb25 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 @@ -3,12 +3,11 @@ package cd.casic.ci.process.engine.worker; import cd.casic.ci.process.common.WorkAtom; import cd.casic.ci.process.dto.req.resource.ResourceQueryReq; -import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp; +import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp; import cd.casic.ci.process.engine.constant.DIYImageExecuteCommandConstant; import cd.casic.ci.process.engine.runContext.TaskRunContext; import cd.casic.ci.process.engine.worker.base.SshWorker; import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline; -import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; import cd.casic.ci.process.process.dataObject.target.TargetVersion; import cd.casic.ci.process.process.dataObject.task.PipTask; import cd.casic.ci.process.process.service.target.TargetVersionService; @@ -16,6 +15,7 @@ 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 jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -23,6 +23,7 @@ import org.springframework.util.CollectionUtils; import java.io.File; import java.util.Map; +import java.util.Objects; /** * 自定义编译 @@ -60,12 +61,12 @@ public class CustomCompilerWorker extends SshWorker { ResourceQueryReq req = new ResourceQueryReq(); req.setId(resourceId); req.setType(resourceType); - TaskResourceFindResp resourceListByType = getResourceManagerService().findResourceListByType(req); - if (CollectionUtils.isEmpty(resourceListByType.getResourceMachineList())) { + ResourceDetailResp resource = getResourceManagerService().findResourceDetailById(resourceId); + if (Objects.isNull(resource.getMachineInfo())) { append(context,"当前机器不支持machine"); return; } - PipResourceMachine resourceMachine = resourceListByType.getResourceMachineList().get(0); + MachineInfoDO resourceMachine = resource.getMachineInfo(); //根据目标id查询目标信息 if (StringUtils.isEmpty(pipeline.getTargetVersionId())){ @@ -81,7 +82,7 @@ public class CustomCompilerWorker extends SshWorker { append(context,"目标文件不存在或不可读"); toBadEnding(); } - append(context,"上传文件"+targetVersion.getFileName()+"到目标服务器IP:"+resourceMachine.getMachineHost()); + append(context,"上传文件"+targetVersion.getFileName()+"到目标服务器IP:"+resourceMachine.getHostIp()); append(context,"上传路径:"+"/home/casic/706/ai_test_527"); // 上传目标 到目标服务器 //通过taskProperties获取制品路径 @@ -91,7 +92,7 @@ public class CustomCompilerWorker extends SshWorker { //则默认路径写死 remoteDir = "/home/casic/706/ai_test_527"; } - SftpUploadUtil.uploadFileViaSftp(resourceMachine.getMachineHost(),Integer.valueOf(resourceMachine.getSshPort()),resourceMachine.getUsername(), CryptogramUtil.doDecrypt(resourceMachine.getPassword()),null,file.getAbsolutePath(),remoteDir,file.getName()); + SftpUploadUtil.uploadFileViaSftp(resourceMachine.getHostIp(), resourceMachine.getSshPort(),resourceMachine.getUsername(), 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/DIYImageExecuteCommandWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/DIYImageExecuteCommandWorker.java index 3fdf041d..cfeba949 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/DIYImageExecuteCommandWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/DIYImageExecuteCommandWorker.java @@ -3,18 +3,20 @@ package cd.casic.ci.process.engine.worker; import cd.casic.ci.process.common.WorkAtom; import cd.casic.ci.process.dto.req.resource.ResourceQueryReq; -import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp; +import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp; import cd.casic.ci.process.engine.constant.DIYImageExecuteCommandConstant; import cd.casic.ci.process.engine.runContext.TaskRunContext; import cd.casic.ci.process.engine.worker.base.SshWorker; import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline; -import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; + import cd.casic.ci.process.process.dataObject.task.PipTask; +import cd.casic.module.machine.dal.dataobject.MachineInfoDO; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.util.CollectionUtils; import java.util.Map; +import java.util.Objects; /** * 自定义镜像执行命令 @@ -61,12 +63,12 @@ public class DIYImageExecuteCommandWorker extends SshWorker { ResourceQueryReq req = new ResourceQueryReq(); req.setId(resourceId); req.setType(resourceType); - TaskResourceFindResp resourceListByType = getResourceManagerService().findResourceListByType(req); - if (CollectionUtils.isEmpty(resourceListByType.getResourceMachineList())) { + ResourceDetailResp resource = getResourceManagerService().findResourceDetailById(resourceId); + if (Objects.isNull(resource)||Objects.isNull(resource.getMachineInfo())) { append(context,"当前机器不支持machine"); return; } - PipResourceMachine resourceMachine = resourceListByType.getResourceMachineList().get(0); + MachineInfoDO resourceMachine = resource.getMachineInfo(); //TODO 得改一下 statusCode = shell(resourceMachine, null,context, "echo \"自定义镜像执行命令\"", 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 0296a007..90eaa50e 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 @@ -2,19 +2,17 @@ package cd.casic.ci.process.engine.worker.afl; import cd.casic.ci.process.common.WorkAtom; import cd.casic.ci.process.dto.req.resource.ResourceQueryReq; -import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; -import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp; +import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp; import cd.casic.ci.process.engine.constant.AFLSlotCompileConstant; import cd.casic.ci.process.engine.runContext.TaskRunContext; import cd.casic.ci.process.engine.worker.base.DockerWorker; import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline; -import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; import cd.casic.ci.process.process.dataObject.target.TargetVersion; import cd.casic.ci.process.process.dataObject.task.PipTask; import cd.casic.ci.process.process.service.target.TargetVersionService; -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 com.alibaba.fastjson.JSON; import com.jcraft.jsch.*; import jakarta.annotation.Resource; @@ -45,22 +43,13 @@ public class AFLSlotCompileWorker extends DockerWorker { Map taskProperties = task.getTaskProperties(); String managerId = taskProperties.get(AFLSlotCompileConstant.MANAGER_ID) instanceof String ? ((String) taskProperties.get(AFLSlotCompileConstant.MANAGER_ID)) : null; // ssh 上传目标文件 - ResourceFindResp resourceById = resourceManagerService.findResourceById(managerId); - String machineId = resourceById.getMachineId(); - String dockerId = resourceById.getDockerId(); + ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(managerId); String imageName = taskProperties.get(AFLSlotCompileConstant.IMAGE_NAME) instanceof String ? ((String) taskProperties.get(AFLSlotCompileConstant.IMAGE_NAME)) : null; - if (StringUtils.isEmpty(machineId)||StringUtils.isEmpty(dockerId)) { + MachineInfoDO machineInfo = resourceById.getMachineInfo(); + DockerEndpointDo dockerInfo = resourceById.getDockerInfo(); + if (Objects.isNull(machineInfo)||Objects.isNull(dockerInfo)) { append(context,"该资源不支持docker或者ssh"); } - ResourceQueryReq req = new ResourceQueryReq(); - req.setId(machineId); - req.setType("machine"); - TaskResourceFindResp machineQuery = resourceManagerService.findResourceListByType(req); - req.setId(dockerId); - req.setType("docker"); - TaskResourceFindResp dockerQuery = resourceManagerService.findResourceListByType(req); - PipResourceMachine machineInfo = machineQuery.getResourceMachineList().get(0); - DockerEndpointDo dockerInfo = dockerQuery.getDockerEndpointList().get(0); PipPipeline pipeline = (PipPipeline) getContextManager().getContext(task.getPipelineId()).getContextDef(); // 获取目标文件 TargetVersion targetVersion = targetVersionService.getById(pipeline.getTargetVersionId()); @@ -80,8 +69,8 @@ public class AFLSlotCompileWorker extends DockerWorker { try { append(context,"AFL编译,上传文件路径:"+realPath); SftpUploadUtil.uploadFileViaSftp( - machineInfo.getMachineHost() - ,Integer.valueOf(machineInfo.getSshPort()),machineInfo.getUsername(), CryptogramUtil.doDecrypt(machineInfo.getPassword()),"",filePath,realPath,file.getName()); + machineInfo.getHostIp() + ,machineInfo.getSshPort(),machineInfo.getUsername(), machineInfo.getPassword(),"",filePath,realPath,file.getName()); } catch (SftpUploadUtil.SftpUploadException e) { append(context,"上传文件失败,请确认资源信息是否有误:"+JSON.toJSONString(machineInfo)); log.error("上传文件报错",e); @@ -148,16 +137,15 @@ public class AFLSlotCompileWorker extends DockerWorker { return ""; } - private List getCompileResult(TaskRunContext context, String path, PipResourceMachine machineInfo){ - String host = machineInfo.getMachineHost(); + private List getCompileResult(TaskRunContext context, String path, MachineInfoDO machineInfo){ + String host = machineInfo.getHostIp(); String user = machineInfo.getUsername(); - String password = CryptogramUtil.doDecrypt(machineInfo.getPassword()); append(context,"AFL编译完毕"); List fileNameList = null; try { JSch jsch = new JSch(); Session session = jsch.getSession(user, host, 22); - session.setPassword(password); + session.setPassword(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 cc1dcaa3..fac19984 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 @@ -3,9 +3,7 @@ package cd.casic.ci.process.engine.worker.afl; import cd.casic.ci.process.common.WorkAtom; import cd.casic.ci.process.dto.req.aflManager.AflManagerReq; import cd.casic.ci.process.dto.req.resource.ResourceQueryReq; -import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; -import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp; -import cd.casic.ci.process.engine.constant.AFLConstant; +import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp; import cd.casic.ci.process.engine.constant.DIYImageExecuteCommandConstant; import cd.casic.ci.process.engine.manager.PostHandlerManager; import cd.casic.ci.process.engine.postHandler.ExecuteTaskPostHandler; @@ -30,6 +28,7 @@ import org.springframework.util.CollectionUtils; import java.io.File; import java.util.Map; +import java.util.Objects; import java.util.UUID; import static cd.casic.ci.process.engine.constant.AFLConstant.*; @@ -55,15 +54,13 @@ public class AFLWorker extends DockerWorker { if (context.getContextDef() instanceof PipTask taskDef) { log.info(taskDef.getTaskName()); Map taskProperties = taskDef.getTaskProperties(); + //从上下文中获取资源id String managerId = getVariableNearby(context, AFL_RESOURCE_MANAGER_ID_KEY) instanceof String ? ((String) getVariableNearby(context, AFL_RESOURCE_MANAGER_ID_KEY)) : null; // ssh 上传目标文件 - ResourceFindResp resourceById = resourceManagerService.findResourceById(managerId); + ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(managerId); if (resourceById==null) { append(context,"缺少资源信息,请添加编译节点"); } - //从taskProperties中获取资源id - String resourceType = "docker"; - String resourceId = resourceById.getDockerId(); String commandEnd = taskProperties.get(COMMAND_END) instanceof String ? ((String) taskProperties.get(COMMAND_END)) : null; String imageName = getVariableNearby(context,IMAGE_NAME) instanceof String ? ((String) getVariableNearby(context,IMAGE_NAME)) : null; String executableName = taskProperties.get(EXECUTABLE_NAME) instanceof String ? ((String) taskProperties.get(EXECUTABLE_NAME)) : null; @@ -74,22 +71,14 @@ public class AFLWorker extends DockerWorker { String seedPath = (String)getGlobalVariable(context,AFL_DOCKER_SEED_PATH_KEY); if (StringUtils.isEmpty(seedPath) || StringUtils.isEmpty(workDir) || - StringUtils.isEmpty(resourceId) || + Objects.isNull(resourceById)|| StringUtils.isEmpty(imageName) || StringUtils.isEmpty(executableName) || StringUtils.isEmpty(commandEnd) || - StringUtils.isEmpty(resourceType)) { + Objects.isNull(resourceById.getDockerInfo())) { // 缺少参数 toBadEnding(); } - ResourceQueryReq req = new ResourceQueryReq(); - req.setId(resourceId); - req.setType(resourceType); - TaskResourceFindResp resourceListByType = getResourceManagerService().findResourceListByType(req); - if (CollectionUtils.isEmpty(resourceListByType.getDockerEndpointList())) { - append(context,"当前机器不支持docker"); - return; - } String output = workDir +File.separator+ AFL_DOCKER_OUTPUT; String volumeWorkDirPath = AFL_VOLUME_WORK_DIR_PREFIX; PipPipeline pipeline = (PipPipeline) getContextManager().getContext(taskDef.getPipelineId()).getContextDef(); @@ -113,7 +102,7 @@ public class AFLWorker extends DockerWorker { Long runningTime = getRunningTime(timeHours); append(context,"运行时间"+runningTime); // 获取docker 暂时先写固定值 - dockerRun(commandScript,resourceListByType.getDockerEndpointList().get(0),context, runningTime); + dockerRun(commandScript,resourceById.getDockerInfo(),context, runningTime); } catch (Exception e) { String errorMessage = "执行afl失败"+e.getMessage() + "\r\n"; log.error("执行afl失败", e); 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 b298e285..9734e952 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 @@ -3,12 +3,10 @@ package cd.casic.ci.process.engine.worker.afl; import cd.casic.ci.process.common.WorkAtom; import cd.casic.ci.process.dto.req.resource.ResourceQueryReq; -import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; -import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp; +import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp; import cd.casic.ci.process.engine.runContext.TaskRunContext; import cd.casic.ci.process.engine.worker.base.DockerWorker; import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline; -import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; import cd.casic.ci.process.process.dataObject.target.TargetVersion; import cd.casic.ci.process.process.dataObject.task.PipTask; import cd.casic.ci.process.process.dataObject.testCase.TestCaseInfo; @@ -17,6 +15,7 @@ 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 com.alibaba.fastjson.JSON; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -50,21 +49,12 @@ public class TestCaseGenerationWorker extends DockerWorker { 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); - ResourceFindResp resourceById = resourceManagerService.findResourceById(managerId); - String machineId = resourceById.getMachineId(); - String dockerId = resourceById.getDockerId(); - if (StringUtils.isEmpty(machineId)||StringUtils.isEmpty(dockerId)) { + ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(managerId); + MachineInfoDO machineInfo = resourceById.getMachineInfo(); + DockerEndpointDo dockerInfo = resourceById.getDockerInfo(); + if (Objects.isNull(machineInfo)||Objects.isNull(dockerInfo)) { append(context,"该资源不支持docker或者ssh"); } - ResourceQueryReq req = new ResourceQueryReq(); - req.setId(machineId); - req.setType("machine"); - TaskResourceFindResp machineQuery = resourceManagerService.findResourceListByType(req); - req.setId(dockerId); - req.setType("docker"); - TaskResourceFindResp dockerQuery = resourceManagerService.findResourceListByType(req); - PipResourceMachine machineInfo = machineQuery.getResourceMachineList().get(0); - DockerEndpointDo dockerInfo = dockerQuery.getDockerEndpointList().get(0); PipPipeline pipeline = (PipPipeline) getContextManager().getContext(taskDef.getPipelineId()).getContextDef(); TargetVersion targetVersion = targetVersionService.getById(pipeline.getTargetVersionId()); String fileName = targetVersion.getFileName(); @@ -99,8 +89,8 @@ public class TestCaseGenerationWorker extends DockerWorker { append(context,"测试用例选用上传模式,种子文件路径:"+filePath+",种子上传路径:"+seedPath); try { SftpUploadUtil.uploadFileViaSftp( - machineInfo.getMachineHost() - ,Integer.valueOf(machineInfo.getSshPort()),machineInfo.getUsername(),CryptogramUtil.doDecrypt(machineInfo.getPassword()),"",filePath,seedTarget,file.getName()); + machineInfo.getHostIp() + ,Integer.valueOf(machineInfo.getSshPort()),machineInfo.getUsername(),machineInfo.getPassword(),"",filePath,seedTarget,file.getName()); } catch (SftpUploadUtil.SftpUploadException e) { append(context,"seed文件上传失败"); log.error("seed文件上传失败",e); @@ -118,10 +108,10 @@ public class TestCaseGenerationWorker extends DockerWorker { try { append(context,"当前上传文件:"+testCaseInfo.getFileName()); SftpUploadUtil.uploadFileViaSftp( - machineInfo.getMachineHost() - ,Integer.valueOf(machineInfo.getSshPort()) + machineInfo.getHostIp() + ,machineInfo.getSshPort() ,machineInfo.getUsername() - ,CryptogramUtil.doDecrypt(machineInfo.getPassword()) + ,machineInfo.getPassword() ,"", testFilePath,seedTarget,testCaseInfo.getFileName()); } catch (SftpUploadUtil.SftpUploadException e) { toBadEnding(); diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/base/BaseWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/base/BaseWorker.java index 18486107..21c0f414 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/base/BaseWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/base/BaseWorker.java @@ -2,9 +2,7 @@ package cd.casic.ci.process.engine.worker.base; import cd.casic.ci.process.constant.CommandConstant; -import cd.casic.ci.process.engine.constant.EngineRuntimeConstant; import cd.casic.ci.process.engine.constant.PipelineBehaviorConstant; -import cd.casic.ci.process.engine.context.ConstantContext; import cd.casic.ci.process.engine.enums.ContextStateEnum; import cd.casic.ci.process.engine.manager.LoggerManager; import cd.casic.ci.process.engine.manager.PostHandlerManager; @@ -12,17 +10,10 @@ import cd.casic.ci.process.engine.manager.RunContextManager; import cd.casic.ci.process.engine.runContext.BaseRunContext; import cd.casic.ci.process.engine.runContext.TaskRunContext; -import cd.casic.ci.process.enums.MachineSystemEnum; import cd.casic.ci.process.process.dataObject.base.PipBaseElement; -import cd.casic.ci.process.process.dataObject.log.PipTaskLog; -import cd.casic.ci.process.process.dataObject.machine.MachineInfo; import cd.casic.ci.process.process.dataObject.task.PipTask; -import cd.casic.ci.process.process.service.machine.MachineInfoService; import cd.casic.ci.process.process.service.resource.ResourceManagerService; -import cd.casic.ci.process.ssh.SshClient; -import cd.casic.ci.process.ssh.SshClientFactory; -import cd.casic.ci.process.ssh.WinRMHelper; import cd.casic.framework.commons.exception.ServiceException; import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import jakarta.annotation.Resource; @@ -46,8 +37,6 @@ public abstract class BaseWorker implements Runnable{ protected RunContextManager contextManager; protected String contextKey; @Resource - protected MachineInfoService machineInfoService; - @Resource protected LoggerManager loggerManager; @Resource protected ResourceManagerService resourceManagerService; diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/base/SshWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/base/SshWorker.java index fc8a1484..ce1a073b 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/base/SshWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/base/SshWorker.java @@ -2,13 +2,11 @@ package cd.casic.ci.process.engine.worker.base; import cd.casic.ci.process.constant.CommandConstant; import cd.casic.ci.process.engine.runContext.BaseRunContext; -import cd.casic.ci.process.engine.worker.base.BaseWorker; import cd.casic.ci.process.enums.MachineSystemEnum; -import cd.casic.ci.process.process.dataObject.machine.MachineInfo; -import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; import cd.casic.ci.process.ssh.SshClient; import cd.casic.ci.process.ssh.SshClientFactory; import cd.casic.ci.process.ssh.WinRMHelper; +import cd.casic.module.machine.dal.dataobject.MachineInfoDO; import lombok.extern.slf4j.Slf4j; import java.util.Arrays; @@ -24,9 +22,9 @@ public abstract class SshWorker extends BaseWorker { * @param commands 命令 * @return 0 成功;其他值 失败 */ - public int shell(PipResourceMachine machineInfo, String sudoPassword, BaseRunContext context, String... commands) { + public int shell(MachineInfoDO machineInfo, String sudoPassword, BaseRunContext context, String... commands) { List commandList = Arrays.asList(commands); - if(MachineSystemEnum.WINDOWS.getSystem().equals(machineInfo.getOsSystem())){ + if(MachineSystemEnum.WINDOWS.getSystem().equals(machineInfo.getMachineInfoType())){ return powerShell(machineInfo, commandList); } // NodeLogger nodeLogger = nodeLoggerThreadLocal.get(); @@ -61,7 +59,7 @@ public abstract class SshWorker extends BaseWorker { * @param commandList 命令 * @return 0 成功;其他值 失败 */ - public int powerShell(PipResourceMachine machineInfo, List commandList) { + public int powerShell(MachineInfoDO machineInfo, List commandList) { int statusCode = -1; //loggerUuid得转换成String类型,才能生成key,然后才能通过websocket实时推送节点执行日志 diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/target/TargetSourceCodeWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/target/TargetSourceCodeWorker.java index 4cbb8433..cb53f60d 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/target/TargetSourceCodeWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/target/TargetSourceCodeWorker.java @@ -5,7 +5,6 @@ import cd.casic.ci.process.common.WorkAtom; import cd.casic.ci.process.engine.runContext.TaskRunContext; import cd.casic.ci.process.engine.worker.base.BaseWorker; import cd.casic.ci.process.constant.PipelineTargetTypeConstant; -import cd.casic.ci.process.process.service.machine.MachineInfoService; import cd.casic.ci.process.process.service.target.TargetVersionService; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -19,8 +18,6 @@ import lombok.extern.slf4j.Slf4j; public class TargetSourceCodeWorker extends BaseWorker { @Resource private TargetVersionService targetVersionService; - @Resource - private MachineInfoService machineInfoService; @Override public void execute(TaskRunContext context) { // 暂无获取文件方式 todo 先注释掉 diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/enums/MachineSystemEnum.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/enums/MachineSystemEnum.java index 69998036..86cd93a5 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/enums/MachineSystemEnum.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/enums/MachineSystemEnum.java @@ -9,19 +9,19 @@ public enum MachineSystemEnum { /** * Linux */ - LINUX("Linux"), + LINUX(1), /** * Windows */ - WINDOWS("Windows"); + WINDOWS(2); - private final String system; + private final Integer system; - MachineSystemEnum(String system) { + MachineSystemEnum(Integer system) { this.system = system; } - public String getSystem() { + public Integer getSystem() { return system; } } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/MachineConverter.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/MachineConverter.java deleted file mode 100644 index 1f4eb8cd..00000000 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/MachineConverter.java +++ /dev/null @@ -1,24 +0,0 @@ -package cd.casic.ci.process.process.converter; - - -import cd.casic.ci.process.dto.resp.machine.MachineInfoResp; -import cd.casic.ci.process.process.dataObject.machine.MachineInfo; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * @author HopeLi - * @version v1.0 - * @ClassName PipelineConverter - * @Date: 2025/5/13 14:39 - * @Description: - */ -@Mapper(componentModel = "spring") -public interface MachineConverter { - MachineConverter INSTANCE = Mappers.getMapper(MachineConverter.class); - MachineInfoResp toResp(MachineInfo pipPipeline); - List toRespList(List pipPipelines); - -} 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 f26f9312..ab56ea75 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,7 +1,6 @@ package cd.casic.ci.process.process.converter; -import cd.casic.ci.process.dto.req.resource.ResourceReq; -import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; +import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp; import cd.casic.ci.process.process.dataObject.resource.PipResourceManager; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -18,10 +17,5 @@ import java.util.List; @Mapper(componentModel = "spring") public interface ResourceConverter { ResourceConverter INSTANCE = Mappers.getMapper(ResourceConverter.class); - - ResourceFindResp toResp(PipResourceManager req); - List toRespList(List pipResourceManagers); - - - PipResourceManager toBean(ResourceReq req); + ResourceDetailResp converter(PipResourceManager manager); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dao/machine/MachineInfoDao.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dao/machine/MachineInfoDao.java deleted file mode 100644 index b8fca226..00000000 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dao/machine/MachineInfoDao.java +++ /dev/null @@ -1,15 +0,0 @@ -package cd.casic.ci.process.process.dao.machine; - - -import cd.casic.ci.process.process.dataObject.machine.MachineInfo; -import cd.casic.framework.mybatis.core.mapper.BaseMapperX; - - -/** - * 机器信息表 - * - * @author herenbin - * @date 2022-09-27 10:10:37 - */ -public interface MachineInfoDao extends BaseMapperX { -} \ No newline at end of file diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dao/pipeline/PipResourceDockerEndpointDao.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dao/pipeline/PipResourceDockerEndpointDao.java deleted file mode 100644 index c337607f..00000000 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dao/pipeline/PipResourceDockerEndpointDao.java +++ /dev/null @@ -1,14 +0,0 @@ -package cd.casic.ci.process.process.dao.pipeline; - -import cd.casic.ci.process.process.dataObject.resource.PipelineDockerEndpoint; -import cd.casic.framework.mybatis.core.mapper.BaseMapperX; - -/** - * @author HopeLi - * @version v1.0 - * @ClassName PipResourceDockerEndpointDao - * @Date: 2025/5/13 14:39 - * @Description: - */ -public interface PipResourceDockerEndpointDao extends BaseMapperX { -} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dao/pipeline/PipResourceMachineDao.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dao/pipeline/PipResourceMachineDao.java deleted file mode 100644 index a68386ee..00000000 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dao/pipeline/PipResourceMachineDao.java +++ /dev/null @@ -1,14 +0,0 @@ -package cd.casic.ci.process.process.dao.pipeline; - -import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; -import cd.casic.framework.mybatis.core.mapper.BaseMapperX; - -/** - * @author HopeLi - * @version v1.0 - * @ClassName PipResourceMachineDao - * @Date: 2025/5/13 14:39 - * @Description: - */ -public interface PipResourceMachineDao extends BaseMapperX { -} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/machine/MachineInfo.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/machine/MachineInfo.java deleted file mode 100644 index e24dc537..00000000 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/machine/MachineInfo.java +++ /dev/null @@ -1,84 +0,0 @@ -package cd.casic.ci.process.process.dataObject.machine; - - -import cd.casic.framework.commons.dataobject.BaseDO; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - * 机器信息表 - * - * @author herenbin - * @date 2022-09-27 10:10:37 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@TableName("machine_info") -public class MachineInfo extends BaseDO { - - - /** - * 机器认证方式 1: 账号认证 2: key认证 - */ - private String authType; - - /** - * 机器描述 - */ - private String description; - /** - * id - */ - @TableId(type = IdType.ASSIGN_ID) - private String id; - - /** - * 主机ip - */ - private String machineHost; - - /** - * 机器名称 - */ - private String machineName; - - /** - * 机器状态 1有效 2无效 - */ - private String machineStatus; - - /** - * 机器唯一标识 - */ - private String machineTag; - - /** - * 机器密码 - */ - private String password; - - /** - * 代理id - */ - private Long proxyId; - - /** - * ssh端口 - */ - private Integer sshPort; - - /** - * 机器账号 - */ - private String username; - /** - * 系统类型 - */ - @TableField("os_system") - private String osSystem; - -} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResourceMachine.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResourceMachine.java deleted file mode 100644 index b539f4ab..00000000 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResourceMachine.java +++ /dev/null @@ -1,70 +0,0 @@ -package cd.casic.ci.process.process.dataObject.resource; - -import cd.casic.ci.process.process.dataObject.base.PipBaseElement; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - * @ClassName PipResourceMachine - * @Author hopeli - * @Date 2025/31 21:48 - * @Version 1.0 - */ -@EqualsAndHashCode(callSuper = true) -@Data -public class PipResourceMachine extends PipBaseElement { - /** - * 主机地址 - */ - private String machineHost; - - /** - * 描述 - */ - private String description; - - /** - * 机器状态 - */ - private String machineStatus; - - /** - * 登录用户名 - */ - private String username; - - /** - * SSH 端口 - */ - private String sshPort; - - /** - * 密码 - */ - private String password; - - /** - * 秘钥 ID - */ - private Long secretKeyId; - - /** - * 代理 ID - */ - private Long proxyId; - - /** - * 认证类型编码 - */ - private Integer authenticationTypeCode; - - /** - * 认证类型 - */ - private String authType; - - /** - * 操作系统 - */ - private String osSystem; -} 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 0be43d3f..c68e7b9e 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 @@ -26,7 +26,7 @@ public class PipResourceManager extends PipBaseElement { /** * 机器服务器信息id */ - private String machineId; + private Long machineId; /** * 弹性云服务器信息id @@ -37,4 +37,8 @@ public class PipResourceManager extends PipBaseElement { * 资源名称 */ private String resourceName; + /** + * 资源类型ResourceConstant.RES_TYPE_* + * */ + private String resourceType; } 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 889457ed..20daf0ee 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 @@ -3,7 +3,7 @@ package cd.casic.ci.process.process.service.aflManager.impl; import cd.casic.ci.process.dto.req.aflManager.AflManagerReq; import cd.casic.ci.process.dto.resp.aflManager.AflCrashesInfoResp; import cd.casic.ci.process.dto.resp.aflManager.AflCrashesResp; -import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; +import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp; import cd.casic.ci.process.engine.constant.PipelineVariableConstant; import cd.casic.ci.process.engine.manager.RunContextManager; import cd.casic.ci.process.engine.runContext.BaseRunContext; @@ -11,13 +11,13 @@ import cd.casic.ci.process.process.converter.AflManagerConverter; import cd.casic.ci.process.process.dao.aflManager.AflCrashesInfoDao; import cd.casic.ci.process.process.dataObject.aflManager.AflCrashesInfo; import cd.casic.ci.process.process.dataObject.aflManager.AflInfo; -import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; 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 com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import de.danielbechler.util.Collections; @@ -73,21 +73,21 @@ public class AflCrashesInfoServiceImpl extends ServiceImpl resultList = SftpUploadUtil.findCreateTimeByCommand( - resourceMachine.getMachineHost(), - Integer.parseInt(resourceMachine.getSshPort()), + resourceMachine.getHostIp(), + resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath); @@ -114,8 +114,8 @@ public class AflCrashesInfoServiceImpl extends ServiceImpl fileResultList = SftpUploadUtil.findFileByteByCommand( - resourceMachine.getMachineHost(), - Integer.parseInt(resourceMachine.getSshPort()), + resourceMachine.getHostIp(), + resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath); @@ -141,12 +141,12 @@ public class AflCrashesInfoServiceImpl extends ServiceImpl files = SftpUploadUtil.listFilesInRemoteDirectory( - resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath); + resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath); if (!CollectionUtils.isEmpty(files)) { // 步骤4:批量复制文件到目标目录 Map copiedFiles = SftpUploadUtil.copyRemoteFilesToLocalMap( - resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(), null, files, "/home/ops/opsFile/crashes_result/" + UUID.randomUUID() + "/"); + resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, files, "/home/ops/opsFile/crashes_result/" + UUID.randomUUID() + "/"); System.out.println("共复制 " + copiedFiles.size() + " 个文件"); //绑定对应的文件路径 @@ -242,26 +242,26 @@ public class AflCrashesInfoServiceImpl extends ServiceImpl files = SftpUploadUtil.listFilesInRemoteDirectory( - resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath); + resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath); if (!CollectionUtils.isEmpty(files)){ aflCrashesResp.setImperfectionCount(files.size()); } //查询已验证和未验证缺陷数 - AflInfo aflInfo = SftpUploadUtil.downloadFileSftpForInputStreamAndSetAflInfo(resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(),null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/fuzzer_stats"); + AflInfo aflInfo = SftpUploadUtil.downloadFileSftpForInputStreamAndSetAflInfo(resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(),null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/fuzzer_stats"); if (!ObjectUtils.isEmpty(aflInfo)){ aflCrashesResp.setVerifiedCount(Integer.parseInt(aflInfo.getSavedCrashes())); aflCrashesResp.setUnverifiedCount(Integer.parseInt(aflInfo.getPendingFavs())); @@ -289,21 +289,21 @@ public class AflCrashesInfoServiceImpl extends ServiceImpl resultList = SftpUploadUtil.findCreateTimeByCommand( - resourceMachine.getMachineHost(), - Integer.parseInt(resourceMachine.getSshPort()), + resourceMachine.getHostIp(), + resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath); @@ -331,8 +331,8 @@ public class AflCrashesInfoServiceImpl extends ServiceImpl fileResultList = SftpUploadUtil.findFileByteByCommand( - resourceMachine.getMachineHost(), - Integer.parseInt(resourceMachine.getSshPort()), + resourceMachine.getHostIp(), + resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + crashesFilePath); diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflInfoServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflInfoServiceImpl.java index 50017cc5..f95efcc5 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflInfoServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/aflManager/impl/AflInfoServiceImpl.java @@ -3,20 +3,20 @@ package cd.casic.ci.process.process.service.aflManager.impl; import cd.casic.ci.process.dto.req.aflManager.AflManagerReq; import cd.casic.ci.process.dto.resp.aflManager.AflBaseInfoResp; import cd.casic.ci.process.dto.resp.aflManager.AflInfoResp; -import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; +import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp; import cd.casic.ci.process.engine.constant.PipelineVariableConstant; import cd.casic.ci.process.engine.manager.RunContextManager; import cd.casic.ci.process.engine.runContext.BaseRunContext; import cd.casic.ci.process.process.converter.AflManagerConverter; import cd.casic.ci.process.process.dao.aflManager.AflInfoDao; import cd.casic.ci.process.process.dataObject.aflManager.AflInfo; -import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; import cd.casic.ci.process.process.service.aflManager.AflInfoService; 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 com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import de.danielbechler.util.Collections; @@ -68,19 +68,17 @@ public class AflInfoServiceImpl extends ServiceImpl impleme throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源"); } - ResourceFindResp resourceById = resourceManagerService.findResourceById(resourceId); - if (resourceById == null || resourceById.getResourceMachine() == null) { + ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(resourceId); + if (resourceById == null || resourceById.getMachineInfo() == null) { throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误"); } - PipResourceMachine resourceMachine = resourceById.getResourceMachine(); - String password = CryptogramUtil.doDecrypt(resourceMachine.getPassword()); - resourceMachine.setPassword(password); - AflInfo aflInfo = SftpUploadUtil.downloadFileSftpForInputStreamAndSetAflInfo(resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(),null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/fuzzer_stats"); + MachineInfoDO resourceMachine = resourceById.getMachineInfo(); + 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<>(); sourceFilePaths.add(remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/fuzzer_stats"); - List strings = SftpUploadUtil.copyRemoteFilesToLocal(resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(), null, sourceFilePaths, "/home/ops/opsFile/fuzzer_result/" + UUID.randomUUID() + "/"); + List strings = SftpUploadUtil.copyRemoteFilesToLocal(resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, sourceFilePaths, "/home/ops/opsFile/fuzzer_result/" + UUID.randomUUID() + "/"); aflInfo.setFilePath(strings.get(0)); aflInfo.setPipelineId(req.getPipelineId()); @@ -128,15 +126,15 @@ public class AflInfoServiceImpl extends ServiceImpl impleme throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源"); } - ResourceFindResp resourceById = resourceManagerService.findResourceById(resourceId); - if (resourceById == null || resourceById.getResourceMachine() == null) { + ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(resourceId); + if (resourceById == null || resourceById.getMachineInfo() == null) { throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误"); } - PipResourceMachine resourceMachine = resourceById.getResourceMachine(); - String password = CryptogramUtil.doDecrypt(resourceMachine.getPassword()); + MachineInfoDO resourceMachine = resourceById.getMachineInfo(); + String password = resourceMachine.getPassword(); resourceMachine.setPassword(password); - AflInfo aflInfo = SftpUploadUtil.downloadFileSftpForInputStreamAndSetAflInfo(resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(),null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/fuzzer_stats"); + AflInfo aflInfo = SftpUploadUtil.downloadFileSftpForInputStreamAndSetAflInfo(resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(),null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/fuzzer_stats"); return AflManagerConverter.INSTANCE.toAflInfoResp(aflInfo); } @@ -211,18 +209,14 @@ public class AflInfoServiceImpl extends ServiceImpl impleme throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"未找到资源"); } - ResourceFindResp resourceById = resourceManagerService.findResourceById(resourceId); - if (resourceById == null || resourceById.getResourceMachine() == null) { + ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(resourceId); + if (resourceById == null || resourceById.getMachineInfo() == null) { throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源信息错误"); } - - PipResourceMachine resourceMachine = resourceById.getResourceMachine(); - String password = CryptogramUtil.doDecrypt(resourceMachine.getPassword()); - resourceMachine.setPassword(password); - + MachineInfoDO resourceMachine = resourceById.getMachineInfo(); //找出seed文件夹下的所有测试样例文件,计算数量 List files = SftpUploadUtil.listFilesInRemoteDirectory( - resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + "/SEED/"); + resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), 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 ec18a6e9..c12b02f5 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 @@ -2,20 +2,19 @@ package cd.casic.ci.process.process.service.aflManager.impl; import cd.casic.ci.process.dto.req.aflManager.AflManagerReq; import cd.casic.ci.process.dto.resp.aflManager.AflPlotInfoResp; -import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; +import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp; import cd.casic.ci.process.engine.constant.PipelineVariableConstant; import cd.casic.ci.process.engine.manager.RunContextManager; import cd.casic.ci.process.engine.runContext.BaseRunContext; import cd.casic.ci.process.process.converter.AflManagerConverter; import cd.casic.ci.process.process.dao.aflManager.AflPlotInfoDao; import cd.casic.ci.process.process.dataObject.aflManager.AflPlotInfo; -import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; import cd.casic.ci.process.process.service.aflManager.AflPlotInfoService; 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 com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import de.danielbechler.util.Collections; @@ -64,20 +63,17 @@ public class AflPlotInfoServiceImpl extends ServiceImpl sourceFilePaths = new ArrayList<>(); sourceFilePaths.add(remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/plot_data"); - List strings = SftpUploadUtil.copyRemoteFilesToLocal(resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(), null, sourceFilePaths, "/home/ops/opsFile/plot_result/" + UUID.randomUUID() + "/"); + List strings = SftpUploadUtil.copyRemoteFilesToLocal(resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, sourceFilePaths, "/home/ops/opsFile/plot_result/" + UUID.randomUUID() + "/"); aflPlotInfo.setFilePath(strings.get(0)); aflPlotInfo.setPipelineId(req.getPipelineId()); @@ -125,15 +121,13 @@ public class AflPlotInfoServiceImpl extends ServiceImpl resultList = SftpUploadUtil.findCreateTimeByCommand(resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/queue/"); + List resultList = SftpUploadUtil.findCreateTimeByCommand(resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + "/ai_afl/default/queue/"); //解析resultList @@ -190,23 +188,23 @@ public class AflSeedInfoServiceImpl extends ServiceImpl files = SftpUploadUtil.listFilesInRemoteDirectory( - resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + seedFilePath); + resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, remoteFilePath + "PIP_" + req.getPipelineId() + seedFilePath); if (!CollectionUtils.isEmpty(files)) { // 步骤2:批量复制文件到目标目录 List copiedFiles = SftpUploadUtil.copyRemoteFilesToLocal( - resourceMachine.getMachineHost(), Integer.parseInt(resourceMachine.getSshPort()), resourceMachine.getUsername(), resourceMachine.getPassword(), null, files, "/home/ops/opsFile/seed_result/" + UUID.randomUUID() + "/"); + resourceMachine.getHostIp(), resourceMachine.getSshPort(), resourceMachine.getUsername(), resourceMachine.getPassword(), null, files, "/home/ops/opsFile/seed_result/" + UUID.randomUUID() + "/"); System.out.println("共复制 " + copiedFiles.size() + " 个文件"); List aflSeedInfos = new ArrayList<>(0); diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/docker/DockerService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/docker/DockerService.java index 4ef03d27..282c5385 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/docker/DockerService.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/docker/DockerService.java @@ -5,6 +5,5 @@ import org.springframework.web.bind.annotation.PathVariable; import java.util.List; public interface DockerService { - List imageNameList(String resourceDetailId); List imageListByResourceId( String resourceId); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/docker/impl/DockerServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/docker/impl/DockerServiceImpl.java index fd89e426..c01ea32a 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/docker/impl/DockerServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/docker/impl/DockerServiceImpl.java @@ -1,8 +1,7 @@ package cd.casic.ci.process.process.service.docker.impl; import cd.casic.ci.process.dto.req.resource.ResourceQueryReq; -import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; -import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp; +import cd.casic.ci.process.dto.resp.resource.ResourceDetailResp; import cd.casic.ci.process.process.service.docker.DockerService; import cd.casic.ci.process.process.service.resource.ResourceManagerService; import cd.casic.framework.commons.exception.ServiceException; @@ -29,53 +28,10 @@ import static java.lang.String.format; public class DockerServiceImpl implements DockerService { @Resource private ResourceManagerService resourceManagerService; - @Override - public List imageNameList(String resourceDetailId) { - ResourceQueryReq req = new ResourceQueryReq(); - req.setType("docker"); - req.setId(resourceDetailId); - TaskResourceFindResp resourceListByType = resourceManagerService.findResourceListByType(req); - List dockerEndpointList = resourceListByType.getDockerEndpointList(); - if (CollectionUtils.isEmpty(dockerEndpointList)) { - return new ArrayList<>(); - } - DockerEndpointDo dockerInfo = dockerEndpointList.get(0); - - URI uri = null; - try { - uri = new URI(format("tcp://%s:%s", dockerInfo.getHost(), dockerInfo.getPort())); - } catch (URISyntaxException e) { - throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR); - } - - ApacheDockerHttpClient httpClient = new ApacheDockerHttpClient.Builder().dockerHost(uri).build(); - DockerClient build = null; - try{ - build = DockerClientBuilder.getInstance().withDockerHttpClient(httpClient).build(); - List exec = build.listImagesCmd().exec(); - List res = new LinkedList<>(); - for (Image image : exec) { - String[] repoTags = image.getRepoTags(); - if (image.getRepoTags() != null && repoTags.length > 0) { - res.add(repoTags[0]); - } - } - return res; - } finally { - if (build!=null) { - try { - build.close(); - } catch (IOException e) { - - } - } - } - } - @Override public List imageListByResourceId(String resourceId) { - ResourceFindResp resourceById = resourceManagerService.findResourceById(resourceId); - DockerEndpointDo dockerInfo = resourceById.getDockerEndpoint(); + ResourceDetailResp resourceById = resourceManagerService.findResourceDetailById(resourceId); + DockerEndpointDo dockerInfo = resourceById.getDockerInfo(); URI uri = null; try { uri = new URI(format("tcp://%s:%s", dockerInfo.getHost(), dockerInfo.getPort())); diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/machine/MachineInfoService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/machine/MachineInfoService.java deleted file mode 100644 index a94fe966..00000000 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/machine/MachineInfoService.java +++ /dev/null @@ -1,20 +0,0 @@ -package cd.casic.ci.process.process.service.machine; - - -import cd.casic.ci.process.dto.req.machine.MachineInfoReq; -import cd.casic.ci.process.dto.resp.machine.MachineInfoResp; -import cd.casic.ci.process.process.dataObject.machine.MachineInfo; -import com.baomidou.mybatisplus.extension.service.IService; - -import java.util.List; - -/** - * 机器信息表service接口 - * - * @author herenbin - * @date 2022-09-27 10:25:29 - */ -public interface MachineInfoService extends IService { - List list(MachineInfoReq req); - -} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/machine/impl/MachineInfoServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/machine/impl/MachineInfoServiceImpl.java deleted file mode 100644 index fff3a0dd..00000000 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/machine/impl/MachineInfoServiceImpl.java +++ /dev/null @@ -1,45 +0,0 @@ -package cd.casic.ci.process.process.service.machine.impl; - - -import cd.casic.ci.process.dto.req.machine.MachineInfoReq; -import cd.casic.ci.process.dto.resp.machine.MachineInfoResp; -import cd.casic.ci.process.process.converter.MachineConverter; -import cd.casic.ci.process.process.dao.machine.MachineInfoDao; -import cd.casic.ci.process.process.dataObject.machine.MachineInfo; -import cd.casic.ci.process.process.service.machine.MachineInfoService; -import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.List; - - -/** - * 机器信息表service接口实现类 - * @author herenbin - * @date 2022-09-27 10:25:29 - */ -@Slf4j -@Service -public class MachineInfoServiceImpl extends ServiceImpl implements MachineInfoService { - @Resource - private MachineInfoDao machineInfoDao; - - @Override - public List list(MachineInfoReq req) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); -// 根据机器名称 查询 - if (ObjectUtil.isNotEmpty(req.getMachineName())) { - wrapper.like(MachineInfo::getMachineName, req.getMachineName()); - } - // 根据机器状态 1有效 2无效 查询 - if (ObjectUtil.isNotEmpty(req.getMachineStatus())) { - wrapper.eq(MachineInfo::getMachineStatus, req.getMachineStatus()); - } - List machineInfos = machineInfoDao.selectList(wrapper); - return MachineConverter.INSTANCE.toRespList(machineInfos); - } -} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/resource/ResourceManagerService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/resource/ResourceManagerService.java index 795392a0..92c2ff6a 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/resource/ResourceManagerService.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/resource/ResourceManagerService.java @@ -1,15 +1,13 @@ package cd.casic.ci.process.process.service.resource; -import cd.casic.ci.process.dto.req.resource.ResourceQueryReq; -import cd.casic.ci.process.dto.req.resource.ResourceReq; -import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; -import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp; +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.process.dataObject.resource.PipResourceManager; -import cd.casic.framework.commons.pojo.PageResult; import com.baomidou.mybatisplus.extension.service.IService; -import jakarta.validation.Valid; -import java.util.List; + + /** * @author HopeLi @@ -19,19 +17,11 @@ import java.util.List; * @Description: */ public interface ResourceManagerService extends IService { - String createResource(@Valid ResourceReq resourceReq); - - void deleteResource(String id); - - void updateResource(@Valid ResourceReq resourceReq); - - ResourceFindResp findResourceById(String id); - - List findResourceList(@Valid ResourceQueryReq req); - - PageResult findResourcePage(@Valid ResourceQueryReq req); - - TaskResourceFindResp findResourceListByType(@Valid ResourceQueryReq req); - - List findResourceListForObjectByType(@Valid ResourceQueryReq req); + /** + * 创建||申请 资源 + * */ + void createResource(ResourceCreateReq req); + void updateResource(ResourceUpdateReq req); + ResourceDetailResp findResourceDetailById(String resourceId); + void deleteResource(String resourceId); } 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 ad3ae0ba..fb69e8d0 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 @@ -1,38 +1,26 @@ package cd.casic.ci.process.process.service.resource.impl; -import cd.casic.ci.process.dto.req.resource.ResourceQueryReq; -import cd.casic.ci.process.dto.req.resource.ResourceReq; -import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; -import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp; +import cd.casic.ci.process.constant.ResourceConstant; +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.process.converter.ResourceConverter; -import cd.casic.ci.process.process.dao.pipeline.PipResourceCloudDao; -import cd.casic.ci.process.process.dao.pipeline.PipResourceK8SDao; -import cd.casic.ci.process.process.dao.pipeline.PipResourceMachineDao; import cd.casic.ci.process.process.dao.pipeline.PipResourceManagerDao; -import cd.casic.ci.process.process.dataObject.resource.PipResourceCloud; -import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S; -import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; import cd.casic.ci.process.process.dataObject.resource.PipResourceManager; import cd.casic.ci.process.process.service.resource.ResourceManagerService; -import cd.casic.framework.commons.exception.ServiceException; -import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; -import cd.casic.framework.commons.pojo.PageResult; -import cd.casic.framework.security.dal.user.AdminUserDO; -import cd.casic.framework.tenant.core.service.AdminUserServiceImpl; import cd.casic.module.execute.docker.dao.DockerEndpointDao; import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +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.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.ObjectUtils; -import java.util.ArrayList; -import java.util.List; +import java.util.Objects; /** * @author HopeLi @@ -46,359 +34,97 @@ import java.util.List; public class ResourceManagerServiceImpl extends ServiceImpl implements ResourceManagerService { @Resource private PipResourceManagerDao pipResourceManagerDao; - - @Resource - private PipResourceMachineDao machineDao; - @Resource private DockerEndpointDao dockerEndpointDao; - @Resource - private PipResourceK8SDao k8SDao; - + private MachineInfoService machineInfoService; @Resource - private PipResourceCloudDao cloudDao; - - @Resource - private AdminUserServiceImpl adminUserService; - + private ResourceConverter converter; @Override - @Transactional(rollbackFor = Exception.class) - public String createResource(ResourceReq resourceReq) { - - PipResourceManager pipResourceManager = ResourceConverter.INSTANCE.toBean(resourceReq); - - //如果资源类型不属于弹性云,则新增,如果属于弹性云,则走申请流程 - if (!ObjectUtils.isEmpty(resourceReq.getResourceMachine())){ - PipResourceMachine resourceMachine = resourceReq.getResourceMachine(); - machineDao.insert(resourceMachine); - - pipResourceManager.setMachineId(resourceMachine.getId()); + public void createResource(ResourceCreateReq req) { + String resourceType = req.getResourceType(); + PipResourceManager manager = new PipResourceManager(); + manager.setResourceName(req.getResourceName()); + if (ResourceConstant.RES_TYPE_CUSTOM.equals(resourceType)) { + manager.setResourceType(ResourceConstant.RES_TYPE_CUSTOM); + Long machineInfoId = req.getMachineInfoId(); + MachineInfoDO machineInfoDO = machineInfoService.validateMachineInfoExists(machineInfoId); + manager.setMachineId(machineInfoDO.getId()); + // 判断docker是否需要新增docker记录 + if (Objects.nonNull(req.getDockerPort())) { + DockerEndpointDo dockerEndpoint = new DockerEndpointDo(); + dockerEndpoint.setName(machineInfoDO.getName()); + dockerEndpoint.setPort(req.getDockerPort()); + dockerEndpoint.setHost(machineInfoDO.getHostIp()); + dockerEndpoint.setType(DockerEndpoint.DockerEndpointTypeEnum.REMOTE); + dockerEndpointDao.insert(dockerEndpoint); + manager.setDockerId(dockerEndpoint.getId()); + } + } else if(ResourceConstant.RES_TYPE_CLOUD.equals(resourceType)){ + // 入库。申请资源等操作 } - if (!ObjectUtils.isEmpty(resourceReq.getPipResourceK8S())) { - PipResourceK8S pipResourceK8S = resourceReq.getPipResourceK8S(); - k8SDao.insert(pipResourceK8S); - - pipResourceManager.setK8sId(pipResourceK8S.getId()); - } - if (!ObjectUtils.isEmpty(resourceReq.getDockerEndpoint())) { - DockerEndpointDo dockerEndpoint = resourceReq.getDockerEndpoint(); - dockerEndpointDao.insert(dockerEndpoint); - - pipResourceManager.setDockerId(dockerEndpoint.getId()); - } - - if (!ObjectUtils.isEmpty(resourceReq.getPipResourceCloud())) { - PipResourceCloud pipResourceCloud = resourceReq.getPipResourceCloud(); - cloudDao.insert(pipResourceCloud); - - pipResourceManager.setCloudId(pipResourceCloud.getId()); - } - - pipResourceManagerDao.insert(pipResourceManager); - return pipResourceManager.getId(); } @Override - public void deleteResource(String id) { - PipResourceManager pipResourceManager = pipResourceManagerDao.selectById(id); - if (!StringUtils.isEmpty(pipResourceManager.getMachineId())){ - machineDao.deleteById(pipResourceManager.getMachineId()); + public void updateResource(ResourceUpdateReq req) { + String resourceType = req.getResourceType(); + String id = req.getId(); + PipResourceManager manager = pipResourceManagerDao.selectById(id); + // 同类型资源修改 + if (manager.getResourceType().equals(resourceType)) { + if (ResourceConstant.RES_TYPE_CUSTOM.equals(resourceType)) { + manager.setResourceType(ResourceConstant.RES_TYPE_CUSTOM); + Long machineInfoId = req.getMachineInfoId(); + MachineInfoDO machineInfoDO = machineInfoService.validateMachineInfoExists(machineInfoId); + manager.setMachineId(machineInfoDO.getId()); + // 判断docker是否需要新增docker记录, + // 1.之前没有维护docker信息,之后维护了 + // 2.维护docker信息,之后需要修改 + // 3.之前维护了docker信息,之后不想维护了 + DockerEndpointDo dockerEndpoint = new DockerEndpointDo(); + dockerEndpoint.setName(machineInfoDO.getName()); + dockerEndpoint.setPort(req.getDockerPort()); + dockerEndpoint.setHost(machineInfoDO.getHostIp()); + dockerEndpoint.setType(DockerEndpoint.DockerEndpointTypeEnum.REMOTE); + if (StringUtils.isEmpty(manager.getDockerId()) &&Objects.nonNull(req.getDockerPort())) { + dockerEndpointDao.insert(dockerEndpoint); + manager.setDockerId(dockerEndpoint.getId()); + } else if (!StringUtils.isEmpty(manager.getDockerId()) &&Objects.nonNull(req.getDockerPort())) { + dockerEndpointDao.updateById(dockerEndpoint); + manager.setDockerId(dockerEndpoint.getId()); + } else if (!StringUtils.isEmpty(manager.getDockerId()) &&!Objects.nonNull(req.getDockerPort())) { + String dockerId = manager.getDockerId(); + dockerEndpointDao.deleteById(dockerId); + manager.setDockerId(null); + } + } else if(ResourceConstant.RES_TYPE_CLOUD.equals(resourceType)){ + // 入库。申请资源等操作 + } + } else { + //天河国云资源转机器资源是否需要销毁原本资源?还是说可以自由切换预留入口 } - if (!StringUtils.isEmpty(pipResourceManager.getK8sId())){ - k8SDao.deleteById(pipResourceManager.getK8sId()); - } - if (!StringUtils.isEmpty(pipResourceManager.getDockerId())){ - dockerEndpointDao.deleteById(pipResourceManager.getDockerId()); - } - if (!StringUtils.isEmpty(pipResourceManager.getCloudId())){ - cloudDao.deleteById(pipResourceManager.getCloudId()); - } - pipResourceManagerDao.deleteById(id); + pipResourceManagerDao.updateById(manager); } @Override - public void updateResource(ResourceReq resourceReq) { - PipResourceManager temp = pipResourceManagerDao.selectById(resourceReq.getId()); - temp.setResourceName(resourceReq.getResourceName()); - - //先删除旧的资源信息 - if (!StringUtils.isEmpty(temp.getMachineId())){ - machineDao.deleteById(temp.getMachineId()); - } - - - if (!StringUtils.isEmpty(temp.getK8sId())){ - k8SDao.deleteById(temp.getK8sId()); - - } - - if (!StringUtils.isEmpty(temp.getDockerId())){ - dockerEndpointDao.deleteById(temp.getDockerId()); - - } - - if (!StringUtils.isEmpty(temp.getCloudId())){ - cloudDao.deleteById(temp.getCloudId()); - - } - - - //根据新资源信息新增 - if (!ObjectUtils.isEmpty(resourceReq.getResourceMachine())){ - PipResourceMachine resourceMachine = resourceReq.getResourceMachine(); - machineDao.insert(resourceMachine); - - temp.setMachineId(resourceMachine.getId()); - } - if (!ObjectUtils.isEmpty(resourceReq.getPipResourceK8S())) { - PipResourceK8S pipResourceK8S = resourceReq.getPipResourceK8S(); - k8SDao.insert(pipResourceK8S); - - temp.setK8sId(pipResourceK8S.getId()); - } - if (!ObjectUtils.isEmpty(resourceReq.getDockerEndpoint())) { - DockerEndpointDo dockerEndpoint = resourceReq.getDockerEndpoint(); - dockerEndpointDao.insert(dockerEndpoint); - - temp.setDockerId(dockerEndpoint.getId()); - } - - if (!ObjectUtils.isEmpty(resourceReq.getPipResourceCloud())) { - PipResourceCloud pipResourceCloud = resourceReq.getPipResourceCloud(); - cloudDao.insert(pipResourceCloud); - - temp.setCloudId(pipResourceCloud.getId()); - } - pipResourceManagerDao.updateById(temp); - } - - @Override - public ResourceFindResp findResourceById(String id) { - PipResourceManager pipResourceManager = pipResourceManagerDao.selectById(id); - if (ObjectUtils.isEmpty(pipResourceManager)){ - throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源不存在"); - } - ResourceFindResp resp = ResourceConverter.INSTANCE.toResp(pipResourceManager); - - setResource(resp); - setUserName(resp); + public ResourceDetailResp findResourceDetailById(String id) { + PipResourceManager manager = pipResourceManagerDao.selectById(id); + Long machineId = manager.getMachineId(); + String dockerId = manager.getDockerId(); + MachineInfoDO machineInfoDO = machineInfoService.validateMachineInfoExists(machineId); + DockerEndpointDo dockerEndpointDo = dockerEndpointDao.selectById(dockerId); + ResourceDetailResp resp = converter.converter(manager); + resp.setMachineInfo(machineInfoDO); + resp.setDockerInfo(dockerEndpointDo); return resp; } - - @Override - public List findResourceList(ResourceQueryReq query) { - QueryWrapper wrapper = new QueryWrapper<>(); - if (!ObjectUtils.isEmpty(query.getId())){ - wrapper.eq("id",query.getId()); - } - if (!ObjectUtils.isEmpty(query.getIdList())){ - wrapper.in("id",query.getId()); - } - if (!ObjectUtils.isEmpty(query.getResourceName())){ - wrapper.like("resource_name",query.getResourceName()); - } - if (!ObjectUtils.isEmpty(query.getMachineId())){ - wrapper.eq("machine_id",query.getMachineId()); - } - if (!ObjectUtils.isEmpty(query.getK8sId())){ - wrapper.eq("k8s_id",query.getK8sId()); - } - if (!ObjectUtils.isEmpty(query.getDockerId())){ - wrapper.eq("docker_id",query.getDockerId()); - } - if (!ObjectUtils.isEmpty(query.getCloudId())){ - wrapper.eq("cloud_id",query.getCloudId()); - } - if (!ObjectUtils.isEmpty(query.getCreator())){ - wrapper.eq("creator",query.getCreator()); - } - List pipResourceManagerList = pipResourceManagerDao.selectList(wrapper); - - if (ObjectUtils.isEmpty(pipResourceManagerList)){ - return new ArrayList<>(0); - } - - List respList = ResourceConverter.INSTANCE.toRespList(pipResourceManagerList); - - //对资源进行赋值 - respList.forEach(this::setResource); - respList.forEach(this::setUserName); - - return respList; - } - - @Override - public PageResult findResourcePage(ResourceQueryReq query) { - - QueryWrapper wrapper = new QueryWrapper<>(); - if (!ObjectUtils.isEmpty(query.getId())){ - wrapper.eq("id",query.getId()); - } - if (!ObjectUtils.isEmpty(query.getIdList())){ - wrapper.in("id",query.getId()); - } - if (!ObjectUtils.isEmpty(query.getResourceName())){ - wrapper.like("resource_name",query.getResourceName()); - } - if (!ObjectUtils.isEmpty(query.getMachineId())){ - wrapper.eq("machine_id",query.getMachineId()); - } - if (!ObjectUtils.isEmpty(query.getK8sId())){ - wrapper.eq("k8s_id",query.getK8sId()); - } - if (!ObjectUtils.isEmpty(query.getDockerId())){ - wrapper.eq("docker_id",query.getDockerId()); - } - if (!ObjectUtils.isEmpty(query.getCloudId())){ - wrapper.eq("cloud_id",query.getCloudId()); - } - if (!ObjectUtils.isEmpty(query.getCreator())){ - wrapper.eq("creator",query.getCreator()); - } - Page pipResourceTempPage = pipResourceManagerDao.selectPage(new Page<>(query.getPageNo(), query.getPageSize()), wrapper); - - if (ObjectUtils.isEmpty(pipResourceTempPage)){ - return new PageResult<>(); - } - - List respList = ResourceConverter.INSTANCE.toRespList(pipResourceTempPage.getRecords()); - - //对资源进行赋值 - respList.forEach(this::setResource); - respList.forEach(this::setUserName); - - PageResult pageResult = new PageResult<>(respList,pipResourceTempPage.getTotal(),pipResourceTempPage.getCurrent(),pipResourceTempPage.getSize()); - return pageResult; - } - - @Override - public TaskResourceFindResp findResourceListByType(ResourceQueryReq query) { - TaskResourceFindResp taskResourceFindResp = new TaskResourceFindResp(); - - if (StringUtils.isEmpty(query.getType())){ - throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源类型不可为空"); - } - - switch (query.getType()) { - case "docker": - QueryWrapper dockerWrapper = new QueryWrapper<>(); - if (!StringUtils.isEmpty(query.getId())){ - dockerWrapper.eq("id",query.getId()); - } - List resourceDockerEndpoints = dockerEndpointDao.selectList(dockerWrapper); - if (!ObjectUtils.isEmpty(resourceDockerEndpoints)){ - taskResourceFindResp.setDockerEndpointList(resourceDockerEndpoints); - } - return taskResourceFindResp; - case "k8s": - QueryWrapper k8sWrapper = new QueryWrapper<>(); - if (!StringUtils.isEmpty(query.getId())){ - k8sWrapper.eq("id",query.getId()); - } - List resourceK8S = k8SDao.selectList(k8sWrapper); - if (!ObjectUtils.isEmpty(resourceK8S)){ - taskResourceFindResp.setResourceK8SList(resourceK8S); - } - return taskResourceFindResp; - case "machine": - QueryWrapper machineWrapper = new QueryWrapper<>(); - if (!StringUtils.isEmpty(query.getId())){ - machineWrapper.eq("id",query.getId()); - } - List resourceMachines = machineDao.selectList(machineWrapper); - if (!ObjectUtils.isEmpty(resourceMachines)){ - taskResourceFindResp.setResourceMachineList(resourceMachines); - } - return taskResourceFindResp; - case "cloud": - QueryWrapper cloudWrapper = new QueryWrapper<>(); - if (!StringUtils.isEmpty(query.getId())){ - cloudWrapper.eq("id",query.getId()); - } - List resourceClouds = cloudDao.selectList(cloudWrapper); - if (!ObjectUtils.isEmpty(resourceClouds)){ - taskResourceFindResp.setResourceCloudList(resourceClouds); - } - return taskResourceFindResp; - default: - throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源类型错误"); - } - } - - - @Override - public List findResourceListForObjectByType(ResourceQueryReq query) { - if (StringUtils.isEmpty(query.getType())){ - throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源类型不可为空"); - } - - switch (query.getType()) { - case "docker": - QueryWrapper dockerWrapper = new QueryWrapper<>(); - if (!StringUtils.isEmpty(query.getId())){ - dockerWrapper.eq("id",query.getId()); - } - return dockerEndpointDao.selectList(dockerWrapper); - case "k8s": - QueryWrapper k8sWrapper = new QueryWrapper<>(); - if (!StringUtils.isEmpty(query.getId())){ - k8sWrapper.eq("id",query.getId()); - } - return k8SDao.selectList(k8sWrapper); - case "machine": - QueryWrapper machineWrapper = new QueryWrapper<>(); - if (!StringUtils.isEmpty(query.getId())){ - machineWrapper.eq("id",query.getId()); - } - return machineDao.selectList(machineWrapper); - case "cloud": - QueryWrapper cloudWrapper = new QueryWrapper<>(); - if (!StringUtils.isEmpty(query.getId())){ - cloudWrapper.eq("id",query.getId()); - } - return cloudDao.selectList(cloudWrapper); - default: - throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源类型错误"); - } - } - - private void setResource(ResourceFindResp resourceFindResp) { - if (!StringUtils.isEmpty(resourceFindResp.getMachineId())){ - PipResourceMachine resourceMachine = machineDao.selectById(resourceFindResp.getMachineId()); - resourceFindResp.setResourceMachine(resourceMachine); - } - if (!StringUtils.isEmpty(resourceFindResp.getK8sId())) { - PipResourceK8S pipResourceK8S = k8SDao.selectById(resourceFindResp.getK8sId()); - resourceFindResp.setPipResourceK8S(pipResourceK8S); - } - if (!StringUtils.isEmpty(resourceFindResp.getDockerId())) { - DockerEndpointDo dockerEndpoint = dockerEndpointDao.selectById(resourceFindResp.getDockerId()); - resourceFindResp.setDockerEndpoint(dockerEndpoint); - } - if (!StringUtils.isEmpty(resourceFindResp.getCloudId())) { - PipResourceCloud resourceCloud = cloudDao.selectById(resourceFindResp.getCloudId()); - resourceFindResp.setPipResourceCloud(resourceCloud); - } - } - - - private void setUserName(ResourceFindResp resp) { - if (!StringUtils.isEmpty(resp.getCreator())){ - AdminUserDO user = adminUserService.getUser(Long.valueOf(resp.getCreator())); - if (!ObjectUtils.isEmpty(user)){ - resp.setCreatorName(user.getUsername()); - } - } - - if (!StringUtils.isEmpty(resp.getUpdater())){ - AdminUserDO user = adminUserService.getUser(Long.valueOf(resp.getUpdater())); - if (!ObjectUtils.isEmpty(user)){ - resp.setUpdaterName(user.getUsername()); - } + public void deleteResource(String resourceId) { + if (StringUtils.isEmpty(resourceId)) { + return; } + pipResourceManagerDao.deleteById(resourceId); } } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/impl/TargetManagerServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/impl/TargetManagerServiceImpl.java index 7b070111..da5f8e8d 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/impl/TargetManagerServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/impl/TargetManagerServiceImpl.java @@ -37,6 +37,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.UUID; @@ -247,6 +248,9 @@ public class TargetManagerServiceImpl extends ServiceImplcd.casic.boot spring-boot-starter-test + + cd.casic.boot + module-ci-machine + ${revision} + diff --git a/ops-server/src/main/resources/application-local.yaml b/ops-server/src/main/resources/application-local.yaml index 2367598c..8367ac09 100644 --- a/ops-server/src/main/resources/application-local.yaml +++ b/ops-server/src/main/resources/application-local.yaml @@ -70,10 +70,10 @@ spring: # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: -# host: 127.0.0.1 # 地址 -# port: 16379 # 端口 - host: 192.168.1.120 # 地址 - port: 6379 # 端口 + host: 127.0.0.1 # 地址 + port: 16379 # 端口 +# host: 192.168.1.120 # 地址 +# port: 6379 # 端口 database: 0 # 数据库索引 # password: dev # 密码,建议生产环境开启 @@ -168,7 +168,7 @@ sast: captcha: clouditera base-url: "http://39.155.212.109:22880" #远程 # base-url: "http://192.168.31.93" #本地 -tartet: +target: file-upload: remoteHost: 175.6.27.252 remotePort: 22 diff --git a/ops-server/src/test/java/cd/casic/server/ResourceTest.java b/ops-server/src/test/java/cd/casic/server/ResourceTest.java index 0fc13cef..685dcb29 100644 --- a/ops-server/src/test/java/cd/casic/server/ResourceTest.java +++ b/ops-server/src/test/java/cd/casic/server/ResourceTest.java @@ -1,15 +1,6 @@ package cd.casic.server; import cd.casic.ci.process.dto.req.resource.ResourceReq; -import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; -import cd.casic.ci.process.process.converter.ResourceConverter; -import cd.casic.ci.process.process.dao.pipeline.PipResourceCloudDao; -import cd.casic.ci.process.process.dao.pipeline.PipResourceK8SDao; -import cd.casic.ci.process.process.dao.pipeline.PipResourceMachineDao; -import cd.casic.ci.process.process.dao.pipeline.PipResourceManagerDao; -import cd.casic.ci.process.process.dataObject.resource.PipResourceCloud; -import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S; -import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; import cd.casic.ci.process.process.dataObject.resource.PipResourceManager; import cd.casic.ci.process.process.service.resource.impl.ResourceManagerServiceImpl; import cd.casic.module.execute.docker.dao.DockerEndpointDao; @@ -31,297 +22,297 @@ import static org.mockito.Mockito.*; @ActiveProfiles("local") @Slf4j public class ResourceTest { - @Autowired - private ResourceManagerServiceImpl resourceManagerService; - - @MockBean - private PipResourceManagerDao pipResourceManagerDao; - - @MockBean - private PipResourceMachineDao machineDao; - - @MockBean - private PipResourceK8SDao k8SDao; - - @MockBean - private DockerEndpointDao dockerEndpointDao; - - @MockBean - private PipResourceCloudDao cloudDao; - - @MockBean - private ResourceConverter resourceConverter; - - @Test - void testCreateResourceWithMachine() { - // Arrange - ResourceReq resourceReq = new ResourceReq(); - PipResourceMachine resourceMachine = new PipResourceMachine(); - resourceMachine.setId("machineId"); - resourceReq.setResourceMachine(resourceMachine); - - when(machineDao.insert(any(PipResourceMachine.class))).thenAnswer(invocation -> { - PipResourceMachine machine = invocation.getArgument(0); - machine.setId("machineId"); // 模拟插入后生成ID - return null; - }); - - when(pipResourceManagerDao.insert(any(PipResourceManager.class))).thenAnswer(invocation -> { - PipResourceManager manager = invocation.getArgument(0); - manager.setId("resourceId"); // 模拟插入后生成ID - return null; - }); - - // Act - String result = resourceManagerService.createResource(resourceReq); - - // Assert - verify(machineDao, times(1)).insert(any(PipResourceMachine.class)); - verify(pipResourceManagerDao, times(1)).insert(any(PipResourceManager.class)); - - // 验证返回的ID - assert result.equals("resourceId"); - } - - @Test - void testCreateResourceWithK8s() { - // Arrange - ResourceReq resourceReq = new ResourceReq(); - PipResourceK8S pipResourceK8S = new PipResourceK8S(); - pipResourceK8S.setId("k8sId"); - resourceReq.setPipResourceK8S(pipResourceK8S); - - when(k8SDao.insert(any(PipResourceK8S.class))).thenAnswer(invocation -> { - PipResourceK8S k8s = invocation.getArgument(0); - k8s.setId("k8sId"); // 模拟插入后生成ID - return null; - }); - - when(pipResourceManagerDao.insert(any(PipResourceManager.class))).thenAnswer(invocation -> { - PipResourceManager manager = invocation.getArgument(0); - manager.setId("resourceId"); // 模拟插入后生成ID - return null; - }); - - // Act - String result = resourceManagerService.createResource(resourceReq); - - // Assert - verify(k8SDao, times(1)).insert(any(PipResourceK8S.class)); - verify(pipResourceManagerDao, times(1)).insert(any(PipResourceManager.class)); - - // 验证返回的ID - assert result.equals("resourceId"); - } - - @Test - void testCreateResourceWithDocker() { - // Arrange - ResourceReq resourceReq = new ResourceReq(); - DockerEndpointDo dockerEndpoint = new DockerEndpointDo(); - dockerEndpoint.setId("dockerId"); - resourceReq.setDockerEndpoint(dockerEndpoint); - - when(dockerEndpointDao.insert(any(DockerEndpointDo.class))).thenAnswer(invocation -> { - DockerEndpointDo endpoint = invocation.getArgument(0); - endpoint.setId("dockerId"); // 模拟插入后生成ID - return null; - }); - - when(pipResourceManagerDao.insert(any(PipResourceManager.class))).thenAnswer(invocation -> { - PipResourceManager manager = invocation.getArgument(0); - manager.setId("resourceId"); // 模拟插入后生成ID - return null; - }); - - // Act - String result = resourceManagerService.createResource(resourceReq); - - // Assert - verify(dockerEndpointDao, times(1)).insert(any(DockerEndpointDo.class)); - verify(pipResourceManagerDao, times(1)).insert(any(PipResourceManager.class)); - - // 验证返回的ID - assert result.equals("resourceId"); - } - - @Test - void testCreateResourceWithCloud() { - // Arrange - ResourceReq resourceReq = new ResourceReq(); - PipResourceCloud pipResourceCloud = new PipResourceCloud(); - pipResourceCloud.setId("cloudId"); - resourceReq.setPipResourceCloud(pipResourceCloud); - - when(cloudDao.insert(any(PipResourceCloud.class))).thenAnswer(invocation -> { - PipResourceCloud cloud = invocation.getArgument(0); - cloud.setId("cloudId"); // 模拟插入后生成ID - return null; - }); - - when(pipResourceManagerDao.insert(any(PipResourceManager.class))).thenAnswer(invocation -> { - PipResourceManager manager = invocation.getArgument(0); - manager.setId("resourceId"); // 模拟插入后生成ID - return null; - }); - - // Act - String result = resourceManagerService.createResource(resourceReq); - - // Assert - verify(cloudDao, times(1)).insert(any(PipResourceCloud.class)); - verify(pipResourceManagerDao, times(1)).insert(any(PipResourceManager.class)); - - // 验证返回的ID - assert result.equals("resourceId"); - } - - - - @Test - void testDeleteResource_WithAllSubResources() { - // Arrange - String resourceId = "res123"; - PipResourceManager pipResourceManager = new PipResourceManager(); - pipResourceManager.setId(resourceId); - pipResourceManager.setMachineId("machine123"); - pipResourceManager.setK8sId("k8s123"); - pipResourceManager.setDockerId("docker123"); - pipResourceManager.setCloudId("cloud123"); - - Mockito.when(pipResourceManagerDao.selectById(resourceId)).thenReturn(pipResourceManager); - - // Act - resourceManagerService.deleteResource(resourceId); - - // Assert - Mockito.verify(machineDao, Mockito.times(1)).deleteById("machine123"); - Mockito.verify(k8SDao, Mockito.times(1)).deleteById("k8s123"); - Mockito.verify(dockerEndpointDao, Mockito.times(1)).deleteById("docker123"); - Mockito.verify(cloudDao, Mockito.times(1)).deleteById("cloud123"); - Mockito.verify(pipResourceManagerDao, Mockito.times(1)).deleteById(resourceId); - } - - @Test - void testDeleteResource_WithOnlyMachineResource() { - // Arrange - String resourceId = "res123"; - PipResourceManager pipResourceManager = new PipResourceManager(); - pipResourceManager.setId(resourceId); - pipResourceManager.setMachineId("machine123"); - - Mockito.when(pipResourceManagerDao.selectById(resourceId)).thenReturn(pipResourceManager); - - // Act - resourceManagerService.deleteResource(resourceId); - - // Assert - Mockito.verify(machineDao, Mockito.times(1)).deleteById("machine123"); - Mockito.verify(k8SDao, never()).deleteById(anyString()); - Mockito.verify(dockerEndpointDao, never()).deleteById(anyString()); - Mockito.verify(cloudDao, never()).deleteById(anyString()); - Mockito.verify(pipResourceManagerDao, Mockito.times(1)).deleteById(resourceId); - } - - @Test - void testDeleteResource_ResourceNotFound() { - // Arrange - String resourceId = "nonExistent"; - - Mockito.when(pipResourceManagerDao.selectById(resourceId)).thenReturn(null); - - // Act & Assert - try { - resourceManagerService.deleteResource(resourceId); - } catch (Exception e) { - // Expect no exception, just skip deletion - } - - Mockito.verify(machineDao, never()).deleteById(anyString()); - Mockito.verify(k8SDao, never()).deleteById(anyString()); - Mockito.verify(dockerEndpointDao, never()).deleteById(anyString()); - Mockito.verify(cloudDao, never()).deleteById(anyString()); - Mockito.verify(pipResourceManagerDao, never()).deleteById(anyString()); - } - - - @Test - void testDeleteResourceWithAllSubResources() { - // Arrange - String resourceId = "resourceId"; - PipResourceManager pipResourceManager = new PipResourceManager(); - pipResourceManager.setId(resourceId); - pipResourceManager.setMachineId("machineId"); - pipResourceManager.setK8sId("k8sId"); - pipResourceManager.setDockerId("dockerId"); - pipResourceManager.setCloudId("cloudId"); - - when(pipResourceManagerDao.selectById(resourceId)).thenReturn(pipResourceManager); - - // Act - resourceManagerService.deleteResource(resourceId); - - // Assert - verify(pipResourceManagerDao, times(1)).selectById(resourceId); - verify(machineDao, times(1)).deleteById("machineId"); - verify(k8SDao, times(1)).deleteById("k8sId"); - verify(dockerEndpointDao, times(1)).deleteById("dockerId"); - verify(cloudDao, times(1)).deleteById("cloudId"); - verify(pipResourceManagerDao, times(1)).deleteById(resourceId); - } - - @Test - void testDeleteResourceWithOnlyMachine() { - // Arrange - String resourceId = "resourceId"; - PipResourceManager pipResourceManager = new PipResourceManager(); - pipResourceManager.setId(resourceId); - pipResourceManager.setMachineId("machineId"); - - when(pipResourceManagerDao.selectById(resourceId)).thenReturn(pipResourceManager); - - // Act - resourceManagerService.deleteResource(resourceId); - - // Assert - verify(pipResourceManagerDao, times(1)).selectById(resourceId); - verify(machineDao, times(1)).deleteById("machineId"); - verify(k8SDao, never()).deleteById(anyString()); - verify(dockerEndpointDao, never()).deleteById(anyString()); - verify(cloudDao, never()).deleteById(anyString()); - verify(pipResourceManagerDao, times(1)).deleteById(resourceId); - } - - @Test - void testDeleteResourceWithNoSubResources() { - // Arrange - String resourceId = "resourceId"; - PipResourceManager pipResourceManager = new PipResourceManager(); - pipResourceManager.setId(resourceId); - - when(pipResourceManagerDao.selectById(resourceId)).thenReturn(pipResourceManager); - - // Act - resourceManagerService.deleteResource(resourceId); - - // Assert - verify(pipResourceManagerDao, times(1)).selectById(resourceId); - verify(machineDao, never()).deleteById(anyString()); - verify(k8SDao, never()).deleteById(anyString()); - verify(dockerEndpointDao, never()).deleteById(anyString()); - verify(cloudDao, never()).deleteById(anyString()); - verify(pipResourceManagerDao, times(1)).deleteById(resourceId); - } - - - - @Test - void testFindResourceById_ResourceExists() { - - ResourceFindResp resourceById = resourceManagerService.findResourceById("1"); - - assertNull(resourceById); - } +// @Autowired +// private ResourceManagerServiceImpl resourceManagerService; +// +// @MockBean +// private PipResourceManagerDao pipResourceManagerDao; +// +// @MockBean +// private PipResourceMachineDao machineDao; +// +// @MockBean +// private PipResourceK8SDao k8SDao; +// +// @MockBean +// private DockerEndpointDao dockerEndpointDao; +// +// @MockBean +// private PipResourceCloudDao cloudDao; +// +// @MockBean +// private ResourceConverter resourceConverter; +// +// @Test +// void testCreateResourceWithMachine() { +// // Arrange +// ResourceReq resourceReq = new ResourceReq(); +// PipResourceMachine resourceMachine = new PipResourceMachine(); +// resourceMachine.setId("machineId"); +// resourceReq.setResourceMachine(resourceMachine); +// +// when(machineDao.insert(any(PipResourceMachine.class))).thenAnswer(invocation -> { +// PipResourceMachine machine = invocation.getArgument(0); +// machine.setId("machineId"); // 模拟插入后生成ID +// return null; +// }); +// +// when(pipResourceManagerDao.insert(any(PipResourceManager.class))).thenAnswer(invocation -> { +// PipResourceManager manager = invocation.getArgument(0); +// manager.setId("resourceId"); // 模拟插入后生成ID +// return null; +// }); +// +// // Act +// String result = resourceManagerService.createResource(resourceReq); +// +// // Assert +// verify(machineDao, times(1)).insert(any(PipResourceMachine.class)); +// verify(pipResourceManagerDao, times(1)).insert(any(PipResourceManager.class)); +// +// // 验证返回的ID +// assert result.equals("resourceId"); +// } +// +// @Test +// void testCreateResourceWithK8s() { +// // Arrange +// ResourceReq resourceReq = new ResourceReq(); +// PipResourceK8S pipResourceK8S = new PipResourceK8S(); +// pipResourceK8S.setId("k8sId"); +// resourceReq.setPipResourceK8S(pipResourceK8S); +// +// when(k8SDao.insert(any(PipResourceK8S.class))).thenAnswer(invocation -> { +// PipResourceK8S k8s = invocation.getArgument(0); +// k8s.setId("k8sId"); // 模拟插入后生成ID +// return null; +// }); +// +// when(pipResourceManagerDao.insert(any(PipResourceManager.class))).thenAnswer(invocation -> { +// PipResourceManager manager = invocation.getArgument(0); +// manager.setId("resourceId"); // 模拟插入后生成ID +// return null; +// }); +// +// // Act +// String result = resourceManagerService.createResource(resourceReq); +// +// // Assert +// verify(k8SDao, times(1)).insert(any(PipResourceK8S.class)); +// verify(pipResourceManagerDao, times(1)).insert(any(PipResourceManager.class)); +// +// // 验证返回的ID +// assert result.equals("resourceId"); +// } +// +// @Test +// void testCreateResourceWithDocker() { +// // Arrange +// ResourceReq resourceReq = new ResourceReq(); +// DockerEndpointDo dockerEndpoint = new DockerEndpointDo(); +// dockerEndpoint.setId("dockerId"); +// resourceReq.setDockerEndpoint(dockerEndpoint); +// +// when(dockerEndpointDao.insert(any(DockerEndpointDo.class))).thenAnswer(invocation -> { +// DockerEndpointDo endpoint = invocation.getArgument(0); +// endpoint.setId("dockerId"); // 模拟插入后生成ID +// return null; +// }); +// +// when(pipResourceManagerDao.insert(any(PipResourceManager.class))).thenAnswer(invocation -> { +// PipResourceManager manager = invocation.getArgument(0); +// manager.setId("resourceId"); // 模拟插入后生成ID +// return null; +// }); +// +// // Act +// String result = resourceManagerService.createResource(resourceReq); +// +// // Assert +// verify(dockerEndpointDao, times(1)).insert(any(DockerEndpointDo.class)); +// verify(pipResourceManagerDao, times(1)).insert(any(PipResourceManager.class)); +// +// // 验证返回的ID +// assert result.equals("resourceId"); +// } +// +// @Test +// void testCreateResourceWithCloud() { +// // Arrange +// ResourceReq resourceReq = new ResourceReq(); +// PipResourceCloud pipResourceCloud = new PipResourceCloud(); +// pipResourceCloud.setId("cloudId"); +// resourceReq.setPipResourceCloud(pipResourceCloud); +// +// when(cloudDao.insert(any(PipResourceCloud.class))).thenAnswer(invocation -> { +// PipResourceCloud cloud = invocation.getArgument(0); +// cloud.setId("cloudId"); // 模拟插入后生成ID +// return null; +// }); +// +// when(pipResourceManagerDao.insert(any(PipResourceManager.class))).thenAnswer(invocation -> { +// PipResourceManager manager = invocation.getArgument(0); +// manager.setId("resourceId"); // 模拟插入后生成ID +// return null; +// }); +// +// // Act +// String result = resourceManagerService.createResource(resourceReq); +// +// // Assert +// verify(cloudDao, times(1)).insert(any(PipResourceCloud.class)); +// verify(pipResourceManagerDao, times(1)).insert(any(PipResourceManager.class)); +// +// // 验证返回的ID +// assert result.equals("resourceId"); +// } +// +// +// +// @Test +// void testDeleteResource_WithAllSubResources() { +// // Arrange +// String resourceId = "res123"; +// PipResourceManager pipResourceManager = new PipResourceManager(); +// pipResourceManager.setId(resourceId); +// pipResourceManager.setMachineId("machine123"); +// pipResourceManager.setK8sId("k8s123"); +// pipResourceManager.setDockerId("docker123"); +// pipResourceManager.setCloudId("cloud123"); +// +// Mockito.when(pipResourceManagerDao.selectById(resourceId)).thenReturn(pipResourceManager); +// +// // Act +// resourceManagerService.deleteResource(resourceId); +// +// // Assert +// Mockito.verify(machineDao, Mockito.times(1)).deleteById("machine123"); +// Mockito.verify(k8SDao, Mockito.times(1)).deleteById("k8s123"); +// Mockito.verify(dockerEndpointDao, Mockito.times(1)).deleteById("docker123"); +// Mockito.verify(cloudDao, Mockito.times(1)).deleteById("cloud123"); +// Mockito.verify(pipResourceManagerDao, Mockito.times(1)).deleteById(resourceId); +// } +// +// @Test +// void testDeleteResource_WithOnlyMachineResource() { +// // Arrange +// String resourceId = "res123"; +// PipResourceManager pipResourceManager = new PipResourceManager(); +// pipResourceManager.setId(resourceId); +// pipResourceManager.setMachineId("machine123"); +// +// Mockito.when(pipResourceManagerDao.selectById(resourceId)).thenReturn(pipResourceManager); +// +// // Act +// resourceManagerService.deleteResource(resourceId); +// +// // Assert +// Mockito.verify(machineDao, Mockito.times(1)).deleteById("machine123"); +// Mockito.verify(k8SDao, never()).deleteById(anyString()); +// Mockito.verify(dockerEndpointDao, never()).deleteById(anyString()); +// Mockito.verify(cloudDao, never()).deleteById(anyString()); +// Mockito.verify(pipResourceManagerDao, Mockito.times(1)).deleteById(resourceId); +// } +// +// @Test +// void testDeleteResource_ResourceNotFound() { +// // Arrange +// String resourceId = "nonExistent"; +// +// Mockito.when(pipResourceManagerDao.selectById(resourceId)).thenReturn(null); +// +// // Act & Assert +// try { +// resourceManagerService.deleteResource(resourceId); +// } catch (Exception e) { +// // Expect no exception, just skip deletion +// } +// +// Mockito.verify(machineDao, never()).deleteById(anyString()); +// Mockito.verify(k8SDao, never()).deleteById(anyString()); +// Mockito.verify(dockerEndpointDao, never()).deleteById(anyString()); +// Mockito.verify(cloudDao, never()).deleteById(anyString()); +// Mockito.verify(pipResourceManagerDao, never()).deleteById(anyString()); +// } +// +// +// @Test +// void testDeleteResourceWithAllSubResources() { +// // Arrange +// String resourceId = "resourceId"; +// PipResourceManager pipResourceManager = new PipResourceManager(); +// pipResourceManager.setId(resourceId); +// pipResourceManager.setMachineId("machineId"); +// pipResourceManager.setK8sId("k8sId"); +// pipResourceManager.setDockerId("dockerId"); +// pipResourceManager.setCloudId("cloudId"); +// +// when(pipResourceManagerDao.selectById(resourceId)).thenReturn(pipResourceManager); +// +// // Act +// resourceManagerService.deleteResource(resourceId); +// +// // Assert +// verify(pipResourceManagerDao, times(1)).selectById(resourceId); +// verify(machineDao, times(1)).deleteById("machineId"); +// verify(k8SDao, times(1)).deleteById("k8sId"); +// verify(dockerEndpointDao, times(1)).deleteById("dockerId"); +// verify(cloudDao, times(1)).deleteById("cloudId"); +// verify(pipResourceManagerDao, times(1)).deleteById(resourceId); +// } +// +// @Test +// void testDeleteResourceWithOnlyMachine() { +// // Arrange +// String resourceId = "resourceId"; +// PipResourceManager pipResourceManager = new PipResourceManager(); +// pipResourceManager.setId(resourceId); +// pipResourceManager.setMachineId("machineId"); +// +// when(pipResourceManagerDao.selectById(resourceId)).thenReturn(pipResourceManager); +// +// // Act +// resourceManagerService.deleteResource(resourceId); +// +// // Assert +// verify(pipResourceManagerDao, times(1)).selectById(resourceId); +// verify(machineDao, times(1)).deleteById("machineId"); +// verify(k8SDao, never()).deleteById(anyString()); +// verify(dockerEndpointDao, never()).deleteById(anyString()); +// verify(cloudDao, never()).deleteById(anyString()); +// verify(pipResourceManagerDao, times(1)).deleteById(resourceId); +// } +// +// @Test +// void testDeleteResourceWithNoSubResources() { +// // Arrange +// String resourceId = "resourceId"; +// PipResourceManager pipResourceManager = new PipResourceManager(); +// pipResourceManager.setId(resourceId); +// +// when(pipResourceManagerDao.selectById(resourceId)).thenReturn(pipResourceManager); +// +// // Act +// resourceManagerService.deleteResource(resourceId); +// +// // Assert +// verify(pipResourceManagerDao, times(1)).selectById(resourceId); +// verify(machineDao, never()).deleteById(anyString()); +// verify(k8SDao, never()).deleteById(anyString()); +// verify(dockerEndpointDao, never()).deleteById(anyString()); +// verify(cloudDao, never()).deleteById(anyString()); +// verify(pipResourceManagerDao, times(1)).deleteById(resourceId); +// } +// +// +// +// @Test +// void testFindResourceById_ResourceExists() { +// +// ResourceFindResp resourceById = resourceManagerService.findResourceById("1"); +// +// assertNull(resourceById); +// } } 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 26c10c68..7ef747c0 100644 --- a/ops-server/src/test/java/cd/casic/server/SftpTest.java +++ b/ops-server/src/test/java/cd/casic/server/SftpTest.java @@ -1,7 +1,5 @@ package cd.casic.server; -import cd.casic.ci.process.process.dataObject.machine.MachineInfo; -import cd.casic.ci.process.process.service.machine.MachineInfoService; import cd.casic.ci.process.util.CryptogramUtil; import cd.casic.ci.process.util.SftpUploadUtil; import com.jcraft.jsch.*; @@ -18,17 +16,8 @@ import java.util.Vector; @SpringBootTest(classes = {OpsServerApplication.class}) @ActiveProfiles("local") public class SftpTest { - @Resource - MachineInfoService machineInfoService; - @Test - public void test01() throws SftpUploadUtil.SftpUploadException { - MachineInfo byId = machineInfoService.getById("1"); - File file = new File("src/test/java/cd/casic/server/text.txt"); - System.out.println(file.getAbsolutePath()); - System.out.println(file.exists()); - System.out.println(file.getName()); - SftpUploadUtil.uploadFileViaSftp(byId.getMachineHost(),byId.getSshPort(),byId.getUsername(), CryptogramUtil.doDecrypt(byId.getPassword()),null,file.getAbsolutePath(),"/home/casic/706/ai_test_527","到此一游.txt"); - } + + @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"); 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 9c43c154..c79110e6 100644 --- a/ops-server/src/test/java/cd/casic/server/ZipFileTest.java +++ b/ops-server/src/test/java/cd/casic/server/ZipFileTest.java @@ -1,6 +1,5 @@ package cd.casic.server; -import cd.casic.ci.process.process.dataObject.machine.MachineInfo; import cd.casic.ci.process.properties.TargetFileUploadProperties; import cd.casic.ci.process.util.CryptogramUtil; import cd.casic.ci.process.util.SftpUploadUtil;