github.com/verrazzano/verrazzano@v1.7.0/tools/psr/backend/osenv/env_test.go (about)

     1  // Copyright (c) 2022, Oracle and/or its affiliates.
     2  // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
     3  
     4  package osenv
     5  
     6  import (
     7  	"github.com/stretchr/testify/assert"
     8  	"testing"
     9  )
    10  
    11  type fakeEnv struct {
    12  	data map[string]string
    13  }
    14  
    15  // TestEnv tests the Environment interface
    16  // GIVEN an EnvVarDesc that is used to load data from the os Env vars
    17  //
    18  //	WHEN the env var is defined or missing
    19  //	THEN ensure that LoadFromEnv and GetEnv work correctly
    20  func TestEnv(t *testing.T) {
    21  	const (
    22  		fooKey     = "key"
    23  		fooVal     = "val"
    24  		missingKey = "missingKey"
    25  		missingVal = "missingDefault"
    26  	)
    27  	f := fakeEnv{data: map[string]string{fooKey: fooVal}}
    28  	gf := GetEnvFunc
    29  	GetEnvFunc = f.getEnv
    30  	defer func() {
    31  		GetEnvFunc = gf
    32  	}()
    33  
    34  	var tests = []struct {
    35  		name        string
    36  		expectedVal string
    37  		expectErr   bool
    38  		desc        EnvVarDesc
    39  	}{
    40  		{name: "valExists", expectedVal: fooVal, expectErr: false,
    41  			desc: EnvVarDesc{
    42  				Key:        fooKey,
    43  				DefaultVal: "",
    44  				Required:   false,
    45  			},
    46  		},
    47  		{name: "valDefault", expectedVal: missingVal, expectErr: false,
    48  			desc: EnvVarDesc{
    49  				Key:        missingKey,
    50  				DefaultVal: missingVal,
    51  				Required:   false,
    52  			},
    53  		},
    54  		{name: "valRequiredButMissing", expectedVal: "", expectErr: true,
    55  			desc: EnvVarDesc{
    56  				Key:        missingKey,
    57  				DefaultVal: "",
    58  				Required:   true,
    59  			},
    60  		},
    61  	}
    62  	for _, test := range tests {
    63  		t.Run(test.name, func(t *testing.T) {
    64  			e := NewEnv()
    65  			err := e.LoadFromEnv([]EnvVarDesc{test.desc})
    66  			if test.expectErr {
    67  				assert.Error(t, err)
    68  			} else {
    69  				assert.NoError(t, err)
    70  			}
    71  			v := e.GetEnv(test.desc.Key)
    72  			assert.Equal(t, test.expectedVal, v)
    73  		})
    74  	}
    75  }
    76  
    77  func (e fakeEnv) getEnv(key string) string {
    78  	return e.data[key]
    79  }