@@ -122,7 +122,9 @@ func processFields(callInfo *CallInfo, fields map[string]interface{}, reqConfigu
122122 }
123123 reqConfiguration .Query [field ] = stringVal
124124 } else if callInfo .ReqParams .Body .Contains (field ) {
125- mapBody [field ] = value
125+ if mapBody [field ] == nil {
126+ mapBody [field ] = value
127+ }
126128 }
127129 }
128130}
@@ -134,11 +136,11 @@ func isCRUpdated(mg *unstructured.Unstructured, rm map[string]interface{}) (bool
134136 return false , fmt .Errorf ("error getting spec fields: %w" , err )
135137 }
136138
137- return compareExisting (m , rm ), nil
139+ return compareExisting (m , rm )
138140}
139141
140142// compareExisting recursively compares fields between two maps and logs differences.
141- func compareExisting (mg map [string ]interface {}, rm map [string ]interface {}, path ... string ) bool {
143+ func compareExisting (mg map [string ]interface {}, rm map [string ]interface {}, path ... string ) ( bool , error ) {
142144 for key , value := range mg {
143145 currentPath := append (path , key )
144146 pathStr := fmt .Sprintf ("%v" , currentPath )
@@ -148,63 +150,81 @@ func compareExisting(mg map[string]interface{}, rm map[string]interface{}, path
148150 continue
149151 }
150152
153+ fmt .Println ("Comparing" , pathStr , value , rmValue )
154+
155+ if reflect .TypeOf (value ).Kind () != reflect .TypeOf (rmValue ).Kind () {
156+ return false , fmt .Errorf ("types differ at %s - %s is different from %s" , pathStr , reflect .TypeOf (value ).Kind (), reflect .TypeOf (rmValue ).Kind ())
157+ }
158+
151159 switch reflect .TypeOf (value ).Kind () {
152160 case reflect .Map :
153161 mgMap , ok1 := value .(map [string ]interface {})
154162 if ! ok1 {
155163 fmt .Printf ("Type assertion failed for map at '%s'\n " , pathStr )
156- continue
164+ return false , fmt . Errorf ( "type assertion failed for map at %s" , pathStr )
157165 }
158166 rmMap , ok2 := rmValue .(map [string ]interface {})
159167 if ! ok2 {
160168 fmt .Printf ("Type assertion failed for map at '%s'\n " , pathStr )
161- continue
169+ return false , fmt . Errorf ( "type assertion failed for map at %s" , pathStr )
162170 }
163- if ! compareExisting (mgMap , rmMap , currentPath ... ) {
171+ ok , err := compareExisting (mgMap , rmMap , currentPath ... )
172+ if err != nil {
173+ return false , err
174+ }
175+ if ! ok {
164176 fmt .Printf ("Values differ at '%s'\n " , pathStr )
165- return false
177+ return false , nil
166178 }
167179 case reflect .Slice :
168180 valueSlice , ok1 := value .([]interface {})
169181 if ! ok1 || reflect .TypeOf (rmValue ).Kind () != reflect .Slice {
170182 fmt .Printf ("Values are not both slices or type assertion failed at '%s'\n " , pathStr )
171- continue
183+ return false , fmt . Errorf ( "values are not both slices or type assertion failed at %s" , pathStr )
172184 }
173185 rmSlice , ok2 := rmValue .([]interface {})
174186 if ! ok2 {
175187 fmt .Printf ("Type assertion failed for slice at '%s'\n " , pathStr )
176- continue
188+ return false , fmt . Errorf ( "type assertion failed for slice at %s" , pathStr )
177189 }
178190 for i , v := range valueSlice {
179191 if reflect .TypeOf (v ).Kind () == reflect .Map {
180192 mgMap , ok1 := v .(map [string ]interface {})
181193 if ! ok1 {
182194 fmt .Printf ("Type assertion failed for map at '%s'\n " , pathStr )
183- continue
195+ return false , fmt . Errorf ( "type assertion failed for map at %s" , pathStr )
184196 }
185197 rmMap , ok2 := rmSlice [i ].(map [string ]interface {})
186198 if ! ok2 {
187199 fmt .Printf ("Type assertion failed for map at '%s'\n " , pathStr )
188- continue
200+ return false , fmt .Errorf ("type assertion failed for map at %s" , pathStr )
201+ }
202+ ok , err := compareExisting (mgMap , rmMap , currentPath ... )
203+ if err != nil {
204+ return false , err
189205 }
190- if ! compareExisting ( mgMap , rmMap , currentPath ... ) {
206+ if ! ok {
191207 fmt .Printf ("Values differ at '%s'\n " , pathStr )
192- return false
208+ return false , nil
193209 }
194210 } else if v != rmSlice [i ] {
195211 fmt .Printf ("Values differ at '%s'\n " , pathStr )
196- return false
212+ return false , nil
197213 }
198214 }
199215 default :
200- if ! compareAny (value , rmValue ) {
216+ ok , err := compareAny (value , rmValue )
217+ if err != nil {
218+ return false , err
219+ }
220+ if ! ok {
201221 fmt .Printf ("Values differ at '%s' %s %s\n " , pathStr , value , rmValue )
202- return false
222+ return false , nil
203223 }
204224 }
205225 }
206226
207- return true
227+ return true , nil
208228}
209229func numberCaster (value interface {}) int64 {
210230 switch v := value .(type ) {
@@ -237,23 +257,35 @@ func numberCaster(value interface{}) int64 {
237257 }
238258}
239259
240- func compareAny (a any , b any ) bool {
260+ func compareAny (a any , b any ) ( bool , error ) {
241261 //if is number compare as number
242262 switch a .(type ) {
243263 case int , int8 , int16 , int32 , int64 , uint , uint8 , uint16 , uint32 , uint64 , float32 , float64 :
244264 ia := numberCaster (a )
245265 ib := numberCaster (b )
246- return ia == ib
266+ return ia == ib , nil
247267 case string :
248- sa := a .(string )
249- sb := b .(string )
250- return sa == sb
268+ sa , ok := a .(string )
269+ if ! ok {
270+ return false , fmt .Errorf ("Type assertion failed - to string: %v" , a )
271+ }
272+ sb , ok := b .(string )
273+ if ! ok {
274+ return false , fmt .Errorf ("Type assertion failed - to string: %v" , b )
275+ }
276+ return sa == sb , nil
251277 case bool :
252- ba := a .(bool )
253- bb := b .(bool )
254- return ba == bb
278+ ba , ok := a .(bool )
279+ if ! ok {
280+ return false , fmt .Errorf ("Type assertion failed - to bool: %v" , a )
281+ }
282+ bb , ok := b .(bool )
283+ if ! ok {
284+ return false , fmt .Errorf ("Type assertion failed - to bool: %v" , b )
285+ }
286+ return ba == bb , nil
255287 default :
256- return reflect .DeepEqual (a , b )
288+ return reflect .DeepEqual (a , b ), nil
257289 }
258290}
259291
0 commit comments