github.com/kbehouse/nsc@v0.0.6/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  }