github.com/nats-io/nsc/v2@v2.8.7-0.20240307184528-efd7023c6896/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 }