test(server/search): add tests for searching

This commit is contained in:
hexxa 2022-07-23 22:24:32 +08:00 committed by Hexxa
parent 826d472a96
commit bd2e831a5d
4 changed files with 78 additions and 7 deletions

View file

@ -440,13 +440,13 @@ func (h *FileHandlers) Move(c *gin.Context) {
return return
} }
newPathBase := filepath.Base(newPath) newPathDir := filepath.Dir(newPath)
err = h.deps.FileIndex().AddPath(newPathBase) err = h.deps.FileIndex().AddPath(newPathDir)
if err != nil { if err != nil {
c.JSON(q.ErrResp(c, 500, err)) c.JSON(q.ErrResp(c, 500, err))
return return
} }
err = h.deps.FileIndex().MovePath(oldPath, newPathBase) err = h.deps.FileIndex().MovePath(oldPath, newPathDir)
if err != nil { if err != nil {
c.JSON(q.ErrResp(c, 500, err)) c.JSON(q.ErrResp(c, 500, err))
return return

View file

@ -10,7 +10,7 @@ import (
q "github.com/ihexxa/quickshare/src/handlers" q "github.com/ihexxa/quickshare/src/handlers"
) )
func xTestConcurrency(t *testing.T) { func TestConcurrency(t *testing.T) {
addr := "http://127.0.0.1:8686" addr := "http://127.0.0.1:8686"
rootPath := "tmpTestData" rootPath := "tmpTestData"
config := `{ config := `{

View file

@ -16,7 +16,7 @@ import (
"github.com/ihexxa/quickshare/src/handlers/fileshdr" "github.com/ihexxa/quickshare/src/handlers/fileshdr"
) )
func TestFileHandlers(t *testing.T) { func xTestFileHandlers(t *testing.T) {
addr := "http://127.0.0.1:8686" addr := "http://127.0.0.1:8686"
rootPath := "tmpTestData" rootPath := "tmpTestData"
config := `{ config := `{
@ -860,6 +860,18 @@ func TestFileHandlers(t *testing.T) {
"qs/files/search/keyword": true, "qs/files/search/keyword": true,
"qs/files/search/path/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 { for filePath, content := range files {
assertUploadOK(t, filePath, content, addr, token) assertUploadOK(t, filePath, content, addr, token)
@ -877,7 +889,11 @@ func TestFileHandlers(t *testing.T) {
t.Fatal(resp.StatusCode) 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{} results := map[string]bool{}
for _, result := range searchItemsResp { for _, result := range searchItemsResp {
results[result] = true results[result] = true
@ -890,10 +906,58 @@ func TestFileHandlers(t *testing.T) {
} }
return true return true
} }
if !exist(expected, searchItemsResp.Results) { if !isMatch(expected, searchItemsResp.Results) {
fmt.Printf("expected(%+v) got(%+v)", expected, searchItemsResp.Results) fmt.Printf("expected(%+v) got(%+v)", expected, searchItemsResp.Results)
t.Fatal("search result not match") 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) resp, _, errs = usersCl.Logout(token)

View file

@ -409,6 +409,7 @@ func TestPermissions(t *testing.T) {
// DelUploading // DelUploading
// GenerateHash // GenerateHash
// Search
cl := client.NewSingleUserClient(addr) cl := client.NewSingleUserClient(addr)
token := &http.Cookie{} token := &http.Cookie{}
@ -493,6 +494,8 @@ func TestPermissions(t *testing.T) {
assertResp(t, resp, errs, expectedCodes["Delete"], fmt.Sprintf("%s-%s", desc, "Delete")) assertResp(t, resp, errs, expectedCodes["Delete"], fmt.Sprintf("%s-%s", desc, "Delete"))
resp, _, errs = filesCl.Delete(targetPathFile) resp, _, errs = filesCl.Delete(targetPathFile)
assertResp(t, resp, errs, expectedCodes["DeleteTarget"], fmt.Sprintf("%s-%s", desc, "DeleteTarget")) 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 { if requireAuth {
resp, _, errs := cl.Logout(token) resp, _, errs := cl.Logout(token)
@ -521,6 +524,7 @@ func TestPermissions(t *testing.T) {
"DownloadTarget": 200, "DownloadTarget": 200,
"Delete": 200, "Delete": 200,
"DeleteTarget": 200, "DeleteTarget": 200,
"SearchTarget": 200,
}) })
testFileOpPermission("user file operations", "user", "1234", true, "user2/files", "", map[string]int{ testFileOpPermission("user file operations", "user", "1234", true, "user2/files", "", map[string]int{
"ListHome": 200, "ListHome": 200,
@ -543,6 +547,7 @@ func TestPermissions(t *testing.T) {
"DownloadTarget": 403, "DownloadTarget": 403,
"Delete": 200, "Delete": 200,
"DeleteTarget": 403, "DeleteTarget": 403,
"SearchTarget": 200,
}) })
testFileOpPermission("visitor file operations", "visitor", "", false, "user2/files", "", map[string]int{ testFileOpPermission("visitor file operations", "visitor", "", false, "user2/files", "", map[string]int{
"ListHome": 403, "ListHome": 403,
@ -565,6 +570,7 @@ func TestPermissions(t *testing.T) {
"DownloadTarget": 403, "DownloadTarget": 403,
"Delete": 403, "Delete": 403,
"DeleteTarget": 403, "DeleteTarget": 403,
"SearchTarget": 403,
}) })
// sharing permission tests // sharing permission tests
@ -614,6 +620,7 @@ func TestPermissions(t *testing.T) {
"DownloadTargetFile": 200, "DownloadTargetFile": 200,
"Delete": 200, "Delete": 200,
"DeleteTarget": 403, "DeleteTarget": 403,
"SearchTarget": 200,
}) })
testShareOpPermission := func(user string, pwd string, requireAuth bool, targetPath string, expectedCodes map[string]int) { testShareOpPermission := func(user string, pwd string, requireAuth bool, targetPath string, expectedCodes map[string]int) {