mirror of
https://github.com/hashicorp/vault.git
synced 2025-08-22 07:01:09 +02:00
The previous logic would consider not normalize casing before comparing the policy names which meant that a token associated to a policy with an uppercase could not be renewed for the following auth methods: - AppID - Cert - GitHub - LDAP - Okta - Radius - Userpass Co-authored-by: Violet Hynes <violet.hynes@hashicorp.com>
104 lines
2.6 KiB
Go
104 lines
2.6 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package policyutil
|
|
|
|
import "testing"
|
|
|
|
func TestSanitizePolicies(t *testing.T) {
|
|
expected := []string{"foo", "bar"}
|
|
actual := SanitizePolicies([]string{"foo", "bar"}, false)
|
|
if !EquivalentPolicies(expected, actual) {
|
|
t.Fatalf("bad: expected:%s\ngot:%s\n", expected, actual)
|
|
}
|
|
|
|
// If 'default' is already added, do not remove it.
|
|
expected = []string{"foo", "bar", "default"}
|
|
actual = SanitizePolicies([]string{"foo", "bar", "default"}, false)
|
|
if !EquivalentPolicies(expected, actual) {
|
|
t.Fatalf("bad: expected:%s\ngot:%s\n", expected, actual)
|
|
}
|
|
}
|
|
|
|
func TestParsePolicies(t *testing.T) {
|
|
expected := []string{"foo", "bar", "default"}
|
|
actual := ParsePolicies("foo,bar")
|
|
// add default if not present.
|
|
if !EquivalentPolicies(expected, actual) {
|
|
t.Fatalf("bad: expected:%s\ngot:%s\n", expected, actual)
|
|
}
|
|
|
|
// do not add default more than once.
|
|
actual = ParsePolicies("foo,bar,default")
|
|
if !EquivalentPolicies(expected, actual) {
|
|
t.Fatalf("bad: expected:%s\ngot:%s\n", expected, actual)
|
|
}
|
|
|
|
// handle spaces and tabs.
|
|
actual = ParsePolicies(" foo , bar , default")
|
|
if !EquivalentPolicies(expected, actual) {
|
|
t.Fatalf("bad: expected:%s\ngot:%s\n", expected, actual)
|
|
}
|
|
|
|
// ignore all others if root is present.
|
|
expected = []string{"root"}
|
|
actual = ParsePolicies("foo,bar,root")
|
|
if !EquivalentPolicies(expected, actual) {
|
|
t.Fatalf("bad: expected:%s\ngot:%s\n", expected, actual)
|
|
}
|
|
|
|
// with spaces and tabs.
|
|
expected = []string{"root"}
|
|
actual = ParsePolicies("foo ,bar, root ")
|
|
if !EquivalentPolicies(expected, actual) {
|
|
t.Fatalf("bad: expected:%s\ngot:%s\n", expected, actual)
|
|
}
|
|
}
|
|
|
|
func TestEquivalentPolicies(t *testing.T) {
|
|
testCases := map[string]struct {
|
|
A []string
|
|
B []string
|
|
Expected bool
|
|
}{
|
|
"nil": {
|
|
A: nil,
|
|
B: nil,
|
|
Expected: true,
|
|
},
|
|
"empty": {
|
|
A: []string{"foo", "bar"},
|
|
B: []string{},
|
|
Expected: false,
|
|
},
|
|
"missing": {
|
|
A: []string{"foo", "bar"},
|
|
B: []string{"foo"},
|
|
Expected: false,
|
|
},
|
|
"equal": {
|
|
A: []string{"bar", "foo"},
|
|
B: []string{"bar", "foo"},
|
|
Expected: true,
|
|
},
|
|
"default": {
|
|
A: []string{"bar", "foo"},
|
|
B: []string{"foo", "default", "bar"},
|
|
Expected: true,
|
|
},
|
|
"case-insensitive": {
|
|
A: []string{"test"},
|
|
B: []string{"Test"},
|
|
Expected: true,
|
|
},
|
|
}
|
|
|
|
for name, tc := range testCases {
|
|
t.Run(name, func(t *testing.T) {
|
|
if EquivalentPolicies(tc.A, tc.B) != tc.Expected {
|
|
t.Fatal("bad")
|
|
}
|
|
})
|
|
}
|
|
}
|