github.com/kubeshop/testkube@v1.17.23/pkg/mapper/testsources/mapper.go (about)

     1  package testsources
     2  
     3  import (
     4  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
     5  
     6  	testsourcev1 "github.com/kubeshop/testkube-operator/api/testsource/v1"
     7  	"github.com/kubeshop/testkube/pkg/api/v1/testkube"
     8  )
     9  
    10  // MapCRDToAPI maps TestSource CRD to OpenAPI spec TestSource
    11  func MapCRDToAPI(item testsourcev1.TestSource) testkube.TestSource {
    12  	var repository *testkube.Repository
    13  	if item.Spec.Repository != nil {
    14  		repository = &testkube.Repository{
    15  			Type_:             item.Spec.Repository.Type_,
    16  			Uri:               item.Spec.Repository.Uri,
    17  			Branch:            item.Spec.Repository.Branch,
    18  			Commit:            item.Spec.Repository.Commit,
    19  			Path:              item.Spec.Repository.Path,
    20  			WorkingDir:        item.Spec.Repository.WorkingDir,
    21  			CertificateSecret: item.Spec.Repository.CertificateSecret,
    22  			AuthType:          string(item.Spec.Repository.AuthType),
    23  		}
    24  
    25  		if item.Spec.Repository.UsernameSecret != nil {
    26  			repository.UsernameSecret = &testkube.SecretRef{
    27  				Name: item.Spec.Repository.UsernameSecret.Name,
    28  				Key:  item.Spec.Repository.UsernameSecret.Key,
    29  			}
    30  		}
    31  
    32  		if item.Spec.Repository.TokenSecret != nil {
    33  			repository.TokenSecret = &testkube.SecretRef{
    34  				Name: item.Spec.Repository.TokenSecret.Name,
    35  				Key:  item.Spec.Repository.TokenSecret.Key,
    36  			}
    37  		}
    38  	}
    39  
    40  	return testkube.TestSource{
    41  		Name:       item.Name,
    42  		Namespace:  item.Namespace,
    43  		Type_:      string(item.Spec.Type_),
    44  		Uri:        item.Spec.Uri,
    45  		Data:       item.Spec.Data,
    46  		Repository: repository,
    47  		Labels:     item.Labels,
    48  	}
    49  }
    50  
    51  // MapAPIToCRD maps OpenAPI spec TestSourceUpsertRequest to CRD TestSource
    52  func MapAPIToCRD(request testkube.TestSourceUpsertRequest) testsourcev1.TestSource {
    53  	var repository *testsourcev1.Repository
    54  	if request.Repository != nil {
    55  		repository = &testsourcev1.Repository{
    56  			Type_:             request.Repository.Type_,
    57  			Uri:               request.Repository.Uri,
    58  			Branch:            request.Repository.Branch,
    59  			Commit:            request.Repository.Commit,
    60  			Path:              request.Repository.Path,
    61  			WorkingDir:        request.Repository.WorkingDir,
    62  			CertificateSecret: request.Repository.CertificateSecret,
    63  			AuthType:          testsourcev1.GitAuthType(request.Repository.AuthType),
    64  		}
    65  
    66  		if request.Repository.UsernameSecret != nil {
    67  			repository.UsernameSecret = &testsourcev1.SecretRef{
    68  				Name: request.Repository.UsernameSecret.Name,
    69  				Key:  request.Repository.UsernameSecret.Key,
    70  			}
    71  		}
    72  
    73  		if request.Repository.TokenSecret != nil {
    74  			repository.TokenSecret = &testsourcev1.SecretRef{
    75  				Name: request.Repository.TokenSecret.Name,
    76  				Key:  request.Repository.TokenSecret.Key,
    77  			}
    78  		}
    79  	}
    80  
    81  	return testsourcev1.TestSource{
    82  		ObjectMeta: metav1.ObjectMeta{
    83  			Name:      request.Name,
    84  			Namespace: request.Namespace,
    85  			Labels:    request.Labels,
    86  		},
    87  		Spec: testsourcev1.TestSourceSpec{
    88  			Type_:      testsourcev1.TestSourceType(request.Type_),
    89  			Uri:        request.Uri,
    90  			Data:       request.Data,
    91  			Repository: repository,
    92  		},
    93  	}
    94  }
    95  
    96  // MapUpdateToSpec maps TestSourceUpdateRequest to TestSource CRD spec
    97  func MapUpdateToSpec(request testkube.TestSourceUpdateRequest, testSource *testsourcev1.TestSource) *testsourcev1.TestSource {
    98  	var fields = []struct {
    99  		source      *string
   100  		destination *string
   101  	}{
   102  		{
   103  			request.Name,
   104  			&testSource.Name,
   105  		},
   106  		{
   107  			request.Namespace,
   108  			&testSource.Namespace,
   109  		},
   110  		{
   111  			request.Data,
   112  			&testSource.Spec.Data,
   113  		},
   114  		{
   115  			request.Uri,
   116  			&testSource.Spec.Uri,
   117  		},
   118  	}
   119  
   120  	for _, field := range fields {
   121  		if field.source != nil {
   122  			*field.destination = *field.source
   123  		}
   124  	}
   125  
   126  	if request.Type_ != nil {
   127  		testSource.Spec.Type_ = testsourcev1.TestSourceType(*request.Type_)
   128  	}
   129  
   130  	if request.Labels != nil {
   131  		testSource.Labels = *request.Labels
   132  	}
   133  
   134  	if request.Repository != nil {
   135  		if *request.Repository == nil {
   136  			testSource.Spec.Repository = nil
   137  			return testSource
   138  		}
   139  
   140  		if (*request.Repository).IsEmpty() {
   141  			testSource.Spec.Repository = nil
   142  			return testSource
   143  		}
   144  
   145  		if testSource.Spec.Repository == nil {
   146  			testSource.Spec.Repository = &testsourcev1.Repository{}
   147  		}
   148  
   149  		empty := true
   150  		fake := ""
   151  		var fields = []struct {
   152  			source      *string
   153  			destination *string
   154  		}{
   155  			{
   156  				(*request.Repository).Type_,
   157  				&testSource.Spec.Repository.Type_,
   158  			},
   159  			{
   160  				(*request.Repository).Uri,
   161  				&testSource.Spec.Repository.Uri,
   162  			},
   163  			{
   164  				(*request.Repository).Branch,
   165  				&testSource.Spec.Repository.Branch,
   166  			},
   167  			{
   168  				(*request.Repository).Commit,
   169  				&testSource.Spec.Repository.Commit,
   170  			},
   171  			{
   172  				(*request.Repository).Path,
   173  				&testSource.Spec.Repository.Path,
   174  			},
   175  			{
   176  				(*request.Repository).WorkingDir,
   177  				&testSource.Spec.Repository.WorkingDir,
   178  			},
   179  			{
   180  				(*request.Repository).CertificateSecret,
   181  				&testSource.Spec.Repository.CertificateSecret,
   182  			},
   183  			{
   184  				(*request.Repository).Username,
   185  				&fake,
   186  			},
   187  			{
   188  				(*request.Repository).Token,
   189  				&fake,
   190  			},
   191  		}
   192  
   193  		for _, field := range fields {
   194  			if field.source != nil {
   195  				*field.destination = *field.source
   196  				empty = false
   197  			}
   198  		}
   199  
   200  		if (*request.Repository).AuthType != nil {
   201  			testSource.Spec.Repository.AuthType = testsourcev1.GitAuthType(*(*request.Repository).AuthType)
   202  			empty = false
   203  		}
   204  
   205  		if (*request.Repository).UsernameSecret != nil {
   206  			if (*(*request.Repository).UsernameSecret).IsEmpty() {
   207  				testSource.Spec.Repository.UsernameSecret = nil
   208  			} else {
   209  				testSource.Spec.Repository.UsernameSecret = &testsourcev1.SecretRef{
   210  					Name: (*(*request.Repository).UsernameSecret).Name,
   211  					Key:  (*(*request.Repository).UsernameSecret).Key,
   212  				}
   213  			}
   214  
   215  			empty = false
   216  		}
   217  
   218  		if (*request.Repository).TokenSecret != nil {
   219  			if (*(*request.Repository).TokenSecret).IsEmpty() {
   220  				testSource.Spec.Repository.TokenSecret = nil
   221  			} else {
   222  				testSource.Spec.Repository.TokenSecret = &testsourcev1.SecretRef{
   223  					Name: (*(*request.Repository).TokenSecret).Name,
   224  					Key:  (*(*request.Repository).TokenSecret).Key,
   225  				}
   226  			}
   227  
   228  			empty = false
   229  		}
   230  
   231  		if empty {
   232  			testSource.Spec.Repository = nil
   233  		}
   234  	}
   235  
   236  	return testSource
   237  }
   238  
   239  // MapSpecToUpdate maps TestSource CRD spec TestSourceUpdateRequest to
   240  func MapSpecToUpdate(testSource *testsourcev1.TestSource) (request testkube.TestSourceUpdateRequest) {
   241  	var fields = []struct {
   242  		source      *string
   243  		destination **string
   244  	}{
   245  		{
   246  			&testSource.Name,
   247  			&request.Name,
   248  		},
   249  		{
   250  			&testSource.Namespace,
   251  			&request.Namespace,
   252  		},
   253  		{
   254  			&testSource.Spec.Data,
   255  			&request.Data,
   256  		},
   257  		{
   258  			&testSource.Spec.Uri,
   259  			&request.Uri,
   260  		},
   261  	}
   262  
   263  	for _, field := range fields {
   264  		*field.destination = field.source
   265  	}
   266  
   267  	request.Type_ = (*string)(&testSource.Spec.Type_)
   268  
   269  	request.Labels = &testSource.Labels
   270  
   271  	if testSource.Spec.Repository != nil {
   272  		repository := &testkube.RepositoryUpdate{}
   273  		request.Repository = &repository
   274  
   275  		var fields = []struct {
   276  			source      *string
   277  			destination **string
   278  		}{
   279  			{
   280  				&testSource.Spec.Repository.Type_,
   281  				&(*request.Repository).Type_,
   282  			},
   283  			{
   284  				&testSource.Spec.Repository.Uri,
   285  				&(*request.Repository).Uri,
   286  			},
   287  			{
   288  				&testSource.Spec.Repository.Branch,
   289  				&(*request.Repository).Branch,
   290  			},
   291  			{
   292  				&testSource.Spec.Repository.Commit,
   293  				&(*request.Repository).Commit,
   294  			},
   295  			{
   296  				&testSource.Spec.Repository.Path,
   297  				&(*request.Repository).Path,
   298  			},
   299  			{
   300  				&testSource.Spec.Repository.WorkingDir,
   301  				&(*request.Repository).WorkingDir,
   302  			},
   303  			{
   304  				&testSource.Spec.Repository.CertificateSecret,
   305  				&(*request.Repository).CertificateSecret,
   306  			},
   307  		}
   308  
   309  		for _, field := range fields {
   310  			*field.destination = field.source
   311  		}
   312  
   313  		(*request.Repository).AuthType = (*string)(&testSource.Spec.Repository.AuthType)
   314  
   315  		if testSource.Spec.Repository.UsernameSecret != nil {
   316  			secretRef := &testkube.SecretRef{
   317  				Name: testSource.Spec.Repository.UsernameSecret.Name,
   318  				Key:  testSource.Spec.Repository.UsernameSecret.Key,
   319  			}
   320  
   321  			(*request.Repository).UsernameSecret = &secretRef
   322  		}
   323  
   324  		if testSource.Spec.Repository.TokenSecret != nil {
   325  			secretRef := &testkube.SecretRef{
   326  				Name: testSource.Spec.Repository.TokenSecret.Name,
   327  				Key:  testSource.Spec.Repository.TokenSecret.Key,
   328  			}
   329  
   330  			(*request.Repository).TokenSecret = &secretRef
   331  		}
   332  	}
   333  
   334  	return request
   335  }