191 lines
4.7 KiB
Go
191 lines
4.7 KiB
Go
package server
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/ihexxa/quickshare/src/client"
|
|
"github.com/ihexxa/quickshare/src/db"
|
|
q "github.com/ihexxa/quickshare/src/handlers"
|
|
"github.com/ihexxa/quickshare/src/handlers/settings"
|
|
)
|
|
|
|
func TestSettingsHandlers(t *testing.T) {
|
|
addr := "http://127.0.0.1:8686"
|
|
rootPath := "tmpTestData"
|
|
config := `{
|
|
"users": {
|
|
"enableAuth": true,
|
|
"minUserNameLen": 2,
|
|
"minPwdLen": 4,
|
|
"captchaEnabled": false,
|
|
"uploadSpeedLimit": 409600,
|
|
"downloadSpeedLimit": 409600,
|
|
"spaceLimit": 1024,
|
|
"limiterCapacity": 1000,
|
|
"limiterCyc": 1000,
|
|
"predefinedUsers": [
|
|
{
|
|
"name": "demo",
|
|
"pwd": "Quicksh@re",
|
|
"role": "user"
|
|
}
|
|
]
|
|
},
|
|
"server": {
|
|
"debug": true,
|
|
"host": "127.0.0.1"
|
|
},
|
|
"fs": {
|
|
"root": "tmpTestData"
|
|
},
|
|
"db": {
|
|
"dbPath": "tmpTestData/quickshare"
|
|
}
|
|
}`
|
|
adminName := "qs"
|
|
adminPwd := "quicksh@re"
|
|
userPwd := "1234"
|
|
setUpEnv(t, rootPath, adminName, adminPwd)
|
|
defer os.RemoveAll(rootPath)
|
|
|
|
srv := startTestServer(config)
|
|
defer srv.Shutdown()
|
|
fs := srv.depsFS()
|
|
|
|
if !isServerReady(addr) {
|
|
t.Fatal("fail to start server")
|
|
}
|
|
|
|
usersCl := client.NewUsersClient(addr)
|
|
resp, _, errs := usersCl.Login(adminName, adminPwd)
|
|
if len(errs) > 0 {
|
|
t.Fatal(errs)
|
|
} else if resp.StatusCode != 200 {
|
|
t.Fatal(resp.StatusCode)
|
|
}
|
|
adminToken := client.GetCookie(resp.Cookies(), q.TokenCookie)
|
|
users := addUsers(t, addr, userPwd, 1, adminToken)
|
|
|
|
t.Run("get/set client config", func(t *testing.T) {
|
|
adminSettingsCli := client.NewSettingsClient(addr, adminToken)
|
|
cfgs := []*db.ClientConfig{
|
|
&db.ClientConfig{
|
|
SiteName: "quickshare",
|
|
SiteDesc: "quickshare",
|
|
Bg: &db.BgConfig{
|
|
Url: "url",
|
|
Repeat: "repeat",
|
|
Position: "center",
|
|
Align: "fixed",
|
|
BgColor: "#ccc",
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, cfg := range cfgs {
|
|
clientCfgMsg := &settings.ClientCfgMsg{
|
|
ClientCfg: cfg,
|
|
CaptchaEnabled: false,
|
|
}
|
|
resp, _, errs := adminSettingsCli.SetClientCfg(clientCfgMsg)
|
|
if len(errs) > 0 {
|
|
t.Fatal(errs)
|
|
} else if resp.StatusCode != 200 {
|
|
t.Fatal(resp.StatusCode)
|
|
}
|
|
|
|
resp, clientCfgMsgGot, errs := adminSettingsCli.GetClientCfg()
|
|
if len(errs) > 0 {
|
|
t.Fatal(errs)
|
|
} else if resp.StatusCode != 200 {
|
|
t.Fatal(resp.StatusCode)
|
|
}
|
|
|
|
if !reflect.DeepEqual(clientCfgMsg, clientCfgMsgGot) {
|
|
t.Fatalf("client cfgs are not equal: got(%v) expected(%v)", clientCfgMsg, clientCfgMsgGot)
|
|
}
|
|
|
|
for userName := range users {
|
|
resp, _, errs := usersCl.Login(userName, userPwd)
|
|
if len(errs) > 0 {
|
|
t.Fatal(errs)
|
|
} else if resp.StatusCode != 200 {
|
|
t.Fatal(resp.StatusCode)
|
|
}
|
|
userToken := client.GetCookie(resp.Cookies(), q.TokenCookie)
|
|
|
|
userSettingsCli := client.NewSettingsClient(addr, userToken)
|
|
resp, clientCfgMsgGot, errs := userSettingsCli.GetClientCfg()
|
|
if len(errs) > 0 {
|
|
t.Fatal(errs)
|
|
} else if resp.StatusCode != 200 {
|
|
t.Fatal(resp.StatusCode)
|
|
}
|
|
|
|
if !reflect.DeepEqual(clientCfgMsg, clientCfgMsgGot) {
|
|
t.Fatalf("client cfgs are not equal: got(%v) expected(%v)", clientCfgMsg, clientCfgMsgGot)
|
|
}
|
|
}
|
|
}
|
|
})
|
|
|
|
t.Run("ReportErrors", func(t *testing.T) {
|
|
adminSettingsCli := client.NewSettingsClient(addr, adminToken)
|
|
reports := &settings.ClientErrorReports{
|
|
Reports: []*settings.ClientErrorReport{
|
|
&settings.ClientErrorReport{
|
|
Report: `{state: "{}", error: "empty state1"}`,
|
|
Version: "0.0.1",
|
|
},
|
|
&settings.ClientErrorReport{
|
|
Report: `{state: "{}", error: "empty state2"}`,
|
|
Version: "0.0.1",
|
|
},
|
|
},
|
|
}
|
|
|
|
reportResp, _, errs := adminSettingsCli.ReportErrors(reports)
|
|
if len(errs) > 0 {
|
|
t.Fatal(errs)
|
|
} else if reportResp.StatusCode != 200 {
|
|
t.Fatal(reportResp.StatusCode)
|
|
}
|
|
|
|
file, id, err := fs.GetFileReader("quickshare.log")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer fs.CloseReader(fmt.Sprint(id))
|
|
|
|
// TODO: it is flaky
|
|
time.Sleep(time.Duration(1) * time.Second)
|
|
|
|
content, err := ioutil.ReadAll(file)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !strings.Contains(string(content), `"msg":"version:0.0.1,error:{state: \"{}\", error: \"empty state1\"}"`) {
|
|
t.Fatalf("log does not contain error: %s", content)
|
|
}
|
|
if !strings.Contains(string(content), `"msg":"version:0.0.1,error:{state: \"{}\", error: \"empty state2\"}"`) {
|
|
t.Fatalf("log does not contain error: %s", content)
|
|
}
|
|
})
|
|
|
|
t.Run("WorkerQueueLen", func(t *testing.T) {
|
|
adminSettingsCli := client.NewSettingsClient(addr, adminToken)
|
|
|
|
reportResp, _, errs := adminSettingsCli.WorkerQueueLen()
|
|
if len(errs) > 0 {
|
|
t.Fatal(errs)
|
|
} else if reportResp.StatusCode != 200 {
|
|
t.Fatal(reportResp.StatusCode)
|
|
}
|
|
})
|
|
}
|