@@ -284,6 +284,89 @@ func TestPulsarAddResourcesFeatureGate(t *testing.T) {
284284 })
285285}
286286
287+ func TestSanitizePulsarResourceAnyMapRedactsNestedValues (t * testing.T ) {
288+ t .Parallel ()
289+
290+ longSlice := make ([]any , pulsarResourceSummaryStringLimit + 1 )
291+ for i := range longSlice {
292+ longSlice [i ] = map [string ]any {"index" : i }
293+ }
294+ tooDeep := map [string ]any {"password" : "secret-over-budget" }
295+ for i := 0 ; i <= pulsarResourceSanitizeDepthLimit ; i ++ {
296+ tooDeep = map [string ]any {fmt .Sprintf ("level-%02d" , i ): tooDeep }
297+ }
298+
299+ values := map [string ]any {
300+ "owner" : "team-a" ,
301+ "nested" : map [string ]any {
302+ "database" : map [string ]any {
303+ "connection" : map [string ]any {
304+ "password" : "secret-nested-password" ,
305+ "safe" : "visible" ,
306+ },
307+ "token" : "secret-nested-token" ,
308+ },
309+ },
310+ "items" : []any {
311+ map [string ]any {
312+ "password" : "secret-array-password" ,
313+ "safe" : "array-visible" ,
314+ },
315+ map [string ]any {
316+ "metadata" : map [string ]any {
317+ "privateKey" : "secret-array-private-key" ,
318+ },
319+ },
320+ },
321+ "stringMap" : map [string ]string {
322+ "clientKey" : "secret-client-key" ,
323+ "owner" : "team-a" ,
324+ },
325+ "longSlice" : longSlice ,
326+ "tooDeep" : tooDeep ,
327+ }
328+
329+ sanitized := sanitizePulsarResourceAnyMap (values , pulsarResourceSummaryStringLimit )
330+ payload , err := json .Marshal (sanitized )
331+ require .NoError (t , err )
332+ assert .NotContains (t , string (payload ), "secret-nested-password" )
333+ assert .NotContains (t , string (payload ), "secret-nested-token" )
334+ assert .NotContains (t , string (payload ), "secret-array-password" )
335+ assert .NotContains (t , string (payload ), "secret-array-private-key" )
336+ assert .NotContains (t , string (payload ), "secret-client-key" )
337+ assert .NotContains (t , string (payload ), "secret-over-budget" )
338+
339+ nested := sanitized ["nested" ].(map [string ]any )
340+ database := nested ["database" ].(map [string ]any )
341+ connection := database ["connection" ].(map [string ]any )
342+ assert .Equal (t , pulsarResourceRedactedValue , connection ["password" ])
343+ assert .Equal (t , "visible" , connection ["safe" ])
344+ assert .Equal (t , pulsarResourceRedactedValue , database ["token" ])
345+
346+ items := sanitized ["items" ].([]any )
347+ firstItem := items [0 ].(map [string ]any )
348+ assert .Equal (t , pulsarResourceRedactedValue , firstItem ["password" ])
349+ assert .Equal (t , "array-visible" , firstItem ["safe" ])
350+ secondItem := items [1 ].(map [string ]any )
351+ metadata := secondItem ["metadata" ].(map [string ]any )
352+ assert .Equal (t , pulsarResourceRedactedValue , metadata ["privateKey" ])
353+
354+ stringMap := sanitized ["stringMap" ].(map [string ]string )
355+ assert .Equal (t , pulsarResourceRedactedValue , stringMap ["clientKey" ])
356+ assert .Equal (t , "team-a" , stringMap ["owner" ])
357+
358+ limitedSlice := sanitized ["longSlice" ].([]any )
359+ assert .Len (t , limitedSlice , pulsarResourceSummaryStringLimit )
360+
361+ limitedMap := make (map [string ]any , pulsarResourceSummaryStringLimit + 1 )
362+ for i := 0 ; i <= pulsarResourceSummaryStringLimit ; i ++ {
363+ limitedMap [fmt .Sprintf ("key-%02d" , i )] = i
364+ }
365+ sanitizedLimitedMap := sanitizePulsarResourceAnyMap (limitedMap , pulsarResourceSummaryStringLimit )
366+ assert .Len (t , sanitizedLimitedMap , pulsarResourceSummaryStringLimit )
367+ assert .NotContains (t , sanitizedLimitedMap , fmt .Sprintf ("key-%02d" , pulsarResourceSummaryStringLimit ))
368+ }
369+
287370func TestPulsarContextResourceReadRedactsSecrets (t * testing.T ) {
288371 t .Parallel ()
289372
0 commit comments