github.com/kubeshop/testkube@v1.17.23/pkg/tcl/testworkflowstcl/testworkflowprocessor/signature.go (about) 1 // Copyright 2024 Testkube. 2 // 3 // Licensed as a Testkube Pro file under the Testkube Community 4 // License (the "License"); you may not use this file except in compliance with 5 // the License. You may obtain a copy of the License at 6 // 7 // https://github.com/kubeshop/testkube/blob/main/licenses/TCL.txt 8 9 package testworkflowprocessor 10 11 import ( 12 "encoding/json" 13 "maps" 14 15 "github.com/kubeshop/testkube/internal/common" 16 "github.com/kubeshop/testkube/pkg/api/v1/testkube" 17 ) 18 19 type Signature interface { 20 Ref() string 21 Name() string 22 Category() string 23 Optional() bool 24 Negative() bool 25 Children() []Signature 26 ToInternal() testkube.TestWorkflowSignature 27 } 28 29 type signature struct { 30 RefValue string `json:"ref"` 31 NameValue string `json:"name,omitempty"` 32 CategoryValue string `json:"category,omitempty"` 33 OptionalValue bool `json:"optional,omitempty"` 34 NegativeValue bool `json:"negative,omitempty"` 35 ChildrenValue []Signature `json:"children,omitempty"` 36 } 37 38 func (s *signature) Ref() string { 39 return s.RefValue 40 } 41 42 func (s *signature) Name() string { 43 return s.NameValue 44 } 45 46 func (s *signature) Category() string { 47 return s.CategoryValue 48 } 49 50 func (s *signature) Optional() bool { 51 return s.OptionalValue 52 } 53 54 func (s *signature) Negative() bool { 55 return s.NegativeValue 56 } 57 58 func (s *signature) Children() []Signature { 59 return s.ChildrenValue 60 } 61 62 func (s *signature) ToInternal() testkube.TestWorkflowSignature { 63 return testkube.TestWorkflowSignature{ 64 Ref: s.RefValue, 65 Name: s.NameValue, 66 Category: s.CategoryValue, 67 Optional: s.OptionalValue, 68 Negative: s.NegativeValue, 69 Children: MapSignatureListToInternal(s.ChildrenValue), 70 } 71 } 72 73 func MapSignatureListToInternal(v []Signature) []testkube.TestWorkflowSignature { 74 r := make([]testkube.TestWorkflowSignature, len(v)) 75 for i := range v { 76 r[i] = v[i].ToInternal() 77 } 78 return r 79 } 80 81 func MapSignatureListToStepResults(v []Signature) map[string]testkube.TestWorkflowStepResult { 82 r := map[string]testkube.TestWorkflowStepResult{} 83 for _, s := range v { 84 r[s.Ref()] = testkube.TestWorkflowStepResult{ 85 Status: common.Ptr(testkube.QUEUED_TestWorkflowStepStatus), 86 } 87 maps.Copy(r, MapSignatureListToStepResults(s.Children())) 88 } 89 return r 90 } 91 92 type rawSignature struct { 93 RefValue string `json:"ref"` 94 NameValue string `json:"name,omitempty"` 95 CategoryValue string `json:"category,omitempty"` 96 OptionalValue bool `json:"optional,omitempty"` 97 NegativeValue bool `json:"negative,omitempty"` 98 ChildrenValue []rawSignature `json:"children,omitempty"` 99 } 100 101 func rawSignatureToSignature(sig rawSignature) Signature { 102 ch := make([]Signature, len(sig.ChildrenValue)) 103 for i, v := range sig.ChildrenValue { 104 ch[i] = rawSignatureToSignature(v) 105 } 106 return &signature{ 107 RefValue: sig.RefValue, 108 NameValue: sig.NameValue, 109 CategoryValue: sig.CategoryValue, 110 OptionalValue: sig.OptionalValue, 111 NegativeValue: sig.NegativeValue, 112 ChildrenValue: ch, 113 } 114 } 115 116 func GetSignatureFromJSON(v []byte) ([]Signature, error) { 117 var sig []rawSignature 118 err := json.Unmarshal(v, &sig) 119 if err != nil { 120 return nil, err 121 } 122 res := make([]Signature, len(sig)) 123 for i := range sig { 124 res[i] = rawSignatureToSignature(sig[i]) 125 } 126 return res, err 127 } 128 129 func GetVirtualSignature(children []Signature) Signature { 130 return &signature{ChildrenValue: children} 131 }