#!/usr/bin/env bats run_kubernetes_test() { local version_expr="$1" local test_name="$2" local port="$3" local k8s_version=$(yq "$version_expr" packages/apps/kubernetes/files/versions.yaml) kubectl apply -f - < tenantkubeconfig # Update the kubeconfig to use localhost for the API server yq -i ".clusters[0].cluster.server = \"https://localhost:${port}\"" tenantkubeconfig # Set up port forwarding to the Kubernetes API server for a 40 second timeout bash -c 'timeout 40s kubectl port-forward service/kubernetes-'"${test_name}"' -n tenant-test '"${port}"':6443 > /dev/null 2>&1 &' # Verify the Kubernetes version matches what we expect (retry for up to 20 seconds) timeout 20 sh -ec 'until kubectl --kubeconfig tenantkubeconfig version 2>/dev/null | grep -Fq "Server Version: ${k8s_version}"; do sleep 5; done' # Wait for all machine deployment replicas to be ready (timeout after 10 minutes) kubectl wait machinedeployment kubernetes-${test_name}-md0 -n tenant-test --timeout=10m --for=jsonpath='{.status.v1beta2.readyReplicas}'=2 # Clean up by deleting the Kubernetes resource kubectl -n tenant-test delete kuberneteses.apps.cozystack.io $test_name } @test "Create a tenant Kubernetes control plane with latest version" { run_kubernetes_test 'keys | sort_by(.) | .[-1]' 'test-latest-version' '59991' } @test "Create a tenant Kubernetes control plane with previous version" { run_kubernetes_test 'keys | sort_by(.) | .[-2]' 'test-previous-version' '59992' }