MCPcopy Index your code
hub / github.com/keploy/keploy / JSONBodyMatchScore

Function JSONBodyMatchScore

pkg/agent/proxy/integrations/util/obfuscate.go:206–262  ·  view source on GitHub ↗

JSONBodyMatchScore recursively compares mock and request JSON values, excluding noisy (obfuscated) values from scoring. Noisy values don't count towards matched or total — they are tracked separately.

(mockVal, reqVal interface{}, nc *NoiseChecker)

Source from the content-addressed store, hash-verified

204// excluding noisy (obfuscated) values from scoring. Noisy values don't
205// count towards matched or total — they are tracked separately.
206func JSONBodyMatchScore(mockVal, reqVal interface{}, nc *NoiseChecker) (matched, total, noisy int) {
207 if nc.IsNoisyValue(mockVal) {
208 return 0, 0, 1
209 }
210
211 switch mv := mockVal.(type) {
212 case map[string]interface{}:
213 rv, ok := reqVal.(map[string]interface{})
214 if !ok {
215 return 0, 1, 0
216 }
217 for key, mockField := range mv {
218 if nc.IsNoisyValue(mockField) {
219 noisy++
220 continue
221 }
222 reqField, exists := rv[key]
223 if !exists {
224 total++
225 continue
226 }
227 m, t, n := JSONBodyMatchScore(mockField, reqField, nc)
228 matched += m
229 total += t
230 noisy += n
231 }
232 return
233
234 case []interface{}:
235 rv, ok := reqVal.([]interface{})
236 if !ok {
237 return 0, 1, 0
238 }
239 for i := 0; i < len(mv); i++ {
240 if nc.IsNoisyValue(mv[i]) {
241 noisy++
242 continue
243 }
244 if i >= len(rv) {
245 total++
246 continue
247 }
248 m, t, n := JSONBodyMatchScore(mv[i], rv[i], nc)
249 matched += m
250 total += t
251 noisy += n
252 }
253 return
254
255 default:
256 total = 1
257 if mockVal == reqVal {
258 matched = 1
259 }
260 return
261 }
262}

Calls 1

IsNoisyValueMethod · 0.80