github.com/nats-io/nsc@v0.0.0-20221206222106-35db9400b257/cmd/friendlynamecollector_test.go (about)

     1  /*
     2   * Copyright 2018-2019 The NATS Authors
     3   * Licensed under the Apache License, Version 2.0 (the "License");
     4   * you may not use this file except in compliance with the License.
     5   * You may obtain a copy of the License at
     6   *
     7   * http://www.apache.org/licenses/LICENSE-2.0
     8   *
     9   * Unless required by applicable law or agreed to in writing, software
    10   * distributed under the License is distributed on an "AS IS" BASIS,
    11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12   * See the License for the specific language governing permissions and
    13   * limitations under the License.
    14   */
    15  
    16  package cmd
    17  
    18  import (
    19  	"testing"
    20  
    21  	"github.com/stretchr/testify/require"
    22  )
    23  
    24  func Test_FriendlyNameFilter(t *testing.T) {
    25  	ts := NewTestStore(t, "O")
    26  	defer ts.Done(t)
    27  
    28  	oc, err := ts.Store.ReadOperatorClaim()
    29  	require.NoError(t, err)
    30  
    31  	fn, err := friendlyNameFilter()
    32  	require.NoError(t, err)
    33  	require.Equal(t, "O", fn(oc.Subject))
    34  	require.Equal(t, "XXX", fn("XXX"))
    35  
    36  }
    37  
    38  func Test_FriendlyNameCollector(t *testing.T) {
    39  	ts := NewTestStore(t, "O")
    40  	defer ts.Done(t)
    41  
    42  	ts.AddAccount(t, "A")
    43  	ts.AddAccount(t, "B")
    44  
    45  	oc, err := ts.Store.ReadOperatorClaim()
    46  	require.NoError(t, err)
    47  	okp, err := ts.KeyStore.GetKeyPair(oc.Subject)
    48  	require.NoError(t, err)
    49  
    50  	_, ok2, okp2 := CreateOperatorKey(t)
    51  	oc.SigningKeys.Add(ok2)
    52  	token, err := oc.Encode(okp)
    53  	require.NoError(t, err)
    54  	require.NoError(t, ts.Store.StoreRaw([]byte(token)))
    55  
    56  	aac, err := ts.Store.ReadAccountClaim("A")
    57  	require.NoError(t, err)
    58  	_, ak2, _ := CreateAccountKey(t)
    59  	aac.SigningKeys.Add(ak2)
    60  	token, err = aac.Encode(okp2)
    61  	require.NoError(t, err)
    62  	rs, err := ts.Store.StoreClaim([]byte(token))
    63  	require.NoError(t, err)
    64  	require.Nil(t, rs)
    65  
    66  	bac, err := ts.Store.ReadAccountClaim("B")
    67  	require.NoError(t, err)
    68  
    69  	// force fully qualifiying all names
    70  	m, err := friendlyNames("")
    71  	require.NoError(t, err)
    72  	require.Len(t, m, 5)
    73  	require.Equal(t, "O", m[oc.Subject])
    74  	require.Equal(t, "O", m[oc.SigningKeys[0]])
    75  	require.Equal(t, "A", m[aac.Subject])
    76  	require.Equal(t, "A", m[aac.SigningKeys.Keys()[0]])
    77  	require.Equal(t, "B", m[bac.Subject])
    78  
    79  	ts.AddOperator(t, "OO")
    80  	ooc, err := ts.Store.ReadOperatorClaim()
    81  	require.NoError(t, err)
    82  	oopk := ooc.Subject
    83  	ts.AddAccount(t, "X")
    84  	xc, err := ts.Store.ReadAccountClaim("X")
    85  	require.NoError(t, err)
    86  	xpk := xc.Subject
    87  
    88  	m, err = friendlyNames("OO")
    89  	require.NoError(t, err)
    90  	require.Len(t, m, 7)
    91  	require.Equal(t, "OO", m[oopk])
    92  	require.Equal(t, "X", m[xpk])
    93  	require.Equal(t, "O", m[oc.Subject])
    94  	require.Equal(t, "O", m[oc.SigningKeys[0]])
    95  	require.Equal(t, "O/A", m[aac.Subject])
    96  	require.Equal(t, "O/A", m[aac.SigningKeys.Keys()[0]])
    97  	require.Equal(t, "O/B", m[bac.Subject])
    98  }