From 70552a714abd4b952199fa4dd4b82e76bd51c088 Mon Sep 17 00:00:00 2001 From: even <827656971@qq.com> Date: Wed, 9 Jul 2025 14:50:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8Bzip?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ci/api/TestCaseManagerController.java | 14 ++- .../dto/resp/testCase/TestCaseInfoResp.java | 2 + .../engine/worker/DBFuzzTestingWorker.java | 103 +++++++++++++++++- .../testCase/TestCaseManagerService.java | 6 + .../impl/TestCaseManagerServiceImpl.java | 62 +++++++++-- .../TargetFileUploadProperties.java | 10 +- .../test/java/cd/casic/server/SftpTest.java | 2 + .../java/cd/casic/server/ZipFileTest.java | 69 ++++++++++++ 8 files changed, 244 insertions(+), 24 deletions(-) create mode 100644 ops-server/src/test/java/cd/casic/server/ZipFileTest.java diff --git a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/TestCaseManagerController.java b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/TestCaseManagerController.java index 6b77e5fb..859b5d1b 100644 --- a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/TestCaseManagerController.java +++ b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/TestCaseManagerController.java @@ -8,14 +8,15 @@ import cd.casic.ci.process.process.dataObject.base.BaseIdReq; import cd.casic.ci.process.process.service.testCase.TestCaseManagerService; import cd.casic.framework.commons.pojo.CommonResult; import cd.casic.framework.commons.pojo.PageResult; +import com.jcraft.jsch.JSchException; +import com.jcraft.jsch.SftpException; import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; 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; +import org.springframework.web.bind.annotation.*; +import java.io.IOException; import java.util.List; /** @@ -83,5 +84,8 @@ public class TestCaseManagerController { return CommonResult.success(resp); } - + @GetMapping("/downLoadById") + public void downLoadByManagerId(@RequestParam String managerId, HttpServletResponse response){ + testCaseManagerService.downLoadById(managerId,response); + } } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/testCase/TestCaseInfoResp.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/testCase/TestCaseInfoResp.java index a58dbb2e..b81ef46b 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/testCase/TestCaseInfoResp.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/resp/testCase/TestCaseInfoResp.java @@ -22,6 +22,8 @@ public class TestCaseInfoResp { // 测试文件地址(存储路径或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/worker/DBFuzzTestingWorker.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/DBFuzzTestingWorker.java index 859f257b..209f4eb9 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/DBFuzzTestingWorker.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/worker/DBFuzzTestingWorker.java @@ -4,9 +4,14 @@ 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.process.dataObject.base.PipBaseElement; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; +import java.util.HashMap; + /** * 数据库模糊测试 * */ @@ -17,9 +22,99 @@ public class DBFuzzTestingWorker extends BaseWorker { @Override public void execute(TaskRunContext context) { - PipBaseElement contextDef = context.getContextDef(); - String id = contextDef.getId(); - log.info("==============触发worker执行========"); - log.info("==========运行context:{}===========", JSON.toJSONString(context)); +// PipBaseElement contextDef = context.getContextDef(); +// String id = contextDef.getId(); +// log.info("==============触发worker执行========"); +// log.info("==========运行context:{}===========", JSON.toJSONString(context)); +// int statusCode = -1; +// +// String login = "http://192.168.100.100:10200/oauth/token"; +// String create = "http://192.168.100.100:10200/api/fuzz/add"; +// String control = "http://192.168.100.100:10200/api/fuzz/control"; +// String getTestDetail = "http://192.168.100.100:10200/api/fuzz/getTestDetail"; +// String genReport = "http://192.168.100.100:10200/api/fuzz/genReport"; +//// static String = "http://192.168.100.100:10200/api/fuzz/add"; +// PipelineNodeConfigInfo nodeConfigInfo = workerParam.getPipelineNodeConfigInfo(); +// String taskId = workerParam.getPipelineLogger().getUuid(); +// NodeLogger nodeLogger = nodeLoggerThreadLocal.get(); +// +// try { +// log.info("attr : {}", nodeConfigInfo.getInfo()); +// log.info("节点信息:" + nodeConfigInfo.getInfo()); +// //将节点的配置信息反编译成对象 +// DbTestConfigInfo dbTestConfigInfo = JSON.parseObject(nodeConfigInfo.getInfo(), DbTestConfigInfo.class); +// HashMap hashMap = new HashMap<>(); +// hashMap.put("code", "f258d8cc7585bc71a10e9f9edba017f7"); +// hashMap.put("grant_type", "client_code"); +// hashMap.put("client_id", "client"); +// HttpResponse logRes = HttpRequest.post(login) +// .form(hashMap)/*.header(Header.CONTENT_TYPE, String.valueOf(ContentType.APPLICATION_JSON))*/.execute(); +// log.info(String.valueOf(logRes.isOk())); +// if (!logRes.isOk()) { +// nodeLogger.appendNow("获取token失败"); +// } +// JSONObject loginJson = JSONObject.parseObject(logRes.body()); +// String accessToken = loginJson.get("access_token").toString(); +// nodeLogger.appendNow("authorize success\n"); +// nodeLogger.appendNow("access_token is " + accessToken); +//// 2、 create project +// JSONObject jsonObject = new JSONObject(); +// jsonObject.put("node", dbTestConfigInfo.getNode()); +// jsonObject.put("engineType", "1"); +// jsonObject.put("taskId", taskId); +// jsonObject.put("taskParams", ""); +// jsonObject.put("taskName", dbTestConfigInfo.getTaskName()); +// HttpResponse createRes = HttpRequest.post(create) +// .body(String.valueOf(jsonObject)).bearerAuth(accessToken).execute(); +// if (!createRes.isOk()) { +// nodeLogger.appendNow("创建项目失败"); +// return String.valueOf(statusCode); +// } +// JSONObject taskjson = JSONObject.parseObject(createRes.body()); +// nodeLogger.appendNow("create project success\n"); +// nodeLogger.appendNow("project taskId is " + taskId); +//// 3、 启动停止测试 +// JSONObject controlObject = new JSONObject(); +// controlObject.put("taskId", taskId); +// // 1 start other stop +// controlObject.put("code", 1); +// HttpResponse controlRes = HttpRequest.post(control) +// .body(String.valueOf(controlObject)).bearerAuth(accessToken).execute(); +// log.info(String.valueOf(controlRes.isOk())); +// if (!controlRes.isOk()) { +// nodeLogger.appendNow("启动项目失败"); +// return String.valueOf(statusCode); +// +// } +// JSONObject controlJson = JSONObject.parseObject(createRes.body()); +// nodeLogger.appendNow("control start success\n"); +// nodeLogger.appendNow("control start code is " + controlJson.get("data\n")); +//// 4、 获取测试详情保存历史数据 +// HashMap haap = new HashMap<>(); +// haap.put("taskId", taskId); +// HttpResponse testDetail = HttpRequest.get(getTestDetail) +// .form(haap).bearerAuth(accessToken).execute(); +// if (!testDetail.isOk()) { +// nodeLogger.appendNow("获取测试详情失败"); +// return String.valueOf(statusCode); +// } +// JSONObject testDetailBody = JSONObject.parseObject(testDetail.body()); +// log.info(testDetailBody.toString()); +// FuzzDbTest fuzzDbTest = new FuzzDbTest(); +// fuzzDbTest.setNodeUuid(nodeConfigInfo.getNodeUuid()); +// fuzzDbTest.setTaskId(taskId); +// fuzzDbTestService.save(fuzzDbTest); +// statusCode = 0; +// } catch (Exception e) { +// String errorMessage = "该节点配置信息为空,请先配置该节点信息" + "\r\n"; +// errorHandle(e, errorMessage); +// } +// +// if (statusCode == 0) { +// log.info("{}节点执行完成", getName()); +// } else { +// log.error("{}节点执行失败", getName()); +// } +// return String.valueOf(statusCode); } } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/testCase/TestCaseManagerService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/testCase/TestCaseManagerService.java index 936cff83..db62fa16 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/testCase/TestCaseManagerService.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/testCase/TestCaseManagerService.java @@ -7,8 +7,12 @@ import cd.casic.ci.process.dto.resp.testCase.TestCaseManagerResp; import cd.casic.ci.process.process.dataObject.testCase.TestCaseManager; import cd.casic.framework.commons.pojo.PageResult; import com.baomidou.mybatisplus.extension.service.IService; +import com.jcraft.jsch.JSchException; +import com.jcraft.jsch.SftpException; +import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; +import java.io.IOException; import java.util.List; /** @@ -32,4 +36,6 @@ public interface TestCaseManagerService extends IService { TestCaseManagerResp findById(String id); + void downLoadById(String id , HttpServletResponse response); + } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/testCase/impl/TestCaseManagerServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/testCase/impl/TestCaseManagerServiceImpl.java index 32c94c9e..631e62dc 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/testCase/impl/TestCaseManagerServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/testCase/impl/TestCaseManagerServiceImpl.java @@ -23,21 +23,24 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.jcraft.jsch.ChannelExec; -import com.jcraft.jsch.JSch; -import com.jcraft.jsch.JSchException; -import com.jcraft.jsch.Session; +import com.jcraft.jsch.*; import jakarta.annotation.Resource; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.*; import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; /** * @author HopeLi @@ -64,7 +67,8 @@ public class TestCaseManagerServiceImpl extends ServiceImpl byManagerIds = testCaseInfoService.findByManagerIds(Collections.singletonList(id)); + + for (TestCaseInfoResp byManagerId : byManagerIds) { + InputStream inputStream = sftp.get(byManagerId.getTestFilePath()); + String fileName = byManagerId.getFileName(); + ZipEntry zipEntry = new ZipEntry(fileName); + zipOutputStream.putNextEntry(zipEntry); + IOUtils.copy(inputStream,zipOutputStream); + zipOutputStream.closeEntry(); + inputStream.close(); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + private void setUserName(TestCaseManagerResp testCaseManagerResp) { if (!StringUtils.isEmpty(testCaseManagerResp.getCreator())){ @@ -219,9 +257,11 @@ public class TestCaseManagerServiceImpl extends ServiceImpl