diff --git a/container/server/httphandler/agent.go b/container/server/httphandler/agent.go index 4365662b073c29428ff082f9af47f7426c20e3dc..c6fe71112b09146ff38d790819f44fd484273a44 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 0000000000000000000000000000000000000000..c89aecb249e98587ac1f2c60438685805d2ec70b --- /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"]) + }) +}