Skip to content

test: Reorganize testing structure #139

test: Reorganize testing structure

test: Reorganize testing structure #139

name: CentralDashboard Integration Test
on:
pull_request:
paths:
- components/centraldashboard/**
- components/access-management/**
- components/profile-controller/**
- releasing/version/VERSION
- .github/workflows/central_dashboard_integration_test.yaml
branches:
- main
- v*-branch
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event.number }}
cancel-in-progress: true
env:
DASHBOARD_IMG: ghcr.io/kubeflow/dashboard/dashboard
ACCESS_MANAGEMENT_IMG: ghcr.io/kubeflow/dashboard/access-management
PROFILE_CONTROLLER_IMG: ghcr.io/kubeflow/dashboard/profile-controller
TAG: integration-test
jobs:
integration-test:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Install KinD
run: ./testing/gh-actions/install_kind.sh
- name: Create KinD Cluster
run: kind create cluster --config testing/gh-actions/kind-1-33.yaml
- name: Install kustomize
run: ./testing/gh-actions/install_kustomize.sh
- name: Install Istio
run: ./testing/gh-actions/install_istio.sh
- name: Create Kubeflow Namespace
run: kubectl create namespace kubeflow
- name: Build KFAM Image
run: |
cd components/access-management
make docker-build-multi-arch IMG="${ACCESS_MANAGEMENT_IMG}" TAG="${TAG}"
kind load docker-image "${ACCESS_MANAGEMENT_IMG}:${TAG}"
cd ../..
- name: Build and Deploy Profile Controller with KFAM
run: |
cd components/profile-controller
make docker-build-multi-arch IMG="${PROFILE_CONTROLLER_IMG}" TAG="${TAG}"
kind load docker-image "${PROFILE_CONTROLLER_IMG}:${TAG}"
cd config
kustomize build overlays/kubeflow \
| sed "s|ghcr.io/kubeflow/dashboard/profile-controller:[a-zA-Z0-9_.-]*|${PROFILE_CONTROLLER_IMG}:${TAG}|g" \
| sed "s|ghcr.io/kubeflow/dashboard/access-management:[a-zA-Z0-9_.-]*|${ACCESS_MANAGEMENT_IMG}:${TAG}|g" \
| kubectl apply -f -
kubectl wait --for=condition=Available deployment -n kubeflow profiles-deployment --timeout=300s
kubectl wait --for=condition=Ready pods -n kubeflow -l kustomize.component=profiles --timeout=300s
- name: Build and Deploy Central Dashboard
run: |
./testing/shared/deploy_component.sh \
"components/centraldashboard" \
"${DASHBOARD_IMG}" \
"${TAG}" \
"manifests" \
"overlays/kserve"
kubectl wait --for=condition=Ready pods -n kubeflow -l app=dashboard --timeout=300s
kubectl wait --for=condition=Available deployment -n kubeflow dashboard --timeout=300s
- name: Create Test Profile for Dashboard Testing
run: |
kubectl apply -f components/profile-controller/integration/resources/profile-dashboard-test.yaml
for i in {1..60}; do
if kubectl get namespace test-dashboard-profile >/dev/null 2>&1; then
break
fi
echo "Waiting for namespace... (attempt $i/60)"
sleep 5
done
if ! kubectl get namespace test-dashboard-profile >/dev/null 2>&1; then
exit 1
fi
kubectl get profile test-dashboard-profile
kubectl get namespace test-dashboard-profile
- name: Validate Service
run: |
./testing/shared/test_service.sh validate-service dashboard kubeflow
- name: Start Port Forward for Dashboard Testing
run: |
./testing/shared/test_service.sh port-forward dashboard kubeflow 8082 80
- name: Test Dashboard Health
run: |
./testing/shared/test_service.sh test-health dashboard kubeflow 8082
- name: Test Dashboard Web Interface
run: |
curl -f "http://localhost:8082/" >/dev/null 2>&1
curl -f "http://localhost:8082/healthz" >/dev/null 2>&1
RESPONSE=$(curl -s "http://localhost:8082/" | head -c 100)
if [[ -n "$RESPONSE" ]]; then
echo "Dashboard is serving content: ${RESPONSE:0:50}..."
else
exit 1
fi
kubectl get service dashboard -n kubeflow
kubectl get pods -n kubeflow -l app=dashboard
- name: Test Dashboard Performance
run: |
./testing/shared/test_service.sh performance-test dashboard kubeflow 8082 80 10
- name: Test Dashboard Metrics
run: |
./testing/shared/test_service.sh test-metrics dashboard kubeflow 8082
- name: Check Dashboard Logs
run: |
./testing/shared/test_service.sh check-logs dashboard kubeflow 50
- name: Check for Errors in Logs
run: |
./testing/shared/test_service.sh check-errors dashboard kubeflow
- name: Test Dashboard Configuration
run: |
kubectl get configmap dashboard-config -n kubeflow
kubectl describe configmap dashboard-config -n kubeflow
- name: Test Virtual Service (if Istio is configured)
run: |
kubectl get virtualservice dashboard -n kubeflow
- name: Stop Port Forward
run: |
./testing/shared/test_service.sh stop-port-forward dashboard kubeflow 8082
- name: Cleanup Test Resources
run: |
kubectl delete profile test-dashboard-profile --ignore-not-found=true
for i in {1..30}; do
if ! kubectl get namespace test-dashboard-profile >/dev/null 2>&1; then
break
fi
echo "Waiting for namespace deletion... (attempt $i/30)"
sleep 5
done