github.com/nats-io/nsc/v2@v2.8.7-0.20240307184528-efd7023c6896/cmd/rename_test.go (about) 1 /* 2 * Copyright 2020 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/nats-io/jwt/v2" 22 23 "github.com/stretchr/testify/require" 24 ) 25 26 func Test_RenameAccountRequiresOK(t *testing.T) { 27 ts := NewTestStore(t, "O") 28 defer ts.Done(t) 29 ts.AddAccount(t, "A") 30 _, _, err := ExecuteCmd(createRenameAccountCmd(), "A", "B") 31 require.Error(t, err) 32 require.Contains(t, err.Error(), "required flag \"OK\" not set") 33 } 34 35 func Test_RenameAccountNoUsers(t *testing.T) { 36 ts := NewTestStore(t, "O") 37 defer ts.Done(t) 38 ts.AddAccount(t, "A") 39 pk := ts.GetAccountPublicKey(t, "A") 40 _, _, err := ExecuteCmd(createRenameAccountCmd(), "A", "B", "--OK") 41 require.NoError(t, err) 42 43 _, err = ts.Store.ReadAccountClaim("A") 44 require.Error(t, err) 45 46 bc, err := ts.Store.ReadAccountClaim("B") 47 require.NoError(t, err) 48 require.Equal(t, "B", bc.Name) 49 require.Equal(t, pk, bc.Subject) 50 } 51 52 func Test_RenameAccountUsers(t *testing.T) { 53 ts := NewTestStore(t, "O") 54 defer ts.Done(t) 55 ts.AddAccount(t, "A") 56 ts.AddUser(t, "A", "aa") 57 ts.AddUser(t, "A", "bb") 58 pk := ts.GetAccountPublicKey(t, "A") 59 require.FileExists(t, ts.KeyStore.CalcUserCredsPath("A", "aa")) 60 require.FileExists(t, ts.KeyStore.CalcUserCredsPath("A", "bb")) 61 62 _, _, err := ExecuteCmd(createRenameAccountCmd(), "A", "B", "--OK") 63 require.NoError(t, err) 64 65 _, err = ts.Store.ReadAccountClaim("A") 66 require.Error(t, err) 67 68 bc, err := ts.Store.ReadAccountClaim("B") 69 require.NoError(t, err) 70 require.Equal(t, "B", bc.Name) 71 require.Equal(t, pk, bc.Subject) 72 require.FileExists(t, ts.KeyStore.CalcUserCredsPath("B", "aa")) 73 require.FileExists(t, ts.KeyStore.CalcUserCredsPath("B", "bb")) 74 ts.DoesNotExist(t, ts.KeyStore.CalcUserCredsPath("A", "aa")) 75 ts.DoesNotExist(t, ts.KeyStore.CalcUserCredsPath("A", "bb")) 76 } 77 78 func Test_RenameAccountDuplicate(t *testing.T) { 79 ts := NewTestStore(t, "O") 80 defer ts.Done(t) 81 ts.AddAccount(t, "A") 82 ts.AddAccount(t, "B") 83 84 _, _, err := ExecuteCmd(createRenameAccountCmd(), "A", "B", "--OK") 85 require.Error(t, err) 86 } 87 88 func Test_RenameManagedAccount(t *testing.T) { 89 as, m := RunTestAccountServer(t) 90 defer as.Close() 91 92 ts := NewTestStoreWithOperatorJWT(t, string(m["operator"])) 93 defer ts.Done(t) 94 95 ts.AddAccount(t, "A") 96 pk := ts.GetAccountPublicKey(t, "A") 97 ac, err := jwt.DecodeAccountClaims(string(m[pk])) 98 require.NoError(t, err) 99 require.Equal(t, pk, ac.Subject) 100 require.Equal(t, "A", ac.Name) 101 102 _, _, err = ExecuteCmd(createRenameAccountCmd(), "A", "B", "--OK") 103 require.NoError(t, err) 104 bc, err := jwt.DecodeAccountClaims(string(m[pk])) 105 require.NoError(t, err) 106 require.Equal(t, pk, bc.Subject) 107 require.Equal(t, "B", bc.Name) 108 }