Files
fission-src/test/tests/test_ingress.sh
T

138 lines
4.4 KiB
Bash
Executable File

#!/bin/bash
#test:disabled
# this test is disabled only for Kind tests and for GKE/EKS tests should be enabled
set -euo pipefail
source $(dirname $0)/../utils.sh
TEST_ID=$(generate_test_id)
echo "TEST_ID = $TEST_ID"
ROOT=$(dirname $0)/../..
env=nodejs-$TEST_ID
relativeUrl="/itest-$TEST_ID"
functionName="hellotest-$TEST_ID"
hostName="test-$TEST_ID.com"
routeName="ingress-$TEST_ID"
cleanup() {
log "Cleaning up..."
clean_resource_by_id $TEST_ID
}
checkIngress() {
local route=$1
local host=$2
local path=$3
local annotations=$4
local tls=$5
log "Ingresses matching this trigger:"
kubectl get ing -l 'functionName='$functionName',triggerName='$route --all-namespaces -o=json
log "Verifying to route value in ingress"
actual_path=$(kubectl get ing -l "functionName=$functionName,triggerName=$route" --all-namespaces -o=jsonpath='{.items[0].spec.rules[0].http.paths[0].path}')
if [ "$path" != "$actual_path" ]
then
log "Provided route ($path) and route ($actual_path) in ingress don't match"
exit 1
fi
actual_host=$(kubectl get ing -l "functionName=$functionName,triggerName=$route" --all-namespaces -o=jsonpath='{.items[0].spec.rules[0].host}')
if [ "$host" != "$actual_host" ]
then
log "Provided host ($host) and host ($actual_host) in ingress don't match"
exit 1
fi
actual_ann=$(kubectl get ing -l "functionName=$functionName,triggerName=$route" --all-namespaces -o jsonpath="{.items[0].metadata.annotations}")
if [ "$annotations" != "$actual_ann" ]
then
log "Provided annotations ($annotations) and annotations ($actual_ann) in ingress don't match"
exit 1
fi
actual_tls_secret=$(kubectl get ing -l "functionName=$functionName,triggerName=$route" --all-namespaces -o=jsonpath='{.items[0].spec.tls[0].secretName}')
if [ "$tls" != "$actual_tls_secret" ]
then
log "Provided tls secret ($tls) and tls secret ($actual_tls_secret) in ingress don't match"
exit 1
fi
actual_tls_host=$(kubectl get ing -l "functionName=$functionName,triggerName=$route" --all-namespaces -o=jsonpath='{.items[0].spec.tls[0].hosts[0]}')
if [ "$host" != "$actual_tls_host" ]
then
log "Provided tls host ($host) and tls host ($actual_tls_host) in ingress don't match"
exit 1
fi
}
createFn() {
# Create a hello world function in nodejs, test it with an http trigger
log "Creating nodejs env"
fission env create --name $env --image $NODE_RUNTIME_IMAGE
log "Creating function"
fission fn create --name $functionName --env $env --code $ROOT/examples/nodejs/hello.js
sleep 3
log "Doing an HTTP GET on the function's route"
response=$(fission fn test --name $functionName)
echo $response
log "Checking for valid response"
echo $response | grep -i hello
}
if [ -z "${TEST_NOCLEANUP:-}" ]; then
trap cleanup EXIT
else
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
fi
createFn
log "Creating route for URL $relativeUrl"
fission route create --name $routeName --url $relativeUrl --function $functionName --createingress
sleep 3
checkIngress $routeName "" $relativeUrl "" ""
log "Modifying the route by adding host, path, annotations, tls"
fission route update --name $routeName --function $functionName --ingressannotation "foo=bar" --ingressrule "$hostName=/foo/bar" --ingresstls "dummy"
sleep 3
checkIngress $routeName $hostName "/foo/bar" '{"foo":"bar"}' "dummy"
log "Remove ingress annotations, host, rule and tls"
fission route update --name $routeName --function $functionName --ingressannotation "-" --ingressrule "-" --ingresstls "-"
sleep 3
checkIngress $routeName "" $relativeUrl "" ""
fission route delete --name $routeName
TEST_ID=$(generate_test_id)
routeName="ingress-$TEST_ID"
relativeUrl="/itest-$TEST_ID/{url}"
wildcardPath="/itest-$TEST_ID/*"
realPath="itest-$TEST_ID/test"
log "Creating route for wildcard URL $relativeUrl"
fission route create --name $routeName --url $relativeUrl --function $functionName --createingress \
--ingressannotation "nginx.ingress.kubernetes.io/ssl-redirect=false" \
--ingressannotation "nginx.ingress.kubernetes.io/use-regex=true" \
--ingressrule "*=$wildcardPath"
sleep 3
checkIngress $routeName "" $wildcardPath '{"nginx.ingress.kubernetes.io/ssl-redirect":"false","nginx.ingress.kubernetes.io/use-regex":"true"}' ""
timeout 10 bash -c "test_ingress $realPath 'hello, world!'"
log "Test PASSED"