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 }