From ae7c64aa4133581122a541d90fe6e8c0093f75ba Mon Sep 17 00:00:00 2001 From: shaoning <904809622@qq.com> Date: Sun, 17 Nov 2024 22:09:58 +0800 Subject: [PATCH] feat: add Docker deployment handler and tests --- container/server/httphandler/agent.go | 24 ++++++++-- container/server/httphandler/agent_test.go | 52 ++++++++++++++++++++++ 2 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 container/server/httphandler/agent_test.go diff --git a/container/server/httphandler/agent.go b/container/server/httphandler/agent.go index 4365662b..c6fe7111 100644 --- a/container/server/httphandler/agent.go +++ b/container/server/httphandler/agent.go @@ -7,17 +7,35 @@ import ( ) func DeployDocker(ctx *gin.Context) { + // 定义请求参数结构 param := &struct { - Batch []string + Batch []string `json:"batch" binding:"required"` }{} + + // 参数绑定和验证 if err := ctx.BindJSON(param); err != nil { ctx.JSON(http.StatusBadRequest, gin.H{ - "code": -1, - "status": "parameter error", + "code": -1, + "status": "parameter error", + "message": err.Error(), + }) + return // 添加return避免继续执行 + } + + // 参数校验 + if len(param.Batch) == 0 { + ctx.JSON(http.StatusBadRequest, gin.H{ + "code": -1, + "status": "parameter error", + "message": "batch cannot be empty", }) + return } + // TODO: 实现Docker部署逻辑 ret := "" + + // 返回成功响应 ctx.JSON(http.StatusOK, gin.H{ "code": 0, "status": "ok", diff --git a/container/server/httphandler/agent_test.go b/container/server/httphandler/agent_test.go new file mode 100644 index 00000000..c89aecb2 --- /dev/null +++ b/container/server/httphandler/agent_test.go @@ -0,0 +1,52 @@ +package httphandler + +import ( + "encoding/json" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/gin-gonic/gin" + "github.com/stretchr/testify/assert" +) + +func TestDeployDocker(t *testing.T) { + // 设置测试路由 + router := gin.Default() + router.POST("/deploy", DeployDocker) + + // 测试用例1: 正常请求 + t.Run("Normal Request", func(t *testing.T) { + payload := `{"batch": ["container1", "container2"]}` + req, _ := http.NewRequest("POST", "/deploy", strings.NewReader(payload)) + req.Header.Set("Content-Type", "application/json") + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + + assert.Equal(t, http.StatusOK, w.Code) + + var response map[string]interface{} + err := json.Unmarshal(w.Body.Bytes(), &response) + assert.Nil(t, err) + assert.Equal(t, float64(0), response["code"]) + assert.Equal(t, "ok", response["status"]) + }) + + // 测试用例2: 错误的JSON格式 + t.Run("Invalid JSON", func(t *testing.T) { + payload := `{"batch": [1, 2]` // 不完整的JSON + req, _ := http.NewRequest("POST", "/deploy", strings.NewReader(payload)) + req.Header.Set("Content-Type", "application/json") + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + + assert.Equal(t, http.StatusBadRequest, w.Code) + + var response map[string]interface{} + err := json.Unmarshal(w.Body.Bytes(), &response) + assert.Nil(t, err) + assert.Equal(t, float64(-1), response["code"]) + assert.Equal(t, "parameter error", response["status"]) + }) +} -- Gitee