github.com/kubeshop/testkube@v1.17.23/cmd/kubectl-testkube/commands/testsources/common.go (about)

     1  package testsources
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/spf13/cobra"
     7  
     8  	"github.com/kubeshop/testkube/cmd/kubectl-testkube/commands/common"
     9  	apiclientv1 "github.com/kubeshop/testkube/pkg/api/v1/client"
    10  	"github.com/kubeshop/testkube/pkg/api/v1/testkube"
    11  )
    12  
    13  func newSourceFromFlags(cmd *cobra.Command) (source *testkube.TestSource, err error) {
    14  	sourceType := cmd.Flag("source-type").Value.String()
    15  	uri := cmd.Flag("uri").Value.String()
    16  	gitUri := cmd.Flag("git-uri").Value.String()
    17  
    18  	data, err := common.NewDataFromFlags(cmd)
    19  	if err != nil {
    20  		return nil, err
    21  	}
    22  
    23  	fileContent := ""
    24  	if data != nil {
    25  		fileContent = *data
    26  	}
    27  
    28  	// content is correct when is passed from file, by uri, ur by git repo
    29  	if len(fileContent) == 0 && uri == "" && gitUri == "" {
    30  		return nil, fmt.Errorf("empty test source, please pass some data to create test source")
    31  	}
    32  
    33  	if uri != "" && sourceType == "" {
    34  		sourceType = string(testkube.TestContentTypeFileURI)
    35  	}
    36  
    37  	if len(fileContent) > 0 && sourceType == "" {
    38  		sourceType = string(testkube.TestContentTypeString)
    39  	}
    40  
    41  	repository, err := common.NewRepositoryFromFlags(cmd)
    42  	if err != nil {
    43  		return nil, err
    44  	}
    45  
    46  	if repository != nil && sourceType == "" {
    47  		sourceType = string(testkube.TestContentTypeGit)
    48  	}
    49  
    50  	source = &testkube.TestSource{
    51  		Type_:      sourceType,
    52  		Data:       string(fileContent),
    53  		Repository: repository,
    54  		Uri:        uri,
    55  	}
    56  
    57  	return source, nil
    58  }
    59  
    60  // NewUpsertTestSourceOptionsFromFlags creates test source options from command flags
    61  func NewUpsertTestSourceOptionsFromFlags(cmd *cobra.Command) (options apiclientv1.UpsertTestSourceOptions, err error) {
    62  	source, err := newSourceFromFlags(cmd)
    63  	if err != nil {
    64  		return options, fmt.Errorf("creating source from passed parameters %w", err)
    65  	}
    66  
    67  	name := cmd.Flag("name").Value.String()
    68  	labels, err := cmd.Flags().GetStringToString("label")
    69  	if err != nil {
    70  		return options, err
    71  	}
    72  
    73  	options = apiclientv1.UpsertTestSourceOptions{
    74  		Name:       name,
    75  		Type_:      source.Type_,
    76  		Data:       source.Data,
    77  		Repository: source.Repository,
    78  		Uri:        source.Uri,
    79  		Labels:     labels,
    80  	}
    81  
    82  	return options, nil
    83  }
    84  
    85  func newSourceUpdateFromFlags(cmd *cobra.Command) (source *testkube.TestSourceUpdate, err error) {
    86  	source = &testkube.TestSourceUpdate{}
    87  
    88  	var fields = []struct {
    89  		name        string
    90  		destination **string
    91  	}{
    92  		{
    93  			"source-type",
    94  			&source.Name,
    95  		},
    96  		{
    97  			"uri",
    98  			&source.Uri,
    99  		},
   100  	}
   101  
   102  	var nonEmpty bool
   103  	for _, field := range fields {
   104  		if cmd.Flag(field.name).Changed {
   105  			value := cmd.Flag(field.name).Value.String()
   106  			*field.destination = &value
   107  			nonEmpty = true
   108  		}
   109  	}
   110  
   111  	data, err := common.NewDataFromFlags(cmd)
   112  	if err != nil {
   113  		return nil, err
   114  	}
   115  
   116  	if data != nil {
   117  		source.Data = data
   118  		nonEmpty = true
   119  	}
   120  
   121  	repository, err := common.NewRepositoryUpdateFromFlags(cmd)
   122  	if err != nil {
   123  		return nil, err
   124  	}
   125  
   126  	if repository != nil {
   127  		source.Repository = &repository
   128  		nonEmpty = true
   129  	}
   130  
   131  	if nonEmpty {
   132  		return source, nil
   133  	}
   134  
   135  	return nil, nil
   136  }
   137  
   138  // NewUpdateTestSourceOptionsFromFlags creates test update source options from command flags
   139  func NewUpdateTestSourceOptionsFromFlags(cmd *cobra.Command) (options apiclientv1.UpdateTestSourceOptions, err error) {
   140  	source, err := newSourceUpdateFromFlags(cmd)
   141  	if err != nil {
   142  		return options, fmt.Errorf("creating source from passed parameters %w", err)
   143  	}
   144  
   145  	if cmd.Flag("name").Changed {
   146  		name := cmd.Flag("name").Value.String()
   147  		options.Name = &name
   148  	}
   149  
   150  	if cmd.Flag("label").Changed {
   151  		labels, err := cmd.Flags().GetStringToString("label")
   152  		if err != nil {
   153  			return options, err
   154  		}
   155  
   156  		options.Labels = &labels
   157  	}
   158  
   159  	if source != nil {
   160  		options.Type_ = source.Type_
   161  		var emptyValue string
   162  		var emptyRepository = &testkube.RepositoryUpdate{}
   163  		switch {
   164  		case source.Data != nil:
   165  			options.Data = source.Data
   166  			options.Repository = &emptyRepository
   167  			options.Uri = &emptyValue
   168  		case source.Repository != nil:
   169  			options.Data = &emptyValue
   170  			options.Repository = source.Repository
   171  			options.Uri = &emptyValue
   172  		case source.Uri != nil:
   173  			options.Data = &emptyValue
   174  			options.Repository = &emptyRepository
   175  			options.Uri = source.Uri
   176  		}
   177  	}
   178  
   179  	return options, nil
   180  }