The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/pkg/services/ldap/ldap_helpers_test.go

170 lines
3.5 KiB

package ldap
import (
"fmt"
"testing"
"github.com/go-ldap/ldap/v3"
"github.com/stretchr/testify/assert"
)
func TestIsMemberOf(t *testing.T) {
tests := []struct {
memberOf []string
group string
expected bool
}{
{memberOf: []string{}, group: "*", expected: true},
{memberOf: []string{"one", "Two", "three"}, group: "two", expected: true},
{memberOf: []string{"one", "Two", "three"}, group: "twos", expected: false},
}
for _, tc := range tests {
t.Run(fmt.Sprintf("isMemberOf(%v, \"%s\") = %v", tc.memberOf, tc.group, tc.expected), func(t *testing.T) {
assert.Equal(t, tc.expected, IsMemberOf(tc.memberOf, tc.group))
})
}
}
func TestGetUsersIteration(t *testing.T) {
const pageSize = UsersMaxRequest
iterations := map[int]int{
0: 0,
400: 1,
600: 2,
1500: 3,
}
for userCount, expectedIterations := range iterations {
t.Run(fmt.Sprintf("getUserIteration iterates %d times for %d users", expectedIterations, userCount), func(t *testing.T) {
logins := make([]string, userCount)
i := 0
_ = getUsersIteration(logins, func(first int, last int) error {
assert.Equal(t, pageSize*i, first)
expectedLast := pageSize*i + pageSize
if expectedLast > userCount {
expectedLast = userCount
}
assert.Equal(t, expectedLast, last)
i++
return nil
})
assert.Equal(t, expectedIterations, i)
})
}
}
func TestGetAttribute(t *testing.T) {
t.Run("DN", func(t *testing.T) {
entry := &ldap.Entry{
DN: "test",
}
result := getAttribute("dn", entry)
assert.Equal(t, "test", result)
})
t.Run("username", func(t *testing.T) {
value := "roelgerrits"
entry := &ldap.Entry{
Attributes: []*ldap.EntryAttribute{
{
Name: "username", Values: []string{value},
},
},
}
result := getAttribute("username", entry)
assert.Equal(t, value, result)
})
t.Run("letter case mismatch", func(t *testing.T) {
value := "roelgerrits"
entry := &ldap.Entry{
Attributes: []*ldap.EntryAttribute{
{
Name: "sAMAccountName", Values: []string{value},
},
},
}
result := getAttribute("samaccountname", entry)
assert.Equal(t, value, result)
})
t.Run("no result", func(t *testing.T) {
value := []string{"roelgerrits"}
entry := &ldap.Entry{
Attributes: []*ldap.EntryAttribute{
{
Name: "killa", Values: value,
},
},
}
result := getAttribute("username", entry)
assert.Empty(t, result)
})
}
func TestGetArrayAttribute(t *testing.T) {
t.Run("DN", func(t *testing.T) {
entry := &ldap.Entry{
DN: "test",
}
result := getArrayAttribute("dn", entry)
assert.EqualValues(t, []string{"test"}, result)
})
t.Run("username", func(t *testing.T) {
value := []string{"roelgerrits"}
entry := &ldap.Entry{
Attributes: []*ldap.EntryAttribute{
{
Name: "username", Values: value,
},
},
}
result := getArrayAttribute("username", entry)
assert.EqualValues(t, value, result)
})
t.Run("letter case mismatch", func(t *testing.T) {
value := []string{"CN=Administrators,CN=Builtin,DC=grafana,DC=org"}
entry := &ldap.Entry{
Attributes: []*ldap.EntryAttribute{
{
Name: "memberOf", Values: value,
},
},
}
result := getArrayAttribute("memberof", entry)
assert.EqualValues(t, value, result)
})
t.Run("no result", func(t *testing.T) {
value := []string{"roelgerrits"}
entry := &ldap.Entry{
Attributes: []*ldap.EntryAttribute{
{
Name: "username", Values: value,
},
},
}
result := getArrayAttribute("something", entry)
assert.Empty(t, result)
})
}