github.com/nats-io/nsc@v0.0.0-20221206222106-35db9400b257/cmd/fixenv_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 "fmt" 20 "path/filepath" 21 "testing" 22 "time" 23 24 "github.com/nats-io/jwt/v2" 25 "github.com/nats-io/nsc/cmd/store" 26 "github.com/stretchr/testify/require" 27 ) 28 29 func Test_FixRequiresInArg(t *testing.T) { 30 _, _, err := ExecuteCmd(createFixCmd()) 31 require.Error(t, err) 32 } 33 34 func Test_NoOperatorsErr(t *testing.T) { 35 ts := NewEmptyStore(t) 36 defer ts.Done(t) 37 38 fp := filepath.Join(ts.Dir, "in") 39 require.NoError(t, MaybeMakeDir(fp)) 40 41 _, _, err := ExecuteCmd(createFixCmd(), "--in", fp) 42 require.Error(t, err) 43 } 44 45 func Test_FixBasics(t *testing.T) { 46 ts := NewTestStore(t, "T") 47 defer ts.Done(t) 48 49 in := filepath.Join(ts.Dir, "in") 50 require.NoError(t, MaybeMakeDir(in)) 51 52 osk, opk, okp := CreateOperatorKey(t) 53 require.NoError(t, Write(filepath.Join(in, "opk.nk"), osk)) 54 oss, ospk, _ := CreateOperatorKey(t) 55 require.NoError(t, Write(filepath.Join(in, "ospk.nk"), oss)) 56 57 // save one version 58 oc := jwt.NewOperatorClaims(opk) 59 oc.Name = "O" 60 oc.SigningKeys.Add(ospk) 61 otok, err := oc.Encode(okp) 62 require.NoError(t, err) 63 require.NoError(t, Write(filepath.Join(in, "o.jwt"), []byte(otok))) 64 65 // and another with a tag 66 oc.Tags.Add("test") 67 time.Sleep(time.Second) 68 otok2, err := oc.Encode(okp) 69 require.NoError(t, err) 70 require.NoError(t, Write(filepath.Join(in, "o2.jwt"), []byte(otok2))) 71 72 ask, apk, akp := CreateAccountKey(t) 73 require.NoError(t, Write(filepath.Join(in, "apk.nk"), ask)) 74 ac := jwt.NewAccountClaims(apk) 75 ac.Name = "A" 76 atok, err := ac.Encode(okp) 77 require.NoError(t, err) 78 require.NoError(t, Write(filepath.Join(in, "a.jwt"), []byte(atok))) 79 80 usk, upk, _ := CreateUserKey(t) 81 require.NoError(t, Write(filepath.Join(in, "upk.nk"), usk)) 82 uc := jwt.NewUserClaims(upk) 83 uc.Name = "U" 84 utok, err := uc.Encode(akp) 85 require.NoError(t, err) 86 require.NoError(t, Write(filepath.Join(in, "u.jwt"), []byte(utok))) 87 88 ofp := filepath.Join(ts.Dir, "out") 89 _, _, err = ExecuteCmd(createFixCmd(), "--in", in, "--out", ofp) 90 require.NoError(t, err) 91 92 s, err := store.LoadStore(filepath.Join(ofp, "operators", "O")) 93 require.NoError(t, err) 94 95 ooc, err := s.ReadOperatorClaim() 96 require.NoError(t, err) 97 require.Equal(t, opk, ooc.Subject) 98 require.Equal(t, "O", ooc.Name) 99 require.True(t, ooc.Tags.Contains("test")) 100 101 aac, err := s.ReadAccountClaim("A") 102 require.NoError(t, err) 103 require.Equal(t, apk, aac.Subject) 104 require.Equal(t, "A", aac.Name) 105 106 uuc, err := s.ReadUserClaim("A", "U") 107 require.NoError(t, err) 108 require.Equal(t, upk, uuc.Subject) 109 require.Equal(t, "U", uuc.Name) 110 111 okf := filepath.Join(ofp, "keys", "keys", opk[:1], opk[1:3], fmt.Sprintf("%s.nk", opk)) 112 require.FileExists(t, okf) 113 oskf := filepath.Join(ofp, "keys", "keys", ospk[:1], ospk[1:3], fmt.Sprintf("%s.nk", ospk)) 114 require.FileExists(t, oskf) 115 116 akf := filepath.Join(ofp, "keys", "keys", apk[:1], apk[1:3], fmt.Sprintf("%s.nk", apk)) 117 require.FileExists(t, akf) 118 119 ukf := filepath.Join(ofp, "keys", "keys", upk[:1], upk[1:3], fmt.Sprintf("%s.nk", upk)) 120 require.FileExists(t, ukf) 121 }