* feat(kvstore): add namespace operations for bool * feat(userstore): add methods for roles * chore(multiusers): remove useless todo * feat(multiusers): add apis for roles * test(roles): add e2e tests for role APIs * test(e2e/files): enable files tests
173 lines
3.9 KiB
Go
173 lines
3.9 KiB
Go
package server
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/ihexxa/quickshare/src/client"
|
|
su "github.com/ihexxa/quickshare/src/handlers/singleuserhdr"
|
|
"github.com/ihexxa/quickshare/src/userstore"
|
|
)
|
|
|
|
func TestSingleUserHandlers(t *testing.T) {
|
|
addr := "http://127.0.0.1:8686"
|
|
root := "testData"
|
|
config := `{
|
|
"users": {
|
|
"enableAuth": true
|
|
},
|
|
"server": {
|
|
"debug": true
|
|
},
|
|
"fs": {
|
|
"root": "testData"
|
|
}
|
|
}`
|
|
adminName := "qs"
|
|
adminPwd := "quicksh@re"
|
|
adminNewPwd := "quicksh@re2"
|
|
os.Setenv("DEFAULTADMIN", adminName)
|
|
os.Setenv("DEFAULTADMINPWD", adminPwd)
|
|
|
|
os.RemoveAll(root)
|
|
err := os.MkdirAll(root, 0700)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer os.RemoveAll(root)
|
|
|
|
srv := startTestServer(config)
|
|
defer srv.Shutdown()
|
|
|
|
usersCl := client.NewSingleUserClient(addr)
|
|
|
|
if !waitForReady(addr) {
|
|
t.Fatal("fail to start server")
|
|
}
|
|
|
|
t.Run("test users APIs: Login-SetPwd-Logout-Login", func(t *testing.T) {
|
|
resp, _, errs := usersCl.Login(adminName, adminPwd)
|
|
if len(errs) > 0 {
|
|
t.Fatal(errs)
|
|
} else if resp.StatusCode != 200 {
|
|
t.Fatal(resp.StatusCode)
|
|
}
|
|
|
|
token := client.GetCookie(resp.Cookies(), su.TokenCookie)
|
|
|
|
resp, _, errs = usersCl.SetPwd(adminPwd, adminNewPwd, token)
|
|
if len(errs) > 0 {
|
|
t.Fatal(errs)
|
|
} else if resp.StatusCode != 200 {
|
|
t.Fatal(resp.StatusCode)
|
|
}
|
|
|
|
resp, _, errs = usersCl.Logout(token)
|
|
if len(errs) > 0 {
|
|
t.Fatal(errs)
|
|
} else if resp.StatusCode != 200 {
|
|
t.Fatal(resp.StatusCode)
|
|
}
|
|
|
|
resp, _, errs = usersCl.Login(adminName, adminNewPwd)
|
|
if len(errs) > 0 {
|
|
t.Fatal(errs)
|
|
} else if resp.StatusCode != 200 {
|
|
t.Fatal(resp.StatusCode)
|
|
}
|
|
})
|
|
|
|
t.Run("test users APIs: Login-AddUser-Logout-Login", func(t *testing.T) {
|
|
resp, _, errs := usersCl.Login(adminName, adminNewPwd)
|
|
if len(errs) > 0 {
|
|
t.Fatal(errs)
|
|
} else if resp.StatusCode != 200 {
|
|
t.Fatal(resp.StatusCode)
|
|
}
|
|
|
|
token := client.GetCookie(resp.Cookies(), su.TokenCookie)
|
|
|
|
userName, userPwd := "user", "1234"
|
|
resp, auResp, errs := usersCl.AddUser(userName, userPwd, userstore.UserRole, token)
|
|
if len(errs) > 0 {
|
|
t.Fatal(errs)
|
|
} else if resp.StatusCode != 200 {
|
|
t.Fatal(resp.StatusCode)
|
|
}
|
|
// TODO: check id
|
|
fmt.Printf("new user id: %v\n", auResp)
|
|
|
|
resp, _, errs = usersCl.Logout(token)
|
|
if len(errs) > 0 {
|
|
t.Fatal(errs)
|
|
} else if resp.StatusCode != 200 {
|
|
t.Fatal(resp.StatusCode)
|
|
}
|
|
|
|
resp, _, errs = usersCl.Login(userName, userPwd)
|
|
if len(errs) > 0 {
|
|
t.Fatal(errs)
|
|
} else if resp.StatusCode != 200 {
|
|
t.Fatal(resp.StatusCode)
|
|
}
|
|
})
|
|
|
|
t.Run("test roles APIs: Login-AddRole-ListRoles-DelRole-ListRoles", func(t *testing.T) {
|
|
resp, _, errs := usersCl.Login(adminName, adminNewPwd)
|
|
if len(errs) > 0 {
|
|
t.Fatal(errs)
|
|
} else if resp.StatusCode != 200 {
|
|
t.Fatal(resp.StatusCode)
|
|
}
|
|
|
|
token := client.GetCookie(resp.Cookies(), su.TokenCookie)
|
|
roles := []string{"role1", "role2"}
|
|
|
|
for _, role := range roles {
|
|
resp, _, errs := usersCl.AddRole(role, token)
|
|
if len(errs) > 0 {
|
|
t.Fatal(errs)
|
|
} else if resp.StatusCode != 200 {
|
|
t.Fatal(resp.StatusCode)
|
|
}
|
|
}
|
|
|
|
resp, lsResp, errs := usersCl.ListRoles(token)
|
|
if len(errs) > 0 {
|
|
t.Fatal(errs)
|
|
} else if resp.StatusCode != 200 {
|
|
t.Fatal(resp.StatusCode)
|
|
}
|
|
for _, role := range append(roles, []string{
|
|
userstore.AdminRole,
|
|
userstore.UserRole,
|
|
userstore.VisitorRole,
|
|
}...) {
|
|
if !lsResp.Roles[role] {
|
|
t.Fatalf("role(%s) not found", role)
|
|
}
|
|
}
|
|
|
|
for _, role := range roles {
|
|
resp, _, errs := usersCl.DelRole(role, token)
|
|
if len(errs) > 0 {
|
|
t.Fatal(errs)
|
|
} else if resp.StatusCode != 200 {
|
|
t.Fatal(resp.StatusCode)
|
|
}
|
|
}
|
|
|
|
resp, lsResp, errs = usersCl.ListRoles(token)
|
|
if len(errs) > 0 {
|
|
t.Fatal(errs)
|
|
} else if resp.StatusCode != 200 {
|
|
t.Fatal(resp.StatusCode)
|
|
}
|
|
for _, role := range roles {
|
|
if lsResp.Roles[role] {
|
|
t.Fatalf("role(%s) should not exist", role)
|
|
}
|
|
}
|
|
})
|
|
}
|