From 9a1665526c0ea686b0bf94f16e87515d9666d760 Mon Sep 17 00:00:00 2001 From: HFO4 <912394456@qq.com> Date: Tue, 26 Nov 2019 14:52:54 +0800 Subject: [PATCH] Test: local policy file uploading --- pkg/serializer/common.go | 4 +- routers/controllers/main_test.go | 37 ++++++++++++++++ routers/router_test.go | 72 ++++++++++++++++++++++++++++++++ 3 files changed, 111 insertions(+), 2 deletions(-) diff --git a/pkg/serializer/common.go b/pkg/serializer/common.go index b415260..a65aaf8 100644 --- a/pkg/serializer/common.go +++ b/pkg/serializer/common.go @@ -20,9 +20,9 @@ const ( // CodeNoRightErr 未授权访问 CodeNoRightErr = 403 // CodeUploadFailed 上传出错 - CodeUploadFailed = 4001 + CodeUploadFailed = 40002 // CodeCreateFolderFailed 目录创建失败 - CodeCreateFolderFailed = 4002 + CodeCreateFolderFailed = 40003 // CodeDBError 数据库操作失败 CodeDBError = 50001 // CodeEncryptError 加密失败 diff --git a/routers/controllers/main_test.go b/routers/controllers/main_test.go index 106f1c9..0120210 100644 --- a/routers/controllers/main_test.go +++ b/routers/controllers/main_test.go @@ -1,14 +1,51 @@ package controllers import ( + "database/sql" "encoding/json" "errors" + "github.com/DATA-DOG/go-sqlmock" + model "github.com/HFO4/cloudreve/models" "github.com/HFO4/cloudreve/pkg/serializer" + "github.com/gin-gonic/gin" + "github.com/jinzhu/gorm" "github.com/stretchr/testify/assert" "gopkg.in/go-playground/validator.v8" "testing" ) +var mock sqlmock.Sqlmock +var memDB *gorm.DB + +// TestMain 初始化数据库Mock +func TestMain(m *testing.M) { + // 设置gin为测试模式 + gin.SetMode(gin.TestMode) + + // 初始化sqlmock + var db *sql.DB + var err error + db, mock, err = sqlmock.New() + if err != nil { + panic("An error was not expected when opening a stub database connection") + } + + // 初始话内存数据库 + model.Init() + memDB = model.DB + + model.DB, _ = gorm.Open("mysql", db) + defer db.Close() + + switchToMemDB() + + m.Run() +} + +func switchToMemDB() { + model.DB = memDB +} + // 测试 ErrorResponse func TestErrorResponse(t *testing.T) { asserts := assert.New(t) diff --git a/routers/router_test.go b/routers/router_test.go index f48dc8b..edb6c9d 100644 --- a/routers/router_test.go +++ b/routers/router_test.go @@ -13,6 +13,7 @@ import ( "github.com/stretchr/testify/assert" "net/http" "net/http/httptest" + "strings" "testing" ) @@ -296,3 +297,74 @@ func TestListDirectoryRoute(t *testing.T) { asserts.NotEqual(0, resJSON.Code) } + +func TestLocalFileUpload(t *testing.T) { + switchToMemDB() + asserts := assert.New(t) + router := InitRouter() + w := httptest.NewRecorder() + middleware.SessionMock = map[string]interface{}{"user_id": 1} + + testCases := []struct { + GetRequest func() *http.Request + ExpectCode int + RollBack func() + }{ + // 文件大小指定错误 + { + GetRequest: func() *http.Request { + req, _ := http.NewRequest( + "POST", + "/api/v3/file/upload", + nil, + ) + req.Header.Add("Content-Length", "ddf") + return req + }, + ExpectCode: 40001, + }, + // 返回错误 + { + GetRequest: func() *http.Request { + req, _ := http.NewRequest( + "POST", + "/api/v3/file/upload", + strings.NewReader("2333"), + ) + req.Header.Add("Content-Length", "4") + req.Header.Add("X-FileName", "大地的%sfsf") + return req + }, + ExpectCode: 40002, + }, + // 成功 + { + GetRequest: func() *http.Request { + req, _ := http.NewRequest( + "POST", + "/api/v3/file/upload", + strings.NewReader("2333"), + ) + req.Header.Add("Content-Length", "4") + req.Header.Add("X-FileName", "TestFileUploadRoute.txt") + return req + }, + ExpectCode: 0, + }, + } + + for key, testCase := range testCases { + req := testCase.GetRequest() + router.ServeHTTP(w, req) + asserts.Equal(200, w.Code) + resJSON := &serializer.Response{} + err := json.Unmarshal(w.Body.Bytes(), resJSON) + asserts.NoError(err, "测试用例%d", key) + asserts.Equal(testCase.ExpectCode, resJSON.Code, "测试用例%d", key) + if testCase.RollBack != nil { + testCase.RollBack() + } + w.Body.Reset() + } + +}