quickshare/src/server/server_settings_test.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)
}
})
}