github.com/nats-io/nsc/v2@v2.8.7-0.20240307184528-efd7023c6896/cmd/importkeys_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 "fmt" 20 "path/filepath" 21 "testing" 22 23 "github.com/nats-io/nkeys" 24 "github.com/stretchr/testify/require" 25 ) 26 27 func storeKeys(t *testing.T, dir string) []nkeys.KeyPair { 28 require.NoError(t, MaybeMakeDir(dir)) 29 os, opk, okp := CreateOperatorKey(t) 30 err := Write(filepath.Join(dir, fmt.Sprintf("%s.nk", opk)), os) 31 require.NoError(t, err) 32 as, apk, akp := CreateAccountKey(t) 33 err = Write(filepath.Join(dir, fmt.Sprintf("%s.nk", apk)), as) 34 require.NoError(t, err) 35 us, upk, ukp := CreateUserKey(t) 36 err = Write(filepath.Join(dir, fmt.Sprintf("%s.nk", upk)), us) 37 require.NoError(t, err) 38 39 return []nkeys.KeyPair{okp, akp, ukp} 40 } 41 42 func Test_ImportKeys(t *testing.T) { 43 ts := NewTestStore(t, "O") 44 defer ts.Done(t) 45 46 dir := filepath.Join(ts.Dir, "external") 47 keys := storeKeys(t, dir) 48 require.True(t, len(keys) > 0) 49 50 _, _, err := ExecuteCmd(createImportKeysCmd(), "--dir", dir) 51 require.NoError(t, err) 52 for _, kp := range keys { 53 pk, err := kp.PublicKey() 54 require.NoError(t, err) 55 nk, err := ts.KeyStore.GetKeyPair(pk) 56 require.NoError(t, err) 57 require.NotNil(t, nk) 58 } 59 } 60 61 func Test_ImportKeysNotRecursive(t *testing.T) { 62 ts := NewTestStore(t, "O") 63 defer ts.Done(t) 64 65 dir := filepath.Join(ts.Dir, "external") 66 keys := storeKeys(t, dir) 67 require.True(t, len(keys) > 0) 68 dir2 := filepath.Join(dir, "more") 69 keys2 := storeKeys(t, dir2) 70 require.True(t, len(keys2) > 0) 71 72 _, _, err := ExecuteCmd(createImportKeysCmd(), "--dir", dir) 73 require.NoError(t, err) 74 for _, kp := range keys { 75 pk, err := kp.PublicKey() 76 require.NoError(t, err) 77 nk, err := ts.KeyStore.GetKeyPair(pk) 78 require.NoError(t, err) 79 require.NotNil(t, nk) 80 } 81 for _, kp := range keys2 { 82 pk, err := kp.PublicKey() 83 require.NoError(t, err) 84 nk, err := ts.KeyStore.GetKeyPair(pk) 85 require.NoError(t, err) 86 require.Nil(t, nk) 87 } 88 } 89 90 func Test_ImportKeyRecursive(t *testing.T) { 91 ts := NewTestStore(t, "O") 92 defer ts.Done(t) 93 94 dir := filepath.Join(ts.Dir, "external") 95 keys := storeKeys(t, dir) 96 require.True(t, len(keys) > 0) 97 dir2 := filepath.Join(dir, "more") 98 keys2 := storeKeys(t, dir2) 99 require.True(t, len(keys2) > 0) 100 101 _, _, err := ExecuteCmd(createImportKeysCmd(), "--dir", dir, "--recurse") 102 require.NoError(t, err) 103 keys = append(keys, keys2...) 104 for _, kp := range keys { 105 pk, err := kp.PublicKey() 106 require.NoError(t, err) 107 nk, err := ts.KeyStore.GetKeyPair(pk) 108 require.NoError(t, err) 109 require.NotNil(t, nk) 110 } 111 }