github.com/clly/consul@v1.4.5/agent/token/store_test.go (about)

     1  package token
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  )
     8  
     9  func TestStore_RegularTokens(t *testing.T) {
    10  	t.Parallel()
    11  
    12  	type tokens struct {
    13  		userSource   TokenSource
    14  		user         string
    15  		agent        string
    16  		agentSource  TokenSource
    17  		master       string
    18  		masterSource TokenSource
    19  		repl         string
    20  		replSource   TokenSource
    21  	}
    22  
    23  	tests := []struct {
    24  		name      string
    25  		set       tokens
    26  		raw       tokens
    27  		effective tokens
    28  	}{
    29  		{
    30  			name:      "set user - config",
    31  			set:       tokens{user: "U", userSource: TokenSourceConfig},
    32  			raw:       tokens{user: "U", userSource: TokenSourceConfig},
    33  			effective: tokens{user: "U", agent: "U"},
    34  		},
    35  		{
    36  			name:      "set user - api",
    37  			set:       tokens{user: "U", userSource: TokenSourceAPI},
    38  			raw:       tokens{user: "U", userSource: TokenSourceAPI},
    39  			effective: tokens{user: "U", agent: "U"},
    40  		},
    41  		{
    42  			name:      "set agent - config",
    43  			set:       tokens{agent: "A", agentSource: TokenSourceConfig},
    44  			raw:       tokens{agent: "A", agentSource: TokenSourceConfig},
    45  			effective: tokens{agent: "A"},
    46  		},
    47  		{
    48  			name:      "set agent - api",
    49  			set:       tokens{agent: "A", agentSource: TokenSourceAPI},
    50  			raw:       tokens{agent: "A", agentSource: TokenSourceAPI},
    51  			effective: tokens{agent: "A"},
    52  		},
    53  		{
    54  			name:      "set user and agent",
    55  			set:       tokens{agent: "A", user: "U"},
    56  			raw:       tokens{agent: "A", user: "U"},
    57  			effective: tokens{agent: "A", user: "U"},
    58  		},
    59  		{
    60  			name:      "set repl - config",
    61  			set:       tokens{repl: "R", replSource: TokenSourceConfig},
    62  			raw:       tokens{repl: "R", replSource: TokenSourceConfig},
    63  			effective: tokens{repl: "R"},
    64  		},
    65  		{
    66  			name:      "set repl - api",
    67  			set:       tokens{repl: "R", replSource: TokenSourceAPI},
    68  			raw:       tokens{repl: "R", replSource: TokenSourceAPI},
    69  			effective: tokens{repl: "R"},
    70  		},
    71  		{
    72  			name:      "set master - config",
    73  			set:       tokens{master: "M", masterSource: TokenSourceConfig},
    74  			raw:       tokens{master: "M", masterSource: TokenSourceConfig},
    75  			effective: tokens{master: "M"},
    76  		},
    77  		{
    78  			name:      "set master - api",
    79  			set:       tokens{master: "M", masterSource: TokenSourceAPI},
    80  			raw:       tokens{master: "M", masterSource: TokenSourceAPI},
    81  			effective: tokens{master: "M"},
    82  		},
    83  		{
    84  			name:      "set all",
    85  			set:       tokens{user: "U", agent: "A", repl: "R", master: "M"},
    86  			raw:       tokens{user: "U", agent: "A", repl: "R", master: "M"},
    87  			effective: tokens{user: "U", agent: "A", repl: "R", master: "M"},
    88  		},
    89  	}
    90  	for _, tt := range tests {
    91  		t.Run(tt.name, func(t *testing.T) {
    92  			t.Parallel()
    93  
    94  			s := new(Store)
    95  			s.UpdateUserToken(tt.set.user, tt.set.userSource)
    96  			s.UpdateAgentToken(tt.set.agent, tt.set.agentSource)
    97  			s.UpdateReplicationToken(tt.set.repl, tt.set.replSource)
    98  			s.UpdateAgentMasterToken(tt.set.master, tt.set.masterSource)
    99  
   100  			require.Equal(t, tt.effective.user, s.UserToken())
   101  			require.Equal(t, tt.effective.agent, s.AgentToken())
   102  			require.Equal(t, tt.effective.master, s.AgentMasterToken())
   103  			require.Equal(t, tt.effective.repl, s.ReplicationToken())
   104  
   105  			tok, src := s.UserTokenAndSource()
   106  			require.Equal(t, tt.raw.user, tok)
   107  			require.Equal(t, tt.raw.userSource, src)
   108  
   109  			tok, src = s.AgentTokenAndSource()
   110  			require.Equal(t, tt.raw.agent, tok)
   111  			require.Equal(t, tt.raw.agentSource, src)
   112  
   113  			tok, src = s.AgentMasterTokenAndSource()
   114  			require.Equal(t, tt.raw.master, tok)
   115  			require.Equal(t, tt.raw.masterSource, src)
   116  
   117  			tok, src = s.ReplicationTokenAndSource()
   118  			require.Equal(t, tt.raw.repl, tok)
   119  			require.Equal(t, tt.raw.replSource, src)
   120  		})
   121  	}
   122  }
   123  
   124  func TestStore_AgentMasterToken(t *testing.T) {
   125  	t.Parallel()
   126  	s := new(Store)
   127  
   128  	verify := func(want bool, toks ...string) {
   129  		for _, tok := range toks {
   130  			require.Equal(t, want, s.IsAgentMasterToken(tok))
   131  		}
   132  	}
   133  
   134  	verify(false, "", "nope")
   135  
   136  	s.UpdateAgentMasterToken("master", TokenSourceConfig)
   137  	verify(true, "master")
   138  	verify(false, "", "nope")
   139  
   140  	s.UpdateAgentMasterToken("another", TokenSourceConfig)
   141  	verify(true, "another")
   142  	verify(false, "", "nope", "master")
   143  
   144  	s.UpdateAgentMasterToken("", TokenSourceConfig)
   145  	verify(false, "", "nope", "master", "another")
   146  }