github.com/nats-io/nsc@v0.0.0-20221206222106-35db9400b257/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/nats-io/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 }