github.com/kbehouse/nsc@v0.0.6/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/kbehouse/nsc/cmd/store"
    25  	"github.com/nats-io/jwt/v2"
    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  }