mirror of
https://github.com/krkn-chaos/krkn.git
synced 2026-04-15 06:57:28 +00:00
* feat: add pytest-based CI test framework v2 with ephemeral namespace isolation Signed-off-by: ddjain <darjain@redhat.com> * feat(ci): add tests_v2 pytest functional test framework Signed-off-by: ddjain <darjain@redhat.com> Co-authored-by: Cursor <cursoragent@cursor.com> * feat: improve naming convention Signed-off-by: ddjain <darjain@redhat.com> * improve local setup script. Signed-off-by: ddjain <darjain@redhat.com> * added CI job for v2 test Signed-off-by: ddjain <darjain@redhat.com> * disabled broken test Signed-off-by: ddjain <darjain@redhat.com> * improved CI pipeline execution time Signed-off-by: ddjain <darjain@redhat.com> * chore: remove unwanted/generated files from PR Signed-off-by: ddjain <darjain@redhat.com> * clean up gitignore file Signed-off-by: ddjain <darjain@redhat.com> * fix copilot comments Signed-off-by: ddjain <darjain@redhat.com> * fixed copilot suggestion Signed-off-by: ddjain <darjain@redhat.com> * uncommented out test upload stage Signed-off-by: ddjain <darjain@redhat.com> * exclude CI/tests_v2 from test coverage reporting Signed-off-by: ddjain <darjain@redhat.com> * uploading style.css to fix broken report artifacts Signed-off-by: ddjain <darjain@redhat.com> * added openshift supported labels in namespace creatation api Signed-off-by: ddjain <darjain@redhat.com> --------- Signed-off-by: ddjain <darjain@redhat.com> Co-authored-by: Cursor <cursoragent@cursor.com>
75 lines
3.6 KiB
Bash
Executable File
75 lines
3.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Setup environment for CI/tests_v2 pytest functional tests.
|
|
# Run from the repository root: ./CI/tests_v2/setup_env.sh
|
|
#
|
|
# - Creates a KinD cluster using kind-config-dev.yml (override with KIND_CONFIG=...).
|
|
# - Waits for the cluster and for local-path-provisioner pods (required by pod disruption test).
|
|
# - Does not install Python deps; use a venv and pip install -r requirements.txt and CI/tests_v2/requirements.txt yourself.
|
|
|
|
set -e
|
|
|
|
REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
KIND_CONFIG="${KIND_CONFIG:-${REPO_ROOT}/CI/tests_v2/kind-config-dev.yml}"
|
|
CLUSTER_NAME="${KIND_CLUSTER_NAME:-ci-krkn}"
|
|
|
|
echo "Repository root: $REPO_ROOT"
|
|
cd "$REPO_ROOT"
|
|
|
|
# Check required tools
|
|
command -v kind >/dev/null 2>&1 || { echo "Error: kind is not installed. Install from https://kind.sigs.k8s.io/docs/user/quick-start/"; exit 1; }
|
|
command -v kubectl >/dev/null 2>&1 || { echo "Error: kubectl is not installed."; exit 1; }
|
|
|
|
# Python 3.9+
|
|
python3 -c "import sys; exit(0 if sys.version_info >= (3, 9) else 1)" 2>/dev/null || { echo "Error: Python 3.9+ required. Check: python3 --version"; exit 1; }
|
|
|
|
# Docker running (required for KinD)
|
|
docker info >/dev/null 2>&1 || { echo "Error: Docker is not running. Start Docker Desktop or run: systemctl start docker"; exit 1; }
|
|
|
|
# Tool versions for reproducibility
|
|
echo "kind: $(kind --version 2>/dev/null || kind version 2>/dev/null)"
|
|
echo "kubectl: $(kubectl version --client --short 2>/dev/null || kubectl version --client 2>/dev/null)"
|
|
|
|
# Create cluster if it doesn't exist (use "kind get clusters" so we skip when nodes exist even if kubeconfig check would fail)
|
|
if kind get clusters 2>/dev/null | grep -qx "$CLUSTER_NAME"; then
|
|
echo "KinD cluster '$CLUSTER_NAME' already exists, skipping creation."
|
|
else
|
|
echo "Creating KinD cluster '$CLUSTER_NAME' from $KIND_CONFIG ..."
|
|
kind create cluster --name "$CLUSTER_NAME" --config "$KIND_CONFIG"
|
|
fi
|
|
|
|
# echo "Pre-pulling test workload images into KinD cluster..."
|
|
# docker pull nginx:alpine
|
|
# kind load docker-image nginx:alpine --name "$CLUSTER_NAME"
|
|
|
|
# kind merges into default kubeconfig (~/.kube/config), so kubectl should work in this shell.
|
|
# If you need to use this cluster from another terminal: export KUBECONFIG=~/.kube/config
|
|
# and ensure context: kubectl config use-context kind-$CLUSTER_NAME
|
|
|
|
echo "Waiting for cluster nodes to be Ready..."
|
|
kubectl wait --for=condition=Ready nodes --all --timeout=120s 2>/dev/null || true
|
|
|
|
echo "Waiting for local-path-provisioner pods (namespace local-path-storage, label app=local-path-provisioner)..."
|
|
for i in {1..60}; do
|
|
if kubectl get pods -n local-path-storage -l app=local-path-provisioner -o name 2>/dev/null | grep -q .; then
|
|
echo "Found local-path-provisioner pod(s). Waiting for Ready..."
|
|
kubectl wait --for=condition=ready pod -l app=local-path-provisioner -n local-path-storage --timeout=120s 2>/dev/null && break
|
|
fi
|
|
echo "Attempt $i: local-path-provisioner not ready yet..."
|
|
sleep 3
|
|
done
|
|
|
|
if ! kubectl get pods -n local-path-storage -l app=local-path-provisioner -o name 2>/dev/null | grep -q .; then
|
|
echo "Warning: No pods with label app=local-path-provisioner in local-path-storage."
|
|
echo "KinD usually deploys this by default. Check: kubectl get pods -n local-path-storage"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "Cluster is ready for CI/tests_v2."
|
|
echo " kubectl uses the default kubeconfig (kind merged it). For another terminal: export KUBECONFIG=~/.kube/config"
|
|
echo ""
|
|
echo "Next: activate your venv, install deps, and run tests from repo root:"
|
|
echo " pip install -r requirements.txt"
|
|
echo " pip install -r CI/tests_v2/requirements.txt"
|
|
echo " pytest CI/tests_v2/ -v --timeout=300 --reruns=2 --reruns-delay=10"
|