github.com/nats-io/nsc/v2@v2.8.7-0.20240307184528-efd7023c6896/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 }