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  }