From 67eade8fec651074991842a909e466f13085e6a2 Mon Sep 17 00:00:00 2001 From: even <827656971@qq.com> Date: Thu, 26 Jun 2025 15:44:00 +0800 Subject: [PATCH] =?UTF-8?q?AFL=E7=9B=B8=E5=85=B3work=E4=BF=AE=E6=94=B9,?= =?UTF-8?q?=E7=BC=96=E8=AF=91=E7=BB=93=E6=9E=9C=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cd/casic/ci/api/VariableController.java | 84 ++----------------- .../dto/req/testCase/TestCaseInfoReq.java | 2 + .../constant/AFLSlotCompileConstant.java | 1 + .../constant/TestCaseGenerationConstant.java | 5 +- .../worker/afl/AFLSlotCompileWorker.java | 48 +++++++++++ .../process/engine/worker/afl/AFLWorker.java | 4 +- .../worker/afl/TestCaseGenerationWorker.java | 67 +++++++++++---- .../dataObject/testCase/TestCaseInfo.java | 2 + .../service/variable/VariableService.java | 5 ++ .../variable/impl/VariableServiceImpl.java | 25 ++++++ .../test/java/cd/casic/server/DockerTest.java | 8 +- .../test/java/cd/casic/server/SftpTest.java | 31 +++++++ 12 files changed, 186 insertions(+), 96 deletions(-) create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/variable/VariableService.java create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/variable/impl/VariableServiceImpl.java diff --git a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/VariableController.java b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/VariableController.java index c1c8b817..41e7df5e 100644 --- a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/VariableController.java +++ b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/VariableController.java @@ -3,15 +3,14 @@ package cd.casic.ci.api; import cd.casic.ci.process.dto.req.variable.VariableReq; import cd.casic.ci.process.dto.resp.variable.VariableResp; +import cd.casic.ci.process.process.service.variable.VariableService; import cd.casic.framework.commons.pojo.CommonResult; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; +import jakarta.annotation.Resource; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.List; @@ -23,76 +22,11 @@ import java.util.List; @RestController @RequestMapping("/pipelineVariable") public class VariableController { - /** - * @pi.name:创建流水线变量 - * @pi.path:/pipelineVariable/createVariable - * @pi.methodType:post - * @pi.request-type:json - * @pi.param: model=variable - */ - @RequestMapping(path="/createVariable",method = RequestMethod.POST) - public CommonResult createVariable(@RequestBody @NotNull @Valid VariableReq variable){ - String variableId = ""; -// String variableId = variableServer.createVariable(variable); - return CommonResult.success(variableId); - } - - /** - * @pi.name:删除流水线变量 - * @pi.path:/pipelineVariable/deleteVariable - * @pi.methodType:post - * @pi.request-type: formdata - * @pi.param: name=varId;dataType=string;value=varId; - */ - @RequestMapping(path="/deleteVariable",method = RequestMethod.POST) - public CommonResult deleteVariable( @NotNull String varId){ -// variableServer.deleteVariable(varId); - return CommonResult.success(""); - } - - /** - * @pi.name:更新流水线变量 - * @pi.path:/pipelineVariable/createVariable - * @pi.methodType:post - * @pi.request-type:json - * @pi.param: model=variable - */ - @RequestMapping(path="/updateVariable",method = RequestMethod.POST) - public CommonResult updateVariable(@RequestBody @NotNull @Valid VariableReq variable){ -// variableServer.updateVariable(variable); - return CommonResult.success(""); - } - - /** - * @pi.name:查询流水线任务变量 - * @pi.path:/pipelineVariable/findAllVariable - * @pi.methodType:post - * @pi.request-type: formdata - * @pi.param: name=taskId;dataType=string;value=任务id; - */ - @RequestMapping(path="/findAllVariable",method = RequestMethod.POST) - public CommonResult> findAllVariable(@NotNull String taskId){ -// List allVariable = variableServer.findAllVariable(taskId); - String varListStr = "[\n" + - " {\n" + - " \"varId\": \"04b629ce9234\",\n" + - " \"createTime\": \"2025-05-10 14:25:24\",\n" + - " \"varType\": \"str\",\n" + - " \"type\": 1,\n" + - " \"taskId\": \"a69119cfbbde\",\n" + - " \"pipelineId\": null,\n" + - " \"varKey\": \"testVal\",\n" + - " \"varValue\": \"123\",\n" + - " \"varValues\": null,\n" + - " \"valueList\": null\n" + - " }\n" + - "]"; - JSONArray objects = JSON.parseArray(varListStr); - List allVariable = new ArrayList<>(objects.size()); - for (int i = 0; i < objects.size(); i++) { - VariableResp object = objects.getObject(i, VariableResp.class); - allVariable.add(object); - } - return CommonResult.success(allVariable); + @Resource + private VariableService variableService; + @GetMapping("/getPipelineContextGlobalVariable/{pipelineId}/{varName}") + public CommonResult getPipelineContextGlobalVariable(@PathVariable("pipelineId") String pipelineId,@PathVariable("varName") String varName){ + Object variable = variableService.getPipelineContextGlobalVariable(pipelineId, varName); + return CommonResult.success(variable); } } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/testCase/TestCaseInfoReq.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/testCase/TestCaseInfoReq.java index 1878595e..81387b6a 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/testCase/TestCaseInfoReq.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/testCase/TestCaseInfoReq.java @@ -18,6 +18,8 @@ public class TestCaseInfoReq { // 测试文件地址(存储路径或URL) private String testFileList; + private String testFilePath; + // 描述信息 private String remark; } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/constant/AFLSlotCompileConstant.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/constant/AFLSlotCompileConstant.java index 6d158047..350cd8fc 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/constant/AFLSlotCompileConstant.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/constant/AFLSlotCompileConstant.java @@ -4,4 +4,5 @@ public class AFLSlotCompileConstant { public static final String MANAGER_ID = "managerId"; public static final String IMAGE_NAME = "imageName"; public static final String COMMAND_SCRIPT ="buildScript"; + public static final String COMPILE_RESULT ="compileResult"; } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/constant/TestCaseGenerationConstant.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/constant/TestCaseGenerationConstant.java index a061dd70..197115fa 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/constant/TestCaseGenerationConstant.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/constant/TestCaseGenerationConstant.java @@ -7,7 +7,10 @@ public class TestCaseGenerationConstant { public static final String COMMAND_SCRIPT ="buildScript"; public static final String CASE_TYPE_KEY ="caseType"; public static final String CASE_TYPE_AI ="AI"; - public static final String CASE_TYPE_TYPE ="FILE"; + public static final String CASE_TYPE_FILE ="FILE"; + public static final String CASE_TYPE_ITEM = "TEST"; public static final String SEED_SOURCE = "filePath"; public static final String SEED_TARGET = "outputDir"; + public static final String ITEM_LIST = "itemList"; + public static final String MANAGER_ID = "managerId"; } 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 a38475ad..c455f240 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 @@ -9,6 +9,7 @@ import cd.casic.ci.process.engine.constant.DIYImageExecuteCommandConstant; import cd.casic.ci.process.engine.constant.PipelineGlobalVariableConstant; import cd.casic.ci.process.engine.runContext.TaskRunContext; import cd.casic.ci.process.engine.worker.base.DockerWorker; +import cd.casic.ci.process.process.dataObject.machine.MachineInfo; import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline; import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; import cd.casic.ci.process.process.dataObject.target.TargetVersion; @@ -20,12 +21,17 @@ import cd.casic.ci.process.util.SftpUploadUtil; import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import cd.casic.module.execute.docker.dataobject.dto.DockerEndpointDo; import com.alibaba.fastjson.JSON; +import com.jcraft.jsch.*; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.util.CollectionUtils; import java.io.File; +import java.util.ArrayList; +import java.util.List; import java.util.Map; +import java.util.Vector; @WorkAtom(taskType = "AFL_SLOT_COMPILE") @Slf4j @@ -100,6 +106,7 @@ public class AFLSlotCompileWorker extends DockerWorker { // 更新全局变量 // /test目录下当前流水线工作目录 globalVariables.put(PipelineGlobalVariableConstant.AFL_DOCKER_WORK_DIR_KEY,workDir); + putInCompileResult(context,realPath+File.separator+getSourceName(fileName),machineInfo); } private String handleZipFile(String fileName){ if (StringUtils.isEmpty(fileName)) { @@ -113,14 +120,55 @@ public class AFLSlotCompileWorker extends DockerWorker { String suffix = fileName.substring(i + 1); if ("zip".equals(suffix)) { String cmd ="unzip -o "+fileName+"\n" + + "chmod -R o+rwx "+prefix+"/\n"+ "cd "+prefix+"\n"; return cmd; } if ("tar".equals(suffix)) { String cmd ="tar -zxvf "+fileName+"\n" + + "chmod -R o+rwx "+prefix+"/\n"+ "cd "+prefix+"\n"; return cmd; } return ""; } + + private void putInCompileResult(TaskRunContext context,String path, PipResourceMachine machineInfo){ + String host = machineInfo.getMachineHost(); + String user = machineInfo.getPassword(); + String password = machineInfo.getPassword(); + List fileNameList = null; + try { + JSch jsch = new JSch(); + Session session = jsch.getSession(user, host, 22); + session.setPassword(password); + session.setConfig("StrictHostKeyChecking", "no"); + session.connect(); + ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp"); + sftpChannel.connect(); + Vector files = sftpChannel.ls(path); + fileNameList = new ArrayList<>(files.size()); + for (ChannelSftp.LsEntry file : files) { + if (!file.getAttrs().isDir()) { + fileNameList.add(file.getFilename()); + } + } + sftpChannel.disconnect(); + session.disconnect(); + } catch (JSchException | SftpException e) { + e.printStackTrace(); + } + if (!CollectionUtils.isEmpty(fileNameList)&&context!=null) { + Map taskProperties = context.getGlobalVariables(); + // 放入全局上下文中 + taskProperties.put(AFLSlotCompileConstant.COMPILE_RESULT,fileNameList); + } + } + public String getSourceName(String fileName){ + int dotIndex = fileName.lastIndexOf("."); + if (dotIndex!=-1) { + return fileName.substring(0, dotIndex); + } + return ""; + } } 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 be12310d..1a8dc196 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 @@ -69,7 +69,7 @@ public class AFLWorker extends DockerWorker { Double timeHours = Double.valueOf(String.valueOf(timeObj)); String commandScript = "docker run -v "+volumeWorkDirPath+":/test -it "+imageName+" bash\n" + "cd " +PipelineGlobalVariableConstant.AFL_DOCKER_BASE_DIR+File.separator+workDir+ "\n"+ - getSourceName(fileName) + + cdSourceName(fileName) + "mkdir -p "+PipelineGlobalVariableConstant.AFL_DOCKER_BASE_DIR+File.separator+output+"\n" + "afl-fuzz -i "+PipelineGlobalVariableConstant.AFL_DOCKER_BASE_DIR+File.separator+seedPath+" -o "+PipelineGlobalVariableConstant.AFL_DOCKER_BASE_DIR+File.separator+output+" "+commandEnd; try { @@ -89,7 +89,7 @@ public class AFLWorker extends DockerWorker { localVariables.put(DIYImageExecuteCommandConstant.STATUS_CODE, statusCode); } } - public String getSourceName(String fileName){ + public String cdSourceName(String fileName){ int dotIndex = fileName.lastIndexOf("."); if (dotIndex!=-1) { return "cd "+fileName.substring(0, dotIndex)+"\n"; 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 862767e1..e16b9f2b 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,6 +3,7 @@ package cd.casic.ci.process.engine.worker.afl; import cd.casic.ci.process.common.WorkAtom; import cd.casic.ci.process.dto.req.resource.ResourceQueryReq; +import cd.casic.ci.process.dto.req.testCase.TestCaseInfoReq; import cd.casic.ci.process.dto.resp.resource.ResourceFindResp; import cd.casic.ci.process.dto.resp.taskResource.TaskResourceFindResp; import cd.casic.ci.process.engine.constant.DIYImageExecuteCommandConstant; @@ -14,19 +15,27 @@ import cd.casic.ci.process.engine.worker.base.SshWorker; import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline; import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine; import cd.casic.ci.process.process.dataObject.task.PipTask; +import cd.casic.ci.process.process.dataObject.testCase.TestCaseInfo; +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 com.alibaba.fastjson.JSON; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.util.CollectionUtils; import java.io.File; +import java.util.List; import java.util.Map; +import java.util.Objects; @WorkAtom(taskType = "TEST_CASE_GENERATION") @Slf4j public class TestCaseGenerationWorker extends DockerWorker { + @Resource + private TestCaseInfoService testCaseInfoService; @Override public void execute(TaskRunContext context) { int statusCode = -1; @@ -38,6 +47,8 @@ public class TestCaseGenerationWorker extends DockerWorker { Object caseType = taskProperties.get(TestCaseGenerationConstant.CASE_TYPE_KEY); String binaryName = taskProperties.get("binaryName") instanceof String ? ((String) taskProperties.get("binaryName")) : null; String managerId = taskProperties.get("managerId") instanceof String ? ((String) taskProperties.get("managerId")) : null; + Object itemListObject = taskProperties.get(TestCaseGenerationConstant.ITEM_LIST); + List itemList = JSON.parseArray(JSON.toJSONString(itemListObject),String.class); ResourceFindResp resourceById = resourceManagerService.findResourceById(managerId); String machineId = resourceById.getMachineId(); String dockerId = resourceById.getDockerId(); @@ -65,27 +76,51 @@ public class TestCaseGenerationWorker extends DockerWorker { log.info("测试用例生成-AI生成,实际执行命令:{}" , runScript); //获取机器 dockerRun(runScript,dockerInfo,context); - } else { + } else if (TestCaseGenerationConstant.CASE_TYPE_FILE.equals(caseType)){ // 文件上传 - String filePath = taskProperties.get(TestCaseGenerationConstant.SEED_SOURCE) instanceof String ? ((String) taskProperties.get(TestCaseGenerationConstant.SEED_SOURCE)) : null; - if (StringUtils.isEmpty(filePath)) { + Object filePathObj = taskProperties.get(TestCaseGenerationConstant.SEED_SOURCE); + log.info("当前测试用例taskProperties:{}",taskProperties); + if (Objects.isNull(filePathObj)) { append(context,"缺少文件"); toBadEnding(); } - File file = new File(filePath); - String seedTarget = PipelineGlobalVariableConstant.AFL_VOLUME_WORK_DIR_PREFIX+File.separator+seedPath; - // 将文件上传到服务器的 目录底下 - log.info("测试用例选用上传模式,种子文件路径:{},种子上传路径:{}",filePath,seedTarget); - append(context,"测试用例选用上传模式,种子文件路径:"+filePath+",种子上传路径:"+seedPath); - try { - SftpUploadUtil.uploadFileViaSftp( - machineInfo.getMachineHost() - ,Integer.valueOf(machineInfo.getSshPort()),machineInfo.getUsername(),CryptogramUtil.doDecrypt(machineInfo.getPassword()),"",filePath,seedTarget,file.getName()); - } catch (SftpUploadUtil.SftpUploadException e) { - append(context,"seed文件上传失败"); - log.error("seed文件上传失败",e); + List filePathList = JSON.parseArray(JSON.toJSONString(filePathObj),String.class); + for (String filePath : filePathList) { + File file = new File(filePath); + String seedTarget = PipelineGlobalVariableConstant.AFL_VOLUME_WORK_DIR_PREFIX+File.separator+seedPath; + // 将文件上传到服务器的 目录底下 + log.info("测试用例选用上传模式,种子文件路径:{},种子上传路径:{}",filePath,seedTarget); + append(context,"测试用例选用上传模式,种子文件路径:"+filePath+",种子上传路径:"+seedPath); + try { + SftpUploadUtil.uploadFileViaSftp( + machineInfo.getMachineHost() + ,Integer.valueOf(machineInfo.getSshPort()),machineInfo.getUsername(),CryptogramUtil.doDecrypt(machineInfo.getPassword()),"",filePath,seedTarget,file.getName()); + } catch (SftpUploadUtil.SftpUploadException e) { + append(context,"seed文件上传失败"); + log.error("seed文件上传失败",e); + } + append(context,file.getName()+"上传文件成功!"); + } + }else if (TestCaseGenerationConstant.CASE_TYPE_ITEM.equals(caseType)){ + List testCaseInfos = testCaseInfoService.listByIds(itemList); + String seedTarget = PipelineGlobalVariableConstant.AFL_VOLUME_WORK_DIR_PREFIX+File.separator+seedPath; + for (TestCaseInfo testCaseInfo : testCaseInfos) { + String testFilePath = testCaseInfo.getTestFilePath(); + if (StringUtils.isEmpty(testFilePath)) { + continue; + } + try { + append(context,"当前上传文件:"+testCaseInfo.getFileName()); + SftpUploadUtil.uploadFileViaSftp( + machineInfo.getMachineHost() + ,Integer.valueOf(machineInfo.getSshPort()) + ,machineInfo.getUsername() + ,CryptogramUtil.doDecrypt(machineInfo.getPassword()) + ,"", testFilePath,seedTarget,testCaseInfo.getFileName()); + } catch (SftpUploadUtil.SftpUploadException e) { + toBadEnding(); + } } - append(context,"上传文件成功!"); } globalVariables.put(PipelineGlobalVariableConstant.AFL_DOCKER_SEED_PATH_KEY,seedPath); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/testCase/TestCaseInfo.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/testCase/TestCaseInfo.java index 016b72ca..a1bc12bb 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/testCase/TestCaseInfo.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/testCase/TestCaseInfo.java @@ -29,6 +29,8 @@ public class TestCaseInfo extends PipBaseElement { // 测试文件地址(存储路径或URL) private String testFileList; + private String testFilePath; + // 描述信息 private String remark; } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/variable/VariableService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/variable/VariableService.java new file mode 100644 index 00000000..48293818 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/variable/VariableService.java @@ -0,0 +1,5 @@ +package cd.casic.ci.process.process.service.variable; + +public interface VariableService { + Object getPipelineContextGlobalVariable(String pipelineId,String varName); +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/variable/impl/VariableServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/variable/impl/VariableServiceImpl.java new file mode 100644 index 00000000..eabce159 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/variable/impl/VariableServiceImpl.java @@ -0,0 +1,25 @@ +package cd.casic.ci.process.process.service.variable.impl; + +import cd.casic.ci.process.engine.constant.AFLSlotCompileConstant; +import cd.casic.ci.process.engine.manager.RunContextManager; +import cd.casic.ci.process.engine.runContext.BaseRunContext; +import cd.casic.ci.process.process.service.variable.VariableService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.util.Map; + +@Service +public class VariableServiceImpl implements VariableService { + @Resource + private RunContextManager contextManager; + @Override + public Object getPipelineContextGlobalVariable(String pipelineId, String varName) { + BaseRunContext context = contextManager.getContext(pipelineId); + if (context== null) { + return ""; + } + Map globalVariables = context.getGlobalVariables(); + return globalVariables.get(varName); + } +} diff --git a/ops-server/src/test/java/cd/casic/server/DockerTest.java b/ops-server/src/test/java/cd/casic/server/DockerTest.java index 741afdec..66f4f3ff 100644 --- a/ops-server/src/test/java/cd/casic/server/DockerTest.java +++ b/ops-server/src/test/java/cd/casic/server/DockerTest.java @@ -1,4 +1,5 @@ package cd.casic.server; +import cd.casic.ci.process.util.CryptogramUtil; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.command.CreateContainerResponse; import com.github.dockerjava.api.command.ExecCreateCmdResponse; @@ -199,7 +200,7 @@ public class DockerTest { } @Test public void imageList() throws URISyntaxException { - URI uri = new URI(format("tcp://%s:%s", "175.6.27.228", "22375")); + URI uri = new URI(format("tcp://%s:%s", "175.6.27.158", "22375")); ApacheDockerHttpClient httpClient = new ApacheDockerHttpClient.Builder().dockerHost(uri).build(); DockerClient build = DockerClientBuilder.getInstance().withDockerHttpClient(httpClient).build(); @@ -216,7 +217,10 @@ public class DockerTest { } System.out.println(exec); - + } + @Test + public void encode(){ + System.out.println(CryptogramUtil.doEncrypt("Hunter@2024")); } } 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 202409b2..cbba6dc9 100644 --- a/ops-server/src/test/java/cd/casic/server/SftpTest.java +++ b/ops-server/src/test/java/cd/casic/server/SftpTest.java @@ -4,12 +4,14 @@ 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.*; import jakarta.annotation.Resource; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import java.io.File; +import java.util.Vector; @SpringBootTest(classes = {OpsServerApplication.class}) @ActiveProfiles("local") @@ -33,4 +35,33 @@ public class SftpTest { public void test03(){ System.out.println(CryptogramUtil.doEncrypt("hnidc0327cn!@#xhh")); } + @Test + public void getFileList(){ + String host = "175.6.27.158"; + String user = "ubuntu"; + String password = "Hunter@2024"; + String remotePath = "/home/casic/706/yunqi/PIP_725054435889385472/pcre2-master"; + + try { + JSch jsch = new JSch(); + Session session = jsch.getSession(user, host, 22); + session.setPassword(password); + session.setConfig("StrictHostKeyChecking", "no"); + session.connect(); + + ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp"); + sftpChannel.connect(); + Vector files = sftpChannel.ls(remotePath); + + for (ChannelSftp.LsEntry file : files) { + if (!file.getAttrs().isDir()) { + System.out.println("文件: " + file.getFilename()); + } + } + sftpChannel.disconnect(); + session.disconnect(); + } catch (JSchException | SftpException e) { + e.printStackTrace(); + } + } }