grim/hgkeeper

Add a caching layer to the hgweb portion. This should take some strain off of mercurial anf our cpu quota
package access
import (
"strings"
"testing"
"github.com/stretchr/testify/assert"
)
func TestAccessControlLoadSimple(t *testing.T) {
data := `
global:
init:
- admins
read:
- public
groups:
admins:
- root
patterns:
hgkeeper:
read:
- admins
`
a := New("")
err := a.load(strings.NewReader(data))
assert.Nil(t, err)
assert.NotNil(t, a)
assert.Equal(
t,
Acl{
Init: []string{"admins"},
Read: []string{"public"},
Write: nil,
},
a.global,
)
assert.Equal(
t,
map[string][]string{
"admins": []string{"root"},
},
a.groups,
)
assert.Equal(
t,
Acl{
Init: nil,
Read: []string{"admins"},
Write: nil,
},
a.patterns["hgkeeper"],
)
assert.ElementsMatch(
t,
[]string{"root", "public"},
a.findUsers(),
)
}
func TestAccessFindUsersComplicated(t *testing.T) {
data := `
global:
init:
- admins
read:
- public
groups:
admins:
- foo
- bar
devs:
- baz
- qux
managers:
- admins
- devs
- quux
patterns:
hgkeeper/:
write:
- admins
read:
- admins
project1/:
read:
- foobar
- devs
- admins
`
a := New("")
err := a.load(strings.NewReader(data))
assert.Nil(t, err)
assert.NotNil(t, a)
assert.ElementsMatch(
t,
[]string{"public", "foo", "foobar", "bar", "baz", "qux", "quux"},
a.findUsers(),
)
}