Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
test(meshtimeout): fix golden file tests to handle IPv4 and IPv6 (#12682
) ## Motivation & Implementation information Updated tests to replace both IPv4 and IPv6 addresses with "IP_REDACTED" in generated golden files. This fixes issues with e2e tests checking golden envoy configs (introduced in #12650) ## Supporting documentation <details> <summary>How I've tested regexps</summary> ```go package main import ( "fmt" "regexp" ) var txt = ` "path": "Listener/outbound:[fd00:fd01::5]:3000/filterChains/0/filters/0/typedConfig/idleTimeout", "path": "Listener/outbound:[fd00:fd01::6]:80/filterChains/0/filters/0/typedConfig/requestHeadersTimeout", "address": "::6", "address": "fd00:fd12:3456::5", "address": "fd00:fd12:3456::c", "foo": inbound:[fd00:fd12:3456::5]:3000": { "bar": outbound:[fd00:fd01::5]:3000": { "name": "outbound:[fd00:fd01::5]:3000", "address": "fd00:fd01::5", "baz": outbound:[fd00:fd01::6]:80": { "name": "outbound:[fd00:fd01::6]:80", "address": "fd00:fd01::6", "address": "127.0.0.1:3000", "address": "aaaa 1.1.1.1:234", "::" ` func main() { redactIPs := func(jsonStr string) string { ipv6Regex := `\[?` + // Optional opening square bracket for IPv6 in URLs (e.g., [2001:db8::1]) `(` + // Full IPv6 address with 8 segments (e.g., 2001:0db8:85a3:0000:0000:8a2e:0370:7334) `([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|` + // IPv6 with leading compression (e.g., ::1, ::8a2e:0370:7334) `([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|` + // IPv6 with trailing compression (e.g., 2001:db8::, 2001:db8::1:2) `([0-9a-fA-F]{1,4}:){1,7}:|` + // IPv6 with mixed compression (e.g., 2001:db8:0:0::1:2) `([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|` + `([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|` + `([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|` + `([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|` + // IPv6 with only one segment and compression (e.g., 2001::1:2:3:4:5:6) `[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|` + // Fully compressed IPv6 (::) or with trailing segments (::1, ::8a2e:0370:7334) `:((:[0-9a-fA-F]{1,4}){1,7}|:)|` + // Link-local IPv6 with zone identifiers (e.g., fe80::1%eth0) `fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]+|` + // IPv6 with embedded IPv4 (e.g., ::ffff:192.168.1.1) `::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}` + `(25[0-5]|(2[0-4]|1?[0-9])?[0-9])|` + // Mixed IPv6 and IPv4 (e.g., 2001:db8::192.168.1.1) `([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}` + `(25[0-5]|(2[0-4]|1?[0-9])?[0-9])` + `)` + `]?` // Optional closing square bracket for IPv6 in URLs (e.g., [2001:db8::1]) ipv4Regex := `\b` + // Word boundary to ensure we match standalone IPv4 addresses `\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}` + // Matches IPv4 format (e.g., 192.168.0.1) `\b` return regexp. MustCompile(ipv4Regex+"|"+ipv6Regex). ReplaceAllString(jsonStr, "IP_REDACTED") } fmt.Println(redactIPs(txt)) } ``` **Results** ``` "path": "Listener/outbound:IP_REDACTED:3000/filterChains/0/filters/0/typedConfig/idleTimeout", "path": "Listener/outbound:IP_REDACTED:80/filterChains/0/filters/0/typedConfig/requestHeadersTimeout", "address": "IP_REDACTED", "address": "IP_REDACTED", "address": "IP_REDACTED", "foo": inbound:IP_REDACTED:3000": { "bar": outbound:IP_REDACTED:3000": { "name": "outbound:IP_REDACTED:3000", "address": "IP_REDACTED", "baz": outbound:IP_REDACTED:80": { "name": "outbound:IP_REDACTED:80", "address": "IP_REDACTED", "address": "IP_REDACTED:3000", "address": "aaaa IP_REDACTED:234", "IP_REDACTED" ``` </details> Signed-off-by: Bart Smykla <[email protected]>
- Loading branch information