3ac5a841ec
This is a collection of refactors that make upcoming PRs easier to digest. The main change is the introduction of the authmethod.Identity struct. In the one and only current auth method (type=kubernetes) all of the trusted identity attributes are both selectable and projectable, so they were just passed around as a map[string]string. When namespaces were added, this was slightly changed so that the enterprise metadata can also come back from the login operation, so login now returned two fields. Now with some upcoming auth methods it won't be true that all identity attributes will be both selectable and projectable, so rather than update the login function to return 3 pieces of data it seemed worth it to wrap those fields up and give them a proper name.
47 lines
1 KiB
Go
47 lines
1 KiB
Go
package consul
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestDoesSelectorMatch(t *testing.T) {
|
|
type matchable struct {
|
|
A string `bexpr:"a"`
|
|
C string `bexpr:"c"`
|
|
}
|
|
|
|
for _, test := range []struct {
|
|
name string
|
|
selector string
|
|
details interface{}
|
|
ok bool
|
|
}{
|
|
{"no fields",
|
|
"a==b", nil, false},
|
|
{"1 term ok",
|
|
"a==b", &matchable{A: "b"}, true},
|
|
{"1 term no field",
|
|
"a==b", &matchable{C: "d"}, false},
|
|
{"1 term wrong value",
|
|
"a==b", &matchable{A: "z"}, false},
|
|
{"2 terms ok",
|
|
"a==b and c==d", &matchable{A: "b", C: "d"}, true},
|
|
{"2 terms one missing field",
|
|
"a==b and c==d", &matchable{A: "b"}, false},
|
|
{"2 terms one wrong value",
|
|
"a==b and c==d", &matchable{A: "z", C: "d"}, false},
|
|
///////////////////////////////
|
|
{"no fields (no selectors)",
|
|
"", nil, true},
|
|
{"1 term ok (no selectors)",
|
|
"", &matchable{A: "b"}, true},
|
|
} {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
ok := doesSelectorMatch(test.selector, test.details)
|
|
require.Equal(t, test.ok, ok)
|
|
})
|
|
}
|
|
}
|