github.com/nats-io/nsc@v0.0.0-20221206222106-35db9400b257/cmd/contextconfig_test.go (about)

     1  /*
     2   * Copyright 2018 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  	"path/filepath"
    20  	"testing"
    21  
    22  	"github.com/stretchr/testify/require"
    23  )
    24  
    25  func TestContextConfig_Empty(t *testing.T) {
    26  	c, err := NewContextConfig("")
    27  	require.NoError(t, err)
    28  	require.NotNil(t, c)
    29  	require.True(t, (ContextConfig{}) == *c)
    30  }
    31  
    32  func TestContextConfig_BadDir(t *testing.T) {
    33  	fp := filepath.Join(MakeTempDir(t), "foo")
    34  	c, err := NewContextConfig(fp)
    35  	require.NoError(t, err)
    36  	require.NotNil(t, c)
    37  	require.Equal(t, fp, c.StoreRoot)
    38  }
    39  
    40  func TestContextConfig_LoadDefaultOperator(t *testing.T) {
    41  	ts := NewTestStore(t, "operator")
    42  	defer ts.Done(t)
    43  
    44  	storesDir := filepath.Dir(ts.Store.Dir)
    45  	c, err := NewContextConfig(storesDir)
    46  	require.NoError(t, err)
    47  	require.NotNil(t, c)
    48  	require.Equal(t, storesDir, c.StoreRoot)
    49  	require.Equal(t, "operator", c.Operator)
    50  }
    51  
    52  func TestContextConfig_LoadMultipleOperator(t *testing.T) {
    53  	ts := NewTestStore(t, "operator")
    54  	defer ts.Done(t)
    55  
    56  	ts.AddOperator(t, "operator2")
    57  
    58  	storesDir := filepath.Dir(ts.Store.Dir)
    59  	c, err := NewContextConfig(storesDir)
    60  
    61  	require.NoError(t, err)
    62  	require.NotNil(t, c)
    63  	require.Equal(t, storesDir, c.StoreRoot)
    64  	require.Equal(t, "", c.Operator)
    65  }
    66  
    67  func TestContextConfig_SetValidOperator(t *testing.T) {
    68  	ts := NewTestStore(t, "operator")
    69  	defer ts.Done(t)
    70  
    71  	ts.AddOperator(t, "operator2")
    72  
    73  	storesDir := filepath.Dir(ts.Store.Dir)
    74  	c, err := NewContextConfig(storesDir)
    75  	require.NoError(t, err)
    76  	err = c.SetOperator("operator2")
    77  	require.NoError(t, err)
    78  	require.Equal(t, "operator2", c.Operator)
    79  }
    80  
    81  func TestContextConfig_SetInvalidOperator(t *testing.T) {
    82  	ts := NewTestStore(t, "operator")
    83  	defer ts.Done(t)
    84  
    85  	storesDir := filepath.Dir(ts.Store.Dir)
    86  	c, err := NewContextConfig(storesDir)
    87  	require.NoError(t, err)
    88  	err = c.SetOperator("bar")
    89  	require.Error(t, err)
    90  }
    91  
    92  func TestContextConfig_SetEptyOperator(t *testing.T) {
    93  	ts := NewTestStore(t, "operator")
    94  	defer ts.Done(t)
    95  
    96  	storesDir := filepath.Dir(ts.Store.Dir)
    97  	c, err := NewContextConfig(storesDir)
    98  	require.NoError(t, err)
    99  	err = c.SetOperator("")
   100  	require.NoError(t, err)
   101  }
   102  
   103  func TestContextConfig_Account(t *testing.T) {
   104  	ts := NewTestStore(t, "operator")
   105  	defer ts.Done(t)
   106  	ts.AddAccount(t, "A")
   107  
   108  	storesDir := filepath.Dir(ts.Store.Dir)
   109  	c, err := NewContextConfig(storesDir)
   110  	require.NoError(t, err)
   111  	require.NotNil(t, c)
   112  	require.Equal(t, storesDir, c.StoreRoot)
   113  	require.Equal(t, "operator", c.Operator)
   114  	require.Equal(t, "A", c.Account)
   115  }
   116  
   117  func TestContextConfig_LoadMultipleAccount(t *testing.T) {
   118  	ts := NewTestStore(t, "operator")
   119  	defer ts.Done(t)
   120  	ts.AddAccount(t, "A")
   121  	ts.AddAccount(t, "B")
   122  
   123  	storesDir := filepath.Dir(ts.Store.Dir)
   124  	c, err := NewContextConfig(storesDir)
   125  	require.NoError(t, err)
   126  	require.NotNil(t, c)
   127  	require.Equal(t, storesDir, c.StoreRoot)
   128  	require.Equal(t, "operator", c.Operator)
   129  	require.Equal(t, "", c.Account)
   130  }
   131  
   132  func TestContextConfig_SetValidAccount(t *testing.T) {
   133  	ts := NewTestStore(t, "operator")
   134  	defer ts.Done(t)
   135  	ts.AddAccount(t, "A")
   136  
   137  	storesDir := filepath.Dir(ts.Store.Dir)
   138  	c, err := NewContextConfig(storesDir)
   139  	require.NoError(t, err)
   140  
   141  	ts.AddAccount(t, "B")
   142  	err = c.SetAccount("B")
   143  	require.NoError(t, err)
   144  	require.Equal(t, "B", c.Account)
   145  }
   146  
   147  func TestContextConfig_SetInvalidAccount(t *testing.T) {
   148  	ts := NewTestStore(t, "operator")
   149  	defer ts.Done(t)
   150  	ts.AddAccount(t, "A")
   151  
   152  	storesDir := filepath.Dir(ts.Store.Dir)
   153  	c, err := NewContextConfig(storesDir)
   154  	require.NoError(t, err)
   155  
   156  	err = c.SetAccount("B")
   157  	require.Error(t, err)
   158  }
   159  
   160  func TestContextConfig_SetEmptyAccount(t *testing.T) {
   161  	ts := NewTestStore(t, "operator")
   162  	defer ts.Done(t)
   163  	ts.AddAccount(t, "A")
   164  
   165  	storesDir := filepath.Dir(ts.Store.Dir)
   166  	c, err := NewContextConfig(storesDir)
   167  	require.NoError(t, err)
   168  
   169  	err = c.SetAccount("")
   170  	require.NoError(t, err)
   171  }
   172  
   173  func TestContextConfig_ListOperators(t *testing.T) {
   174  	ts := NewTestStore(t, "op")
   175  	defer ts.Done(t)
   176  
   177  	ts.AddOperator(t, "op2")
   178  
   179  	storesDir := filepath.Dir(ts.Store.Dir)
   180  	c, err := NewContextConfig(storesDir)
   181  	require.NoError(t, err)
   182  	require.NotNil(t, c)
   183  
   184  	ops := c.ListOperators()
   185  	require.NotNil(t, ops)
   186  
   187  	require.ElementsMatch(t, ops, []string{"op", "op2"})
   188  }