github.com/aavshr/aws-sdk-go@v1.41.3/aws/session/csm_test.go (about)

     1  //go:build go1.7
     2  // +build go1.7
     3  
     4  package session
     5  
     6  import (
     7  	"os"
     8  	"path/filepath"
     9  	"strings"
    10  	"testing"
    11  
    12  	"github.com/aavshr/aws-sdk-go/internal/sdktesting"
    13  )
    14  
    15  func TestSession_loadCSMConfig(t *testing.T) {
    16  	defConfigFiles := []string{
    17  		filepath.Join("testdata", "csm_shared_config"),
    18  	}
    19  	cases := map[string]struct {
    20  		Envs        map[string]string
    21  		ConfigFiles []string
    22  		CSMProfile  string
    23  
    24  		Expect csmConfig
    25  		Err    string
    26  	}{
    27  		"no config": {
    28  			Envs:        map[string]string{},
    29  			Expect:      csmConfig{},
    30  			ConfigFiles: defConfigFiles,
    31  			CSMProfile:  "aws_csm_empty",
    32  		},
    33  		"env enabled": {
    34  			Envs: map[string]string{
    35  				"AWS_CSM_ENABLED":   "true",
    36  				"AWS_CSM_PORT":      "4321",
    37  				"AWS_CSM_HOST":      "ahost",
    38  				"AWS_CSM_CLIENT_ID": "client id",
    39  			},
    40  			Expect: csmConfig{
    41  				Enabled:  true,
    42  				Port:     "4321",
    43  				Host:     "ahost",
    44  				ClientID: "client id",
    45  			},
    46  		},
    47  		"shared cfg enabled": {
    48  			ConfigFiles: defConfigFiles,
    49  			Expect: csmConfig{
    50  				Enabled:  true,
    51  				Port:     "1234",
    52  				Host:     "bar",
    53  				ClientID: "foo",
    54  			},
    55  		},
    56  		"mixed cfg, use env": {
    57  			Envs: map[string]string{
    58  				"AWS_CSM_ENABLED": "true",
    59  			},
    60  			ConfigFiles: defConfigFiles,
    61  			Expect: csmConfig{
    62  				Enabled: true,
    63  			},
    64  		},
    65  		"mixed cfg, use env disabled": {
    66  			Envs: map[string]string{
    67  				"AWS_CSM_ENABLED": "false",
    68  			},
    69  			ConfigFiles: defConfigFiles,
    70  			Expect: csmConfig{
    71  				Enabled: false,
    72  			},
    73  		},
    74  		"mixed cfg, use shared config": {
    75  			Envs: map[string]string{
    76  				"AWS_CSM_PORT": "4321",
    77  			},
    78  			ConfigFiles: defConfigFiles,
    79  			Expect: csmConfig{
    80  				Enabled:  true,
    81  				Port:     "1234",
    82  				Host:     "bar",
    83  				ClientID: "foo",
    84  			},
    85  		},
    86  	}
    87  
    88  	for name, c := range cases {
    89  		t.Run(name, func(t *testing.T) {
    90  			restoreFn := sdktesting.StashEnv()
    91  			defer restoreFn()
    92  
    93  			if len(c.CSMProfile) != 0 {
    94  				csmProfile := csmProfileName
    95  				defer func() {
    96  					csmProfileName = csmProfile
    97  				}()
    98  				csmProfileName = c.CSMProfile
    99  			}
   100  
   101  			for name, v := range c.Envs {
   102  				os.Setenv(name, v)
   103  			}
   104  
   105  			envCfg, err := loadEnvConfig()
   106  			if err != nil {
   107  				t.Fatalf("failed to load the envcfg, %v", err)
   108  			}
   109  			csmCfg, err := loadCSMConfig(envCfg, c.ConfigFiles)
   110  			if len(c.Err) != 0 {
   111  				if err == nil {
   112  					t.Fatalf("expect error, got none")
   113  				}
   114  				if e, a := c.Err, err.Error(); !strings.Contains(a, e) {
   115  					t.Errorf("expect %v in error %v", e, a)
   116  				}
   117  				return
   118  			}
   119  
   120  			if e, a := c.Expect, csmCfg; e != a {
   121  				t.Errorf("expect %v CSM config got %v", e, a)
   122  			}
   123  		})
   124  	}
   125  }