test(users, settings): add e2e tests for ResetUsedSpace and WorkerQueueLen
This commit is contained in:
parent
4dcd2c56ca
commit
21593af444
10 changed files with 165 additions and 44 deletions
|
@ -59,3 +59,17 @@ func (cl *SettingsClient) ReportErrors(reports *settings.ClientErrorReports, tok
|
||||||
Send(reports).
|
Send(reports).
|
||||||
End()
|
End()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (cl *SettingsClient) WorkerQueueLen(token *http.Cookie) (*http.Response, *settings.WorkerQueueLenResp, []error) {
|
||||||
|
resp, body, errs := cl.r.Get(cl.url("/v1/settings/workers/queue-len")).
|
||||||
|
AddCookie(token).
|
||||||
|
End()
|
||||||
|
|
||||||
|
mResp := &settings.WorkerQueueLenResp{}
|
||||||
|
err := json.Unmarshal([]byte(body), mResp)
|
||||||
|
if err != nil {
|
||||||
|
errs = append(errs, err)
|
||||||
|
return nil, nil, errs
|
||||||
|
}
|
||||||
|
return resp, mResp, nil
|
||||||
|
}
|
||||||
|
|
|
@ -187,3 +187,12 @@ func (cl *SingleUserClient) IsAuthed(token *http.Cookie) (*http.Response, string
|
||||||
AddCookie(token).
|
AddCookie(token).
|
||||||
End()
|
End()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (cl *SingleUserClient) ResetUsedSpace(userID uint64, token *http.Cookie) (*http.Response, string, []error) {
|
||||||
|
return cl.r.Put(cl.url("/v1/users/used-space")).
|
||||||
|
Send(multiusers.ResetUsedSpaceReq{
|
||||||
|
UserID: userID,
|
||||||
|
}).
|
||||||
|
AddCookie(token).
|
||||||
|
End()
|
||||||
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ func NewMultiUsersSvc(cfg gocfg.ICfg, deps *depidx.Deps) (*MultiUsersSvc, error)
|
||||||
apiRuleCname(userstore.AdminRole, "GET", "/v1/users/list"): true,
|
apiRuleCname(userstore.AdminRole, "GET", "/v1/users/list"): true,
|
||||||
apiRuleCname(userstore.AdminRole, "GET", "/v1/users/self"): true,
|
apiRuleCname(userstore.AdminRole, "GET", "/v1/users/self"): true,
|
||||||
apiRuleCname(userstore.AdminRole, "PATCH", "/v1/users/preferences"): true,
|
apiRuleCname(userstore.AdminRole, "PATCH", "/v1/users/preferences"): true,
|
||||||
apiRuleCname(userstore.AdminRole, "PUT", "/v1/users//used-space"): true,
|
apiRuleCname(userstore.AdminRole, "PUT", "/v1/users/used-space"): true,
|
||||||
apiRuleCname(userstore.AdminRole, "POST", "/v1/roles/"): true,
|
apiRuleCname(userstore.AdminRole, "POST", "/v1/roles/"): true,
|
||||||
apiRuleCname(userstore.AdminRole, "DELETE", "/v1/roles/"): true,
|
apiRuleCname(userstore.AdminRole, "DELETE", "/v1/roles/"): true,
|
||||||
apiRuleCname(userstore.AdminRole, "GET", "/v1/roles/list"): true,
|
apiRuleCname(userstore.AdminRole, "GET", "/v1/roles/list"): true,
|
||||||
|
@ -71,6 +71,8 @@ func NewMultiUsersSvc(cfg gocfg.ICfg, deps *depidx.Deps) (*MultiUsersSvc, error)
|
||||||
apiRuleCname(userstore.AdminRole, "GET", "/v1/settings/client"): true,
|
apiRuleCname(userstore.AdminRole, "GET", "/v1/settings/client"): true,
|
||||||
apiRuleCname(userstore.AdminRole, "PATCH", "/v1/settings/client"): true,
|
apiRuleCname(userstore.AdminRole, "PATCH", "/v1/settings/client"): true,
|
||||||
apiRuleCname(userstore.AdminRole, "POST", "/v1/settings/errors"): true,
|
apiRuleCname(userstore.AdminRole, "POST", "/v1/settings/errors"): true,
|
||||||
|
apiRuleCname(userstore.AdminRole, "GET", "/v1/settings/workers/queue-len"): true,
|
||||||
|
|
||||||
apiRuleCname(userstore.AdminRole, "GET", "/v1/captchas/"): true,
|
apiRuleCname(userstore.AdminRole, "GET", "/v1/captchas/"): true,
|
||||||
apiRuleCname(userstore.AdminRole, "GET", "/v1/captchas/imgs"): true,
|
apiRuleCname(userstore.AdminRole, "GET", "/v1/captchas/imgs"): true,
|
||||||
apiRuleCname(userstore.AdminRole, "POST", "/v1/fs/sharings"): true,
|
apiRuleCname(userstore.AdminRole, "POST", "/v1/fs/sharings"): true,
|
||||||
|
|
|
@ -107,3 +107,13 @@ func (h *SettingsSvc) ReportErrors(c *gin.Context) {
|
||||||
}
|
}
|
||||||
c.JSON(q.Resp(200))
|
c.JSON(q.Resp(200))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type WorkerQueueLenResp struct {
|
||||||
|
QueueLen int `json:"queueLen"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *SettingsSvc) WorkerQueueLen(c *gin.Context) {
|
||||||
|
c.JSON(200, &WorkerQueueLenResp{
|
||||||
|
QueueLen: h.deps.Workers().QueueLen(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
@ -319,6 +319,7 @@ func initHandlers(router *gin.Engine, cfg gocfg.ICfg, deps *depidx.Deps) (*gin.E
|
||||||
settingsAPI.GET("/client", settingsSvc.GetClientCfg)
|
settingsAPI.GET("/client", settingsSvc.GetClientCfg)
|
||||||
settingsAPI.PATCH("/client", settingsSvc.SetClientCfg)
|
settingsAPI.PATCH("/client", settingsSvc.SetClientCfg)
|
||||||
settingsAPI.POST("/errors", settingsSvc.ReportErrors)
|
settingsAPI.POST("/errors", settingsSvc.ReportErrors)
|
||||||
|
settingsAPI.GET("/workers/queue-len", settingsSvc.WorkerQueueLen)
|
||||||
|
|
||||||
return router, nil
|
return router, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -182,4 +182,15 @@ func TestSettingsHandlers(t *testing.T) {
|
||||||
t.Fatalf("log does not contain error: %s", content)
|
t.Fatalf("log does not contain error: %s", content)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("WorkerQueueLen", func(t *testing.T) {
|
||||||
|
settingsCl := client.NewSettingsClient(addr)
|
||||||
|
|
||||||
|
reportResp, _, errs := settingsCl.WorkerQueueLen(adminToken)
|
||||||
|
if len(errs) > 0 {
|
||||||
|
t.Fatal(errs)
|
||||||
|
} else if reportResp.StatusCode != 200 {
|
||||||
|
t.Fatal(reportResp.StatusCode)
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,9 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/ihexxa/quickshare/src/client"
|
"github.com/ihexxa/quickshare/src/client"
|
||||||
"github.com/ihexxa/quickshare/src/db/userstore"
|
"github.com/ihexxa/quickshare/src/db/userstore"
|
||||||
|
@ -29,7 +31,14 @@ func TestSpaceLimit(t *testing.T) {
|
||||||
"downloadSpeedLimit": 4096000,
|
"downloadSpeedLimit": 4096000,
|
||||||
"spaceLimit": %d,
|
"spaceLimit": %d,
|
||||||
"limiterCapacity": 1000,
|
"limiterCapacity": 1000,
|
||||||
"limiterCyc": 1000
|
"limiterCyc": 1000,
|
||||||
|
"predefinedUsers": [
|
||||||
|
{
|
||||||
|
"name": "test",
|
||||||
|
"pwd": "test",
|
||||||
|
"role": "admin"
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"server": {
|
"server": {
|
||||||
"debug": true,
|
"debug": true,
|
||||||
|
@ -220,6 +229,66 @@ func TestSpaceLimit(t *testing.T) {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("ResetUsedSpace", func(t *testing.T) {
|
||||||
|
usersCl := client.NewSingleUserClient(addr)
|
||||||
|
resp, _, errs := usersCl.Login("test", "test")
|
||||||
|
if len(errs) > 0 {
|
||||||
|
t.Fatal(errs)
|
||||||
|
} else if resp.StatusCode != 200 {
|
||||||
|
t.Fatal(resp.StatusCode)
|
||||||
|
}
|
||||||
|
token := client.GetCookie(resp.Cookies(), q.TokenCookie)
|
||||||
|
|
||||||
|
ok := assertUploadOK(t, "test/files/spacelimit/byte1", "0", addr, token)
|
||||||
|
if !ok {
|
||||||
|
t.Fatal("upload failed")
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, selfResp, errs := usersCl.Self(token)
|
||||||
|
if len(errs) > 0 {
|
||||||
|
t.Fatal(errs)
|
||||||
|
} else if resp.StatusCode != 200 {
|
||||||
|
t.Fatal(resp.StatusCode)
|
||||||
|
}
|
||||||
|
originalUsedSpace := selfResp.UsedSpace
|
||||||
|
|
||||||
|
uidInt, err := strconv.ParseUint(selfResp.ID, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
resp, _, errs = usersCl.ResetUsedSpace(uidInt, token)
|
||||||
|
if len(errs) > 0 {
|
||||||
|
t.Fatal(errs)
|
||||||
|
} else if resp.StatusCode != 200 {
|
||||||
|
t.Fatal(resp.StatusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
settingsCl := client.NewSettingsClient(addr)
|
||||||
|
for i := 0; i < 20; i++ {
|
||||||
|
resp, wqlResp, errs := settingsCl.WorkerQueueLen(token)
|
||||||
|
if len(errs) > 0 {
|
||||||
|
t.Fatal(errs)
|
||||||
|
} else if resp.StatusCode != 200 {
|
||||||
|
t.Fatal(resp.StatusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
if wqlResp.QueueLen == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
time.Sleep(200)
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, selfResp, errs = usersCl.Self(token)
|
||||||
|
if len(errs) > 0 {
|
||||||
|
t.Fatal(errs)
|
||||||
|
} else if resp.StatusCode != 200 {
|
||||||
|
t.Fatal(resp.StatusCode)
|
||||||
|
} else if selfResp.UsedSpace != originalUsedSpace {
|
||||||
|
t.Fatalf("used space not equal %d %d", selfResp.UsedSpace, originalUsedSpace)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
resp, _, errs = usersCl.Logout(token)
|
resp, _, errs = usersCl.Logout(token)
|
||||||
if len(errs) > 0 {
|
if len(errs) > 0 {
|
||||||
t.Fatal(errs)
|
t.Fatal(errs)
|
||||||
|
|
BIN
src/server/testdata/test_quickshare.db
vendored
BIN
src/server/testdata/test_quickshare.db
vendored
Binary file not shown.
|
@ -25,4 +25,5 @@ type IWorkerPool interface {
|
||||||
Stop()
|
Stop()
|
||||||
AddHandler(msgType string, handler MsgHandler)
|
AddHandler(msgType string, handler MsgHandler)
|
||||||
DelHandler(msgType string)
|
DelHandler(msgType string)
|
||||||
|
QueueLen() int
|
||||||
}
|
}
|
||||||
|
|
|
@ -174,3 +174,7 @@ func (wp *WorkerPool) AddHandler(msgType string, handler worker.MsgHandler) {
|
||||||
func (wp *WorkerPool) DelHandler(msgType string) {
|
func (wp *WorkerPool) DelHandler(msgType string) {
|
||||||
delete(wp.msgHandlers, msgType)
|
delete(wp.msgHandlers, msgType)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (wp *WorkerPool) QueueLen() int {
|
||||||
|
return len(wp.queue)
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue