github.com/nats-io/nsc/v2@v2.8.7-0.20240307184528-efd7023c6896/cmd/defaults_test.go (about) 1 /* 2 * Copyright 2018-2023 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 "os" 21 "path/filepath" 22 "testing" 23 24 "github.com/stretchr/testify/require" 25 ) 26 27 func TestDefault_LoadOrInit(t *testing.T) { 28 d := MakeTempDir(t) 29 dir := filepath.Join(d, "a") 30 31 ResetForTests() 32 tc, err := LoadOrInit(filepath.Join(dir, "config"), dir, "") 33 require.NoError(t, err) 34 35 require.Equal(t, dir, tc.StoreRoot) 36 require.Equal(t, "", tc.Operator) 37 require.Equal(t, "", tc.Account) 38 } 39 40 func TestDefault_LoadNewOnExisting(t *testing.T) { 41 ts := NewTestStore(t, "operator") 42 ts.AddAccount(t, "A") 43 44 var cc ContextConfig 45 cc.StoreRoot = ts.GetStoresRoot() 46 fp := filepath.Join(ts.Dir, fmt.Sprintf("%s.json", GetToolName())) 47 require.NoError(t, WriteJson(fp, cc)) 48 49 ResetForTests() 50 tc, err := LoadOrInit(filepath.Join(ts.Dir, "config"), "", "") 51 require.NoError(t, err) 52 require.NotNil(t, tc) 53 54 require.Equal(t, ts.GetStoresRoot(), tc.StoreRoot) 55 require.Equal(t, "operator", tc.Operator) 56 require.Equal(t, "A", tc.Account) 57 } 58 59 func TestDefault_LoadNewOnExistingOverride(t *testing.T) { 60 ts := NewTestStore(t, "operator") 61 ts.AddAccount(t, "A") 62 63 var cc ContextConfig 64 cc.StoreRoot = ts.GetStoresRoot() 65 fp := filepath.Join(ts.Dir, fmt.Sprintf("%s.json", GetToolName())) 66 require.NoError(t, WriteJson(fp, cc)) 67 68 ResetForTests() 69 dataDir := filepath.Join(ts.Dir, "store") 70 tc, err := LoadOrInit(filepath.Join(ts.Dir, "config"), dataDir, "") 71 require.NoError(t, err) 72 require.NotNil(t, tc) 73 74 require.Equal(t, dataDir, tc.StoreRoot) 75 require.Equal(t, "operator", tc.Operator) 76 require.Equal(t, "A", tc.Account) 77 } 78 79 func Test_isOperatorDir(t *testing.T) { 80 ts := NewTestStore(t, "O") 81 defer ts.Done(t) 82 83 ts.AddAccount(t, "A") 84 x := ts.AddSubDir(t, "X") 85 86 info, ok, err := isOperatorDir(x) 87 require.NoError(t, err) 88 require.False(t, ok) 89 require.Empty(t, info) 90 91 odir := filepath.Join(ts.GetStoresRoot(), "O") 92 info, ok, err = isOperatorDir(odir) 93 require.NoError(t, err) 94 require.True(t, ok) 95 require.NotEmpty(t, info) 96 require.Equal(t, "O", info.Name) 97 98 info, ok, err = isOperatorDir(filepath.Dir(odir)) 99 require.NoError(t, err) 100 require.False(t, ok) 101 require.Empty(t, info) 102 } 103 104 func Test_GetCwdStore(t *testing.T) { 105 ts := NewTestStore(t, "O") 106 defer ts.Done(t) 107 ts.AddAccount(t, "A") 108 ts.AddAccount(t, "B") 109 110 d, err := os.Getwd() 111 require.NoError(t, err) 112 defer os.Chdir(d) 113 114 // normalize the path representation 115 require.NoError(t, os.Chdir(ts.Dir)) 116 require.Nil(t, GetCwdCtx()) 117 118 require.NoError(t, err) 119 require.NoError(t, os.Chdir(ts.StoreDir)) 120 121 require.NotNil(t, GetCwdCtx()) 122 EqualPaths(t, ts.StoreDir, GetCwdCtx().StoreRoot) 123 124 odir := filepath.Join(ts.StoreDir, "O") 125 require.NoError(t, os.Chdir(odir)) 126 127 ctx := GetCwdCtx() 128 require.NotNil(t, ctx) 129 EqualPaths(t, ts.StoreDir, ctx.StoreRoot) 130 require.Equal(t, "O", ctx.Operator) 131 require.Equal(t, "", ctx.Account) 132 133 accounts := filepath.Join(odir, "accounts") 134 require.NoError(t, os.Chdir(accounts)) 135 136 ctx = GetCwdCtx() 137 require.NotNil(t, ctx) 138 EqualPaths(t, ts.StoreDir, ctx.StoreRoot) 139 require.Equal(t, "O", ctx.Operator) 140 require.Equal(t, "", ctx.Account) 141 142 actdir := filepath.Join(accounts, "A") 143 require.NoError(t, os.Chdir(actdir)) 144 145 ctx = GetCwdCtx() 146 require.NotNil(t, ctx) 147 EqualPaths(t, ts.StoreDir, ctx.StoreRoot) 148 require.Equal(t, "O", ctx.Operator) 149 require.Equal(t, "A", ctx.Account) 150 151 actdir = filepath.Join(accounts, "B") 152 require.NoError(t, os.Chdir(actdir)) 153 154 ctx = GetCwdCtx() 155 require.NotNil(t, ctx) 156 EqualPaths(t, ts.StoreDir, ctx.StoreRoot) 157 require.Equal(t, "O", ctx.Operator) 158 require.Equal(t, "B", ctx.Account) 159 }