1package structs 2 3import ( 4 "testing" 5 6 "github.com/hashicorp/consul/acl" 7 "github.com/stretchr/testify/require" 8) 9 10func TestStructs_ACLCaches(t *testing.T) { 11 12 t.Run("New", func(t *testing.T) { 13 14 t.Run("Valid Sizes", func(t *testing.T) { 15 // 1 isn't valid due to a bug in golang-lru library 16 config := ACLCachesConfig{2, 2, 2, 2, 2} 17 18 cache, err := NewACLCaches(&config) 19 require.NoError(t, err) 20 require.NotNil(t, cache) 21 require.NotNil(t, cache.identities) 22 require.NotNil(t, cache.policies) 23 require.NotNil(t, cache.parsedPolicies) 24 require.NotNil(t, cache.authorizers) 25 }) 26 27 t.Run("Zero Sizes", func(t *testing.T) { 28 // 1 isn't valid due to a bug in golang-lru library 29 config := ACLCachesConfig{0, 0, 0, 0, 0} 30 31 cache, err := NewACLCaches(&config) 32 require.NoError(t, err) 33 require.NotNil(t, cache) 34 require.Nil(t, cache.identities) 35 require.Nil(t, cache.policies) 36 require.Nil(t, cache.parsedPolicies) 37 require.Nil(t, cache.authorizers) 38 }) 39 }) 40 41 t.Run("Identities", func(t *testing.T) { 42 // 1 isn't valid due to a bug in golang-lru library 43 config := ACLCachesConfig{Identities: 4} 44 45 cache, err := NewACLCaches(&config) 46 require.NoError(t, err) 47 require.NotNil(t, cache) 48 49 cache.PutIdentity("foo", &ACLToken{}) 50 entry := cache.GetIdentity("foo") 51 require.NotNil(t, entry) 52 require.NotNil(t, entry.Identity) 53 }) 54 55 t.Run("Policies", func(t *testing.T) { 56 // 1 isn't valid due to a bug in golang-lru library 57 config := ACLCachesConfig{Policies: 4} 58 59 cache, err := NewACLCaches(&config) 60 require.NoError(t, err) 61 require.NotNil(t, cache) 62 63 cache.PutPolicy("foo", &ACLPolicy{}) 64 entry := cache.GetPolicy("foo") 65 require.NotNil(t, entry) 66 require.NotNil(t, entry.Policy) 67 }) 68 69 t.Run("ParsedPolicies", func(t *testing.T) { 70 // 1 isn't valid due to a bug in golang-lru library 71 config := ACLCachesConfig{ParsedPolicies: 4} 72 73 cache, err := NewACLCaches(&config) 74 require.NoError(t, err) 75 require.NotNil(t, cache) 76 77 cache.PutParsedPolicy("foo", &acl.Policy{}) 78 entry := cache.GetParsedPolicy("foo") 79 require.NotNil(t, entry) 80 require.NotNil(t, entry.Policy) 81 }) 82 83 t.Run("Authorizers", func(t *testing.T) { 84 // 1 isn't valid due to a bug in golang-lru library 85 config := ACLCachesConfig{Authorizers: 4} 86 87 cache, err := NewACLCaches(&config) 88 require.NoError(t, err) 89 require.NotNil(t, cache) 90 91 cache.PutAuthorizer("foo", acl.DenyAll()) 92 entry := cache.GetAuthorizer("foo") 93 require.NotNil(t, entry) 94 require.NotNil(t, entry.Authorizer) 95 require.True(t, entry.Authorizer == acl.DenyAll()) 96 }) 97 98 t.Run("Roles", func(t *testing.T) { 99 // 1 isn't valid due to a bug in golang-lru library 100 config := ACLCachesConfig{Roles: 4} 101 102 cache, err := NewACLCaches(&config) 103 require.NoError(t, err) 104 require.NotNil(t, cache) 105 106 cache.PutRole("foo", &ACLRole{}) 107 108 entry := cache.GetRole("foo") 109 require.NotNil(t, entry) 110 require.NotNil(t, entry.Role) 111 }) 112} 113