github.com/kubeshop/testkube@v1.17.23/contrib/executor/postman/pkg/runner/newman/envfile.go (about) 1 package newman 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "io" 7 "time" 8 9 "github.com/kubeshop/testkube/pkg/api/v1/testkube" 10 "github.com/kubeshop/testkube/pkg/executor/env" 11 "github.com/kubeshop/testkube/pkg/executor/output" 12 ) 13 14 func NewEnvFileReader(m map[string]testkube.Variable, paramsFile string, secretEnvs map[string]string) (io.Reader, error) { 15 envFile := NewEnvFileFromVariablesMap(m) 16 17 if paramsFile != "" { 18 // create env structure from passed params file 19 envFromParamsFile, err := NewEnvFileFromString(paramsFile) 20 if err != nil { 21 return nil, err 22 } 23 envFile.PrependParams(envFromParamsFile) 24 } 25 26 // Deprecated: use Secret Variable instead 27 for envName, secretEnv := range secretEnvs { 28 // create env structure from passed secret 29 envFromSecret, err := NewEnvFileFromString(secretEnv) 30 if err != nil { 31 output.PrintEvent("skipping secret env for env file", envName) 32 continue 33 } 34 35 envFile.PrependParams(envFromSecret) 36 } 37 38 secretVars := make(map[string]testkube.Variable) 39 for name, variable := range m { 40 if !variable.IsSecret() { 41 continue 42 } 43 44 // create env structure from passed secret 45 envFromSecret, err := NewEnvFileFromString(variable.Value) 46 if err != nil { 47 output.PrintEvent("adding secret variable for env file", name) 48 secretVars[name] = variable 49 continue 50 } 51 52 envFile.PrependParams(envFromSecret) 53 } 54 55 if len(secretVars) != 0 { 56 envFile.PrependParams(NewEnvFileFromSecretVariablesMap(secretVars)) 57 } 58 59 b, err := json.Marshal(envFile) 60 if err != nil { 61 return nil, err 62 } 63 64 return bytes.NewReader(b), err 65 } 66 67 func NewEnvFileFromVariablesMap(m map[string]testkube.Variable) (envFile EnvFile) { 68 envFile.ID = "executor-env-file" 69 envFile.Name = "executor-env-file" 70 envFile.PostmanVariableScope = "environment" 71 envFile.PostmanExportedAt = time.Now() 72 envFile.PostmanExportedUsing = "Postman/9.15.13" 73 74 env.NewManager().GetReferenceVars(m) 75 for _, v := range m { 76 if v.IsSecret() { 77 continue 78 } 79 80 envFile.Values = append(envFile.Values, Value{Key: v.Name, Value: v.Value, Enabled: true}) 81 } 82 83 return 84 } 85 86 func NewEnvFileFromSecretVariablesMap(m map[string]testkube.Variable) (envFile EnvFile) { 87 envFile.ID = "executor-secret-file" 88 envFile.Name = "executor-secret-file" 89 envFile.PostmanVariableScope = "environment" 90 envFile.PostmanExportedAt = time.Now() 91 envFile.PostmanExportedUsing = "Postman/9.15.13" 92 93 for _, v := range m { 94 envFile.Values = append(envFile.Values, Value{Key: v.Name, Value: v.Value, Enabled: true}) 95 } 96 97 return 98 } 99 100 func NewEnvFileFromString(f string) (envFile EnvFile, err error) { 101 err = json.Unmarshal([]byte(f), &envFile) 102 return 103 } 104 105 type EnvFile struct { 106 ID string `json:"id"` 107 Name string `json:"name"` 108 Values []Value `json:"values"` 109 PostmanVariableScope string `json:"_postman_variable_scope"` 110 PostmanExportedAt time.Time `json:"_postman_exported_at"` 111 PostmanExportedUsing string `json:"_postman_exported_using"` 112 } 113 114 // Prepend params adds Values from EnvFile on the beginning of array 115 func (e *EnvFile) PrependParams(from EnvFile) { 116 vals := from.Values 117 vals = append(vals, e.Values...) 118 e.Values = vals 119 } 120 121 type Value struct { 122 Key string `json:"key"` 123 Value string `json:"value"` 124 Enabled bool `json:"enabled"` 125 }