1//go:build go1.7 2// +build go1.7 3 4package session 5 6import ( 7 "os" 8 "path/filepath" 9 "strings" 10 "testing" 11 12 "github.com/aws/aws-sdk-go/internal/sdktesting" 13) 14 15func 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} 126