github.com/kbehouse/nsc@v0.0.6/cmd/deleteuser_test.go (about)

     1  /*
     2   * Copyright 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  	"os"
    20  	"testing"
    21  
    22  	"github.com/kbehouse/nsc/cmd/store"
    23  	"github.com/stretchr/testify/require"
    24  )
    25  
    26  func Test_DeleteUserNotFound(t *testing.T) {
    27  	ts := NewTestStore(t, "O")
    28  	defer ts.Done(t)
    29  
    30  	ts.AddAccount(t, "A")
    31  	ts.AddUser(t, "A", "U")
    32  
    33  	_, _, err := ExecuteCmd(CreateDeleteUserCmd(), "--name", "X")
    34  	require.Error(t, err)
    35  	_, ok := err.(*store.ResourceErr)
    36  	require.True(t, ok)
    37  }
    38  
    39  func Test_DeleteUserOnly(t *testing.T) {
    40  	ts := NewTestStore(t, "O")
    41  	defer ts.Done(t)
    42  
    43  	ts.AddAccount(t, "A")
    44  	ts.AddUser(t, "A", "U")
    45  
    46  	uc, err := ts.Store.ReadUserClaim("A", "U")
    47  	require.NoError(t, err)
    48  	upk := uc.Subject
    49  
    50  	_, _, err = ExecuteCmd(CreateDeleteUserCmd(), "--name", "U")
    51  	require.NoError(t, err)
    52  	uc, err = ts.Store.ReadUserClaim("A", "U")
    53  	require.Error(t, err)
    54  	require.Nil(t, uc)
    55  
    56  	require.True(t, ts.KeyStore.HasPrivateKey(upk))
    57  	require.FileExists(t, ts.KeyStore.GetUserCredsPath("A", "U"))
    58  }
    59  
    60  func Test_DeleteUserAll(t *testing.T) {
    61  	ts := NewTestStore(t, "O")
    62  	defer ts.Done(t)
    63  
    64  	ts.AddAccount(t, "A")
    65  	ts.AddUser(t, "A", "U")
    66  
    67  	uc, err := ts.Store.ReadUserClaim("A", "U")
    68  	require.NoError(t, err)
    69  	upk := uc.Subject
    70  
    71  	_, _, err = ExecuteCmd(CreateDeleteUserCmd(), "--name", "U", "--rm-nkey", "--rm-creds")
    72  	require.NoError(t, err)
    73  	uc, err = ts.Store.ReadUserClaim("A", "U")
    74  	require.Error(t, err)
    75  	require.Nil(t, uc)
    76  
    77  	require.False(t, ts.KeyStore.HasPrivateKey(upk))
    78  	_, err = os.Stat(ts.KeyStore.GetUserCredsPath("A", "U"))
    79  	require.True(t, os.IsNotExist(err))
    80  }
    81  
    82  func Test_DeleteUserInvalidate(t *testing.T) {
    83  	ts := NewTestStore(t, "O")
    84  	defer ts.Done(t)
    85  
    86  	ts.AddAccount(t, "A")
    87  	ts.AddUser(t, "A", "U")
    88  
    89  	uc, err := ts.Store.ReadUserClaim("A", "U")
    90  	require.NoError(t, err)
    91  	upk := uc.Subject
    92  
    93  	_, _, err = ExecuteCmd(CreateDeleteUserCmd(), "--name", "U", "--revoke")
    94  	require.NoError(t, err)
    95  
    96  	ac, err := ts.Store.ReadAccountClaim("A")
    97  	require.NoError(t, err)
    98  	require.True(t, ac.Revocations[upk] > 0)
    99  }
   100  
   101  func Test_DeleteUserInteractive(t *testing.T) {
   102  	ts := NewTestStore(t, "O")
   103  	defer ts.Done(t)
   104  
   105  	ts.AddAccount(t, "A")
   106  	ts.AddUser(t, "A", "U")
   107  
   108  	uc, err := ts.Store.ReadUserClaim("A", "U")
   109  	require.NoError(t, err)
   110  	upk := uc.Subject
   111  
   112  	_, _, err = ExecuteInteractiveCmd(CreateDeleteUserCmd(), []interface{}{[]int{0}, true, true, true, true})
   113  	require.NoError(t, err)
   114  
   115  	uc, err = ts.Store.ReadUserClaim("A", "U")
   116  	require.Error(t, err)
   117  	require.Nil(t, uc)
   118  
   119  	require.False(t, ts.KeyStore.HasPrivateKey(upk))
   120  	_, err = os.Stat(ts.KeyStore.GetUserCredsPath("A", "U"))
   121  	require.True(t, os.IsNotExist(err))
   122  }
   123  
   124  func Test_DeleteUserFromDiffAccount(t *testing.T) {
   125  	ts := NewTestStore(t, "O")
   126  	defer ts.Done(t)
   127  
   128  	ts.AddAccount(t, "A")
   129  	ts.AddUser(t, "A", "a")
   130  	ts.AddAccount(t, "B")
   131  
   132  	_, _, err := ExecuteCmd(CreateDeleteUserCmd(), "a", "-a", "A")
   133  	require.NoError(t, err)
   134  
   135  	_, err = ts.Store.ReadUserClaim("A", "a")
   136  	require.Error(t, err)
   137  }
   138  
   139  func Test_DeleteUserFromDiffAccountInteractive(t *testing.T) {
   140  	ts := NewTestStore(t, "O")
   141  	defer ts.Done(t)
   142  
   143  	ts.AddAccount(t, "A")
   144  	ts.AddUser(t, "A", "a")
   145  	ts.AddAccount(t, "B")
   146  
   147  	uc, err := ts.Store.ReadUserClaim("A", "a")
   148  	require.NoError(t, err)
   149  	upk := uc.Subject
   150  
   151  	_, _, err = ExecuteInteractiveCmd(CreateDeleteUserCmd(), []interface{}{0, []int{0}, true, true, true, true})
   152  	require.NoError(t, err)
   153  
   154  	uc, err = ts.Store.ReadUserClaim("A", "a")
   155  	require.Error(t, err)
   156  	require.Nil(t, uc)
   157  
   158  	require.False(t, ts.KeyStore.HasPrivateKey(upk))
   159  	_, err = os.Stat(ts.KeyStore.GetUserCredsPath("A", "a"))
   160  	require.True(t, os.IsNotExist(err))
   161  }