Skip to content

Commit

Permalink
test(meshtimeout): fix golden file tests to handle IPv4 and IPv6 (#12682
Browse files Browse the repository at this point in the history
)

## 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
bartsmykla authored Jan 28, 2025
1 parent e1f9060 commit dfa987b
Show file tree
Hide file tree
Showing 7 changed files with 53 additions and 20 deletions.
37 changes: 35 additions & 2 deletions test/e2e_env/universal/envoyconfig/envoyconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,41 @@ func EnvoyConfigTest() {
})

redactIPs := func(jsonStr string) string {
ipRegex := regexp.MustCompile(`\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b`)
return ipRegex.ReplaceAllString(jsonStr, "IP_REDACTED")
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")
}

getConfig := func(dpp string) string {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@
"lbPolicy": "CLUSTER_PROVIDED",
"upstreamBindConfig": {
"sourceAddress": {
"address": "::6",
"address": "IP_REDACTED",
"portValue": 0
}
}
Expand Down Expand Up @@ -349,7 +349,7 @@
"name": "inbound:passthrough:ipv6",
"address": {
"socketAddress": {
"address": "::",
"address": "IP_REDACTED",
"portValue": 15006
}
},
Expand Down Expand Up @@ -498,7 +498,7 @@
"name": "outbound:passthrough:ipv6",
"address": {
"socketAddress": {
"address": "::",
"address": "IP_REDACTED",
"portValue": 15001
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@
"lbPolicy": "CLUSTER_PROVIDED",
"upstreamBindConfig": {
"sourceAddress": {
"address": "::6",
"address": "IP_REDACTED",
"portValue": 0
}
}
Expand Down Expand Up @@ -457,7 +457,7 @@
"name": "inbound:passthrough:ipv6",
"address": {
"socketAddress": {
"address": "::",
"address": "IP_REDACTED",
"portValue": 15006
}
},
Expand Down Expand Up @@ -606,7 +606,7 @@
"name": "outbound:passthrough:ipv6",
"address": {
"socketAddress": {
"address": "::",
"address": "IP_REDACTED",
"portValue": 15001
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
"lbPolicy": "CLUSTER_PROVIDED",
"upstreamBindConfig": {
"sourceAddress": {
"address": "::6",
"address": "IP_REDACTED",
"portValue": 0
}
}
Expand Down Expand Up @@ -255,7 +255,7 @@
"name": "inbound:passthrough:ipv6",
"address": {
"socketAddress": {
"address": "::",
"address": "IP_REDACTED",
"portValue": 15006
}
},
Expand Down Expand Up @@ -398,7 +398,7 @@
"name": "outbound:passthrough:ipv6",
"address": {
"socketAddress": {
"address": "::",
"address": "IP_REDACTED",
"portValue": 15001
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
"lbPolicy": "CLUSTER_PROVIDED",
"upstreamBindConfig": {
"sourceAddress": {
"address": "::6",
"address": "IP_REDACTED",
"portValue": 0
}
}
Expand Down Expand Up @@ -309,7 +309,7 @@
"name": "inbound:passthrough:ipv6",
"address": {
"socketAddress": {
"address": "::",
"address": "IP_REDACTED",
"portValue": 15006
}
},
Expand Down Expand Up @@ -452,7 +452,7 @@
"name": "outbound:passthrough:ipv6",
"address": {
"socketAddress": {
"address": "::",
"address": "IP_REDACTED",
"portValue": 15001
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@
"lbPolicy": "CLUSTER_PROVIDED",
"upstreamBindConfig": {
"sourceAddress": {
"address": "::6",
"address": "IP_REDACTED",
"portValue": 0
}
}
Expand Down Expand Up @@ -319,7 +319,7 @@
"name": "inbound:passthrough:ipv6",
"address": {
"socketAddress": {
"address": "::",
"address": "IP_REDACTED",
"portValue": 15006
}
},
Expand Down Expand Up @@ -468,7 +468,7 @@
"name": "outbound:passthrough:ipv6",
"address": {
"socketAddress": {
"address": "::",
"address": "IP_REDACTED",
"portValue": 15001
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@
"lbPolicy": "CLUSTER_PROVIDED",
"upstreamBindConfig": {
"sourceAddress": {
"address": "::6",
"address": "IP_REDACTED",
"portValue": 0
}
}
Expand Down Expand Up @@ -373,7 +373,7 @@
"name": "inbound:passthrough:ipv6",
"address": {
"socketAddress": {
"address": "::",
"address": "IP_REDACTED",
"portValue": 15006
}
},
Expand Down Expand Up @@ -522,7 +522,7 @@
"name": "outbound:passthrough:ipv6",
"address": {
"socketAddress": {
"address": "::",
"address": "IP_REDACTED",
"portValue": 15001
}
},
Expand Down

0 comments on commit dfa987b

Please sign in to comment.