test(server): add init tests
This commit is contained in:
parent
02740bae37
commit
42ad19257c
1 changed files with 233 additions and 0 deletions
233
src/server/init_test.go
Normal file
233
src/server/init_test.go
Normal file
|
@ -0,0 +1,233 @@
|
|||
package server
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"math/rand"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/ihexxa/gocfg"
|
||||
"github.com/ihexxa/quickshare/src/depidx"
|
||||
)
|
||||
|
||||
func TestInit(t *testing.T) {
|
||||
dbFileName := "test_init.sqlite"
|
||||
adminName := "admin"
|
||||
adminPwd := "1234"
|
||||
|
||||
prepareCfg := func(initEnv bool, rootPath, dbFileName string) *gocfg.Cfg {
|
||||
config :=
|
||||
fmt.Sprintf(
|
||||
`{
|
||||
"users": {
|
||||
"enableAuth": true,
|
||||
"minUserNameLen": 2,
|
||||
"minPwdLen": 4,
|
||||
"captchaEnabled": false,
|
||||
"uploadSpeedLimit": 409600,
|
||||
"downloadSpeedLimit": 409600,
|
||||
"spaceLimit": 1000,
|
||||
"limiterCapacity": 1000,
|
||||
"limiterCyc": 1000,
|
||||
"predefinedUsers": [
|
||||
{
|
||||
"name": "test_user",
|
||||
"pwd": "Quicksh@re",
|
||||
"role": "user"
|
||||
}
|
||||
]
|
||||
},
|
||||
"server": {
|
||||
"debug": true,
|
||||
"host": "127.0.0.1",
|
||||
"initFileIndex": true
|
||||
},
|
||||
"fs": {
|
||||
"root": "%s"
|
||||
},
|
||||
"db": {
|
||||
"dbPath": "%s"
|
||||
}
|
||||
}`,
|
||||
rootPath,
|
||||
dbFileName,
|
||||
)
|
||||
|
||||
if initEnv {
|
||||
os.Setenv("DEFAULTADMIN", adminName)
|
||||
os.Setenv("DEFAULTADMINPWD", adminPwd)
|
||||
} else {
|
||||
os.Unsetenv("DEFAULTADMIN")
|
||||
os.Unsetenv("DEFAULTADMINPWD")
|
||||
}
|
||||
os.RemoveAll(rootPath)
|
||||
err := os.MkdirAll(rootPath, 0700)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
defaultCfg, err := DefaultConfig()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
cfg, err := gocfg.New(NewConfig()).
|
||||
Load(
|
||||
gocfg.JSONStr(defaultCfg),
|
||||
gocfg.JSONStr(config),
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
return cfg
|
||||
}
|
||||
|
||||
prepareTestDeps := func() (*depidx.Deps, string, *gocfg.Cfg, *Initer) {
|
||||
rootPath := fmt.Sprintf("tmpTestData/t_%d", rand.Int())
|
||||
cfg := prepareCfg(true, rootPath, dbFileName)
|
||||
initer := NewIniter(cfg)
|
||||
return initer.InitDeps(), rootPath, cfg, initer
|
||||
}
|
||||
|
||||
t.Run("deps/fs: log, db are created", func(t *testing.T) {
|
||||
deps, rootPath, _, _ := prepareTestDeps()
|
||||
defer os.RemoveAll(rootPath)
|
||||
|
||||
for _, itemPath := range []string{
|
||||
dbFileName,
|
||||
"quickshare.log",
|
||||
} {
|
||||
_, err := deps.FS().Stat(itemPath)
|
||||
if err != nil {
|
||||
t.Fatalf("item(%s) not found: %s", itemPath, err)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("deps/db: tables are inited", func(t *testing.T) {
|
||||
deps, rootPath, _, _ := prepareTestDeps()
|
||||
defer os.RemoveAll(rootPath)
|
||||
|
||||
ctx := context.TODO()
|
||||
_, err := deps.DB().ListUsers(ctx)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
_, err = deps.DB().ListFileInfos(ctx, []string{dbFileName})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
_, err = deps.DB().ListUploadInfos(ctx, 0)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
_, err = deps.DB().ListSharingsByLocation(ctx, "/")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("handlers/fs: home folders are created ", func(t *testing.T) {
|
||||
deps, rootPath, _, initer := prepareTestDeps()
|
||||
initer.InitHandlers(deps)
|
||||
defer os.RemoveAll(rootPath)
|
||||
|
||||
for _, itemPath := range []string{
|
||||
dbFileName,
|
||||
"quickshare.log",
|
||||
"admin",
|
||||
"test_user",
|
||||
} {
|
||||
_, err := deps.FS().Stat(itemPath)
|
||||
if err != nil {
|
||||
t.Fatalf("item(%s) not found: %s", itemPath, err)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("handlers/db: db tables are inited ", func(t *testing.T) {
|
||||
deps, rootPath, _, initer := prepareTestDeps()
|
||||
initer.InitHandlers(deps)
|
||||
defer os.RemoveAll(rootPath)
|
||||
|
||||
ctx := context.TODO()
|
||||
|
||||
// check users
|
||||
users, err := deps.DB().ListUsers(ctx)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
expectedUsers := map[string]bool{
|
||||
"admin": true,
|
||||
"test_user": true,
|
||||
"visitor": true,
|
||||
}
|
||||
if len(expectedUsers) != len(users) {
|
||||
t.Fatal("users size not match")
|
||||
}
|
||||
for _, user := range users {
|
||||
if !expectedUsers[user.Name] {
|
||||
t.Fatalf("user(%s) not found", user.Name)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("deps: idempotancy", func(t *testing.T) {
|
||||
_, rootPath, _, initer := prepareTestDeps()
|
||||
defer os.RemoveAll(rootPath)
|
||||
// init again
|
||||
deps := initer.InitDeps()
|
||||
initer.InitHandlers(deps)
|
||||
|
||||
for _, itemPath := range []string{
|
||||
dbFileName,
|
||||
"quickshare.log",
|
||||
} {
|
||||
_, err := deps.FS().Stat(itemPath)
|
||||
if err != nil {
|
||||
t.Fatalf("item(%s) not found: %s", itemPath, err)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("use input admin name", func(t *testing.T) {
|
||||
rootPath := fmt.Sprintf("tmpTestData/t_%d", rand.Int())
|
||||
cfg := prepareCfg(false, rootPath, dbFileName)
|
||||
initer := NewIniter(cfg)
|
||||
defer os.RemoveAll(rootPath)
|
||||
|
||||
// prepare password
|
||||
inBuf := bytes.NewBuffer(make([]byte, 1024))
|
||||
outBuf := bytes.NewBuffer(make([]byte, 1024))
|
||||
inputAdminName := "patrick_star"
|
||||
_, err := io.WriteString(inBuf, inputAdminName)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
initer.input = inBuf
|
||||
initer.output = outBuf
|
||||
|
||||
initer.InitDeps()
|
||||
|
||||
outputs, err := io.ReadAll(outBuf)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
index := strings.Index(string(outputs), "password is generated: ") + len("password is generated: ")
|
||||
if cfg.GrabString("ENV.DEFAULTADMINPWD") != string(outputs[index:index+6]) {
|
||||
t.Fatalf(
|
||||
"pwd not match: (%s) (%s)",
|
||||
cfg.GrabString("ENV.DEFAULTADMIN"),
|
||||
string(outputs[index:index+6]),
|
||||
)
|
||||
}
|
||||
})
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue