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  }