119 lines
2.2 KiB
Go
119 lines
2.2 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path"
|
|
"testing"
|
|
)
|
|
|
|
func TestFileAuth(t *testing.T) {
|
|
user := "username"
|
|
passw := "password"
|
|
g := "group"
|
|
emptyp := func() string {
|
|
d := t.TempDir()
|
|
f, err := ioutil.TempFile(d, "login.yaml.*")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
f.Close()
|
|
return path.Join(d, f.Name())
|
|
}
|
|
goodp := func() string {
|
|
p := emptyp()
|
|
if err := ensureAndWrite(p, []byte(fmt.Sprintf(`{
|
|
"users": {
|
|
%q: {
|
|
"password": %q,
|
|
"groups": [%q]
|
|
}
|
|
}
|
|
}`, user, passw, g))); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return p
|
|
}
|
|
|
|
t.Run("no file", func(t *testing.T) {
|
|
p := emptyp()
|
|
os.Remove(p)
|
|
fa := NewFileAuth(p)
|
|
if _, err := fa.Login(user, passw); err == nil {
|
|
t.Fatal(err)
|
|
}
|
|
})
|
|
|
|
t.Run("bad file", func(t *testing.T) {
|
|
p := emptyp()
|
|
if err := ensureAndWrite(p, []byte(`{"hello:}`)); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
fa := NewFileAuth(p)
|
|
if _, err := fa.Login(user, passw); err == nil {
|
|
t.Fatal(err)
|
|
}
|
|
})
|
|
|
|
t.Run("bad user", func(t *testing.T) {
|
|
p := goodp()
|
|
fa := NewFileAuth(p)
|
|
if ok, err := fa.Login("bad"+user, passw); err != nil {
|
|
t.Fatal(err)
|
|
} else if ok {
|
|
t.Fatal(ok)
|
|
}
|
|
})
|
|
|
|
t.Run("bad pass", func(t *testing.T) {
|
|
p := goodp()
|
|
fa := NewFileAuth(p)
|
|
if ok, err := fa.Login(user, "bad"+passw); err != nil {
|
|
t.Fatal(err)
|
|
} else if ok {
|
|
t.Fatal(ok)
|
|
}
|
|
})
|
|
|
|
t.Run("good load", func(t *testing.T) {
|
|
p := goodp()
|
|
fa := NewFileAuth(p)
|
|
got, err := fa.load()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(got.Users) != 1 {
|
|
t.Error(got.Users)
|
|
}
|
|
if entry, ok := got.Users[user]; !ok {
|
|
t.Error(ok)
|
|
} else if entry.Password != passw {
|
|
t.Error(entry)
|
|
} else if len(entry.Groups) != 1 {
|
|
t.Error(entry.Groups)
|
|
} else if entry.Groups[0] != g {
|
|
t.Error(entry.Groups)
|
|
}
|
|
})
|
|
|
|
t.Run("good", func(t *testing.T) {
|
|
p := goodp()
|
|
b, _ := ioutil.ReadFile(p)
|
|
t.Logf("goodp: %s: %s", p, b)
|
|
fa := NewFileAuth(p)
|
|
if ok, err := fa.Login(user, passw); err != nil {
|
|
t.Fatal(err)
|
|
} else if !ok {
|
|
t.Fatal(ok)
|
|
}
|
|
if groups, err := fa.Groups(user); err != nil {
|
|
t.Fatal(err)
|
|
} else if len(groups) != 1 {
|
|
t.Fatal(groups)
|
|
} else if groups[0] != g {
|
|
t.Fatal(groups)
|
|
}
|
|
})
|
|
}
|