209 lines
5.7 KiB
Go
209 lines
5.7 KiB
Go
|
package api
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestTokenPolicies(t *testing.T) {
|
||
|
var s *Secret
|
||
|
|
||
|
// Verify some of the short-circuit paths in the function
|
||
|
if policies, err := s.TokenPolicies(); policies != nil {
|
||
|
t.Errorf("policies was not nil, got %v", policies)
|
||
|
} else if err != nil {
|
||
|
t.Errorf("err was not nil, got %v", err)
|
||
|
}
|
||
|
|
||
|
s = &Secret{}
|
||
|
|
||
|
if policies, err := s.TokenPolicies(); policies != nil {
|
||
|
t.Errorf("policies was not nil, got %v", policies)
|
||
|
} else if err != nil {
|
||
|
t.Errorf("err was not nil, got %v", err)
|
||
|
}
|
||
|
|
||
|
s.Auth = &SecretAuth{}
|
||
|
|
||
|
if policies, err := s.TokenPolicies(); policies != nil {
|
||
|
t.Errorf("policies was not nil, got %v", policies)
|
||
|
} else if err != nil {
|
||
|
t.Errorf("err was not nil, got %v", err)
|
||
|
}
|
||
|
|
||
|
s.Auth.Policies = []string{}
|
||
|
|
||
|
if policies, err := s.TokenPolicies(); policies != nil {
|
||
|
t.Errorf("policies was not nil, got %v", policies)
|
||
|
} else if err != nil {
|
||
|
t.Errorf("err was not nil, got %v", err)
|
||
|
}
|
||
|
|
||
|
s.Auth.Policies = []string{"test"}
|
||
|
|
||
|
if policies, err := s.TokenPolicies(); policies == nil {
|
||
|
t.Error("policies was nil")
|
||
|
} else if err != nil {
|
||
|
t.Errorf("err was not nil, got %v", err)
|
||
|
}
|
||
|
|
||
|
s.Auth = nil
|
||
|
s.Data = make(map[string]interface{})
|
||
|
|
||
|
if policies, err := s.TokenPolicies(); policies != nil {
|
||
|
t.Errorf("policies was not nil, got %v", policies)
|
||
|
} else if err != nil {
|
||
|
t.Errorf("err was not nil, got %v", err)
|
||
|
}
|
||
|
|
||
|
// Verify that s.Data["policies"] are properly processed
|
||
|
{
|
||
|
policyList := make([]string, 0)
|
||
|
s.Data["policies"] = policyList
|
||
|
|
||
|
if policies, err := s.TokenPolicies(); len(policies) != len(policyList) {
|
||
|
t.Errorf("expecting policies length %d, got %d", len(policyList), len(policies))
|
||
|
} else if err != nil {
|
||
|
t.Errorf("err was not nil, got %v", err)
|
||
|
} else if s.Auth == nil {
|
||
|
t.Error("Auth field is still nil")
|
||
|
}
|
||
|
|
||
|
policyList = append(policyList, "policy1", "policy2")
|
||
|
s.Data["policies"] = policyList
|
||
|
|
||
|
if policies, err := s.TokenPolicies(); len(policyList) != 2 {
|
||
|
t.Errorf("expecting policies length %d, got %d", len(policyList), len(policies))
|
||
|
} else if err != nil {
|
||
|
t.Errorf("err was not nil, got %v", err)
|
||
|
} else if s.Auth == nil {
|
||
|
t.Error("Auth field is still nil")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Do it again but with an interface{} slice
|
||
|
{
|
||
|
s.Auth = nil
|
||
|
policyList := make([]interface{}, 0)
|
||
|
s.Data["policies"] = policyList
|
||
|
|
||
|
if policies, err := s.TokenPolicies(); len(policies) != len(policyList) {
|
||
|
t.Errorf("expecting policies length %d, got %d", len(policyList), len(policies))
|
||
|
} else if err != nil {
|
||
|
t.Errorf("err was not nil, got %v", err)
|
||
|
} else if s.Auth == nil {
|
||
|
t.Error("Auth field is still nil")
|
||
|
}
|
||
|
|
||
|
policyItems := make([]interface{}, 2)
|
||
|
policyItems[0] = "policy1"
|
||
|
policyItems[1] = "policy2"
|
||
|
|
||
|
policyList = append(policyList, policyItems...)
|
||
|
s.Data["policies"] = policyList
|
||
|
|
||
|
if policies, err := s.TokenPolicies(); len(policies) != 2 {
|
||
|
t.Errorf("expecting policies length %d, got %d", len(policyList), len(policies))
|
||
|
} else if err != nil {
|
||
|
t.Errorf("err was not nil, got %v", err)
|
||
|
} else if s.Auth == nil {
|
||
|
t.Error("Auth field is still nil")
|
||
|
}
|
||
|
|
||
|
s.Auth = nil
|
||
|
s.Data["policies"] = 7.0
|
||
|
|
||
|
if policies, err := s.TokenPolicies(); err == nil {
|
||
|
t.Error("err was nil")
|
||
|
} else if policies != nil {
|
||
|
t.Errorf("policies was not nil, got %v", policies)
|
||
|
}
|
||
|
|
||
|
s.Auth = nil
|
||
|
s.Data["policies"] = []int{2, 3, 5, 8, 13}
|
||
|
|
||
|
if policies, err := s.TokenPolicies(); err == nil {
|
||
|
t.Error("err was nil")
|
||
|
} else if policies != nil {
|
||
|
t.Errorf("policies was not nil, got %v", policies)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
s.Auth = nil
|
||
|
s.Data["policies"] = nil
|
||
|
|
||
|
if policies, err := s.TokenPolicies(); err != nil {
|
||
|
t.Errorf("err was not nil, got %v", err)
|
||
|
} else if policies != nil {
|
||
|
t.Errorf("policies was not nil, got %v", policies)
|
||
|
}
|
||
|
|
||
|
// Verify that logic that merges s.Data["policies"] and s.Data["identity_policies"] works
|
||
|
{
|
||
|
policyList := []string{"policy1", "policy2", "policy3"}
|
||
|
s.Data["policies"] = policyList[:1]
|
||
|
s.Data["identity_policies"] = "not_a_slice"
|
||
|
s.Auth = nil
|
||
|
|
||
|
if policies, err := s.TokenPolicies(); err == nil {
|
||
|
t.Error("err was nil")
|
||
|
} else if policies != nil {
|
||
|
t.Errorf("policies was not nil, got %v", policies)
|
||
|
}
|
||
|
|
||
|
s.Data["identity_policies"] = policyList[1:]
|
||
|
|
||
|
if policies, err := s.TokenPolicies(); len(policyList) != len(policies) {
|
||
|
t.Errorf("expecting policies length %d, got %d", len(policyList), len(policies))
|
||
|
} else if err != nil {
|
||
|
t.Errorf("err was not nil, got %v", err)
|
||
|
} else if s.Auth == nil {
|
||
|
t.Error("Auth field is still nil")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Do it again but with an interface{} slice
|
||
|
{
|
||
|
policyList := []interface{}{"policy1", "policy2", "policy3"}
|
||
|
s.Data["policies"] = policyList[:1]
|
||
|
s.Data["identity_policies"] = "not_a_slice"
|
||
|
s.Auth = nil
|
||
|
|
||
|
if policies, err := s.TokenPolicies(); err == nil {
|
||
|
t.Error("err was nil")
|
||
|
} else if policies != nil {
|
||
|
t.Errorf("policies was not nil, got %v", policies)
|
||
|
}
|
||
|
|
||
|
s.Data["identity_policies"] = policyList[1:]
|
||
|
|
||
|
if policies, err := s.TokenPolicies(); len(policyList) != len(policies) {
|
||
|
t.Errorf("expecting policies length %d, got %d", len(policyList), len(policies))
|
||
|
} else if err != nil {
|
||
|
t.Errorf("err was not nil, got %v", err)
|
||
|
} else if s.Auth == nil {
|
||
|
t.Error("Auth field is still nil")
|
||
|
}
|
||
|
|
||
|
s.Auth = nil
|
||
|
s.Data["identity_policies"] = []int{2, 3, 5, 8, 13}
|
||
|
|
||
|
if policies, err := s.TokenPolicies(); err == nil {
|
||
|
t.Error("err was nil")
|
||
|
} else if policies != nil {
|
||
|
t.Errorf("policies was not nil, got %v", policies)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
s.Auth = nil
|
||
|
s.Data["policies"] = []string{"policy1"}
|
||
|
s.Data["identity_policies"] = nil
|
||
|
|
||
|
if policies, err := s.TokenPolicies(); err != nil {
|
||
|
t.Errorf("err was not nil, got %v", err)
|
||
|
} else if len(policies) != 1 {
|
||
|
t.Errorf("expecting policies length %d, got %d", 1, len(policies))
|
||
|
} else if s.Auth == nil {
|
||
|
t.Error("Auth field is still nil")
|
||
|
}
|
||
|
}
|