Skip to content

New asset for nginx ipv6 validation #1605

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions assets/nginx-ipv6/nginx.conf
Original file line number Diff line number Diff line change
@@ -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;
}
}
}

30 changes: 6 additions & 24 deletions assets/nginx/nginx.conf
Original file line number Diff line number Diff line change
@@ -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;
}
}
}
}
}
2 changes: 2 additions & 0 deletions helpers/assets/assets.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ type Assets struct {
Python string
PythonCrashApp string
Nginx string
NginxIPv6 string
Node string
CNBNode string
NodeWithProcfile string
Expand Down Expand Up @@ -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",
Expand Down
85 changes: 42 additions & 43 deletions ipv6/ipv6.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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

Expand Down Expand Up @@ -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() {
Expand Down Expand Up @@ -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)
})
})
}
})
})
})
Loading