test(files): add move folder test and clean code
This commit is contained in:
parent
17b4544487
commit
652adba4ad
6 changed files with 74 additions and 80 deletions
|
@ -160,7 +160,7 @@ func (bs *BoltStore) AddUploadInfos(userID uint64, tmpPath, filePath string, inf
|
||||||
}
|
}
|
||||||
|
|
||||||
if userInfo.UsedSpace+info.Size > int64(userInfo.Quota.SpaceLimit) {
|
if userInfo.UsedSpace+info.Size > int64(userInfo.Quota.SpaceLimit) {
|
||||||
return errors.New("space limit is reached")
|
return db.ErrQuota
|
||||||
}
|
}
|
||||||
|
|
||||||
// update used space
|
// update used space
|
||||||
|
@ -370,7 +370,6 @@ func (bs *BoltStore) MoveInfos(userID uint64, oldPath, newPath string, isDir boo
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("\n\n\n4", err)
|
|
||||||
// add new info
|
// add new info
|
||||||
return bs.setFileInfo(tx, userID, newPath, fileInfo)
|
return bs.setFileInfo(tx, userID, newPath, fileInfo)
|
||||||
})
|
})
|
||||||
|
|
|
@ -21,6 +21,7 @@ var (
|
||||||
ErrBucketNotFound = errors.New("bucket not found")
|
ErrBucketNotFound = errors.New("bucket not found")
|
||||||
ErrKeyNotFound = errors.New("key not found")
|
ErrKeyNotFound = errors.New("key not found")
|
||||||
ErrCreateExisting = errors.New("create upload info which already exists")
|
ErrCreateExisting = errors.New("create upload info which already exists")
|
||||||
|
ErrQuota = errors.New("quota limit reached")
|
||||||
)
|
)
|
||||||
|
|
||||||
type FileInfo struct {
|
type FileInfo struct {
|
||||||
|
|
|
@ -155,7 +155,11 @@ func (h *FileHandlers) Create(c *gin.Context) {
|
||||||
Size: req.FileSize,
|
Size: req.FileSize,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(q.ErrResp(c, 500, err))
|
if errors.Is(err, db.ErrQuota) {
|
||||||
|
c.JSON(q.ErrResp(c, 403, err))
|
||||||
|
} else {
|
||||||
|
c.JSON(q.ErrResp(c, 500, err))
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
err = h.deps.BoltStore().MoveUploadingInfos(userIDInt, tmpFilePath, fsFilePath)
|
err = h.deps.BoltStore().MoveUploadingInfos(userIDInt, tmpFilePath, fsFilePath)
|
||||||
|
@ -208,33 +212,15 @@ func (h *FileHandlers) Create(c *gin.Context) {
|
||||||
Size: req.FileSize,
|
Size: req.FileSize,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(q.ErrResp(c, 500, err))
|
if errors.Is(err, db.ErrQuota) {
|
||||||
return
|
c.JSON(q.ErrResp(c, 403, err))
|
||||||
|
} else {
|
||||||
|
c.JSON(q.ErrResp(c, 500, err))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
locker := h.NewAutoLocker(c, lockName(tmpFilePath))
|
locker := h.NewAutoLocker(c, lockName(tmpFilePath))
|
||||||
locker.Exec(func() {
|
locker.Exec(func() {
|
||||||
// ok, err := h.deps.Users().CanIncrUsed(userIDInt, req.FileSize)
|
|
||||||
// if err != nil {
|
|
||||||
// c.JSON(q.ErrResp(c, 500, err))
|
|
||||||
// return
|
|
||||||
// } else if !ok {
|
|
||||||
// c.JSON(q.ErrResp(c, 429, userstore.ErrReachedLimit))
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
|
|
||||||
// err = h.deps.FileInfos().AddUploadInfo(userID, req.Path, tmpFilePath, req.FileSize)
|
|
||||||
// if err != nil {
|
|
||||||
// c.JSON(q.ErrResp(c, 500, err))
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
|
|
||||||
// err = h.deps.Users().SetUsed(userIDInt, true, req.FileSize)
|
|
||||||
// if err != nil {
|
|
||||||
// c.JSON(q.ErrResp(c, 500, err))
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
|
|
||||||
err = h.deps.FS().Create(tmpFilePath)
|
err = h.deps.FS().Create(tmpFilePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if os.IsExist(err) {
|
if os.IsExist(err) {
|
||||||
|
@ -516,41 +502,6 @@ func (h *FileHandlers) UploadChunk(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// err = h.deps.FileInfos().DelUploadInfo(userID, tmpFilePath)
|
|
||||||
// if err != nil {
|
|
||||||
// c.JSON(q.ErrResp(c, 500, err))
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
|
|
||||||
// fsInfo, err := h.deps.FS().Stat(fsFilePath)
|
|
||||||
// if err != nil {
|
|
||||||
// c.JSON(q.ErrResp(c, 500, err))
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
|
|
||||||
// err = h.deps.FileInfos().SetInfo(fsFilePath, &db.FileInfo{
|
|
||||||
// IsDir: false,
|
|
||||||
// Shared: false,
|
|
||||||
// Size: fsInfo.Size(),
|
|
||||||
// })
|
|
||||||
// if err != nil {
|
|
||||||
// c.JSON(q.ErrResp(c, 500, err))
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
|
|
||||||
// TODO: check space quota?
|
|
||||||
// if fsInfo.Size()-fileSize != 0 {
|
|
||||||
// sizeDiff := fsInfo.Size() - fileSize
|
|
||||||
// if sizeDiff < 0 {
|
|
||||||
// sizeDiff = -sizeDiff
|
|
||||||
// }
|
|
||||||
// err = h.deps.Users().SetUsed(userIDInt, fsInfo.Size()-fileSize > 0, sizeDiff)
|
|
||||||
// if err != nil {
|
|
||||||
// c.JSON(q.ErrResp(c, 500, err))
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
msg, err := json.Marshal(Sha1Params{
|
msg, err := json.Marshal(Sha1Params{
|
||||||
FilePath: fsFilePath,
|
FilePath: fsFilePath,
|
||||||
})
|
})
|
||||||
|
@ -926,12 +877,6 @@ func (h *FileHandlers) DelUploading(c *gin.Context) {
|
||||||
tmpFilePath := q.UploadPath(userName, filePath)
|
tmpFilePath := q.UploadPath(userName, filePath)
|
||||||
locker := h.NewAutoLocker(c, lockName(tmpFilePath))
|
locker := h.NewAutoLocker(c, lockName(tmpFilePath))
|
||||||
locker.Exec(func() {
|
locker.Exec(func() {
|
||||||
// _, size, _, err := h.deps.FileInfos().GetUploadInfo(userID, tmpFilePath)
|
|
||||||
// if err != nil {
|
|
||||||
// c.JSON(q.ErrResp(c, 500, err))
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
|
|
||||||
_, err = h.deps.FS().Stat(tmpFilePath)
|
_, err = h.deps.FS().Stat(tmpFilePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
|
@ -947,18 +892,6 @@ func (h *FileHandlers) DelUploading(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// err = h.deps.FileInfos().DelUploadInfo(userID, tmpFilePath)
|
|
||||||
// if err != nil {
|
|
||||||
// c.JSON(q.ErrResp(c, 500, err))
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
|
|
||||||
// err = h.deps.Users().SetUsed(userIDInt, false, size)
|
|
||||||
// if err != nil {
|
|
||||||
// c.JSON(q.ErrResp(c, 500, err))
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
})
|
})
|
||||||
|
|
||||||
err = h.deps.BoltStore().DelUploadingInfos(userIDInt, tmpFilePath)
|
err = h.deps.BoltStore().DelUploadingInfos(userIDInt, tmpFilePath)
|
||||||
|
|
|
@ -778,6 +778,67 @@ func TestFileHandlers(t *testing.T) {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("test folder moving: Mkdir-Create-UploadChunk-AddSharing-Move-IsSharing-List", func(t *testing.T) {
|
||||||
|
srcDir := "qs/files/folder/move/src"
|
||||||
|
dstDir := "qs/files/folder/move/dst"
|
||||||
|
|
||||||
|
res, _, errs := cl.Mkdir(srcDir)
|
||||||
|
if len(errs) > 0 {
|
||||||
|
t.Fatal(errs)
|
||||||
|
} else if res.StatusCode != 200 {
|
||||||
|
t.Fatal(res.StatusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
files := map[string]string{
|
||||||
|
"f1.md": "111",
|
||||||
|
"f2.md": "22222",
|
||||||
|
}
|
||||||
|
|
||||||
|
for fileName, content := range files {
|
||||||
|
oldPath := filepath.Join(srcDir, fileName)
|
||||||
|
assertUploadOK(t, oldPath, content, addr, token)
|
||||||
|
}
|
||||||
|
|
||||||
|
res, _, errs = cl.AddSharing(srcDir)
|
||||||
|
if len(errs) > 0 {
|
||||||
|
t.Fatal(errs)
|
||||||
|
} else if res.StatusCode != 200 {
|
||||||
|
t.Fatal(res.StatusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
res, _, errs = cl.Move(srcDir, dstDir)
|
||||||
|
if len(errs) > 0 {
|
||||||
|
t.Fatal(errs)
|
||||||
|
} else if res.StatusCode != 200 {
|
||||||
|
t.Fatal(res.StatusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
res, _, errs = cl.IsSharing(dstDir)
|
||||||
|
if len(errs) > 0 {
|
||||||
|
t.Fatal(errs)
|
||||||
|
} else if res.StatusCode != 404 { // should not be in sharing
|
||||||
|
t.Fatal(res.StatusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = fs.Sync()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, lResp, errs := cl.List(dstDir)
|
||||||
|
if len(errs) > 0 {
|
||||||
|
t.Fatal(errs)
|
||||||
|
}
|
||||||
|
for _, metadata := range lResp.Metadatas {
|
||||||
|
content, ok := files[metadata.Name]
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("%s not found", metadata.Name)
|
||||||
|
} else if int64(len(content)) != metadata.Size {
|
||||||
|
t.Fatalf("size not match %d %d \n", len(content), metadata.Size)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
resp, _, errs = usersCl.Logout(token)
|
resp, _, errs = usersCl.Logout(token)
|
||||||
if len(errs) > 0 {
|
if len(errs) > 0 {
|
||||||
t.Fatal(errs)
|
t.Fatal(errs)
|
||||||
|
|
|
@ -125,7 +125,7 @@ func TestSpaceLimit(t *testing.T) {
|
||||||
res, _, errs := cl.Create(filePath, 1)
|
res, _, errs := cl.Create(filePath, 1)
|
||||||
if len(errs) > 0 {
|
if len(errs) > 0 {
|
||||||
t.Fatal(errs)
|
t.Fatal(errs)
|
||||||
} else if res.StatusCode != 500 {
|
} else if res.StatusCode != 403 {
|
||||||
t.Fatalf("(space limit): this request should be rejected: %d", res.StatusCode)
|
t.Fatalf("(space limit): this request should be rejected: %d", res.StatusCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
BIN
src/server/testdata/test_quickshare.db
vendored
BIN
src/server/testdata/test_quickshare.db
vendored
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue