`kubectl proxy --port=21234 & sleep 0.5` guesses how long the proxy needs to start listening. On a slow runner the curl that follows can race the proxy and fail with "connection refused". Replace the fixed `sleep 0.5` with `nc -z localhost 21234` polled until the listener accepts a connection (10s cap). Same idiom already used in hack/e2e-apps/bucket.bats for the seaweedfs-s3 port-forward. Also save the proxy PID to a named variable so the trap kills the right process even if a later background command lands first in $!. Signed-off-by: Myasnikov Daniil <myasnikovdaniil2001@gmail.com>
58 lines
2.2 KiB
Bash
58 lines
2.2 KiB
Bash
#!/usr/bin/env bats
|
|
# -----------------------------------------------------------------------------
|
|
# Test OpenAPI endpoints in a Kubernetes cluster
|
|
# -----------------------------------------------------------------------------
|
|
|
|
@test "Test OpenAPI v2 endpoint" {
|
|
kubectl get -v7 --raw '/openapi/v2?timeout=32s' > /dev/null
|
|
}
|
|
|
|
@test "Test OpenAPI v3 endpoint" {
|
|
kubectl get -v7 --raw '/openapi/v3/apis/apps.cozystack.io/v1alpha1' > /dev/null
|
|
kubectl get -v7 --raw '/openapi/v3/apis/core.cozystack.io/v1alpha1' > /dev/null
|
|
}
|
|
|
|
@test "Test OpenAPI v2 endpoint (protobuf)" {
|
|
(
|
|
kubectl proxy --port=21234 &
|
|
proxy_pid=$!
|
|
trap "kill $proxy_pid" EXIT
|
|
# Wait for the proxy to actually be listening rather than guessing with
|
|
# a fixed sleep. nc -z is non-destructive and exits 0 the moment the
|
|
# listener accepts a connection.
|
|
timeout 10 sh -ec 'until nc -z localhost 21234; do sleep 0.1; done'
|
|
curl -sS --fail 'http://localhost:21234/openapi/v2?timeout=32s' -H 'Accept: application/com.github.proto-openapi.spec.v2@v1.0+protobuf' > /dev/null
|
|
)
|
|
}
|
|
|
|
@test "Test kinds" {
|
|
val=$(kubectl get --raw /apis/apps.cozystack.io/v1alpha1/tenants | jq -r '.kind')
|
|
if [ "$val" != "TenantList" ]; then
|
|
echo "Expected kind to be TenantList, got $val"
|
|
exit 1
|
|
fi
|
|
val=$(kubectl get --raw /apis/apps.cozystack.io/v1alpha1/tenants | jq -r '.items[0].kind')
|
|
if [ "$val" != "Tenant" ]; then
|
|
echo "Expected kind to be Tenant, got $val"
|
|
exit 1
|
|
fi
|
|
val=$(kubectl get --raw /apis/apps.cozystack.io/v1alpha1/ingresses | jq -r '.kind')
|
|
if [ "$val" != "IngressList" ]; then
|
|
echo "Expected kind to be IngressList, got $val"
|
|
exit 1
|
|
fi
|
|
val=$(kubectl get --raw /apis/apps.cozystack.io/v1alpha1/ingresses | jq -r '.items[0].kind')
|
|
if [ "$val" != "Ingress" ]; then
|
|
echo "Expected kind to be Ingress, got $val"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
@test "Create and delete namespace" {
|
|
kubectl create ns cozy-test-create-and-delete-namespace --dry-run=client -o yaml | kubectl apply -f -
|
|
if ! kubectl delete ns cozy-test-create-and-delete-namespace; then
|
|
echo "Failed to delete namespace"
|
|
kubectl describe ns cozy-test-create-and-delete-namespace
|
|
exit 1
|
|
fi
|
|
}
|