From ead9fbdfb1709d26fec82c6ec1066fe6fa974ec9 Mon Sep 17 00:00:00 2001 From: i759715 Date: Wed, 11 Jun 2025 17:15:21 +0300 Subject: [PATCH] Added new asset for nginx ipv6 validation --- assets/nginx-ipv6/nginx.conf | 32 ++++++++++++++ assets/nginx/nginx.conf | 30 +++---------- helpers/assets/assets.go | 2 + ipv6/ipv6.go | 85 ++++++++++++++++++------------------ 4 files changed, 82 insertions(+), 67 deletions(-) create mode 100644 assets/nginx-ipv6/nginx.conf diff --git a/assets/nginx-ipv6/nginx.conf b/assets/nginx-ipv6/nginx.conf new file mode 100644 index 000000000..cac959f07 --- /dev/null +++ b/assets/nginx-ipv6/nginx.conf @@ -0,0 +1,32 @@ +events { + worker_connections 1024; +} + +http { + server { + listen {{port}}; + + location = / { + return 200 "Hello NGINX!"; + } + + location /ipv4-test { + proxy_pass https://api4.ipify.org/?format=json; + proxy_set_header Host api4.ipify.org; + proxy_ssl_server_name on; + } + + location /ipv6-test { + proxy_pass https://api6.ipify.org/?format=json; + proxy_set_header Host api6.ipify.org; + proxy_ssl_server_name on; + } + + location /dual-stack-test { + proxy_pass https://api64.ipify.org/?format=json; + proxy_set_header Host api64.ipify.org; + proxy_ssl_server_name on; + } + } +} + diff --git a/assets/nginx/nginx.conf b/assets/nginx/nginx.conf index c251561f4..e7061cd79 100644 --- a/assets/nginx/nginx.conf +++ b/assets/nginx/nginx.conf @@ -1,31 +1,13 @@ events { - worker_connections 1024; + worker_connections 1024; } http { - server { - listen {{port}}; + server { + listen {{port}}; - location = / { + location = / { return 200 "Hello NGINX!"; - } - - location /ipv4-test { - proxy_pass https://api4.ipify.org/?format=json; - proxy_set_header Host api4.ipify.org; - proxy_ssl_server_name on; - } - - location /ipv6-test { - proxy_pass https://api6.ipify.org/?format=json; - proxy_set_header Host api6.ipify.org; - proxy_ssl_server_name on; - } - - location /dual-stack-test { - proxy_pass https://api64.ipify.org/?format=json; - proxy_set_header Host api64.ipify.org; - proxy_ssl_server_name on; - } - } + } + } } \ No newline at end of file diff --git a/helpers/assets/assets.go b/helpers/assets/assets.go index 6c3eed0f4..ec3372f91 100644 --- a/helpers/assets/assets.go +++ b/helpers/assets/assets.go @@ -23,6 +23,7 @@ type Assets struct { Python string PythonCrashApp string Nginx string + NginxIPv6 string Node string CNBNode string NodeWithProcfile string @@ -70,6 +71,7 @@ func NewAssets() Assets { LoggregatorLoadGenerator: "assets/loggregator-load-generator", LoggregatorLoadGeneratorGo: "assets/loggregator-load-generator-go", Nginx: "assets/nginx", + NginxIPv6: "assets/nginx-ipv6", Node: "assets/node", CNBNode: "assets/cnb-node", NodeWithProcfile: "assets/node-with-procfile", diff --git a/ipv6/ipv6.go b/ipv6/ipv6.go index 808a49bea..c4922df2a 100644 --- a/ipv6/ipv6.go +++ b/ipv6/ipv6.go @@ -3,7 +3,6 @@ package ipv6 import ( "encoding/json" "fmt" - "os" . "github.com/cloudfoundry/cf-acceptance-tests/cats_suite_helpers" "github.com/cloudfoundry/cf-acceptance-tests/helpers/app_helpers" "github.com/cloudfoundry/cf-acceptance-tests/helpers/assets" @@ -14,9 +13,9 @@ import ( . "github.com/onsi/gomega" . "github.com/onsi/gomega/gexec" "net" + "os" ) - var _ = IPv6Describe("IPv6 Connectivity Tests", func() { var appName string @@ -78,45 +77,45 @@ var _ = IPv6Describe("IPv6 Connectivity Tests", func() { } describeIpv6NginxTest := func(assetPath, stack string) { - pushSession := cf.Cf("push", appName, "-s", stack, "-p", assetPath, "-m", DEFAULT_MEMORY_LIMIT) - Expect(pushSession.Wait(Config.DetectTimeoutDuration())).To(Exit(0)) - - isIPv4 := func(ip string) bool { - parsedIP := net.ParseIP(ip) - return parsedIP != nil && parsedIP.To4() != nil - } - - isIPv6 := func(ip string) bool { - parsedIP := net.ParseIP(ip) - return parsedIP != nil && parsedIP.To4() == nil - } - - for key, data := range EndpointTypeMap { - response := helpers.CurlApp(Config, appName, data.path) - - if key == "default" { - Expect(response).To(ContainSubstring("Hello NGINX!")) - } else { - var result map[string]interface{} - Expect(json.Unmarshal([]byte(response), &result)).To(Succeed()) - ip, ok := result["ip"].(string) - Expect(ok).To(BeTrue()) - - validationResult := false - - switch data.validationName { - case "IPv4": - validationResult = isIPv4(ip) - case "IPv6": - validationResult = isIPv6(ip) - case "Dual stack": - validationResult = isIPv4(ip) || isIPv6(ip) - } - - Expect(validationResult).To(BeTrue(), fmt.Sprintf("%s validation failed with the following error: %s", data.validationName, ip)) - } - } - } + pushSession := cf.Cf("push", appName, "-s", stack, "-p", assetPath, "-m", DEFAULT_MEMORY_LIMIT) + Expect(pushSession.Wait(Config.DetectTimeoutDuration())).To(Exit(0)) + + isIPv4 := func(ip string) bool { + parsedIP := net.ParseIP(ip) + return parsedIP != nil && parsedIP.To4() != nil + } + + isIPv6 := func(ip string) bool { + parsedIP := net.ParseIP(ip) + return parsedIP != nil && parsedIP.To4() == nil + } + + for key, data := range EndpointTypeMap { + response := helpers.CurlApp(Config, appName, data.path) + + if key == "default" { + Expect(response).To(ContainSubstring("Hello NGINX!")) + } else { + var result map[string]interface{} + Expect(json.Unmarshal([]byte(response), &result)).To(Succeed()) + ip, ok := result["ip"].(string) + Expect(ok).To(BeTrue()) + + validationResult := false + + switch data.validationName { + case "IPv4": + validationResult = isIPv4(ip) + case "IPv6": + validationResult = isIPv6(ip) + case "Dual stack": + validationResult = isIPv4(ip) || isIPv6(ip) + } + + Expect(validationResult).To(BeTrue(), fmt.Sprintf("%s validation failed with the following error: %s", data.validationName, ip)) + } + } + } Describe("Egress Capability in Apps", func() { for _, stack := range Config.GetStacks() { @@ -147,9 +146,9 @@ var _ = IPv6Describe("IPv6 Connectivity Tests", func() { Context(fmt.Sprintf("Using Nginx stack: %s", stack), func() { It("validates IPv6 egress for Nginx App", func() { - describeIpv6NginxTest(assets.NewAssets().Nginx, stack) + describeIpv6NginxTest(assets.NewAssets().NginxIPv6, stack) }) }) } }) -}) \ No newline at end of file +})