github.com/outbrain/consul@v1.4.5/agent/structs/acl_cache_test.go (about)

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