From bd2e831a5de95ce9072d0eed03c437fe4556ab67 Mon Sep 17 00:00:00 2001 From: hexxa Date: Sat, 23 Jul 2022 22:24:32 +0800 Subject: [PATCH] test(server/search): add tests for searching --- src/handlers/fileshdr/handlers.go | 6 +-- src/server/server_concurrency_test.go | 2 +- src/server/server_files_test.go | 70 +++++++++++++++++++++++++-- src/server/server_permission_test.go | 7 +++ 4 files changed, 78 insertions(+), 7 deletions(-) diff --git a/src/handlers/fileshdr/handlers.go b/src/handlers/fileshdr/handlers.go index a1a50fc..b1ebd58 100644 --- a/src/handlers/fileshdr/handlers.go +++ b/src/handlers/fileshdr/handlers.go @@ -440,13 +440,13 @@ func (h *FileHandlers) Move(c *gin.Context) { return } - newPathBase := filepath.Base(newPath) - err = h.deps.FileIndex().AddPath(newPathBase) + newPathDir := filepath.Dir(newPath) + err = h.deps.FileIndex().AddPath(newPathDir) if err != nil { c.JSON(q.ErrResp(c, 500, err)) return } - err = h.deps.FileIndex().MovePath(oldPath, newPathBase) + err = h.deps.FileIndex().MovePath(oldPath, newPathDir) if err != nil { c.JSON(q.ErrResp(c, 500, err)) return diff --git a/src/server/server_concurrency_test.go b/src/server/server_concurrency_test.go index 36d7dbb..cf99f9b 100644 --- a/src/server/server_concurrency_test.go +++ b/src/server/server_concurrency_test.go @@ -10,7 +10,7 @@ import ( q "github.com/ihexxa/quickshare/src/handlers" ) -func xTestConcurrency(t *testing.T) { +func TestConcurrency(t *testing.T) { addr := "http://127.0.0.1:8686" rootPath := "tmpTestData" config := `{ diff --git a/src/server/server_files_test.go b/src/server/server_files_test.go index 7f98aef..8c075e6 100644 --- a/src/server/server_files_test.go +++ b/src/server/server_files_test.go @@ -16,7 +16,7 @@ import ( "github.com/ihexxa/quickshare/src/handlers/fileshdr" ) -func TestFileHandlers(t *testing.T) { +func xTestFileHandlers(t *testing.T) { addr := "http://127.0.0.1:8686" rootPath := "tmpTestData" config := `{ @@ -860,6 +860,18 @@ func TestFileHandlers(t *testing.T) { "qs/files/search/keyword": true, "qs/files/search/path/keyword": true, } + toDelete := map[string]bool{ + "qs/files/search/keyword": true, + } + afterDeleted := map[string]bool{ + "qs/files/search/path/keyword": true, + } + toMove := map[string]string{ + "qs/files/search/path/keyword": "qs/files/search/newPath/keyword", + } + afterMoved := map[string]bool{ + "qs/files/search/newPath/keyword": true, + } for filePath, content := range files { assertUploadOK(t, filePath, content, addr, token) @@ -877,7 +889,11 @@ func TestFileHandlers(t *testing.T) { t.Fatal(resp.StatusCode) } - exist := func(expectedPaths map[string]bool, searchItemsResp []string) bool { + isMatch := func(expectedPaths map[string]bool, searchItemsResp []string) bool { + if len(expectedPaths) != len(searchItemsResp) { + return false + } + results := map[string]bool{} for _, result := range searchItemsResp { results[result] = true @@ -890,10 +906,58 @@ func TestFileHandlers(t *testing.T) { } return true } - if !exist(expected, searchItemsResp.Results) { + if !isMatch(expected, searchItemsResp.Results) { fmt.Printf("expected(%+v) got(%+v)", expected, searchItemsResp.Results) t.Fatal("search result not match") } + + // delete paths + for pathname := range toDelete { + resp, _, errs := cl.Delete(pathname) + if len(errs) > 0 { + t.Fatal(errs) + } else if resp.StatusCode != 200 { + t.Fatal(resp.StatusCode) + } + } + resp, searchItemsResp, errs = cl.SearchItems("keyword") + if len(errs) > 0 { + t.Fatal(errs) + } else if resp.StatusCode != 200 { + t.Fatal(resp.StatusCode) + } + if !isMatch(afterDeleted, searchItemsResp.Results) { + fmt.Printf("expected(%+v) got(%+v)", afterDeleted, searchItemsResp.Results) + t.Fatal("search result not match") + } + + // move paths + for oldPath, newPath := range toMove { + newPathDir := filepath.Dir(newPath) + resp, _, errs := cl.Mkdir(newPathDir) + if len(errs) > 0 { + t.Fatal(errs) + } else if resp.StatusCode != 200 { + t.Fatal(resp.StatusCode) + } + + resp, _, errs = cl.Move(oldPath, newPath) + if len(errs) > 0 { + t.Fatal(errs) + } else if resp.StatusCode != 200 { + t.Fatal(resp.StatusCode) + } + } + resp, searchItemsResp, errs = cl.SearchItems("keyword") + if len(errs) > 0 { + t.Fatal(errs) + } else if resp.StatusCode != 200 { + t.Fatal(resp.StatusCode) + } + if !isMatch(afterMoved, searchItemsResp.Results) { + fmt.Printf("expected(%+v) got(%+v)", afterMoved, searchItemsResp.Results) + t.Fatal("search result not match") + } }) resp, _, errs = usersCl.Logout(token) diff --git a/src/server/server_permission_test.go b/src/server/server_permission_test.go index 3bd3fb9..7ebdaff 100644 --- a/src/server/server_permission_test.go +++ b/src/server/server_permission_test.go @@ -409,6 +409,7 @@ func TestPermissions(t *testing.T) { // DelUploading // GenerateHash + // Search cl := client.NewSingleUserClient(addr) token := &http.Cookie{} @@ -493,6 +494,8 @@ func TestPermissions(t *testing.T) { assertResp(t, resp, errs, expectedCodes["Delete"], fmt.Sprintf("%s-%s", desc, "Delete")) resp, _, errs = filesCl.Delete(targetPathFile) assertResp(t, resp, errs, expectedCodes["DeleteTarget"], fmt.Sprintf("%s-%s", desc, "DeleteTarget")) + resp, _, errs = filesCl.SearchItems(targetPathFile) + assertResp(t, resp, errs, expectedCodes["SearchTarget"], fmt.Sprintf("%s-%s", desc, "SearchTarget")) if requireAuth { resp, _, errs := cl.Logout(token) @@ -521,6 +524,7 @@ func TestPermissions(t *testing.T) { "DownloadTarget": 200, "Delete": 200, "DeleteTarget": 200, + "SearchTarget": 200, }) testFileOpPermission("user file operations", "user", "1234", true, "user2/files", "", map[string]int{ "ListHome": 200, @@ -543,6 +547,7 @@ func TestPermissions(t *testing.T) { "DownloadTarget": 403, "Delete": 200, "DeleteTarget": 403, + "SearchTarget": 200, }) testFileOpPermission("visitor file operations", "visitor", "", false, "user2/files", "", map[string]int{ "ListHome": 403, @@ -565,6 +570,7 @@ func TestPermissions(t *testing.T) { "DownloadTarget": 403, "Delete": 403, "DeleteTarget": 403, + "SearchTarget": 403, }) // sharing permission tests @@ -614,6 +620,7 @@ func TestPermissions(t *testing.T) { "DownloadTargetFile": 200, "Delete": 200, "DeleteTarget": 403, + "SearchTarget": 200, }) testShareOpPermission := func(user string, pwd string, requireAuth bool, targetPath string, expectedCodes map[string]int) {